Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Методические рекомендации'
Приказ Министерства образования РФ от 05.03.2004 г. N 1089 «Об утверждении федерального компонента государственных образовательных стандартов начально...полностью>>
'Документ'
10. Значение ранней диагностики патологии психофизического развития и ранней коррекционной работы с детьми для повышения эффективности учебного и корр...полностью>>
'Документ'
- Праздник Пока в России Пушкин длится, метелям не задуть свечу , к 217 - летию со дня рождения А.С. Пушкина (конкурс чтецов, инсценировки, конкурс ри...полностью>>
'Реферат'
Физика – это наука о природе. Она изучает простейшие и наиболее общие закономерности явлений природы, свойства и строение материи и закономерности ее ...полностью>>

Главная > Документ

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

Программирование на языке С++

Лабораторный практикум

Лабораторная работа № 7
"Динамические массивы"

Цель: Организация динамических массивов.

  1. Краткие теоретические сведения

При традиционном определении массива:
тип имя_массива [количество_элементов];
общее количество памяти, выделяемой под массив, задается определением и равно количество_элементов * sizeof(тип).

Но иногда бывает нужно чтобы память под массив выделялась для решения конкретной задачи, причем ее размеры заранее не известны и не могут быть фиксированы.

Формирование массивов с переменными размерами можно организовать с помощью указателей и средств динамического распределения памяти двумя способами:

  1. с использованием библиотечных функций, описанных в заголовочных файлах alloc.h и stdlib.h (стандартный Си);

  2. с использованием операций new и delete (Си++).

    1. Формирование динамических массивов с использованием библиотечных функций

Для выделения и освобождения динамической памяти используются функции

Функция

Прототип и краткое описание

malloc

void * malloc(unsigned s)

Возвращает указатель на начало области динамической памяти длиной в s байт, при неудачном завершении возвращает NULL

calloc

void * calloc(unsigned n, unsigned m)

Возвращает указатель на начало области динамической памяти для размещения n элементов длиной по m байт каждый, при неудачном завершении возвращает NULL

realloc

void * realloc(void * p, unsigned s)

Изменяет размер блока ранее выделенной динамической памяти до размера s байт, р- адрес начала изменяемого блока, при неудачном завершении возвращает NULL

free

void *free(void p)

Освобождает ранее выделенный участок динамической памяти, р – адрес первого байта

Пример:

Функция для формирования одномерного динамического массива

int * make_mas(int n)

(

int *mas;

mas=(int*)malloc(n*sizeof(int));

for(int i=0;i

mas[i]=random(10);

return mas;

}

Для выделения памяти используется функция malloc, параметром которой является размер выделяемого участка памяти равный n*sizeof(int). Так как функция malloc возвращает нетипизированный указатель void*, то необходимо выполнить преобразование полученного нетипизированного указателя в указатель int*.

Освободить выделенную память можно функцией free(mas).

    1. Формирование динамических массивов с использованием операций new и delete

Для динамического распределения памяти используются операции new и delete. Операция

new имя_типа

или

new имя_типа инициализатор

позволяет выделить и сделать доступны свободный участок памяти, размеры которого соответствуют типу данных, определяемому именем типа. В выделенный участок заносится значение определяемое инициализатором, который не является обязательным параметром. В случае успешного выделения памяти операция возвращает адрес начала выделенного участка памяти, если участок не может быть выделен, то возвращается NULL.

Примеры:

1) int *i;

i=new int(10);

2) float *f;

f=new float;

  1. int *mas=new[5];

В примерах 1, 2 показано как выделить память под скалярные переменные, пример 3 показывает выделение памяти под массив переменных.

Операция delete указатель освобождает участок памяти ранее выделенный операцией new.

Пример:

Функция для формирования двумерного динамического массива

int ** make_matr(int n)

{

int **matr;

int i,j;

matr=new int*[n];

for (i=0;i

{

matr[i]=new int[n];

for (j=0;j

matr[i][j]=random(10);

}

return matr;

}

При формировании матрицы сначала выделяется памяти для массива указателей на одномерные массивы, а затем в цикле с параметром выделяется память под n одномерных массивов.

**matr

*matr[1]

*matr[2]

*matr[3]

. . . .

*matr[n]

Чтобы освободить память необходимо выполнить цикл для освобождения одномерных массивов

for(int i=0;i

delete matr[i];

После этого освобождаем память на которую указывает указатель matr

delete [] matr;

2. Постановка задачи

Написать программу, в которой создаются динамические массивы и выполнить их обработку в соответствии со своим вариантом.

3. Порядок выполнения работы

1. Ввести размер массива;

2.Сформировать массив с помощью операции new или библиотечных функций malloc (calloc);

3.Заполнить массив (можно с помощью датчика случайных чисел);

4.Выполнить задание варианта, сформировать новый массив(ы)-результат(ы);

5.Напечатать массив(ы)-результат(ы);

6.Удалить динамические массивы с помощью операции delete или библиотечной функции free.

4. Варианты заданий

  1. Сформировать одномерный массив Удалить из него элемент с заданным номером, добавить элемент с заданным номером;

  2. Сформировать одномерный массив. Удалить из него элемент с заданным ключом, добавить элемент с заданным ключом;

  3. Сформировать одномерный массив. Удалить из него К элементов, начиная с заданного номера, добавить элемент с заданным ключом;

  4. Сформировать одномерный массив. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера;

  5. Сформировать одномерный массив. Удалить из него К элементов, начиная с заданного номера, добавить К элементов, начиная с заданного номера;

  6. Сформировать двумерный массив. Удалить из него строку с заданным номером;

  7. Сформировать двумерный массив. Удалить из него столбец с заданным номером;

  8. Сформировать двумерный массив. Добавить в него строку с заданным номером;

  9. Сформировать двумерный массив. Добавить в него столбец с заданным номером;

  10. Сформировать двумерный массив. Удалить из него строку и столбец с заданным номером.

  11. Сформировать двумерный массив. Добавить в него строку и столбец с заданным номером.

  12. Сформировать двумерный массив. Удалить из него все строки, в которых встречается заданное число.

  13. Сформировать двумерный массив. Удалить из него все столбцы, в которых встречается заданное число.

  14. Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых находится минимальный элемент.

  15. Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых находится максимальный элемент.

  16. Сформировать массив строк. Удалить из него самую короткую строку.

  17. Сформировать массив строк. Удалить из него самую длинную строку.

  18. Сформировать массив строк. Удалить из него строку, начинающуюся на букву "а".

  19. Сформировать массив строк. Удалить из него строку, начинающуюся и заканчивающуюся на букву "а".

  20. Сформировать массив строк. Удалить из него строку, начинающуюся и заканчивающуюся на одну и ту же букву.

  21. Сформировать массив строк. Удалить из него строку с заданным номером.

  22. Сформировать массив строк. Удалить из него К строк, начиная со строки с заданным номером.

  23. Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк.

  24. Сформировать массив строк. Удалить из него К первых строк.

  25. Сформировать массив строк. Добавить в него строку с заданным номером.

5. Содержание отчета

  1. Постановка задачи.

  2. Функции для формирования массива, печати массива, преобразования массива, удаления массива.

  3. Результаты выполнения работы.



Похожие документы:

  1. Лабораторная работа №1 Знакомство с программным обеспечением для разработки устройств на микроконтроллерах фирмы Atmel

    Документ
    ... Лабораторная работа №5 Реализация динамической индикации в микроконтроллерах AVR Цель работы: изучение методов динамического отображения ... ZL,Low(DcMatrix*2) ;инициализация массива ldi ZH,High(DcMatrix*2) ... ,Temp1 ;к 0-му адресу массива adc ZH,Temp2 lpm ; ...
  2. Методические указания к выполнению лабораторных работ по курсу “Алгоритмические языки и программирование” для специальностей 351400- прикладная информатика в экономике и 071900- информационные системы в технике и технологиях, часть Ижевск 2004

    Методические указания
    ... . Определить сколько места занимают в динамической памяти данные массивы, а так же определить: a  x; b  x; a / x; b / x; a + x b; a - x b; b - x a; x ... динамических переменных? ЛАБОРАТОРНАЯ РАБОТА №11 «ДИНАМИЧЕСКИЕ СТРУКТУРЫ» Целью работы ...
  3. Лабораторная работа №1 (1)

    Документ
    ... ситуаций. ЛАБОРАТОРНАЯ работа № 3 ОРГАНИЗАЦИЯ ЦИКЛОВ И РАБОТА С ОДНОМЕРНЫМИ МАССИВАМИ ЦЕЛЬ РАБОТЫ. Задав ... ЛАБОРАТОРНАЯ работа № 16 Организация множества объектов с использованием динамических структур Используя реализацию классов из лабораторной работы ...
  4. Лабораторная работа №3 Работа с массивами

    Документ
    Лабораторная работа №3 Работа с массивами 1. Цель работы: Получение практических навыков при работе с массивами. Получение практических навыков при работе с указателями. 2. Краткие ...
  5. Лабораторная работа №5 (2)

    Документ
    Лабораторная работа №5 ЦЕЛЬ РАБОТЫ: Изучение способов обработки массивов. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ. Одномерные массивы. Массив – ... не изменяется в ходе выполнения программы. Динамические массивымассивы, в которых либо не известно начальное ...
  6. Лабораторная работа №1 (3)

    Документ
    Лабораторная работа № 1 Использование Visual C++ для ... статической, так и в динамической памяти, а также создание массивов объектов. Примеры: массив студентов ... 18,45.5)}; массив студентов размещается в динамической памяти: STUDENT *p; p=new STUDENT [3]; ...

Другие похожие документы..