Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на С++ в среде разработки Qt Creator. Учебно-методическое пособие
.pdf
41
Лабораторная работа №6
ФОРМИРОВАНИЕ И ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ
Цель работы: приобретение навыков разработки алгоритмов формирования
и обработки одномерного массива. Закрепление понятий базовых структур
цикл, разветвление.
Подготовка к лабораторной работе
1. Повторите вопросы организации циклических алгоритмов, понятия
конечного цикла.
2. Повторить следующие вопросы и понятия:
• массивы данных (размерность массива, обращение к элементу массива,
расположение элементов массива в памяти ПК);
• правила работы с массивами данных на языке программирования С++:
описание массивов, задание типа и размерности массива;
• организация циклов для ввода и формирования элементов массива;
• алгоритм поиска максимального (минимального) элемента
одномерного массива;
• алгоритм поиска суммы элементов одномерного массива;
• алгоритм подсчета количества элементов одномерного массива,
удовлетворяющих поставленному условию;
• организация вывода элементов массива.
3. В соответствии с вариантом (таблица 4) разработайте алгоритм обработки
элементов массива.
4. Напишите программу на алгоритмическом языке в соответствии со схемой
алгоритма, составленной в п.3.
5. Организуйте вывод массива и результатов обработки массива.
ИСХОДНЫЙ МАССИВ А:
15.583 19.287 28.385 45.621 39.728 5.456 -8.087 3.897
ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ:
МАХ = 45.621

42
Формирование, обработка и вывод массива
Массив представляет собой упорядоченное множество однотипных
элементов.
Описание одномерного массива
При описании массива необходимо указать:
• тип элементов;
• идентификатор массива;
• число элементов.
<тип элементов> имяМассива [число элементов];
Доступ к каждому элементу массива осуществляется с помощью индекса.
Индекс задает порядковый номер элемента, к которому осуществляется
доступ. В языке С++ первый элемент массива имеет индекс ноль. Число
индексов определяет структуру массива: если используется один индекс, то
такой массив называется одномерным, если два индекса – двухмерным, и т.д.
В общем случае размерность массива может быть произвольной.
Компилятор отводит под массив память размером (sizeof(тип)*размер)
байтов.
При описании массива можно сразу задать начальные значения его
элементов:
int dat[4]={5,8,-2,11};
float kom[]={3.5,6,-1.1};
Указатели могут обеспечить простой способ ссылок на массив. Имя массива
фактически является константой-указателем, ссылающимся на начальный
адрес данных (адрес первого элемента массива). Начальный адрес массива
определяет компилятор в момент описания массива, и такой адрес не может
быть переопределен. Первый элемент массива имеет индекс ноль.
Индексированные переменные
Выбор отдельного элемента из массива осуществляется с помощью
индексированной переменной, которая задается следующим образом:
x[i] - индексированная переменная (элемент массива).
Здесь x - имя массива;
i - индекс (номер элемента массива).
В качестве индекса используются:
целые константы, например х[2] х2;
переменные целого типа, например х[к] хk;

43
индексные выражения, например х[2*n+1] x
2n+1
.
В языке С++ индексы элементов любого массива начинаются с нуля.
Индексные выражения должны выдавать результат целого типа.
Переменная с индексом может стоять в левой части оператора присваивания,
например:
х[3]=2.5; //элементу массива х с индексом 3 присваивается значение 2,5
Ввод-вывод одномерных массивов
Ввод-вывод массивов осуществляется поэлементно с помощью операторов
cin и cout соответственно. Они должны являться телом оператора цикла
for..., в котором в качестве параметра используется индекс.
Пример 1. Организовать ввод с клавиатуры значений массива:
A = (1.2, 5, -6.8, 14).
Необходимо описать массив и индекс.
int main()
{ float A[4] ;
int i;
В программе ввод массива рекомендуется организовать в виде диалога,
поместив перед оператором ввода оператор вывода (cout), которым
выдается на экран поясняющее сообщение, например:
cout<<"Введите значения элементов массива А”<<”\n";
for( i = 0; i<4; i++)
cin>>A[i];
Во время исполнения программы на клавиатуре через один или несколько
пробелов набираются элементы массива и нажимается клавиша [Enter]:
1.2 5 -6.8 14 [Enter]
Пример 2. Организовать вывод элементов массива А на экран таким
образом, чтобы все элементы располагались на одной строке экрана.
В программе надо записать следующие операторы:
for ( i = 0; i<4; i++)
{cout<<A[i]<<” “;}
cout<<"\n";
Вид выводимого массива на экране:
1.2 5.0 -6.8 14.0
Оператор cout<<"\n"; служит для перевода курсора к началу следующей
строки экрана.

44
Обработка одномерных массивов
При решении задач обработки массивов используют базовые алгоритмы
реализации циклических вычислительных процессов: организация счетчика,
накопление сумм и произведений, поиск минимального и максимального
элементов массива.
Задача 1. Организация счетчика
Дан целочисленный массив: В = {bi};i=
20,1
. Определить количество
элементов массива, которые делятся на 3 без остатка (т.е. кратны трем).
Схема алгоритма
Текст программы:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ int В[20] ; // описание массива B для 20 целых чисел
int i, L;
cout<<"Введите 20 значений массива В”<<”\n");
for( i=0; i<20; i++)//цикл для ввода 20 чисел
cin>>В[i]; //ввод одного числа в элемент массива с клавиатуры
Конец
Вывод L
L=L+1
Да
Biкратно
i=0,19
L=0
НАЧАЛО
Ввод

45
L=0;
for( i =0; i<20; i++)
if (В[i] % 3== 0) //проверка элемента на кратность 3
L++; //увеличение счетчика на 1
cout<<"Кол-во кратных 3 элементов=”<<L<<”\n”;
return 0;
}
Задача 2. Накопление суммы и произведения
Дано целое число n и массив из n вещественных чисел:
nixX
i
,1; ==
.
Вычислить среднее арифметическое и среднее геометрическое чисел
массива, используя формулы:
=
=
n
i
i
x
n
S
1
1
;
n
n
i
i
xP
=
=
1
.
Схема алгоритма:
Текст программы:
#include <iostream>
#include <cmath>
Конец
Вывод S,P
S=S+X[i]
P=P*X[i]
S=S/n P=P
1/n
i=1,n
S=0 P=1
Ввод
n,X[n]
НАЧАЛО

46
using namespace std;
int main()
{
float X [100]; //описание массива Х
float z;
int n;
int i;
float S=0, P=1;/*начальные значения суммы и
произведения*/
cout<<"Введите размер массива n= ";
cin>>n;
cout<<"Введите “<<n<<” элементов массива X”<<”\n";
for( i = 0; i<n; i++)
cin>>X[i]);
for( i=0; i<n; i++) //цикл для индекса i
{
S = S + X[i]; // добавление элемента Х[i] к S
P =P*X[i]; // домножение P на элемент Х[i]
}
S = S/n; /* вычисление среднего значения элементов
массива Х */
z=1.0/n;
P=pow(P,z); // вычисление среднего геометрического Х
cout<<”S=”<<S<<”\n";
cout<<”P=”<<P<<”\n";
return 0;
}
Задача 3. Поиск минимального и максимального элементов массива
Дан вещественный массив: T = {ti}; i=
10,1
. Поменять местами минимальный
и максимальный элементы массива и вывести массив после обмена.
Решение
В этой задаче для осуществления обмена надо знать не только значения
минимального и максимального элементов массива, но и их местоположение.
Поэтому во время поиска минимального и максимального элементов
необходимо фиксировать значения их индексов.
Введем обозначения:
min - минимальный элемент;
imin - индекс минимального элемента;
max - максимальный элемент;
imax - индекс максимального элемента.

47
Схема алгоритма
Текст программы:
#include "iostream"
#include <cmath>
int main()
{
float T[10] ; // описание массива Т
int i, imin, imax;
float min, max;
cout<<"Введите массив Т”<<”\n";
for( i = 0;i<10;i++)
cin>>T[i];
imin =0;
imax =0;
for( i = 0; i<10; i++)
{
if (T[i]<T[imin]) { imin=i; } /*сохранение номера
текущего min */
Да
ВыводТ
Конец
Max=T[i]
imax=i
Нет
Да
T[i]>Max
Нет
Min=T[i]
imin=i
Min=106 Max=-
10
6
i=1,10
НАЧАЛО
T[i]<Min
Ввод
массива Т

48
}
if( T[i]>T[imax]) {imax = i;}/* сохранение номера
текущего max */
}
min=T[imin]; //меняем местами min и max
T[imin]=T[imax];
T[imax]= min;
for( i= 0; i<10; i++)
cout<<T[i]<<” “;
cout<<"\n";
return 0;
}
Порядок выполнения работы
1. Получить допуск к работе у преподавателя (показать домашние
заготовки).
2. Загрузить среду Qt Creator и создать проект нужного типа.
3. Ввести текст программы.
4. Провести отладку программы.
5. Выполнить программу, провести анализ результатов и убедившись в
правильности решения, предъявить их преподавателю для проверки.
6. Занести результаты расчета в отчет.
7. Выйти из среды.
Таблица 5 - Варианты заданий
№
вар.
Исходные данные
Действия по обработке массива
1
Массив Х[30]
нецелых элементов
задать датчиком
случайных чисел.
Записать в массив Y подряд положительные
элементы массива Х и найти их среднее
арифметическое.
2
Массив С[15]
нецелых элементов
вводят с клавиатуры.
Определить минимальный элемент массива С и
его порядковый номер. Заменить его на 0 .
3
Массив Х [36] целых
элементов задать
датчиком случайных
чисел.
Переписать подряд в массив Y положительные
и в массив Z отрицательные элементы массива
Х и определить, сколько в массиве Y четных
элементов.

49
4
Массив А[20]
нецелых элементов
вводят с клавиатуры.
Определить среднее арифметическое
положительных элементов массива и
подсчитать сколько элементов находится в
интервале от 2.5 до 3.5.
5
Массив Z[15]
нецелых элементов
вводят с клавиатуры.
Переписать в массив R сначала положительные,
а затем отрицательные элементы массива Z и
найти сумму положительных элементов и
количество отрицательных элементов.
6
Массив А[20]
нецелых элементов
задать датчиком
случайных чисел.
Вычислить среднее арифметическое значение
положительных элементов и максимальный
элемент среди отрицательных элементов
массива А.
7
Массив С[15]
нецелых элементов
вводят с клавиатуры.
Вычислить минимальный положительный и
максимальный отрицательный элементы и их
порядковые номера в массиве С.
8
Массив Y[10]
нецелых элементов
вводят с клавиатуры.
Вычислить среднее геометрическое элементов
массива и определить наибольший элемент
массива. Заменить наибольший элемент массива
на среднее геометрическое элементов массива.
9 Массив D [30] целых
элементов задать
датчиком случайных
чисел.
Найти минимальный и максимальный элемент,
среди четных элементов массива D и поменять
их местами.
10
Массив B [30] целых
элементов задать
датчиком случайных
чисел.
Переписать подряд в массив А те элементы
массива В, для которых справедливо: Bi>
2/)(
11 +−
+
ii
BB
. Вычислить сумму элементов
массива А и количество элементов,
удовлетворяющих условию 1< Аi< 5.
11
Массив А[15]
сформировать по
правилу
1
)1(
sin
1
1
2
+
−
+
−
=
i
i
i
i
A
i
Найти минимальный элемент и сумму
отрицательных элементов. Заменив в массиве А
минимальный элемент найденной суммой.
12
Массив А[22]
нецелых элементов
задать датчиком
случайных чисел.
Записать в массив Х номера тех элементов
массива А, для которых справедливо А
i -1
< Аi<
А
i +1
. Вычислить среднее арифметическое
элементов массива А.

50
13
Массив B[20]
сформировать по
правилу
||
2
aib
i
−=
a=25.8
Найти сумму элементов с номерами с 5-го по
10-ый, упорядочить эти элементы по убыванию
и найти произведение элементов Bi< 8.5
14
y=cos (nx + e)
1<= n<= 30
e =0.5
x вводить с
клавиатуры.
Записать в массив А те значения n, при которых
у<0, в массив В записать те значения n, при
которых у>0.
15
Массив Х[20]
нецелых элементов
вводят с клавиатуры.
Вычислить сумму и количество элементов,
удовлетворяющих условию -3<=Xi<=7 и
заменить в массиве Х элементы Xi<2 на 0.
16
Массив A[40]
cформировать по
правилу
i
i
a
i
cos
=
Найти максимальный элемент и заменить его
суммой элементов, предшествующих ему.
Найти минимальный элемент и заменить его
суммой элементов, стоящих после него.
17
Массив Y[25]
cформировать по
правилу
2
1
41 n
x
y
n
n
+
=
+
X=2.3
Переписать в массив Х элементы массива Y в
обратном порядке и найти среднее
арифметическое максимального и
минимального элемента в массиве Y.
18
Массив Z[15]
cформировать по
правилу
i
x
z
i
i
2
2
=
x=1.2
Найти сумму элементов с нечетными номерами
и минимальный элемент среди элементов с
четными номерами.
19
Массив Х [40]
cформировать по
правилу
8+= aix
i
a=pi/6
Найти минимальный элемент среди элементов,
удовлетворяющих условию 2<=Xi<=4 и
заменить его произведением элементов,
предшествующих ему.
20
Массив Y[25]
cформировать по
правилу
)12)(12(
2cos
+−=ii
ix
y
i
x вводить с
клавиатуры.
Определить количество элементов у i<1.2 среди
элементов с нечетными номерами и сумму
элементов с четными порядковыми номерами.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
