11826

Лабораторная работа №6. Массивы

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №6. Массивы 1 Цель и порядок работы Цель работы получение практических навыков алгоритмизации и программирования вычислительных процессов с использованием массивов. Порядок выполнения работы: ознакомиться с описанием лабораторной раб

Русский

2013-04-12

164.5 KB

98 чел.


Лабораторная работа №6. Массивы

1 Цель и порядок работы

Цель работы – получение практических навыков алгоритмизации и программирования вычислительных процессов с использованием массивов.

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

  •  ознакомиться с описанием лабораторной работы;
  •  получить задание у преподавателя, согласно своему варианту;
  •  написать программу и отладить ее на ЭВМ;
  •  оформить отчет.

2 Краткая теория

2.1 Массивы

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

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

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

Описание массива выглядит следующим образом:

базовый_тип имя_массива [размерность];

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

Например:

//одномерный массив целочисленного типа из 5 элементов

int array[5];

//одномерный массив вещественного типа из N элементов (N - константа!!!)

const int N = 20;

float x[N];

//одномерный массив беззнакового целочисленного типа из 2*M элементов

const int M = 5;

unsigned int  b[2*M];

При описании массив можно инициализировать, то есть присвоить его элементам начальные значения:

базовый_тип имя_массива [размерность] = {начальные_значения};

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

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

Например:

int a[3] = {1, 2, 3}; //a[0] = 1, a[1] = 2, a[2] = 3

// недостающие значения инициализации заполняются нулями

int b[5] = {1, 2, 3}; //b[0] = 1, b[1] = 2, b[2] = 3, b[3] = 0, b[4] = 0

// лишние значения (4 и 5) не используются

int с[3] = {1, 2, 3, 4, 5}; //c[0] = 1, c[1] = 2, c[2] = 3

//индекс может быть опущен и размер вычисляется

// по количеству элементов инициализации

int d[] = {0, 2, 4}; //c[0] = 0, c[1] = 2, c[2] = 4 (размер 3)

//строка так же является массивом символов,

//оканчивающимся нуль-символом (управляющей последовательностью \0)

char s[] = "Hi!"; //s[0]='H', s[1]='i', s[2]='!', s[3]='\0' (размер 4)

Для доступа к элементу массива после его имени указывается номер элемента (индекс), в квадратных скобках:

имя_массива [индекс];

Элемент массива считается переменной: он может получать значения (например, в операторе присваивания), а также участвовать в выражениях.

Например, для объявленных выше массивов обращения и использование будет выглядеть следующим образом:

//обращения к элементам массива

cout << a[1];

int i = 2;

cout << b[i-1];

cout << c[2*i];

int z;

a[2] = -1;

z = a[0] + (b[i] + d[i+1]) / c[2*i+1];

d[0] = z - d[i]) / c[2*i+1];

Рассмотрим пример нахождения суммы элементов массива.

Замечание.

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

#include "stdafx.h"

#include <iostream>

using namespace std;

void main()

{

  cout << "Привет мир!" << endl;

  setlocale(LC_ALL, "Russian");

  cout << "Привет мир!" << endl;

}

Результат работы программы:

╧ЁштхЄ ьшЁ!

Привет мир!

Задача: найти сумму элементов массива, ее и сам массив на экран. Элементы массива ввести с клавиатуры.

#include "stdafx.h"

#include <iostream>

using namespace std;

void main()

{

  setlocale(LC_ALL, "Russian");

  //определим размер массива

  const int N = 10;

  

  int a[N];

  

  //введем элементы массива с клавиатуры

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

  {

      cout << "Введите " << i <<"-й элемент массива: ";

      cin >> a[i];

  }

  

  //объявим переменную для хранения суммы элементов

  int s = 0;

  

  //просуммируем элементы массива

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

      s += a[i];

  

  //выведем на экран элементы массива и их сумму

  cout << "a:";

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

  {

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

  }

  cout << endl << "Сумма элементов: " << s;

}

Часто возникает ситуация, когда количество элементов массива может варьироваться на этапе компиляции. При этом пересчет количества элементов вручную приводит к потере времени. C++ позволяет избежать данной проблемы. Для определения размера массива используется следующая конструкция:

N = sizeof(array)/sizeof(array[0])

Здесь array – имя массива, N – полученный размер массива,  sizeof(array) возвращает размер всего массива в батах, а sizeof(array[0]) – размер первого элемента в байтах (естественно совпадающий с размером остальных элементов). Таким образом, поделив размер всего массива на размер одного элемента, мы получим количество элементов, т.е. искомый размер массива.

Рассмотрим следующий пример: найти максимальный элемент в массиве.

#include "stdafx.h"

#include <iostream>

using namespace std;

void main()

{

   setlocale(LC_ALL, "Russian");

  int b[] = {1, -5, 8, 7, 4, -7, 3, 0, -8, 6};

  //определим размер массива

  int n = sizeof(b)/sizeof(b[0]);

  //объявим переменную для хранения максимального элемента

  //присвоим начальное значение, равное нулевому элементу

  int m = b[0];

  //просмотрим все элементы начиная с 1-ого элемента

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

  {

      //если i-й элемент будет больше

      //текущего максимального значения,

      //то изменим это максимальное значение

      //на значение i-го элемента

      if (b[i] > m)

          m = b[i];

  }

  //выведем на экран элементы массива

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

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

  //и максимальный элемент

  cout << endl << "Максимальный элемент: " << m;

}

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

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

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

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

Например:

 

//одномерный массив (вектор) размерностью 10

int vector[10];

//двумерный массив (матрица) размерностью 3x3

int matrix[3][3];

//двумерный массив размерностью 6 строк на 8 столбцов

int x[6][8];

//трехмерный массив размерностью 6x3x2

int y[6][3][2];

//шестимерный массив размерностью 6x3x2x5x8x4

int z[6][3][2][5][8][4];

//объявление массива с инициализацией

//крайняя левая размерность отсутствует

int mass0 [][2] = { {1, 1}, {0, 2}, {3, 0} }; 

//объявление массива с инициализацией

int mass1 [3][2] = { {1, 1}, {0, 2}, {3, 0} }; 

//объявление массива с инициализацией

//для удобства чтения каждая строка массива находится в отдельной строчке

int mass2 [3][2] = {

                      {1, 1},

                      {0, 2},

                      {3, 0}

                  };

//объявление массива с инициализацией

//внутренние фигурные скобки могут отсутствовать

int mass3 [3][2] = (1, 1, 0, 2, 3, 0): 

//объявление массива с инициализацией

//для удобства чтения каждая строка массива находится на отдельной строчке

int mass4 [3][2] = (

                      1, 1,

                      0, 2,

                      3, 0

                  ): 

Пример: в целочисленной матрице 3x4 определить номера строки и столбца элемента, который равен нулю. Массив задать случайными числами.

#include "stdafx.h"

#include <iostream>

using namespace std;

void main()

{

   setlocale(LC_ALL, "Russian");

  const int N = 3, M = 4;

  int r[N][M];

  

  //заполним массив случайными числами от 0 до 9

  //внешний цикл для перемещения по строкам

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

      //внутренний цикл для перемещения по столбцам

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

          //остаток от деления на 10 позволяет

          //получить требуемый диапазон значений

          r[i][j] = rand() % 10;

  //выведем массив на экран

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

  {

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

      {

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

      }

          //перейдем на новую строчку

          cout << endl;

  }

  cout << "Нулевые элементы:" << endl;

  //найдем элементы равные 0 и выведем их индексы на экран

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

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

          if (r[i][j] == 0)

          {

              cout << "a[" << i << "][" << j << "] == 0" << endl;

          }

}

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

  1.  Как определить массив?
  2.  Как проинициализировать массив?
  3.  Какие варианты объявления с инициализацией вы знаете?
  4.  Как обратиться к элементу массива?
  5.  Как объявить многомерный массив?
  6.  Как проинициализировать многомерный массив?
  7.  Как определить размер одномерного массива, зная его имя?

4 Задание

  1.  Написать программу в соответствии с вариантом задания из пункта 5.1.
  2.  Отладить и протестировать программу.
  3.  Написать программу в соответствии с вариантом задания из пункта 5.2.
  4.  Отладить и протестировать программу.
  5.  Оформить отчёт.

5 Варианты заданий

5.1 Одномерные массивы (векторы)

  1.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный элемент.
    3.  Вычислить среднеарифметическое элементов массива.
    4.  Вывести массив на экран в обратном порядке.
  2.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный элемент.
    3.  Вычислить сумму элементов массива.
    4.  Вывести положительные элементы на экран.
  3.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный элемент.
    3.  Вычислить среднеарифметическое положительных элементов массива.
    4.  Вывести отрицательные элементы на экран в обратном порядке.
  4.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный положительный элемент.
    3.  Вычислить произведение не нулевых элементов массива.
    4.  Вывести ненулевые элементы на экран в обратном порядке.
  5.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный отрицательный элемент.
    3.  Вычислить сумму отрицательных элементов массива.
    4.  Вывести положительные элементы на экран.
  6.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти максимальный положительный элемент.
    3.  Вычислить сумму элементов массива.
    4.  Вывести ненулевые элементы на экран в обратном порядке.
  7.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный элемент.
    3.  Вычислить среднеарифметическое отрицательных элементов массива.
    4.  Вывести массив на экран в обратном порядке.
  8.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный элемент.
    3.  Вычислить произведение не нулевых элементов массива.
    4.  Вывести положительные элементы на экран в обратном порядке.
  9.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти минимальный положительный элемент.
    3.  Вычислить сумму положительных элементов массива, кратных 3.
    4.  Вывести не нулевые элементы на экран.
  10.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти максимальный положительный элемент.
    3.  Вычислить произведение элементов массива.
    4.  Вывести положительные элементы на экран.
  11.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный элемент.
    3.  Вычислить сумму четных элементов массива.
    4.  Вывести отрицательные элементы на экран в обратном порядке.
  12.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный отрицательный элемент.
    3.  Вычислить среднеарифметическое положительных элементов массива.
    4.  Вывести положительные элементы на экран.
  13.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный отрицательный элемент.
    3.  Вычислить произведение отрицательных элементов массива.
    4.  Вывести ненулевые элементы на экран в обратном порядке.
  14.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти максимальный элемент.
    3.  Вычислить среднеарифметическое нечетных элементов массива.
    4.  Вывести отрицательные элементы на экран.
  15.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти минимальный положительный элемент.
    3.  Вычислить сумму четных элементов массива.
    4.  Вывести массив на экран в обратном порядке.
  16.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный отрицательный элемент.
    3.  Вычислить произведение ненулевых элементов массива, кратных 3.
    4.  Вывести отрицательные элементы на экран в обратном порядке.
  17.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный отрицательный элемент.
    3.  Вычислить среднеарифметическое четных элементов массива.
    4.  Вывести ненулевые элементы на экран в обратном порядке.
  18.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный элемент.
    3.  Вычислить сумму положительных нечетных элементов массива.
    4.  Вывести положительные элементы на экран.
  19.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти минимальный положительный элемент.
    3.  Вычислить произведение нечетных элементов массива.
    4.  Вывести отрицательные элементы на экран.
  20.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти максимальный элемент.
    3.  Вычислить среднеарифметическое отрицательных элементов массива.
    4.  Вывести положительные элементы на экран в обратном порядке.
  21.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти максимальный положительный элемент.
    3.  Вычислить сумму положительных четных элементов массива.
    4.  Вывести отрицательные элементы на экран в обратном порядке.
  22.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти минимальный элемент.
    3.  Вычислить произведение ненулевых нечетных элементов массива.
    4.  Вывести массив на экран в обратном порядке.
  23.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти минимальный положительный элемент.
    3.  Вычислить среднеарифметическое положительных элементов массива.
    4.  Вывести ненулевые элементы на экран в обратном порядке.
  24.  Дан одномерный массив, состоящий из N вещественных элементов.
    1.  Заполнить массив случайными числами.
    2.  Найти максимальный отрицательный элемент.
    3.  Вычислить среднеарифметическое нечетных элементов массива.
    4.  Вывести отрицательные элементы на экран.
  25.  Дан одномерный массив, состоящий из N целочисленных элементов.
    1.  Ввести массив с клавиатуры.
    2.  Найти минимальный отрицательный элемент.
    3.  Вычислить сумму несчетных отрицательных элементов массива.
    4.  Вывести положительные элементы на экран.

5.2 Многомерные массивы (матрицы)

  1.  Дан двумерный массив размерностью 46, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующей строки, больших данного числа.
  2.  Дан двумерный массив размерностью 65, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен первому четному элементу соответствующего столбца, если такого нет, то равен нулю.
  3.  Дана матрица размером 54. Поменять местами первую строку и строчку, в которой находится первый нулевой элемент.
  4.  Найти сумму двух матриц размером nm.
  5.  Дан двумерный массив размером nm, заполненный случайными числами. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов.
  6.  Дана матрица А размерностью nm. Сформировать одномерный массив В, элементами которого являются номера первых отрицательных элементов каждой строки массива А. (0 – отрицательный элемент отсутствует).
  7.  Дан двумерный массив размерностью 56, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.
  8.  Найти среднее арифметическое элементов каждой строки матрицы Q(l,m) и вычесть его из элементов этой строки.
  9.  Дан двумерный массив размером nm, заполненный случайными числами. Определить, есть ли в данном массиве строка, содержащая больше положительных элементов, чем отрицательных.
  10.  Дана матрица K(n,m). Сформировать одномерный массив L(m), элементами которого являются суммы элементов j-ого столбца.
  11.  Матрица K(m,m) состоит из нулей и единиц. Найти в ней номера строк и столбцов, не содержащих единицы, либо сообщить, что таких нет.
  12.  Целочисленный массив K(n,n) заполнить нулями и единицами, расположив их в шахматном порядке.
  13.  Дана матрица А(n,m). Сформировать одномерный массив В(n), элементами которого являются суммы элементов i-ой строки.
  14.  Дан двумерный массив размерностью 56, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен произведению четных положительных элементов соответствующего столбца.
  15.  Дан двумерный массив размером 8х7, заполненный случайным образом. Заменить все элементы первых трех столбцов на их квадраты, в остальных столбцах изменить знак каждого элемента на противоположный.
  16.  Дана матрица размером 8х7, заполненная случайным образом. Поменять местами две средние строки с первой и последней.
  17.  Дан двумерный массив размером 5х6, заполненный случайным образом. Заменить максимальный элемент каждой строки на противоположный по знаку.
  18.  Определить, есть ли в данном массиве строка, состоящая только из отрицательных элементов.
  19.  Дана матрица размером 4х5, заполненная случайным образом. Поменять местами первый и последний столбцы.
  20.  Дан двумерный массив размерностью 45, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов, кратных 3 или 5, соответствующей строки.
  21.  В каждой строке, заполненной случайным образом, матрицы размером nm поменять местами первый элемент и максимальный по модулю.
  22.  Дан двумерный массив размером 6х7, заполненный случайным образом. Поменять местами средние строки.
  23.  Дан двумерный массив размером nm, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой ровно два отрицательных элемента.
  24.  В матрице Z(m,m) каждый элемент разделить на диагональный, стоящий в том же столбце.
  25.  Определить, есть ли в данном массиве столбец, состоящий только из положительных или нулевых элементов.

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

  1.  Титульный лист.
  2.  Наименование и цель работы.
  3.  Краткое теоретическое описание.
  4.  Задание на лабораторную работу.
  5.  Схема  алгоритма.
  6.  Листинг программы.
  7.  Результаты выполнения программы.


 

А также другие работы, которые могут Вас заинтересовать

517. Абстрактные типы данных. Списки 273 KB
  Абстрактные типы данных. Понятие объектно-ориентированного про-граммирования. Линейные односвязные списки. На языке С++ программа с объектно-ориентированной структурой для реализации линейных односвязных списков.
518. Программирование на языках высокого уровня 246 KB
  Программа вычисления объема параллелепипеда, стоимости покупки, состоящей из нескольких тетрадей и такого же количества обложек к ним, оптимальный вес пользователя, сравнивает его с реальным и выдает рекомендацию о необходимости поправиться или похудеть.
519. Структуры и алгоритмы обработки данных на тему 2-3 деревья 240 KB
  Определить поля для записей, которые будут храниться в списке согласно своему варианту. Провести сравнение быстродействие реализованных алгоритмов для различного количества записей. Разработать алгоритмы вставки, поиска и удаления для 2-3 деревьев.
520. Оперативний контроль поширення забруднень в річках методами математичного моделювання 925.5 KB
  Аналіз існуючих підходів до моделювання забруднень в річках. Теоретичні основи моделювання поширення забруднень. Програмний комплекс ти приклади розрахунків на конкретних об’єктах. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
521. Экономическая оценка инвестиций 200.5 KB
  Формирование оптимального инвестиционного портфеля. Заёмные и привлечённые бюджетные источники финансирования инвестиций. Средства выделяемые из бюджета развития. Учет инфляции при оценке эффективности инвестиций.
522. Оценка недвижимости как основной вид экономической экспертизы: назначение, основные методы, нормативно-правовое регулирование 187 KB
  Экономические теории, используемые в оценке недвижимости. Регулирование оценочной деятельности по затратам. Оценка недвижимости методом сравнения рыночных продаж и капитализация дохода.
523. 2-этажная торцевая блок-секция на 6 квартир 768.5 KB
  Объёмно–планировочное решение здания, технико-экономические показатели. Сведение о наружной и внутренней отделке. Технико-экономические обоснования двух вариантов конструкций. Спецификация к архитектурно-конструктивным чертежам. Определение размеров лестничной клетки.
524. Социальный конфликт: сущность, этапы развития, возможности разрешения 89 KB
  Конфликты между индивидами, сущность и проблемы социального конфликта. Пути и способы регулирования социальных конфликтов. Глубокие и сложные процессы в современном российском обществе социальный кризис, трансформация социальной структуры, политические и духовные изменения.
525. Чехословаччина - республіка двох соціалістичних держав 59.5 KB
  Складалася з двох соціалістичних республік — Чехії і Словаччини. Територія 127 896 км², населення — 15 420 000 (1983), столиця — Прага. ЧСР постала 28 жовтня 1918, в серпні 1992 було прийнято рішення про створення окремих Чеської і Словацької республік.