Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЯзыки прогрИб.doc
Скачиваний:
27
Добавлен:
12.11.2019
Размер:
922.11 Кб
Скачать

Тема 8. Структуры данных фиксированного размера

8.1. Массивы

Массив - это поименованная совокупность данных, состоящая из фиксированного числа элементов одинакового типа.

При объявлении массива резервируется память.

Примеры объявления массивов:

int a[5]; //объявление массива kol для 5 элементов типа int

int b[10], c[20]; //объявление двух массивов

char imf[7]; //объявление массива символов

При объявлении массива можно одновременно выполнить его инициализацию набором значений, заключённых в фигурные скобки. Массивы символов можно инициализировать строкой символов, указанной в двойных кавычках.

Примеры:

int a[5]={10, 20, 30, 40, 50};

int a[]={10, 20, 30, 40, 50};//можно не указывать размер массива

char imf[]=”akt.dat”;//объявление и инициализация

Доступ к элементам массива осуществляется с помощью индексированной переменной, например, a[i]:

,где i -целое положительное число от 0 до 4 (количества элементов минус 1).

Пример:

int a[5];//первый элемент - a[0],...,пятый элемент - a[4]

В языке С++ предусмотрено понятие только одномерного массива. Многомерные массивы представляются как массив, состоящий из элементов типа массив.

Пример объявления и инициализации двумерного массива:

int a[2][3]={{1, 2, 3},{4, 5, 6}};

Первый индекс указывает номер строки, а второй – номер столбца.

Доступ к элементам двумерного массива осуществляется с помощью индексированной переменной, например, a[i][j]:

, где i – целое число 0, 1; j – целое число 0, 1, 2.

Операции над элементами массива варьируются в зависимости от типа его элементов.

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

Элементами массива могут быть указатели. Примером использования такой структуры данных является массив строк, в котором каждый элемент является указателем на первый символ строки.

Приведем пример массива указателей из функции menu главы 5:

char* m[]={«Акты работ», «Расценки», «Ведомости», «Выход»};

Хотя размер массива m фиксирован, он обеспечивает доступ к строкам символов любой длины. Эта гибкость – один из примеров мощных возможностей структурированных данных в С++.

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

Пример 6. «Типовые операции над массивами»

Условие задачи: ввести два массива, отсортировать их, и затем произвести их слияние..

Создать проект консольного приложения и ввести имя проекта TPlab2_4.

Создается исходный файл TPlab2_4.cpp, который будет содержать всего одну пустую функцию main():

int t_main(int args, _TCHAR* argv[])

{return 0;}.

Проект должен содержать файл заголовков TPlab2_4.h и файл кодов TPlab2_4.cpp.

Создать файл TPlab1_2.h, ввести текст файла и сохранить его:

//файл заголовков TPlab2_4.h

#include <iostream>

using std::cout;

using std::cin;

using std::endl;

const int nmax=100;

const int nmaxr=200;

void vvod(int n, float m[]);

void sort(int n, float m[]);

void slijanie(int n1, float m1[], int n2, float m2[], float m[]);

void vyvod(int n, float m[]);

Добавить в файл кодов TPlab2_4.cpp тексты функций:

//файл кодов TPlab2_4.cpp

#include "stdafx.h"

#include "TPlab2_4.h"

int _tmain(int argc, _TCHAR* argv[])

{

int k, k1, k2;

float a1[nmax], a2[nmax], a[nmaxr];

cout<<"Vvedite chislo elementov massiva 1: ";

cin>>k1;

vvod(k1, a1);

sort(k1, a1);

cout<<"Vvedite chislo elementov massiva 2: ";

cin>>k2;

vvod(k2, a2);

sort(k2, a2);

k=k1+k2;

slijanie(k1, a1, k2, a2, a);

vyvod(k, a);

return 0;

}

void vvod(int n, float m[])

{

for(int i=0; i<n; i++)

{

cout<<"Vvedite element "<<i+1<<": ";

cin>>m[i];

}

return;

}

void sort(int n, float m[])

{

int i=0;

int perest=1;

while(i<=n-1 && perest)

{

perest=0;

for(int j=n-1; j>0; j--)

if(m[j-1]>m[j])

{

perest=1;

float b=m[j-1];

m[j-1]=m[j];

m[j]=b;

}

i++;

}

return;

}

void slijanie(int n1,float m1[],int n2,float m2[],float m[])

{

int i, i1, i2;

i=i1=i2=0;

while(i1<n1 && i2<n2)

if(m1[i1]<m2[i2])

{

m[i]=m1[i1];

i++;

i1++;

}

else

{

m[i]=m2[i2];

i++;

i2++;

}

if(i1==n1)

{

for(int k=i2; k<n2; k++)

{

m[i]=m2[k];

i++;

}

}

else

{

for(int k=i1; k<n1; k++)

{

m[i]=m1[k];

i++;

}

}

return;

}

void vyvod(int n, float m[])

{

cout<<"Resultat: "<<endl;

for(int i=0; i<n; i++)

cout<<m[i]<<" ";

return;

}