- •Введение
- •1. Вычисление функций
- •Пояснения к программе
- •Пояснения к программе
- •2. Одномерные массивы
- •3. Матрицы
- •Пояснения к программе
- •4. Обработка текстов
- •Пояснения к программе
- •Пояснения к программе
- •5. Процедуры и функции
- •Пояснения к программе
- •Пояснения к программе
- •Пояснения к программе
- •6. Перечисляемый и диапазонный типы
- •Пояснения к программе
- •7. Записи
- •8. Множества
- •9. Файлы
- •10. Списки
- •Пояснения к программе
- •Пояснения к программе
- •Литература
- •Приложение 1 Комбинации клавиш управления в среде Turbo Pascal
- •Приложение 2 Сообщения об ошибках периода компиляции
- •1. Вычисление функций 5
7. Записи
7.1 Используя следующий фрагмент программы, опишите логическую функцию High (К1, К2 : card; КМ : mast), проверяющую, «бьет» ли карта К1 карту К2, с учетом того, что масть КМ является козырной.
Type
mast = (piki, tref, bubi, chervi);
value = (six, seven, eight, nine, ten, jack, queen, king, ace);
card = record
m : mast;
d : value
end;
7.2 Используя следующий фрагмент программы, опишите перечисленные ниже функции:
Type
field = record
file : (а, b, с, d, e, f, g, h);
horizontal: 1 .. 8
end;
а) функция ХодСлона(f1, f2) проверяет, находится ли фигура с поля f2 под боем у слона, который стоит на поле fl;
б) функция ХодЛадьи(f1, f2, f3) проверяет, может ли ладья за один ход перейти с поля fl шахматной доски на поле f2. Если нет, надо указать промежуточное поле f3, через которое ладья может попасть на поле f2 за два хода;
в) функция ХодКоня(f1, f2) проверяет, можно ли конем с поля f1 объявить шах, если король находится на поле f2;
г) функция ХодФерзя(f1, f2) проверяет, может ли ферзь за один ход перейти с поля fl шахматной доски на поле f2.
7.3 Используя следующий фрагмент программы, найдите самую длинную реку из списка и напечатайте ее название.
Type
river = record
name: string[25];
length : integer
end;
list = array [1..30] of river;
7.4 Используя описание костей домино с помощью типа Domino, проверьте, правильно ли выставлены кости домино в ряду A (равна ли правая цифра очередной кости левой цифре следующей кости).
Program Domino28;
Type
Domino = record
Left, Right : 0 .. 6
end;
rank = array [1..28] of Domino;
Var
A : rank;
i, N : Integer;
f : Boolean;
Begin
Repeat
Writeln('Введите число костей');
readln( N )
Until N in [1..28];
for i := 1 to N do
begin
Repeat
Writeln('левое значение',i:3,'-ой кости');
Readln(A[i].Left)
Until A[i].Left in [0..6];
Repeat
Writeln('правое значение',i:3,'-ой кости');
Readln(A[i].Right)
Until A[i].Right in [0..6]
end;
f := True;
for i := 1 to N-1 do
if A[i].Right <> A[i+1].Left then
begin
f := False;
break
end;
Writeln('Введенный ряд');
for i := 1 to N do
write(A[i].Left,':',A[i].Right,' ');
Writeln;
if f then Writeln('Правильный ряд')
else Writeln('Неправильный ряд')
End.
7.5 Используя следующий фрагмент программы, опишите перечисленные ниже функции:
Type
name = (Аня, Валя, Женя, Петя, Саша, Таня, Шура, Юра);
information = record
pol : (man, woman);
height : 140..200
end;
group = array [name] of information;
а) функция СредРост( ГР ) определяет средний рост женщин из группы ГР;
б) функция Высокий( ГР ) определяет имя самого высокого мужчины из группы ГР;
в) логическая функция ОдинРост( ГР ) проверяет, есть ли в группе ГР хотя бы два человека одинакового роста.
7.6 Используя следующий фрагмент программы, опишите процедуру ИронияСудьбы( С ), которая печатает фамилии двух (любых) жителей из списка С, живущих в разных городах по одному адресу.
Type
citizen = record
last_name, city : string[20];
address : record
street : string[20];
house, apartment : 1..999
end
end;
Var
list : array [1..15] of citizen;
7.7 Используя следующий фрагмент программы, опишите перечисленные ниже процедуры:
Type
data = record
number : 1..31;
month : 1..12;
year : 1901..1997
end;
form = record
last_name : string[20];
pol : (man, woman);
birthday : data
end;
group = array[1..25] of form;
a) процедура Старший(Гр, Фам) присваивает строке Фам фамилию самого старшего мужчины из группы Гр (считать, что такой есть и он единственный);
б) процедура Печать(Гр, Бук) печатает все фамилии людей из группы Гр, начинающиеся с литеры Бук, и даты рождения этих людей.
7.8 В массиве содержится информация о зимней сессии. Сведения о каждом студенте содержат следующие данные: фамилию (до 12 символов), номер группы (от 1 до 7), оценки по трем предметам (математика, физика и программирование). Напишите программу, которая вводит эту информацию и печатает следующие данные:
a) фамилии студентов, имеющих задолженность хотя бы по одному предмету;
б) процент студентов, сдавших все экзамены на 5 и 4;
в) название предмета, который был сдан лучше всего;
г) номера групп в порядке убывания средней успеваемости их студентов.
7.9 Сведения о студентах вуза записаны в массиве и содержит следующую информацию: фамилия, имя, отчество, пол (М или Ж), возраст (от 16 до 35), курс (от 1-го до 5-го). Напишите программу, которая вводит эту информацию и печатает следующие данные:
a) номер курса, на котором наибольший процент мужчин;
б) самые распространенные мужские и женские имена;
в) фамилии (в алфавитном порядке) и инициалы всех студенток, возраст и отчества которых являются одновременно самыми распространенными.
7.10 Используя следующий фрагмент программы, опишите перечисленные ниже подпрограммы:
Type
fraction = record
numerator : integer;
denominator : 1..maxint
end;
massif = array[1..20] of fraction;
а) логическая функция Равно(a, b) сравнивает два рациональных числа а и b;
б) процедура Слож(a, b) складывает рациональные числа а и b;
в) процедура Сокр(z) приводит рациональное число z к несократимому виду;
г) процедура Мах(x, m) присваивает параметру m наибольшее из рациональных чисел массива х.
7.11 Используя следующий фрагмент программы, опишите процедуры для вычисления значения квадратного трехчлена y = ах2 + bх + с в точке х, при условии, что a, b, c, x относятся к типу complex.
Type
complex = record
re, im : real
end;
7.12 Используя следующий фрагмент программы, опишите процедуры для преобразования координат точки на плоскости из декартовых координат в полярные и наоборот из полярных в декартовы.
Type
decart = record
x, y : real
end;
polyar = record
r, fi : real
end;
7.13 Используя следующий фрагмент программы и считая, что все даты даются по григорианскому календарю (в «новом стиле»), опишите перечисленные ниже функции:
Type
data = record
number : 1..31;
month : 1..12;
year : 1901..1997
end;
week = (пн, вт, ср, чт, пт, сб, вс);
a) функция ПослЧисло(d) вычисляет количество дней в том месяце, которому принадлежит дата d;
б) логическая функция ВернаяДата(d) проверяет правильность даты d;
в) функция ЧислоДней(d) подсчитывает, сколько дней прошло с 1 января 1-го года нашей эры до даты d;
г) функция ДеньНедели(d) предназначена для определения дня недели, на который приходится дата d (учтите, что 1 января 1-го года нашей эры было понедельником);
д) функция Пятница13 (d) определяет количество дней в году y, которые были пятницами 13-го числа.
7.14 Пусть дан массив, содержащий даты. Каждая дата — это число, месяц, год (см. описание типа data в предыдущем задании). Найти:
a) год с наименьшим номером;
б) все весенние даты;
в) самую позднюю дату.
7.15 Используя следующий фрагмент программы, найдите наибольшее расстояние (D) между точками, рассматривая элементы массива М как координаты точек на плоскости:
Type
Point = Record
х, у : Real
end;
Var
М : Array [1..40] of Point;
D : Real;