- •Н.В. Галина, и.Е. Белоцерковская, л.Ю. Катаева
- •Оглавление
- •Введение
- •Глава 1 Устройство и принципы работы персонального компьютера. Основы работы с ос Windows
- •1.1 Устройство и принципы работы персонального компьютера
- •1.2 Назначение блоков и их краткая характеристика
- •1.3 Программное обеспечение персонального компьютера
- •Глава 2 Понятие алгоритма. Виды алгоритмов
- •1. Линейный алгоритм,
- •2. Разветвляющийся алгоритм,
- •3. Циклический алгоритм.
- •Глава 3 Понятие блок-схемы. Основные типы блоков. Реализация основных алгоритмов
- •3.1 Понятие блок-схемы
- •3.2 Линейный алгоритм
- •3.3 Разветвляющийся алгоритм
- •3.4 Циклический алгоритм
- •4.2 Начало работы в приложении Visual Studio
- •Глава 5 Графическая и программная реализации алгоритмов
- •5.1 Реализация линейного алгоритма
- •5.2 Реализация разветвляющегося алгоритма
- •5.3 Реализация циклического алгоритма
- •5.4 Исследование таблицы значений функции
- •Глава 6 Понятие массива. Одномерные и двумерные массивы
- •6.1 Одномерные массивы
- •6.2 Двумерные массивы
- •6.3 Исследование двумерного массива
- •Глава 7 Задания и варианты для лабораторных работ. Методические указания
- •7.1 Задания и варианты для лабораторных работ
- •7.2 Методические указания и примеры выполнения лабораторных работ
- •Литература
- •Галина Наталья Владимировна Белоцерковская Ирина Ефимовна Катаева Лилия Юрьевна
- •603950, Г. Нижний Новгород, ул. Минина, 24.
Глава 6 Понятие массива. Одномерные и двумерные массивы
Массив – это пронумерованный набор однотипных элементов.
Массивы бывают статическими и динамическими. У статического массива количество элементов известно заранее и не может быть изменено. У динамического массива количество элементов заранее неизвестно и определяется в процессе выполнения программы.
Также массивы различаются по размерности: одномерные, двумерные, трехмерные и т.д. Примером одномерно массива может послужить вектор а{1, 4, 3.5}. Примером двумерно массива может послужить матрица. Примером трехмерного массива может послужить набор высот местности.
Массивы различают по типу элементов. Бывают целочисленные, вещественные (состоящие из дробных чисел), символьные массивы.
Примеры массивов:
1. вектор а{1, 4, 3.5} – одномерный вещественный массив из трех элементов;
2. матрица
– двумерный целочисленный массив из
шести элементов;
3. {‘x’, ‘3’, ‘%’} – одномерный символьный массив;
4. {‘x’, 3, ‘%’} – не является массивом, т.к. часть элементов символы, часть элементов числа.
Мы будем рассматривать только статические одномерные и двумерные численные массивы.
6.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 Индексация одномерного массива
Способы инициализации одномерного массива:
1. инициализация числами:
double a[4]={0.5, -2,856, 1, 23};
2. с клавиатуры:
for (i=0; i<4; i=i+1){
cout<<”a[”<<i<<”]=”;
cin>>a[i];
}
3. по формуле:
например
for(i=0; i<4; i=i+1){
a[i]=pow(i, 2.0);
}
Пример 6.1. Даны
четыре одномерных массива:
а(8)={1,2,3,4,5,6,7,8},
b(8)
вводится с клавиатуры, с(8)
вычисляется по формуле
,
d(8)
вычисляется по формуле
.
Построить таблицу значений массивов.
Решение. Сначала необходимо проинициализировать массивы согласно условию задачи.
Массив а задан числами (первый способ инициализации), поэтому он будет проинициализирован при объявлении.
В одном цикле по переменной i (0≤i<8) введем b с клавиатуры (второй способ инициализации), массивы c и d рассчитаем по формулам (третий способ инициализации).
Далее организуем еще один цикл по переменной i (0≤i<8), в котором выведем все проинициализированные массивы на экран.
Вывод таблицы на экран нельзя делать в первом цикле, т.к. в каждой итерации будет идти запрос очередного элемента b, тогда таблица со значениями массивов будет смешана с запросом элемента b.
Рис. 6.2. Блок-схема (с предусловием)
Код программы (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;}
Результат выполнения программы:
Код программы (Borland C++) с оператором for (предусловие):
#include <iostream.h>
#include <iomanip.h>
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;
}
Результат выполнения программы:
Пример 6.2. Массив а(10) задан формулой аi=3i-5. Вычислить сумму положительных элементов массива и поменять местами первый и последний элементы.
Решение.
Обозначим за S сумму положительных элементов массива. При расчете S требуется дополнительное условие: «ai>0». Первый элемент массива имеет индекс 0, последний элемент имеет индекс 9, поэтому будем менять местами а0 и а9. Из-за перемены мест элементов массив изменится, поэтому выведем его еще раз.
Рис. 6.3. Блок-схема для примера 6.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;}
Результат выполнения программы:
Код программы (Borland C++) с оператором for (предусловие):
#include <iostream.h>
#include <iomanip.h>
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;}
Результат выполнения программы:
Проверка результатов в программе MathCad:
Ручной счет:
при 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.
