Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Программа, определяющая количество дней в месяце

Алгоритм решения задачи:

Переменная d имеет тип данных запись и содержит два поля: year – для хранения года и month – для месяца.

Пользователь вводит год и месяц.

Оператор выбора case по номеру месяца определяет количество дней в нем. Ситуация осложняется тем, что в феврале может быть как 28 дней, так и 29 (в високосный год).

Год является високосным, если делится без остатка на 4 и при этом не является последним годом столетия, за исключением того столетия, которое без остатка делится на 400.

Программа на языке Паскаль:

type date = record

year:1900..2100;

month:1..12

end;

var d: date;

begin

write('Год: ');

readln(d.year);

write('Месяц: ');

readln(d.month);

case d.month of

4,6,9,11:

writeln('В этом месяце 30 дней');

1,3,5,7,8,10,12:

writeln('В этом месяце 31 день');

2:

if (d.year mod 400 = 0) or

(d.year mod 100 <> 0) and (d.year mod 4 = 0) then

writeln('В этом месяце 29 дней')

else

writeln('В этом месяце 28 дней');

end;

readln;

end.

Фильтрация данных

Задача:

Скопировать из одного файла в другой только определенные символы (например, ряд гласных) и посчитать их общее количество.

Алгоритм решения задачи:

Первый файл открывается на чтение, второй – на запись.

Первый цикл while читает поэлементно исходный файл. Если текущий символ является одним из ‘a’, ‘e’ или ‘u’, то он записывается во второй файл. Также переменная-счетчик (k) увеличивает свое значение на единицу.

После окончания чтения первого файла, оба закрываются. Далее второй файл открывается на чтение, и из него считываются и выводятся на экран данные. Их общее количество хранится в переменной k, значение которой также выводится на экран.

Программа на языке Паскаль:

var

f1, f2: file of char;

c: char;

k: integer;

begin

assign (f1, 'c:\file1.txt');

reset (f1);

assign (f2, 'c:\file2.txt');

rewrite (f2);

k := 0;

while not eof (f1) do begin

read (f1, c);

if (c = 'a') or (c = 'e') or (c = 'u') then begin

write (f2, c);

k := k + 1

end

end;

close (f1);

close (f2);

reset (f2);

while not eof (f2) do begin

read (f2, c);

write (c:2)

end;

writeln;

writeln (k);

readln

end.

Поиск максимального элемента среди минимальных элементов столбцов

Задача:

Дано: целочисленная матрица из n строк и m столбцов.

Найти: максимум из наименьших элементов столбцов.

Алгоритм решения задачи:

Примерный алгоритм решения 1.

  1. Просмотреть каждый столбец. Наименьший элемент каждого столбца сохранить в одномерном массиве.

  2. Найти максимальное значение в одномерном массиве.

Примерный алгоритм решения 2.

  1. Найти наименьший элемент первого столбца и предположить, что он максимальный (записать в переменную).

  2. Найти наименьший элемент второго столбца. Сравнить его с предыдущим наименьшим. Если больше, заменить значение переменной. И т.д.

Программа на языке Паскаль:

const

n = 4; m = 5;

var

matrix: array[1..n,1..m] of integer;

max, min, i, j: integer;

begin

randomize;

for i := 1 to n do begin

for j := 1 to m do begin

matrix[i,j] := random(100);

write(matrix[i,j]:3);

end;

writeln;

end;

max := 0; {максимум среди минимумов}

for j := 1 to m do begin {просмотр столбцов}

min := matrix[1,j]; {предполагаем, что первый в столбце минимален}

for i := 2 to n do {просматриваем столбец построчно}

if matrix[i,j] < min then

min := matrix[i,j]; {замена минимума}

if min > max then

max := min {замена максимума}

end;

writeln(max);

readln

end.