Преобразование элементов массива
Коротко о главном:
При работе с массивами можно выполнять следующие преобразования элементов: изменять значения элементов в зависимости от выполнения некоторых условий, менять местами элементы в массиве.
При обмене местами элементов массива используют дополнительную перемену (буфер) с целью временного хранения заменяемого элемента.
Упражнение 1
Составьте программу, которая осуществляет преобразование единиц измерения физических величин:
А) значения скорости, измеренные в км/ч, преобразуются в значения, измеренные в м/с (1м/с = 3,6 км/ч);
Ответ:
Var A: array[1..6] of integer;
i: integer;
Begin
writeln ('Введите значения скорости, измеренные в км/ч, через пробел');
for i:=1 to 6 do
read (A[i]);
writeln ('скорость в м/с');
for i:=1 to 6 do
begin
A[i]:=round(A[i]/3.6); {преобразование км/ч в м/с}
write (A[i],' '); {вывод результата}
end;
End.
Результат работы программы может выглядеть так:
Введите значения скорости, измеренные в км/ч, через пробел
60 90 100 70 120 80
скорость в м/с
17 25 28 19 33 22
Б) значения мощности, измеренные в лошадиных силах, преобразуются в значения, измеренные в киловаттах (1 л.с.= 0,735 кВт);
Ответ:
Var A: array[1..6] of integer;
i: integer;
Begin
writeln ('Введите значения мощности, измеренные в лошадиных силах, через пробел');
for i:=1 to 6 do
read (A[i]);
writeln ('мощность в киловатах:');
for i:=1 to 6 do
begin
A[i]:=round(A[i]*0.735); {преобразование мощности в кВт}
write (A[i],' '); {вывод результата}
end;
End.
Результат работы программы может выглядеть так:
Введите значения мощности, измеренные в лошадиных силах, через пробел
122 61 103 259 163 204
мощность в киловатах:
90 45 76 190 120 150
В) значения давления, измеренные в миллиметрах ртутного столба, преобразуются в значения, измеренные в килопаскалях (1 мм.рт. ст. = 0,133 кПа).
Ответ:
Var A: array[1..6] of integer;
i: integer;
Begin
writeln ('Введите значения давления, измеренные в миллиметрах ртутного столба, через пробел');
for i:=1 to 6 do
read (A[i]);
writeln ('давление в килопаскалях:');
for i:=1 to 6 do
begin
A[i]:=round(A[i]*0.133); {преобразование мм.рт.ст. в кПа}
write (A[i],' '); {вывод результата}
end;
End.
Результат работы программы может выглядеть так:
Введите значения давления, измеренные в миллиметрах ртутного столба, через пробел
5752 6128 5639 6015 5865 6053
давление в килопаскалях:
765 815 750 800 780 805
Упражнение 2
Составьте программу, которая осуществляет ввод в массив с клавиатуры размеров 5 файлов в байтах (от100 до 9000 байт) и преобразует значения, превышающие 1024 байт, в килобайты. Результат выводится в строку.
Ответ:
Var A: array[1..5] of integer;
i: integer;
Begin
writeln ('Введите размеры файлов через пробел, размер каждого от 100 до 9000 байт');
for i:=1 to 5 do
begin
read ( A[i]);
if A[i]=1024 then A[i]:=round(A[i]/1024);
{преобразование элементов массива}
end;
for i:=1 to 5 do
if A[i]=100 then write (A[i],'байт ')
else write (A[i],'Кбайт ');{вывод результата}
End.
Результат работы программы может выглядеть так:
Введите размеры файлов через пробел, размер каждого от 100 до 9000 байт
100 2500 730 8500 3600
100байт 2Кбайт 730байт 8Кбайт 4Кбайт
Упражнение 3
Составьте программу, которая формирует массив из пятнадцати случайных чисел от -20 до 20 и:
А) чётные числа делит на два, а нечётные – умножает на три;
На экран выводятся исходные и преобразованные значения.
А) Ответ:
Var A: array[1..15] of integer;
i: integer;
Begin
writeln ('исходные значения:');
for i:=1 to 15 do
begin
A[i]:=random(41)-20;
{формирование массива случайных чисел, принадлежащих промежутку [-20;20)}
write (A[i], ' '); {вывод элементов массива на экран}
end;
writeln ; {перевод курсора на новую строку}
writeln('преобразованный массив: ');
for i:=1 to 15 do
begin
if A[i] mod 2 = 0
then A[i]:=round(A[i]/2) {преобразование массива по условию}
else A[i]:=A[i]*3;
write (A[i], ' '); {вывод элементов массива в строку}
end;
End.
Результат работы программы может выглядеть так:
исходные значения:
-2 1 -17 3 11 0 1 10 3 14 17 12 17 19 -1
преобразованный массив:
-1 3 -51 9 33 0 3 5 9 7 51 6 51 57 -3
Б) отрицательные числа возводит в квадрат, а из неотрицательных извлекает квадратный корень;
Ответ:
Var A: array[1..15] of integer;
i: integer;
Begin
writeln ('исходные значения:');
for i:=1 to 15 do
begin
A[i]:=random(41)-20;
{формирование массива случайных чисел, принадлежащих промежутку [-20;20)}
write (A[i], ' '); {вывод элементов массива на экран}
end;
writeln ; {перевод курсора на новую строку}
writeln('преобразованный массив: ');
for i:=1 to 15 do
begin
if A[i]
then A[i]:=sqr(A[i]) {преобразование массива по условию}
else A[i]:=round(sqrt(A[i]));
write (A[i], ' '); {вывод элементов массива в строку}
end;
End.
Результат работы программы может выглядеть так:
исходные значения:
-19 2 0 6 -18 19 -14 16 7 20 3 -5 -2 -11 10
преобразованный массив:
361 1 0 2 324 4 196 4 3 4 2 25 4 121 3
В) увеличивает в два раза числа, кратные пяти, а остальные уменьшает в два раза;
Ответ:
Var A: array[1..15] of integer;
i: integer;
Begin
writeln ('исходные значения:');
for i:=1 to 15 do
begin
A[i]:=random(41)-20;
{формирование массива случайных чисел, принадлежащих промежутку [-20;20)}
write (A[i], ' '); {вывод элементов массива на экран}
end;
writeln ; {перевод курсора на новую строку}
writeln('преобразованный массив: ');
for i:=1 to 15 do
begin
if A[i] mod 5 = 0
then A[i]:=A[i]*2 { преобразование массива по условию}
else A[i]:=round(A[i]/2);
write (A[i], ' '); {вывод элементов массива в строку}
end;
End.
Результат работы программы может выглядеть так:
исходные значения:
10 13 19 -18 -15 8 9 7 -6 12 -14 -18 -4 -12 -2
преобразованный массив:
20 6 10 -9 -30 4 4 4 -3 6 -7 -9 -2 -6 -1
Г) меняет местами значения первого и последнего элементов массива.
Ответ:
Var A: array[1..15] of integer;
k,i: integer;
Begin
writeln ('исходные значения:');
for i:=1 to 15 do
begin
A[i]:=random(41)-20;
{формирование массива случайных чисел, принадлежащих промежутку [-20;20)}
write (A[i], ' '); {вывод элементов массива на экран}
end;
writeln ; {перевод курсора на новую строку}
writeln('преобразованный массив: ');
k:=A[1];
A[1]:=A[15];
A[15]:=k; {преобразование массива по условию}
for i:=1 to 15 do
write (A[i], ' '); {вывод элементов массива в строку}
End.
Результат работы программы может выглядеть так:
исходные значения:
0 5 -8 20 -19 12 8 18 4 20 12 -11 -11 6 -19
преобразованный массив:
-19 5 -8 20 -19 12 8 18 4 20 12 -11 -11 6 0
Поиск элементов с заданными свойствами
Коротко о главном:
Алгоритм, в котором последовательно просматриваются все элементы и проверяется выполнение условий поиска, называют последовательным (линейным).
На ёлочном базаре случайным образом берут несколько ёлок. Их высота в метрах заносится в массив вещественных чисел. Для этих данных могут быть сформулированы следующие задачи поиска:
А) определить, есть ли хотя бы одна ёлка, высота которой равна 150 см (или больше 170 см, или меньше 100 см);
Б) найти номер (индекс) по списку ёлки, высота которой 150 см;
В) найти номера (индексы) ёлок, имеющих высоту 160 см (или меньше (больше) высоты первой (последней) по списку ёлки);
Г) найти номера (индексы) ёлок, высота которых 160 см (или больше (меньше) 165 см);
Д) найти номер (индекс) ёлки, высота которой максимальная (минимальная).
Упражнение 1
Составьте программу, которая формирует массив из шестнадцати случайных чисел от -20 до 20 и:
А) находит элементы с нулевыми значениями;
Б) находит индексы чётных элементов;
В) подсчитывает количество отрицательных элементов;
Г) Определяет, есть ли в этом массиве хотя бы одно число, кратное трём;
Д) находит в этом массиве индексы элементов, значения которых кратны трём.
На экран выводятся исходный массив и найденные элементы.
Ответ:
Var A: array[1..16] of integer;
k,i: integer;
Begin
writeln ('исходные значения:');
for i:=1 to 16 do
begin
A[i]:=random(41)-20;
{формирование массива случайных чисел, принадлежащих промежутку [-20;20)}
write (A[i], ' '); {вывод элементов массива на экран}
end;
writeln ; {перевод курсора на новую строку}
write('нулевые значения имеют элементы с индексами: ');
for i:=1 to 16 do
if A[i] = 0 then write (i, ' ');
{'нахождение и вывод элементов с нулевыми значениями'}
writeln ; {перевод курсора на новую строку}
write ('чётными являются элементы с индексами: ');
for i:=1 to 16 do
if A[i] mod 2 = 0 then write (i, ' ');
{'нахождение и вывод индексов чётных элементов'}
writeln ; {перевод курсора на новую строку}
k:=0;
for i:=1 to 16 do
if A[i]
writeln ('количество отрицательных элементов равно ', k);
{'вывод количества отрицательных элементов'}
g:=0;
for i:=1 to 16 do
if A[i] mod 3 = 0 then g:=1; {'нахождение элемента, кратного трём'}
if g=1 then writeln ('массив содержит элемент кратный трём')
else writeln ('массив не содержит элемент кратный трём');
write ('индексы элементов, кратных трём: ');
for i:=1 to 16 do
if A[i] mod 3 = 0 then write (i, ' ')
End.
Результат работы программы может выглядеть так:
исходные значения:
17 19 18 -5 9 -19 5 -8 10 -8 -11 -14 -5 2 -11 15
нулевые значения имеют элементы с индексами:
чётными являются элементы с индексами: 3 8 9 10 12 14
количество отрицательных элементов равно 8
массив содержит элемент кратный трём
индексы элементов, кратных трём: 3 5 16
Упражнение 2
В массиве хранятся сведения о количестве осадков (в мм), выпадавших ежедневно в сентябре. Составьте программу, которая подсчитывает количество дождливых дней (h[i]0).
Ответ:
Var A: array[1..30] of integer;
k, i: integer;
Begin
writeln('Количество осадков, выпавших в сентябре');
for i:=1 to 30 do
begin
A[i]:=random(11);
{формирование массива случайных чисел, принадлежащих промежутку [0;10]}
Write (A[i],' ');
end;
writeln; {перевод курсора на следующую строку}
for i:=1 to 30 do
If A[i]0 then k:=k+1; {поиск в массиве по условию}
Writeln ('Количество дождливых дней в сентябре: ',k);
End.
Результат работы программы может выглядеть так:
Количество осадков, выпавших в сентябре
1 3 5 3 10 6 10 0 5 8 8 4 3 0 0 3 2 0 3 10 8 2 5 7 5 0 2 0 8 7
Количество дождливых дней в сентябре: 24
Упражнение 3
В массиве хранится информация о среднедневной температуре декабря. Составьте программу, которая подсчитывает, сколько в декабре было дней с нулевой, отрицательной и положительной температурой.
Ответ:
Var A: array[1..31] of integer;
k,b,c,i: integer;
Begin
writeln('Среднедневная температура декабря:');
for i:=1 to 31 do
begin
A[i]:=random(41)-30;
{формирование массива случайных чисел, принадлежащих промежутку [-30;10)}
Write (A[i],' ');
end;
writeln;
for i:=1 to 31 do
begin
if A[i]0 then k:=k+1; {поиск в массиве по условию}
if A[i]=0 then b:=b+1; {поиск в массиве по условию}
if A[i]
end;
Writeln ('В декабре было дней с положительной температурой: ',k);
Writeln ('В декабре было дней с нулевой температурой: ',b);
Writeln ('В декабре было дней с отрицательной температурой: ',c);
End.
Результат работы программы может выглядеть так:
Среднедневная температура декабря:
0 5 6 -13 -7 -25 -6 1 1 -7 10 -20 10 -4 1 -4 -22 -25 -23 -27 -30 0 -17 -19 -10 -13 -9 -15 1 -28 -9
В декабре было дней с положительной температурой: 8
В декабре было дней с нулевой температурой: 2
В декабре было дней с отрицательной температурой: 21
Упражнение 4
В массиве хранится информация о стоимости товаров. Составьте программу, которая определяет стоимость самого дешевого (дорогого) товара и его индекс.
Ответ:
Var A: array[1..10] of integer;
k,m,maks,min,i: integer;
Begin
writeln('Стоимость товаров:');
for i:=1 to 10 do
begin
A[i]:=random(91)+10;
{формирование массива случайных чисел принадлежащих промежутку [10;100)}
Write (A[i],' ');
end;
writeln; {перевод курсора на следующую строку}
k:=1; {начальное значение номера самого дорогого товара}
maks:=A[1]; {начальное значение самого дорогого товара}
m:=1; {начальное значение номера самого дешёвого товара}
min:=A[1]; {начальное значение самого дешёвого товара}
for i:=2 to 10 do
begin
If A[i]A[k] then
begin
maks:=A[i];k:=i;
end; {поиск максимального элемента массива и его номера}
If A[i]
Begin
min:=A[i];m:=i;
end; {поиск минимального элемента массива и его номера}
end;
Writeln ('Самый дорогой товар с номером ',k,' его стоимость ',maks);
Writeln ('Самый дешёвый товар с номером ',m,' его стоимость ',min);
End.
Результат работы программы может выглядеть так:
Стоимость товаров:
85 67 33 99 92 17 88 29 87 85
Самый дорогой товар с номером 4 его стоимость 99
Самый дешёвый товар с номером 6 его стоимость 17