Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Пояснения к программе. В основе программы лежит обычный алгоритм поиска максимума, использование перечисляемых типов Club и Seson позволяет сделать программу наиболее удобочитаемойВ основе программы лежит обычный алгоритм поиска максимума, использование перечисляемых типов Club и Seson позволяет сделать программу наиболее удобочитаемой. Также легко реализуется пропуск января при подсчете очков. Единственная проблема состоит в том, что значения перечисляемого типа нельзя использовать в процедурах ввода и вывода. Поэтому для вывода клуба-победителя используется стандартный прием — вывод с применением оператора-варианта. program Champion; Type Club = (Inter, Roma, Napoli, Juventus, Fiorentina, Sampdoria, Milan); Seson = (sep, oct, nov, dec, feb, mar, apr, may); Var V, Pr: Club; {клубы победитель и претендент} Mes: Seson; {месяц футбольного чемпионата} K, S, Max: Integer; {переменные для работы с очками} Begin Max:= -1; Writeln('Введите очки клубов'); {внешний цикл по клубам, для каждого клуба вводятся очки, набранные за сезон} for Pr:= Inter to Milan do Begin Writeln('клуб №', ord(Pr) + 1:2); S:= 0; {внутренний цикл по месяцам} for Mes:= sep to may do Begin Read(K); S:= S + K end; {поиск клуба с максимальным числом очков} if S > Max then Begin V:= Pr; Max:= S End end; {вывод клуба – чемпиона} Write('Победитель чемпионата клуб '); case V of Inter: Write('Интер'); Roma: Write('Рома'); Napoli: Write('Наполи'); Juventus: Write('Ювентус'); Fiorentina: Write('Фиорентина'); Sampdoria: Write('Сампдория'); Milan: Write('Милан') end; Writeln(' с результатом ', Max: 2, ' очков') End. 6.11. В следующем фрагменте программы определите новый курс К2 корабля, если корабль сначала шел по курсу К1, а затем его курс был изменен согласно приказу ПР. Type курс = (СЕВЕР, ВОСТОК, ЮГ, ЗАПАД); приказ = (ВПЕРЕД, ВЛЕВО, ВПРАВО, НАЗАД); Var Kl, К2: курс; ПР: приказ; 6.12. В следующем фрагменте программы переменной t присвойте значение true, если тройка у, m, d образует правильную дату, и значение false в противном случае (например, 31 июня и т. п.). Type месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек); Var у: 1900..2000; m: месяц; d: 1..31; t: boolean; 6.13. В следующем фрагменте программы по дате d, m, у определите дату следующего дня — dl, ml, yl. Type месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек); Var d, dl: 1..31; m, ml: месяц; у: 1901..2000; yl: 1901..2001; 6.14. Используя описания из предыдущего задания: a) определите k — порядковый номер того дня високосного года, который имеет дату d, m; б) определите d, m — дату k-гo по счету дня високосного года. 6.15. Пусть дан фрагмент программы: Type число = 1..31; месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек); день_недели = (вс, пн, вт, ср, чт, пт, сб); Var d: число; m: месяц; k: 0..12; wdl, wd: день_недели; Считая, что год високосный и его 1 января приходится на день недели wdl, определите: a) wd — день недели, на который приходится день с датой d, m; б) k — количество понедельников в году, приходящихся на 13-е число. 6.16. Пусть значение функции f(n) равно количеству букв в записи числа n русскими словами f(l)=4 (один), f(3)=3 (три), f(42)=8 (сорок два) и т. п. Напечатайте все натуральные числа n, меньшие 100, для которых f(n)= n. 6.17. В старояпонском календаре был принят 60-летний цикл, состоявший из пяти 12-летних подциклов. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый, черный. Внутри каждого подцикла года носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи (1984 год — год зеленой крысы — был началом очередного цикла). Напишите программу для ввода номера некоторого года нашей эры и вывода его названия по старояпонскому календарю. 6.18. Напечатайте календарь заданного месяца 2005 года, зная, что 1 января 2005 года — суббота. 6.19. Пусть число записано римскими цифрами: М — 1000, D — 500, С — 100, L — 50, X — 10, V — 5, I — 1. Выведите его запись арабскими цифрами. 6.20. Пусть на шахматной доске заданы два поля: р1 и р2. Определите, какая из шахматных фигур при установке на поле р1 бьет фигуру, стоящую на поле р2. Координаты на шахматной доске определяются по горизонтали от а до h и по вертикали от 1 до 8. Белые фигуры двигаются от 8-й горизонтали к 1-й, а черные — от 1-й к 8-й. 6.21. По дате (месяц и день) рождения определите знак Зодиака (соответствие знаков Зодиака временным интервалам см. в задаче 4.41).
Записи
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;
|