Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Кристинка3
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 13
1

Упорядочить список именинников по месяцу

12.03.2016, 10:26. Просмотров 885. Ответов 11
Метки нет (Все метки)

в текстовом файле даны фио и дата рождения учеников.Упорядочить их по месяцу,а если месяцы равны-то по числу.вывод осуществлять в текстовый файл.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2016, 10:26
Ответы с готовыми решениями:

Упорядочить список студентов по среднему баллу
я бы не назвал их сложными но что то не получается здесь 3 задачки Процедуры...

Упорядочить список абитуриентов по среднему баллу аттестатов
Упорядочить список абитуриентов по среднему баллу аттестатов и распечатать его....

Упорядочить список студентов за датой рождения и напечатать его
Уважаемые форумчани. Первый раз прошу помощи такого рода. Но в жизни бывает...

Упорядочить список элементов 2 группы периодической системы в алфавитном порядке
помогите!!!!!!!!!!!!!!1

Упорядочить список студентов по году рождения, используя записи, и распечатать его
упорядочить список студентов по году рождения используя записи и распечатать...

11
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26130 / 17523 / 6949
Регистрация: 22.10.2011
Сообщений: 30,859
Записей в блоге: 6
12.03.2016, 12:33 2
Уже было: Формирование упорядоченного списка юбиляров (из текстового файла)
0
Кристинка3
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 13
13.03.2016, 15:12  [ТС] 3
в файл запись не идет.а мне надо отсортировать и в файл записать
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26130 / 17523 / 6949
Регистрация: 22.10.2011
Сообщений: 30,859
Записей в блоге: 6
13.03.2016, 15:28 4
Великая проблема прямо:
Pascal
1
2
3
4
5
begin
  WriteAllText('output.txt', string.Join(NewLine, ReadAllLines('input.txt').
    OrderBy(s -> s.Substring(s.LastIndexOf(' ')).Split('.')[1]).
    ThenBy(s -> s.Substring(s.LastIndexOf(' ')).Split('.')[0])));
end.
1
Кристинка3
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 13
13.03.2016, 16:55  [ТС] 5
спасибки

Добавлено через 13 минут
у меня не работает(
файл у меня вот такого содержания
иванов иван иванович 02.08.1996 20 лет

Добавлено через 40 минут
а на выходе должен получится
фио дата рождения возраст
иванов иван иванович 02.08.1996 20 лет
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26130 / 17523 / 6949
Регистрация: 22.10.2011
Сообщений: 30,859
Записей в блоге: 6
13.03.2016, 17:35 6
Лучший ответ Сообщение было отмечено Кристинка3 как решение

Решение

То есть, ты хочешь из файла
Муконин А Э 12.02.1979 37 лет
Фомина Н Д 06.02.1966 50 лет
Амилаханов Н А 27.09.1956 59 лет
Исмаилов А Х 04.12.1972 43 года
Осипов В В 08.05.1987 28 лет
сделать
Фомина Н Д 06.02.1966 50 лет
Муконин А Э 12.02.1979 37 лет
Осипов В В 08.05.1987 28 лет
Амилаханов Н А 27.09.1956 59 лет
Исмаилов А Х 04.12.1972 43 года
? Вот так попробуй:
Pascal
1
2
3
4
5
6
7
8
9
function sDate(s : string) : string;
begin 
  var v := s.Split(' ').ToArray(); result := v[v.Length - 3];
end;
 
begin
  WriteAllText('output.txt', string.Join(NewLine, ReadAllLines('input.txt').
    OrderBy(s -> sDate(s).Split('.')[1]).ThenBy(s -> sDate(s).Split('.')[0])));
end.
У меня только что отработало.
0
Кристинка3
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 13
13.03.2016, 18:06  [ТС] 7
где я ошибаюсь?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
program ybilari;
function sDate(s : string) : string;
begin 
  var v := s.Split(' ').ToArray(); result := v[v.Length - 3];
end;
  var f,t:text;
      s,sg,sm,sd,slet,s1,stgod,imyf:string;
      tgod,let,god,ly,p,k:integer;
begin
k:=0; 
 repeat
   write('Введите год ');readln(tgod);
   writeln('Результ смотрите в файле s_ybilari_'+tgod+'.txt');
 until tgod>=1900;
 assign(f,'C:\1\spisok.txt');reset(f);
 stgod:=inttostr(tgod);
 imyf:='C:\1\s_ybilari_'+stgod+'.txt';
 assign(t,'C:\1\sortirovka.txt');rewrite(t);
 while not eof(f) do
 begin
  readln(f,s);
  s1:='.';
  p:=pos(s1,s);
  sg:=copy(s,p+4,4);
  sm:=copy(s,p+1,2);
  sd:=copy(s,p-2,2);
  god:=strtoint(sg);
  let:=tgod-god;
  ly:=let mod 10;
  if (ly=5) or (ly=0)
    then begin
         k:=k+1;
         slet:=inttostr(let);
         writeln(t,s,'   ', slet,'лет');
         end;  
 end;
 WriteAllText(imyf, string.Join(NewLine, ReadAllLines('C:\1\psortirovka.txt').
    OrderBy(s -> sDate(s).Split('.')[1]).ThenBy(s -> sDate(s).Split('.')[0])));
 if k=0 then begin writeln(t,'Юбиляров на ',tgod,' нет');writeln('Юбиляров на ',tgod,' нет');end;
 close(t);close(f);
end.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26130 / 17523 / 6949
Регистрация: 22.10.2011
Сообщений: 30,859
Записей в блоге: 6
13.03.2016, 18:15 8
Пишешь в один файл (C:\1\sortirovka.txt), читать пытаешься из другого (C:\1\psortirovka.txt)
0
Кристинка3
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 13
13.03.2016, 22:48  [ТС] 9
а если у меня списоке пробелов между фио и датой разное количество
как тут быть?
0
Sergio Leone
2467 / 1112 / 579
Регистрация: 07.06.2014
Сообщений: 3,259
13.03.2016, 22:54 10
Цитата Сообщение от Кристинка3 Посмотреть сообщение
а если у меня список вот такой:
Иванов Иван иванович 20.03.1998 12 лет
Петров Петр Петрович 21.01.1999 11 лет
Сидоров Иван Иваныч 23.04.1997 13 лет
как тут быть?
а что не так?
после упорядочивания по месяцу у тебя должно быть:
Петров Петр Петрович 21.01.1999 11 лет
Иванов Иван иванович 20.03.1998 12 лет
Сидоров Иван Иваныч 23.04.1997 13 лет
0
Кристинка3
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 13
13.03.2016, 23:04  [ТС] 11
в моем списке между фио и датой стоит разное количество пробелов и из-за этого не работает(если я между фио и датой ставлю 1 пробел то работает
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26130 / 17523 / 6949
Регистрация: 22.10.2011
Сообщений: 30,859
Записей в блоге: 6
14.03.2016, 00:35 12
Моему коду все равно, сколько там пробелов между ФИО и датой. Главное, чтобы между датой и возрастом был один пробел, и слово "лет" отделялось тоже одним пробелом. Но если написать функцию вот так:
Pascal
1
2
3
4
function sDate(s : string) : string;
begin 
  var v := s.ToWords(); result := v[v.Length - 3];
end;
- то и количество пробелов будет неважно.
1
14.03.2016, 00:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2016, 00:35

Упорядочить список студентов по году рождения, и распечатать его в виде таблицы (дополнить код)
Вообщем вот задание: Составить список учебной группы, включающей 25 человек....

Как исправить сортировку по месяцу?
WriteAllText('C:\1\psort.txt', string.Join(NewLine,...

День недели по числу и месяцу.
Похожих решение нашел массу, одно из них на этом же форуме. Например:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru