РЕШЕНИЕ ЗАДАЧ - ПРИМЕРОВ
В качестве примера рассмотрим решение двух задач с одномерным и двухмерным массивами.
Пример 1. Создать одномерный вещественный массив из 25 элементов. Определить максимальный и минимальный элементы массива и поменять их местами. Полученный результат вывести на экран.
Текст программы на языке Turbo Pascal:
PROGRAM MAS;
VAR
M: ARRAY [1.. 25] OF REAL; { Вещественный массив }
MAX, MIN, MN: REAL;
I, K, N: INTEGER; { Вспомогательные переменные }
BEGIN
{ Ввод вещественного массива из 25 элементов }
FOR I: = 1 TO 25 DO READ ( M [I] );
{ Переменным MAX и MIN присваиваем значение первого элемента массива }
MAX: = M [1]; K: = 1;
MIN: = M [1]; N: = 1;
{ Определяем максимальный и минимальный элементы массива и их индексы}
FOR I:= 2 TO 25 DO
BEGIN
IF M [I] > MAX THEN
BEGIN
MAX: = M [I];
K: = I;
END;
IF M[I] < MIN THEN
BEGIN
MIN: = M [I];
N: = I;
END;
END;
{Меняем местами максимальный и минимальный элементы}
MN: = M [K];
M [K]: = M [N];
M [N]: = MN;
{ Вывод полученного массива на экран }
FOR I: = 1 TO 25 DO WRITELN ( M[I] );
END.
Пример 2. Создать целочисленную матрицу А 10х8. Сформировать одномерный массив В, который содержит суммы положительных элементов каждой строки матрицы А и вывести его на экран.
Текст программы на языке Turbo Pascal:
PROGRAM PRIM;
VAR
A: ARRAY [1.. 10, 1.. 8] OF INTEGER;
B: ARRAY [1.. 10] OF INTEGER;
I, J, S: INTEGER;
BEGIN
{ Ввод целочисленной матрицы А 10х8 }
FOR I:= 1 TO 10 DO
FOR J: = 1 TO 8 DO
READ ( A[ I, J] );
{ Вычисление суммы положительных элементов каждой строки матрицы А и формирование массива В }
FOR I: = 1 TO 10 DO
BEGIN
S: = 0;
FOR J: = 1 TO 8 DO
IF A [ I, J ] > 0 THEN S: = S + A [ I, J ];
B [ I ]: = S;
END;
{ Вывод сформированного массива В на экран }
FOR I: = 1 TO 10 DO WRITELN ( B [ I ] );
END.
Задача:
Создать каталог из журнал и статей. Выдавать информацию о публикациях, удовлетворяющих тому или иному критерию, например, изданных с 2000 года.
Программа на языке Паскаль:
type
t_pub = record
author: string[40];
title: string[100];
year: integer;
case t: char of
'b': (publ:string[20]);
'j': (jour:string[30]; num:byte);
end;
var
catalog: array[1..20] of t_pub;
n,i: integer;
begin
write('Количество записей: ');
readln(n);
for i:=1 to n do begin
write('Книга или журнал: ');
readln(catalog[i].t);
write('Автор: ');
readln(catalog[i].author);
write('Название: ');
readln(catalog[i].title);
write('Год издания: ');
readln(catalog[i].year);
case catalog[i].t of
'b': begin
write('Издательство: ');
readln(catalog[i].publ);
end;
'j': begin
write('Журнал: ');
readln(catalog[i].jour);
write('Номер: ');
readln(catalog[i].num);
end;
end;
writeln;
end;
for i:=1 to n do
with catalog[i] do
if (year >= 2000) and (t = 'b') then
writeln(author,' ',title,' ',publ,' ',year);
for i:=1 to n do
with catalog[i] do
if (year >= 2000) and (t = 'j') then
writeln(author,' ',title,' ',jour,' ',year,' ',num);
readln;
end.
Вывести на экран фамилии студентов, чей балл выше среднего по группе.
Описание переменных:
arr_studs – группа студентов;
average – средний балл в группе.
Программа на языке Паскаль:
type
studs = record
sname: string[25];
eval: integer;
end;
var
arr_studs: array[1..15] of studs;
sum: integer;
average: real;
i,n: byte;
begin
write('Количество студентов: ');
readln(n);
sum := 0;
for i:=1 to n do
with arr_studs[i] do begin
write(i,'-й студент: ');
readln(sname);
write(' Оценка: ');
readln(eval);
sum := sum + eval;
end;
average := sum / n;
writeln;
writeln('Студенты с оценкой выше средней:');
for i:=1 to n do
if arr_studs[i].eval > average then
writeln(arr_studs[i].sname);
readln
end.
В текстовом файле содержатся сведения о количестве учащихся в классах и их классных руководителях. Количество классов в школе не превышает 20. Для описания каждого класса отводится одна строка. В первых четырех позициях каждой строки файла записано имя класса (например, 5a, 10b) класса (не пишите русских букв), а затем количество человек в нем и ФИО руководителя. Программа по запросу выдает сведения о классе или сообщение о том, что класс не найден.
Описание переменных:
school – массив записей, считанных из файла;
title_search – введенное пользователем имя класса.
Алгоритм решения задачи:
Данные из файла считываются в массив записей. Каждая запись содержит имя класса (title), количество учеников (pupils), сведения о руководителе (teacher).
Пользователь вводит имя класса. Если его длина равна 0, то происходит выход из цикла с помощью команды break.
Строка, введенная пользователем, дополняется до 4-х символов пробелами.
Если имя класса не совпадет ни с одним полем title записей массива, то флаговая переменная found останется равной false, появится сообщение об отсутствии указанного класса.
В случае совпадения все поля соответствующей записи будут выведены на экран.
Программа на языке Паскаль:
const n = 20;
type
str4 = string[4];
clas = record
title: str4;
pupils: byte;
teacher: string[25];
end;
var
school: array[1..n] of clas;
i,j,len: integer;
title_search: str4;
found: boolean;
f: text;
begin
assign(f,'c:/school.txt'); reset(f);
i := 1;
while not Eof(f) do begin
with school[i] do
readln(f,title,pupils,teacher);
i := i + 1;
end;
while true do begin
write('Input class: ');
readln(title_search);
len := length(title_search);
if len = 0 then break;
for j := len + 1 to 4 do
title_search := title_search + ' ';
found := false;
for j := 1 to i - 1 do begin
if title_search <> school[j].title then continue;
with school[j] do
writeln(title:5,pupils:5,teacher:25);
found := true;
break;
end;
if not found then
writeln('No class!');
end;
end.
Примечания:
Для выхода их программы достаточно нажать Enter без ввода данных.
В текстовом файле число, обозначающее количество человек в классе, должно начинаться с 5-й позиции.