Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прога.docx
Скачиваний:
7
Добавлен:
16.04.2019
Размер:
149.14 Кб
Скачать
  1. Понятие массива. Как передаются одномерные массивы в качестве параметров в функцию? Примеры

Если в роли параметра функции выступает массив, то в функцию передается адрес его первого элемента (адрес a[0]). В результате, вызываемые функции могут изменять значения элементов в исходных массивах и возвращать их в главную функцию.

Для передачи адреса первого элемента одномерного массива необходимо в списке формальных параметров объявить переменную указатель или имя массива с пустыми квадратными скобками (см. пример).

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

Информация о количестве элементов массива должна передаваться через отдельный параметр.

  1. Понятие массива. Как организуется запись одномерного массива в текстовый файл и чтение одномерного массива из текстового файла? Примеры

ofstream f2; // объявление потока для записи

f2.open("D:\\abc2.txt"); // режим ios::out

if (f) { for(int i=0;i < n;i++)

f2 << a[i] << " "; // запись в файл

cout << "\nFile write!"; f2.close(); }

else cout << "File not found \n"; getch(); }

39. Понятие массива. Как организуется запись одномерного массива в бинарный файл и чтение одномерного массива из бинарного файла?

#include <iostream>

#include <stdio.h>

#include <conio.h>

using namespace std;

void main(void)

{ int n; int *a,*b;

FILE *f; // объявление потока

cout << "\n n = "; cin >> n; cout << "\n";

a = new int [n];

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

{ cout << "a[" << i << "]:"; cin >> a[i];

} cout << "\n";

f = fopen("D:\\abc3.dat","wb");

fwrite(&n,sizeof(int),1,f);

fwrite(a,sizeof(int),n, f);

fclose(f);

f = fopen("D:\\abc3.dat", "rb");

if (f)

{ fread(&n,sizeof(int),1, f);

b = new int [n];

fread(b, sizeof(int), n, f);

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

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

}

fclose(f);

getch();

}

40. Двумерные массивы в С/C++: понятие, синтаксис описания, инициализация и доступ к элементам, примеры

Двумерный массив – это массив, все элементы которого имеют два индекса.

Двумерный массив полностью соответствует математическому понятию матрицы (прямоугольной таблице чисел), поэтому двумерные массивы в информатике часто называют матрицами.

Матрица состоит из строк и столбцов. Два индекса элемента - это и есть номера строки и столбца, на пересечении которых этот элемент находится.

В языке С (С++) каждый индекс записывается отдельно в квадратных скобках. Каждую строку и каждый столбец матрицы можно рассматривать как обычный одномерный массив. Поэтому можно сказать, что матрица - это массив из массивов. Существует только два ограничения:

1. Все элементы матрицы должны быть одинакового типа.

2. Длина всех строк матрицы должна быть одинакова (также как и высота всех столбцов).

При объявлении двумерного массива в отдельных квадратных скобках указывается количество строк и количество столбцов.

Например, объявление int a[3][4]; компилятор поймет как команду определить массив а из трех элементов , причем каждый элемент: a[0], a[1], a[2]- это массив типа int из четырех элементов, т. е. компилятор выделит место в памяти под матрицу целых чисел, имеющую 3 строки и 4 столбца (всего 3*4=12 элементов). Если матрица глобальная (объявляется выше всех функций), то она в самом начале заполняется нулями. Локальные матрицы (объявленные внутри функции) содержат "мусор" – неизвестные значения.

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

    • int a[3][4]={{2,3,4,6}, {6,7,8,9}, {1,2,5,3}};

    • float X[2][3] = {{1., 3.},{6.}};

    • float b[3][5] ={{0}};

Доступ к элементам двумерных массивов :

    • a[i][j] – с помощью индексированных переменных,

  • *(a[i]+j) или *(*(a+i)+j) – с помощью указателей, где a[i] или (a+i) – адрес начала i-й строки массива

41. Понятие динамического массива. Как создаются двумерные динамические массивы в С++ ? Примеры

Двумерные массивы, как и одномерные, передаются в функцию по адресу (передается адрес первого элемента первой строки - &a[0][0]). Поэтому функция работает с самим массивом, а не с его копией, и может его изменить.

Если в функцию передается двумерный статический массив, то необходимо не только передать адрес первого элемента первой строки - &a[0][0], но дать возможность компилятору определять адреса начала всех строк передаваемой матрицы. Для этого в списке формальных параметров у двумерного массива обязательно нужно указывать вторую размерность, которая задает количество элементов в строке (количество столбцов) матрицы.

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

В операторе вызова функции в списке фактических параметров и в том и в другом случае для параметра массива указывается имя массива.

Информация о количестве элементов двумерного массива (количество строк и количество столбцов матрицы) должна передаваться через отдельные параметры.

42. Понятие массива. Как передаются двумерные массивы в качестве параметров в функцию?

Пример

Передача двумерного статического массива в качестве параметра в функцию:

const int row = 5;

const int row = 5;

void Func (int arr [row][col], int rows, int cols); или

void Func (int arr [][col], int rows, int cols)

Передача двумерного динамического массива в качестве параметра в функцию:

void Func (int **arr, int rows, int cols);

Вызов функции:

Func (arr1, r, с);

Двумерные массивы, как и одномерные, передаются в функцию по адресу (передается адрес первого элемента первой строки - &a[0][0]). Поэтому функция работает с самим массивом, а не с его копией, и может его изменить.

Если в функцию передается двумерный статический массив, то необходимо не только передать адрес первого элемента первой строки - &a[0][0], но дать возможность компилятору определять адреса начала всех строк передаваемой матрицы. Для этого в списке формальных параметров у двумерного массива обязательно нужно указывать вторую размерность, которая задает количество элементов в строке (количество столбцов) матрицы.

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

В операторе вызова функции в списке фактических параметров и в том и в другом случае для параметра массива указывается имя массива.

43. Понятие массива. Как организуется запись двумерного массива в текстовый файл и чтение

двумерного массива из текстового файла? Примеры

Запись элементов двумерного массива в текстовый файл

//вывод массива

for (i = 0;i < nrow;i++)

{ for (j = 0;j < ncol;j++)

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

cout << "\n"; }

} else cout << "File not found \n";

ofstream f2; // объявление потока для записи

f2.open("D:\\abc6.txt"); // режим ios::out

if (f2)

{ f2 << nrow << "\n" << ncol << "\n";

for(i = 0;i < nrow;i++)

{ for(j = 0;j < ncol;j++)

f2 << a[i][j]<< " ";

f2 << "\n"; }

cout << "\nFile write!"; f2.close(); }

else cout << "File not found \n"; getch(); }

Чтение элементов двумерного массива из текстового файла

#include <conio.h>

#include <iostream> #include <fstream>

using namespace std; void main(void)

{ int nrow, ncol; int i,j; int **a;