
Лабораторная работа № 3 (массивы) (4 часа)
Цели: формирование навыка использования в программах массивов данных; развитие умения выполнения декомпозиции задачи.
Пример. 1
Задан одномерный целочисленный массив. Написать программу замены элементов, стоящих на четных местах их квадратами (пользователь программы должен иметь возможность выбрать способ задания массива – случайными числами или путем ввода с клавиатуры).
Здесь можно выделить следующие подзадачи:
заполнение массива одним из двух способов;
просмотр исходного массива;
замена элементов по указанному правилу;
просмотр полученного массива.
В первой задаче можно выделить следующие подзадачи: выбор способа заполнения, заполнение массива выбранным способом.
Основная программа:
Program Pr_6_1;
Uses Crt, U_6_1;
Var A : mas;
Begin
ClrScr;
{заполнение массива одним из двух способов}
zapolnenie;
{вывод заполненного массива на экран}
ClrScr;
Writeln('Исходный массив'); View(A);
{замена элементов, стоящих на четных местах}
Zamena(A);
{вывод полученного массива на экран }
Writeln('Измененный массив'); View(A);
ReadKey;
End.
Процедуры, используемые в этой программе, описаны в модуле U_6_1:
Unit U_6_1;
Interface
Const N = 7; {количество элементов массива}
Type mas = array [1..N] of integer;
Procedure View( x : mas )
Procedure zapolnenie (var x: mas);
Procedure zamena (var x:mas);
Implementation
Procedure View ( x : mas );
{процедура вывода элементов массива х на экран}
var i : integer;
begin
For i := 1 to N do Write(x[i]:5);
writeln;
end;
Procedure Create_Random ( var x : mas );
{процедура заполнения массива х случайными числами }
var i : integer;
begin
Randomize;
For i := 1 to N do x[i] := Random(100)-50;
end;
procedure Create ( var x : mas );
{процедура ввода элементов массива х с клавиатуры}
var i : integer;
begin
For i := 1 to N do
begin
Write('Введите ', i, ' элемент массива '); Readln(x[i]);
end;
end;
Procedure zapolnenie (var x: mas);
var Ch,i : integer;
begin
{вывод на экран «меню»}
Writeln('1-Ввод массива с клавиатуры ');
Writeln('2-Инициализация массива случайными числами');
Writeln;
Write('Введите номер пункта меню (1 или 2) - ');
ReadLn(Ch);
{вызов выбранной процедуры заполнения массива}
Case ch of
1 : Create (x);
2 : Create_Random(x);
end;
end;
Procedure zamena (var x:mas);
{процедура замены элементов}
var i:integer;
begin
i := 2;
while i <= N do
begin
x[i] := sqr(x[i]);
i := i + 2;
end;
end;
end.
Протокол выполнения процедуры zamena.
действия |
x |
i |
i<=N |
||||||||||||||||
передача в процедуру аргумента x |
|
|
|
||||||||||||||||
i := 2; |
|
2 |
|
||||||||||||||||
i <= N |
|
|
Да |
||||||||||||||||
x[i] := sqr(x[i]); |
|
|
|
||||||||||||||||
i := i + 2; |
|
4 |
|
||||||||||||||||
i <= N |
|
|
Да |
||||||||||||||||
x[i] := sqr(x[i]); |
|
|
|
||||||||||||||||
i := i + 2; |
|
6 |
|
||||||||||||||||
i <= N |
|
|
Да |
||||||||||||||||
x[i] := sqr(x[i]); |
|
|
|
||||||||||||||||
i := i + 2; |
|
8 |
|
||||||||||||||||
i <= N |
|
|
Нет |
||||||||||||||||
передача в основную программу значения x |
|
|
|
Протокол выполнения программы