Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Массивы.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
144.38 Кб
Скачать

Int main()

{

const int n=10;

int a[n];

int i,imax,imin,count;

srand(time(NULL));

for (i=0;i<n;i++) a[i]=rand()%20;

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

{

cout<<"A["<<i<<"]="<<a[i]<<endl;

}

for (i=imax=imin=0;i<n;i++)

{

if (a[i]>a[imax]) imax=i;

if (a[i]<a[imin]) imin=i;

}

cout <<" max= "<<a[imax]<<" min= "<<a[imin];

int ibeg=imax < imin ? imax : imin;

int iend=imax > imin ? imax : imin;

cout <<" ibeg= "<<ibeg<<" iend= "<<iend;

for (count=0,i=ibeg+1;i<iend;i++)

if (a[i]>0) count++;

cout <<"Koli4estvo polozitelnih: "<<count<<endl;

cin.get();cin.get();

return 0;

}

Замечание: в С++ нельзя присваивать один массив другому.

Например:

float x[7], y[7];

x=y; // ошибка

Для того, чтобы реализовать такое присваивание, нужно использовать цикл, например:

for (i=0; i<7; i++) x[i]=y[i];

Замечание: компилятор С++ не контролирует выход за границы массива. Программист сам должен следить за значениями индексов, иначе программа будет нарушена.

Например:

float MAS[10];

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

MAS[i] = i+5;

Здесь будет выполнено 100 итераций, несмотря на то, что массив MAS имеет длину 10.

Было принято решение: поскольку С++ - язык профессионалов, то компилятор не будет тратить время на проверку принадлежности индекса определенному диапазону.

При работе с массивами очень часто требуется одинаково обработать все элементы или часть элементов массива. Для этого организуется перебор массива.

Перебор элементов массива характеризуется:

    • направлением перебора;

    • количеством одновременно обрабатываемых элементов;

    • характером изменения индексов.

По направлению перебора массивы обрабатывают:

    • слева направо (от начала массива к его концу);

    • справа налево (от конца массива к началу);

    • от обоих концов к середине.

Индексы могут меняться

    • линейно (с постоянным шагом);

    • нелинейно (с переменным шагом).

Перебор массива по одному элементу. Элементы можно перебирать:

    • Слева направо с шагом 1, используя цикл с параметром

for(int i=0;i<n;i++){обработка a[i];}

    • Слева направо с шагом отличным от 1, используя цикл с параметром

for (int i=0;i<n;i+=step){обработка a[i];}

    • Справа налево с шагом 1, используя цикл с параметром

for(int i=n-1;i>=0;i--){обработка a[i];}

    • Справа налево с шагом отличным от 1, используя цикл с параметром

for (int i=n-1;i>=0;i-=step){обработка a[i];}

Многомерные массивы

http://iguania.ru/uchebnik-po-osnovam-programmirovaniya-dlya-nachinaiuschich/glava-15-dvumernie-massivi.html

В С++ можно использовать многомерные массивы. Элементом массива может быть в свою очередь тоже массив. Таким образом, мы приходим к понятию двумерного массива или матрицы, а также многомерных массивов.

Определение многомерного массива:

<тип> <имя массива> [<размер1>][<размер2>] … [<размерn>];

Например:

int MATRIC[2][3];// матрица целых чисел размерностью 2х3

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

<имя массива> [<индекс1>][<индекс2>] … [<индексn>];

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

Например:

int A[2][3];

A[0][0], A[0][1],A[0][2],

A[1][0], A[1][1],A[1][2]

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

Массив А

Столбец 0

Столбец 1

Столбец 2

Строка 0

18

индексы [0][0]

21

индексы [0][1]

5

индексы [0][2]

Строка 1

6

индексы [1][0]

7

индексы [1][1]

11

индексы [1][2]

Как и одномерные, многомерные массивы можно инициализировать при объявлении.

int A[2][3]={{4,3,2},{1,-1,-2}};

double B[2][3]={{1.0,2.0,3.0},{4.0,5.0,6.0}};

Может быть использована и более компактная запись:

int A[2][3]={4,3,2,1,-1,-2};

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

int imassiv[2][3]= {0};

Задача: Дана целочисленная матрица размером N на M (максимум 5 на 10). Осуществить ввод матрицы. Все элементы с нечетным произведением номера строки и номера столбца увеличить в два раза. Полученную матрицу вывести на экран.

#include <iostream>

using namespace std;