Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2011, 22:17   #1
TaylorGang
 
Регистрация: 14.11.2011
Сообщений: 3
По умолчанию Нужно разобрать готовый алгоритм решения задачи в среде Паскаль

Условие:
Имеется список людей с указанием их фамилии, имени и даты рождения. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять самого старшего человека из этого списка и выводить его фамилию, имя и дату рождения, а если имеется несколько самых старших людей с одинаковой датой рождения, то определять их количество.
На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате:
<Фамилия> <Имя> <Дата рождения>
где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Дата рождения> – строка, имеющая вид ДД.ММ.ГГГГ, где ДД – двузначное число от 01 до 31, ММ – двузначное число от 01 до 12, ГГГГ – четырехзначное число от 1800 до 2100.
Пример входной строки:
Иванов Сергей 27.03.1993
Программа должна вывести фамилию и имя самого старшего человека в списке.
Пример выходных данных:
Иванов Сергей
Если таких людей, несколько, то программа должна вывести их количество. Пример вывода в этом случае:
3

Решение:
Цитата:
Var
N, i, Day, Month, Year, MinDay, MinMonth, MinYear, MinCount,
Code: integer;
Name, MinName: string;
Begin
MinYear:=9999;
{Считываем количество людей}
ReadLn(N);
for i:=1 to N do
begin
{Считываем данные об одном человеке}
ReadLn(Name);
{Извлекаем из строки значения дня, месяца, года рождения}
val(Copy(Name,Length(Name)-9,2),Day,Code);
val(Copy(Name,Length(Name)-6,2),Month,Code);
val(Copy(Name,Length(Name)-3,4),Year,Code);
{Если дата рождения совпадает с наименьшей известной
датой, то увеличиваем счетчик числа людей, имеющих минимальную
дату рождения}
if (Year=MinYear) and (Month=MinMonth) and (Day=MinDay)
then
MinCount:=MinCount+1;
{Если дата рождения меньше минимально известной, то
сохраняем его дату рождения, как минимальное, счетчик числа
людей, имеющих такую дату рождения, устанавливаем в 1, также
запоминаем имя человека}
if (Year<MinYear) or (Year=MinYear) and (Month<MinMonth)
or (Year=MinYear) and (Month=MinMonth) and (Day<MinDay)
then
begin
MinYear:=Year;
MinMonth:=Month;
MinDay:=Day;
MinCount:=1;
MinName:=Copy(Name,1,length(Name)-11)
end
end;
{Если счетчик числа людей, имеющих минимальную дату рождения
больше 1, то выводим значение счетчика, иначе выводим имя
человека}
if MinCount>1
then
WriteLn(MinCount)
else
WriteLn(MinName)
end.
Объясните пожалуйста эту часть, особенно данные (9,2; 6,2; 3,4):

Цитата:
val(Copy(Name,Length(Name)-9,2),Day,Code);
val(Copy(Name,Length(Name)-6,2),Month,Code);
val(Copy(Name,Length(Name)-3,4),Year,Code);

Заранее спасибо!)
TaylorGang вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм решения задачи на графы в С++ Fiamma Помощь студентам 6 06.11.2011 00:11
Нужно решить 3 задачи в среде Паскаль Jalced Помощь студентам 7 03.10.2011 13:59
Алгоритм решения задачи: восстановить прямоугольное стекло из всех имеющихся осколков (Паскаль) JaySee Помощь студентам 0 09.06.2011 21:15
Нужно положить готовый дизайн на готовый сайт! Full87 Фриланс 1 16.12.2009 16:18
2 задачи в среде Паскаль!!! d00ker Помощь студентам 14 29.01.2009 18:14