Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачник с исправлением.doc
Скачиваний:
55
Добавлен:
08.05.2015
Размер:
922.62 Кб
Скачать

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;