Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Решение задач - примеров






В качестве примера рассмотрим решение двух задач с одномерным и двухмерным массивами.

Пример 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-й позиции.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.