Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_и_Пр_Бизнес_лекции.doc
Скачиваний:
84
Добавлен:
10.05.2015
Размер:
1.21 Mб
Скачать

6.5. Динамические массивы

В языке С++ используются обычные (статические) и динамические массивы. При объявлении статического массива указывается его размер, который не может быть изменен при работе программы. Например, для статического массива int a[100] выделяется 100 ячеек для хранения 100 целых чисел и увеличить или уменьшить выделенную под этот массив память нельзя.

Момент выделения памяти статическому массиву и время существования массива определяется местом объявления массива. Так если статический массив объявлен в функции main, то память под него выделяется перед началом выполнения функции, а сам массив существует все время работы функции main.

Динамическим массивом называется массив, память под который выделяется во время работы программы операцией new. Размер необходимой памяти под динамический массив можно задавать при выполнении программы. Можно управлять моментом выделения памяти под массив, располагая в нужном месте операцию new. Можно освободить память из-под динамического массива, когда потребность в массиве исчезнет, используя в нужном месте кода программы операцию delete. Размер динамического массива можно программно изменить.

Пример программы, использующей динамические массивы для последовательной обработки двух текстовых файлов. В файле a.txt записаны целые числа. Первое число файла – количество чисел в файле. В файле b.txt записаны вещественные числа. Первое число файла – целое число, задающее количество чисел в файле. Найти три наибольших числа в каждом файле. Файлы с числами находятся в одной с программой папке.

#include <conio.h>

#include <iostream.h>

#include <fstream.h> //библиотека для работы с файлами

void main()

{

ifstream fa; //файловая переменная, связанная с файлом a.txt

ifstream fb; //файловая переменная, связанная с файлом b.txt

int *a; //указатель на массив с числами файла a.txt

float *b; / указатель на массив с числами файла b.txt

int n; //количество чисел в файле

int i, j; //номер элемента в массиве и номер прохода массива

int xa; //переменная для перестановки при сортировке

float xb; //переменная для перестановки при сортировке

fa.open("a.txt"); //открытие файла для чтения

fa>>n; //чтение первого числа из файла

a=new int [n]; //выделение памяти для динамического массива

for (i=0; i<n ;i++) //чтение файла в динамический массив

fa>>a[i];

fa.close(); //закрытие файла

for (j=1; j<=3; j++) //поиск 3 самых больших чисел

for (i=0; i<n-j; i++)

if (a[i]>a[i+1])

{ xa=a[i]; a[i]=a[i+1]; a[i+1]=xa;}

for (i=n-1; i>=n-3; i--) //вывод 3 самых больших чисел

cout<<a[i]<<" ";

cout<<endl;

delete []a; //освобождение памяти

//Далее обработка другого файла

fb.open("b.txt"); //открытие файла для чтения

ba>>n; //чтение первого числа из файла

b=new float [n]; //выделение памяти для динамического массива

for (i=0; i<n; i++) //чтение файла в динамический массив

fb>>a[i];

fb.close(); //закрытие файла

for (j=1; j<=3; j++) //поиск 3 самых больших чисел

for (i=0; i<n-j; i++)

if (b[i]>b[i+1])

{ xb=b[i]; b[i]=b[i+1]; b[i+1]=xb;}

for (i=n-1; i>=n-3; i--) //вывод 3 самых больших чисел

cout<<b[i]<<" ";

getch();

}