Нижегородский государственный технический университет имени Р. Е. Алексеева
Опубликован: 26.03.2015 | Доступ: свободный | Студентов: 6249 / 1178 | Длительность: 07:05:00
ISBN: 978-5-9556-0173-1
Специальности: Программист, Преподаватель
Лекция 6:

Массивы

< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Аннотация: Существует ряд задач, в которых одни и те же действия нужно совершить над набором данных, массивом. Массивы применяются в разных задачах, начиная от математики (вектора, матрицы), заканчивая оконными приложениями (набор строк, параметры приложения и т.д.). Цель данной лекции – ознакомить студентов с понятием массива, его видами; показать основные принципы работы с массивами.

Массив – это пронумерованный набор однотипных элементов.

Массивы бывают статическими и динамическими. У статического массива количество элементов известно заранее и не может быть изменено. У динамического массива количество элементов заранее неизвестно и определяется в процессе выполнения программы.

Также массивы различаются по размерности: одномерные, двумерные, трехмерные и т.д. Примером одномерного массива может послужить вектор а\{1, 4, 3.5\}. Примером двухмерного массива может послужить матрица. Примером трехмерного массива может послужить набор высот местности.

Массивы различают по типу элементов. Бывают целочисленные, вещественные (состоящие из дробных чисел), символьные массивы.

Примеры массивов:

  1. вектор а\{1, -4, 3.5\} – одномерный вещественный массив из трех элементов;
  2. матрица A=\left(\begin{matrix}1&2&3\\4&5&6\end{matrix}\right) – двумерный целочисленный массив из шести элементов;
  3. \{"x", "3", "\%"\} – одномерный символьный массив;
  4. \{"x", -3.34, "\%"\} – не является массивом, т.к. часть элементов символы, часть элементов числа.

Мы будем рассматривать только статические одномерные и двумерные численные массивы.

Занятие 1. Одномерные массивы

Индекс – это номер элемента в массиве.

У одномерного массива один индекс, обычно он обозначается i.

Чтобы использовать одномерный массив в программе, необходимо:

  1. объявить массив в функции main():
    тип_данных имя_массива[количество элементов];
    double a[3];   //статический массив а из трех дробных чисел
    int b[7];   //статический массив b из семи целых чисел
  2. проинициализировать массив, т.е. задать каждому элементу конкретное числовое значение;
  3. провести вычисления, исследования.

Примечание. Индексация в массиве начинается с 0, т.е. индекс у самого первого элемента в массиве i=0. Индексация в массиве а(7)=\{-10; 0,2; 3; -4,7; 0,5; -8; 11\} указана на рис. 6.1.

Индексация одномерного массива

Рис. 6.1. Индексация одномерного массива

Способы инициализации одномерного массива представлены в табл. 6.1. Обратим внимание на то, что число n известно заранее и в программе фигурировать не будет.

Таблица 6.1. Способы инициализации одномерного массива a[n]
Часть блок-схемы Часть программы
1. инициализация числами

double a[4]={0.5, -2,856, 1};
2. с клавиатуры:

double a[n];
int i;
for(i=0; i<n; i=i+1){
	cout<<"a["<<i<<"]=";
	cin>>a[i];
}
3. из файла:

double a[n];
int i;
fstream file;
file.open("1.txt", ios::in);
for(i=0; i<n; i=i+1){
	file>>a[i];
}
file.close();
4. по заданной формуле a[i]=f(i):

double a[n];
int i;
for(i=0; i<n; i=i+1){
	a[i]=f(i);
}

Примечание. Более подробно работа с файлами будет рассмотрена позже.

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

Таблица 6.2. Вывод одномерного массива на экран
Часть блок-схемы Часть программы

for(i=0; i<n; i=i+1){
	cout<<"a["<<i<<"]="<<a[i]<<endl;
}
				

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

Таблица 6.3. Принципы исследования одномерного массива
Часть блок-схемы Часть программы
1. нахождение суммы:

s=0;
for(i=0; i<n; i=i+1){
	s=s+a[i];
}
cout<<"s="<<s<<endl;
2. нахождение произведения:

p=1;
for(i=0; i<n; i=i+1){
	p=p*a[i];
}
cout<<"p="<<p<<endl;
3. нахождение среднего арифметического и количества элементов:

s=0, k=0;
for(i=0; i<n; i=i+1){
	s=s+a[i];
	k=k+1;
}
s=s/k;
cout<<"s="<<s<<endl;
cout<<"k="<<k<<endl;
4. нахождение максимального элемента:

max=-10E10;
imax=0;
for(i=0; i<n; i=i+1){
	if(a[i]>max){
		max=a[i];
		imax=i;
	}
}
cout<<"max="<<max<<" imax="<<imax<<endl;
5. нахождение минимального элемента:

min=10E10;
imin=0;
for(i=0; i<n; i=i+1){
	if(a[i]<min){
		min=a[i];
		imin=i;
		}
	}
cout<<"min="<<min<<" imin="<<imin<<endl;
6. поменять местами элементы с индексами i1 и i2:

tmp=a[i1];
a[i1]=a[i2];
a[i2]=tmp;
7. вычисление формулы S=\sum^{n=1}_{i=0}f(a[i],i) :

s=0;
for(i=0; i<n; i=i+1){
	s=s+f(a[i],i);
}
cout<<"s="<<s<<endl;

Пример 1. Даны четыре одномерных массива: а(8)=\{1,2,3,4,5,6,7,8\}, b(8) вводится с клавиатуры, с(8) вычисляется по формуле с_i=2i, d(8) вычисляется по формуле d_i=a_i+b_i+c_i. Построить таблицу значений массивов.

Решение. Сначала необходимо проинициализировать массивы согласно условию задачи.

Массив а задан числами (первый способ инициализации), поэтому он будет проинициализирован при объявлении.

В цикле по переменной i (0\le i<8) введем b с клавиатуры (второй способ инициализации), массивы c и d рассчитаем по формулам (четвертый способ инициализации).

Далее организуем еще один цикл по переменной i (0\le i<8), в котором выведем все проинициализированные массивы на экран.

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

Блок-схема представлена на рис. 6.2.

Блок-схема для примера 1

Рис. 6.2. Блок-схема для примера 1

Код программы (Visual Studio) с оператором for:

// proga27.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	double a[8]={1,2,3,4,5,6,7,8};
	double b[8], c[8], d[8];
	int i;
	for(i=0; i<8; i=i+1){
		cout<<"b["<<i<<"]=";
		cin>>b[i];
		c[i]=2.0*i;
		d[i]=a[i]+b[i]+c[i];
	}
	cout<<setw(2)<<"i"<<setw(5)<<"a"<<setw(5)<<"b"<<setw(5)<<"c"<<setw(5)<<"d"<<endl;
	for(i=0; i<8; i=i+1){
		cout<<setw(2)<<i<<setw(5)<<a[i]<<setw(5)<<b[i]<<setw(5)<<c[i]<< setw(5)<<d[i]<<endl;
	}
	return 0;
}

Результат выполнения программы:


Пример 2. Массив а(10) задан формулой а_i=3i-5. Вычислить сумму положительных элементов массива и поменять местами первый и последний элементы.

Решение.

Обозначим за S сумму положительных элементов массива. При расчете S требуется дополнительное условие: "a_i>0". Первый элемент массива имеет индекс 0, последний элемент имеет индекс 9, поэтому будем менять местами а_0 и а_9. Из-за перемены мест элементов массив изменится, поэтому выведем его еще раз.

Блок-схема представлена на рис. 6.3.

Блок-схема для примера 2

Рис. 6.3. Блок-схема для примера 2

Код программы (Visual Studio) с оператором for:

// proga28.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
	double S, tmp, a[10];
	int i;
	S=0;
	for(i=0; i<10; i=i+1){
		a[i]=3.0*i-5.0;
		cout<<setw(3)<<a[i];
		if(a[i]>0){
			S=S+a[i];
		}
	}
	cout<<endl;
	cout<<"S="<<S<<endl;
	tmp=a[0];
	a[0]=a[9];
	a[9]=tmp;
	for(i=0; i<10; i=i+1){ cout<<setw(3)<<a[i]; }
	cout<<endl;
	return 0;}

Результат выполнения программы:


Ручной счет:

при i=0	a(0)=3i-5=3·0-5=-5;
при i=1	a(1)=3i-5=3·1-5=-2;
при i=2	a(2)=3i-5=3·2-5=1;
при i=3	a(3)=3i-5=3·3-5=4;
при i=4	a(4)=3i-5=3·4-5=7;
при i=5	a(5)=3i-5=3·5-5=10;
при i=6	a(6)=3i-5=3·6-5=13;
при i=7	a(7)=3i-5=3·7-5=16;
при i=8	a(8)=3i-5=3·8-5=19;
при i=9	a(9)=3i-5=3·9-5=22;
сумма положительных элементов S=1+4+7+10+13+16+19+22=92.·
< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Никита Беллонский
Никита Беллонский

Лекция 4. Упражнение №4.

Составил блок-схему и по ней написал программу. Работает корректно, но если подбираю значения, чтобы выходила сумма меньше -2, на выводе значится: "-na n(i nd)". 

Я так понимаю, это потому что в выражении выполняется извлечение квадратного корня из отрицательного числа. Но что значит "-na n(i nd)"? Почему вывод именно такой? Машина всегда так сообщает о "неудачных" вычислениях? 

Антон Биганов
Антон Биганов

в лекции 2.

"Таблица 2.4. Выполнение блок-схемы с предусловием для примера 9" - в блоке условия стоит а<10, при таком условии последяя строка {S=17, R=3} на экран выведена не будет.

 

Елена Сергеева
Елена Сергеева
Россия, Таганрог, ТРТУ, 2003
Сергей Ишутин
Сергей Ишутин
Россия, Воронеж