Лабораторная работа 4. Статические одномерные массивы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

 

Теоретические сведения

Одномерный массив – это совокупность однотипных переменных, совместно использующих одно имя (имя массива), при этом доступ к каждому элементу осуществляется по его порядковому номеру (индексу).

Объявить одномерный массив (иногда его называют вектором) можно так:

тип_элементов имя_массива [число_элементов];

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

Пример – объявления разных массивов

int mas1 [10];         // целочисленный массив из 10 элементов

char mas2 [80];          // символьный массив из 80 элементов

float mas3 [100];    // вещественный массив из 100 элементов

При объявлении массивов необходимо помнить, что индекс первого элементамассива в языке С++ всегда равен 0. Допустимыми считаются значения индексов от 0 дочисло_элементов–1.

Обращаться к элементу массива можно, используя значение индекса в квадратных скобках, например, mas1 [5] – шестой элемент массива. Обращение к элементу массива, индекс которого не является допустимым, приводит к возникновению ошибок, вызванных обращением к области памяти, не принадлежащей к массиву.

Работа с массивом осуществляется поэлементно, доступ к элементам массива удобнее всего осуществлять, используя цикл for.

Пример – организация ввода в массив

#include <iostream>

#include <iomanip.h>  // содержит различные манипуляторы для        

                                     // форматирования ввода и вывода

const int M = 10;         // количество элементов в массиве

int main ( )

{ float x [M];           // объявление действительного массива

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

  { cout << “x[“ << i << “]:”;

     cin >> x[i];           // ввод с клавиатуры

   }

for (int i = 0; i < M; i++) // вывод массив на печать

  cout << setw(5) << x[i]; // на каждый элемент массива отведено 5 позиций

cout << endl;

return 0;

}

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

Пример

#include <iostream>

#include <stdlib.h>       // в этой библиотеке генератор случайных чисел

const int N = 100;         // количество элементов в массиве

int main ( )

{ int mas [N];           // объявление целочисленного массива

srand (25 );             // инициализация генератора случайных чисел

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

  { mas[i] = rand ( );

     cout << mas [i] << ‘ ‘;

   }

return 0;

}

Здесь формируется массив mas, состоящий из N элементов, пронумерованных от 0 до N-1 и содержащий целые значения в диапазоне от 0 до максимально большого числа. При необходимости получения с равной вероятностью положительных и отрицательных значений элементов массива из сгенерированного значения вычитают число, которое можно подобрать искусственно:

mas [i] = rand ()%50 – 50;

rand ( ) – возвращает случайное целое число в диапазоне от 0 до RAND_MAX (очень большая зарезервированная константа).

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

Пример

Дан целочисленный массив. Создать другой массив, расположив в нем сначала четные элементы исходного массива, затем нечетные.

 

#include <iostream>

#include <stdlib.h>

const int M = 30;         // количество элементов в массиве

 

int main ( )

{ int i, j = 0;

int mas1 [M];           // объявление исходного массива

int mas2 [M];           // объявление нового массива

srand (100 );            // инициализация генератора случайных чисел

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

  { mas1[i] = rand ( ) % 10;

     cout << mas1 [i] << ‘ ‘;

   }

cout << endl;

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

  if (mas1[i] % 2 == 0)

    { mas2[j] = mas1[i];

        j++;

     }

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

  if (mas1[i] % 2 != 0)

    { mas2[j] = mas1[i];

        j++;

     }

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

   cout << mas2[i] << ‘ ‘;

cout << endl;

return 0;

}

Пример

Дан целочисленный массив. Найти минимальный элемент и индекс минимального элемента.

#include <iostream>

#include <stdlib.h>

const int M = 20;         // количество элементов в массиве

 

int main ( )

{ int i, min, ind;

int mas [M];           // объявление исходного массива

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

  { mas[i] = rand ( ) % 10;

     cout << mas [i] << ‘ ‘;

   }

   cout << endl;

min = mas[0]; ind = 0;

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

  if (mas[i] < min)

    { min = mas[i];

        ind = i;

     }

cout << “min = “ << min << “, индекс = “ << ind << endl;

return 0;

}

Массив можно инициализировать константами таким образом:

int digits [6] = {0, 1, 2, 3, 4, 8};

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

int digits [10] = {0, 1, 2, 3, 4}; - создается массив из 10 элементов целого типа, первые 5 из которых проинициализированы указанными значениями, а остальные – нулевыми значениями. Можно обнулить весь массив так:

int digits [10] = {0};

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

 

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

Построить алгоритм решения задачи и написать программу согласно вариантам заданий.

 

Контрольные вопросы

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

2. Как индексируются элементы одномерного массива в языке С++?

3. Что означает термин “статический” по отношению к массивам?

4. Какие библиотеки следует подключить, чтобы заполнить массив случайными числами?

 

 

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

1. Титульный лист отчета

2. Запись алгоритма решения задачи

3. Текст программы на языке С++

4. Скриншоты результатов, выводимых на экран для заранее подготовленных тестовых примеров для задачи

Дата: 2019-03-05, просмотров: 218.