Задачи для самостоятельного решения




Старшая Free Структурированный тип ЗАПИСЬ 25.11.2017

При решении задач обработки большого количества данных используются массивы. Но при работе с массивами основное ограничение заключается в том, что все элементы массива должны быть одного типа. Иногда для решения задач возникает необходимость хранить и обрабатывать комбинации данных различных типов.

Запись – тип данных, состоящий из фиксированного количества компонентов одного или нескольких типов, называемых полями записи. Чтобы можно было ссылаться на тот или иной компонент записи, каждое поле имеет своё имя.

Записи можно объявить следующим способом:

Общий вид: Пример:
Type имя типа = record имя поля 1: тип поля 1; имя поля 2: тип поля 2; имя поля N: тип поля N; end; Var имя переменной: имя типа; Type BirthDay = record fam, name: string[20]; day, month: byte; year: word; end; Var a: array[1..100] of BirthDay; {описан массив записей из 100 элементов}

Компоненты (поля), входящие в состав записи, могут быть простыми переменными, множествами, массивами, записями.

Обращение к значению поля осуществляется с помощью конструкции, содержащей имя переменной и имя поля, разделенных точкой. Такая комбинация называется составным именем. Чтобы получить доступ к полям массива записей А, описанного выше, надо записать:

A[20].name, A[i].day и т. д.

Значения полей записи используются в выражениях, полям записи присваиваются значения, например, A[20].fam:=’Иванов’. Составные имена используются при вводе и выводе значений полей.

 

Пример. Построить массив записей из полей: фамилия, имя человека, дата его рождения (число, месяц, год). Определить: а) количество людей, родившихся 5 числа; б) фамилии и имена людей, у которых год рождения заканчивается на 0 или 5.

 

Type BirthDay = record

fam, name: string[20];

day, month: byte;

year: word;

end;

Var a: array[1..100] of BirthDay;

i,n,k,k1:byte;

 

BEGIN

write(‘Введите количество записей ‘);

Доступ к отдельным полям записи значительно упрощается при использовании оператора присоединения with: with a[i] do begin readln(fam); readln(name); readln(day); readln(month); readln(year); end;
readln(n);

 

for i:=1 to n do

begin

readln(a[i].fam);

readln(a[i].name);

readln(a[i].day);

readln(a[i].month);

readln(a[i].year);

end;

k:=0;

writeln(‘Фамилии и имена людей, у которых год рождения заканчивается на 0 или 5’);

for i:=1 to n do

with a[i] do

begin

if day=5 then inc(k);

if (year mod 10=0) or (year mod 10=5) then writeln(fam, ' ', name);

end;

writeln(‘Количество людей, родившихся 5 числа =’, k);

END.

Задачи для самостоятельного решения

1. Дан массив записей с информацией об итогах зимней сессии студентов-первокурсников: фамилия, номер группы (целое число), оценки по трем предметам (математике, физике, программированию). Определить:

а) фамилии студентов, имеющих задолженность (0, 1, 2) хотя бы по одному предмету;

б) «качество» успеваемости, т.е. процент студентов, сдавших экзамены на 6 и выше;

в) название предмета, который был сдан лучше всего.

 

2. Дан массив записей о работниках предприятия следующей структуры: табельный №, ФИО, начислено, аванс, подоходный налог, сумма к выдаче. Найдите и выведите:

а) фамилии работников предприятия, заработная плата которых больше N у. е.;

б) табельные номера работников с наибольшим и наименьшим подоходными налогами.

 

3. Дан массив записей следующей структуры: фамилия школьника, имя школьника, факультативы (математика, физика, информатика). Поля мат., физ., инф. имеют логический тип, где true определяет посещение соответствующего факультатива, а false отрицает это утверждение. Определите:

а) какое количество школьников посещает факультатив по информатике;

б) фамилии и имена школьников, которые не посещают факультативов по физике или математике.

 

4. Дан массив записей следующей структуры: № автобуса; день, месяц, год и время отправления его со станции Бобруйск; количество мест в автобусе; количество свободных мест; стоимость проезда. Время отправления – это дробное число в формате ЧЧ.ММ. Определите:

а) номера автобусов, отправляющихся позже 16.00;

б) номера автобусов, у которых время отправления (часы) совпадает с количеством свободных мест;

в) выручку автостанции Бобруйск за определенный день (дата вводится с клавиатуры).

 

5. Дан массив записей следующей структуры: фамилия, имя, возраст и рост человека. Расположите записи:

а) в порядке возрастания возраста;

б) в алфавитном порядке фамилий.

 

ВНИМАНИЕ! Для решения последней задачи надо знать, что допускается присваивание значения одной записи другой, если они имеют один и тот же тип:

Type BirthDay = record

fam, name: string[20];

day, month: byte;

year: word;

end;

Var a: array[1..100] of BirthDay;

B: BirthDay;

B:=a[i];


Contest “Tom & Jerry” by MogilevRegionTeam

Last day for Testing: 08.12.2017

Don’t loosing your chance to give some points! Good luck!

Задача A. Ограбление

Входные данные crime.in
Выходные данные crime.out
Ограничение по времени 1 секунд
Ограничение по памяти 64 МБ

 

В одном маленьком далёком доме, где-то на краю Галактики, сражаются две могущественные силы за право стать владельцем этого дома: маленькая рыжая мышь Джерри и большой серый кот Том.

Маленькая оппозиция решила захватить власть в стране доме. Для этого Джерри решил захватить у Тома провизию и тем самым заставить кота отдать ему власть.

У Тома в секретной кладовке лежат рыбки двух типов: форель и сёмга. Именно этим обычно и питается властный кот. Даже если Джерри и украдёт рыбу, кот найдет рыбу по запаху. Поэтому предприимчивый мышонок решил завернуть всю рыбу в фольгу одинаковых размеров. Но вот беда: мышка не умеет считать, а рыбы много. Поэтому он призвал на помощь вас, Серого Кардинала, чтобы вы, используя свои способности, помогли мышке с его задачей.

Входные данные

Во входных данных в двух строках даётся два натуральных числа: A и B – количество рыбок в каждой кучке.

Выходные данные

В единственной строке выведите единственное натуральное число: количество рыбок, которое нужно упаковать Джерри.

Примеры:

crime.in crime.out
   
   

 


Задача B. Декодер

Входные данные decoder.in
Выходные данные decoder.out
Ограничение по времени 1 секунд
Ограничение по памяти 64 МБ

Несмотря на все ваши старания с выведением новых модификаторов, вас закинуло назад в будущее. Опечаленные таким поворотом событий, вы вышли наружу, чтобы осмотреть машину времени и придумать что-нибудь, что может вам помочь в вашей ситуации.

К вашему удивлению, вы обнаружили двух роботов, которые жестами и эмоциями попытались вам что-то сказать. Вы не могли понять, что они говорят, но решили использовать ваш декодер двоичных чисел. К сожалению, понять вы смогли только одного робота. Первый робот представился Бипом, а второго представил Пипом. Кое-как объяснив ему вашу проблему, вы узнали, что второй робот говорит на восьмеричной системе счисления, и поэтому не может участвовать в разговоре. Также Бип рассказал, что Пип может вам помочь с вашей проблемой, но вам нужно говорить с ним напрямую, так как все, что скажет Бип, может быть искажено. Поэтому перед вами стоит задача перенастроить свой декодер на восьмеричную систему.

Вам дан текст речи Пипа, представляющий число в двоичной системой счисления. Для корректной работы декодера вам нужно перевести это число в восьмеричную систему счисления.

Входные данные

В первой строке входных данных дано натуральное число N – длина текста Пипа.

Во второй строке входных данных дан текст Пипа S, являющийся корректным числом в двоичной системе счисления.

Выходные данные

В единственной строке выведите число – S в восьмеричной системе счисления.

Пример

decoder.in decoder.out
   
   

Примечания:

Пример первый:

Пример второй:

Задача C. Диверсант

Входные данные divers.i
Выходные данные divers.o
Ограничение по времени 2 секунды
Ограничение по памяти 64 МБ

Сидя, за своим столом с кружкой чая в это холодное утро, вы обнаружили, что сова принесла вам письмо. Не так уж много существ знает вас, и ещё меньше имеет возможность послать сову. Заинтересованные таким неожиданным поворотом судьбы, вы открываете письмо. Вот что в нем изложено:

"Вижу, вы сделали свой ход, Кардинал. Несмотря на то, что вы играете на две стороны, отказаться от ваших услуг было бы глупо. Вы думаете, я бы не узнал о вашей помощи Котовскому двору? Вы меня недооценили. Но перейдем к делу. Мои пташки донесли, что среди солдат противника есть те, кто недоволен правлением Его Котейшества. Чтобы подавить волю этих солдат, Его Котейшество каждый день расставляет их произвольным образом. Я достал бумаги, по которым можно понять, что в следующий раз он расставит солдат в порядке не возрастания их номеров. У меня также есть их текущий список и позиция, на которой окажется диверсант после следующей перестановки. Я прошу вас проанализировать данные и указать местоположение дезертира. Если вы не справитесь, то я убью всю вашу семью, а вас навечно запру в темнице."

Входные данные: В первой строке входных данных через пробел задаются два натуральных числа N и K – размер текущего списка солдат A и позиция, на которой окажется диверсант после следующей перестановки. Во второй строке входных данных находится N чисел – номера солдат из списка A.

Выходные данные

В единственной строке выходных данных выведите единственное целое число – номер солдата, который окажется на k-ой позиции после следующей перестановки Его Котейшества.

Примеры:

divers.i divers.o
5 2 1 3 7 9 4  
7 6 11 7 9 4 2 5 7  

Примечание:

В первом примере после следующей перестановки Его Котейшества список солдат будет выглядеть так:

9 7 4 3 1

И на 2-ой позиции окажется солдат под номером 2.

Во втором примере список будет выглядеть так:

11 9 7 7 5 4 2

На 6-ой позиции окажется солдат под номером 4.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: