помогите пожалуйста доделать задачу. дан файл содержащий различные даты, каждая дата это число, месяц и год. найти а) весенние даты-эту я уже сделал, можно по ней найти? б) б)самую позднюю дату
Code
program n6; uses crt; var f: text; s: string[10]; m, g: integer; begin clrscr; textcolor(14); writeln('і vesenie dati і '); assign(f, 'c:\dates.txt'); reset(f); while not eof(f) do begin readln(f, s); val(copy(s, 4, 2), m, g); if (m >= 3) and (m <= 5) then writeln(s); end; close(f); readln; end.
uses crt; var f:text; s:string; Gd,dn,g,m:integer; Maxgd,maxm,maxdn,maxg:integer; begin clrscr; assign (f, 'c:\dates.txt'); reset(f); Maxgd:=0;maxm:=0;maxdn:=0; while not eof(f) do begin readln(f, s); val(copy(s, 1, 6), gd, g); val(copy(s, 2, 2), m, dn); val(copy(s, 7, 4), m, g); if gd >maxgd then {сравниваем год} begin maxgd:=gd; maxm:=m; maxdn:=dn; end else if (gd=maxgd)and(m>maxm) then {если года равны, сравниваем месяц} begin maxm:=m; maxgd:=gd; maxdn:=dn; end else if (gd=maxgd)and(m=maxm)and(dn>maxdn) then {если и месяцы равны, сравниваем дни} begin maxdn:=dn; maxm:=m; maxgd:=gd; end; end; writeln('Samaia pozdnja data: ',maxdn,' ',maxm,' ',maxg); close(f); readln; end.
я не понимаю как делать, может кто знает?
Code
val(copy(s, 1, 6), gd, g); val(copy(s, 2, 2), m, dn); val(copy(s, 7, 4), m, g);
Уточните ещё 1 момент. Как хранятся даты в файле? А именно: 1) Сколько дат может хранится в одной строке?(одна, две, сколько угодно). 2) В каком формате они хранятся? (строка "12.06.2003", числа через пробел "12 06 2003", или это по желанию?). Просто ваш код выглядит довольно абсурдно и мне кажется, что вы идёте не в том направлении. Скажем дружно- нафиг нужно!
Идиотское задание, это называется: "мне не надо, чтоб вы чему-то научились, мне надо, чтоб вы задолбались". Для задания "б" предлагаю вам ввести функцию, которая будет возвращать true, если первая дата больше второй, выглядеть она будет примерно так:
Code
function CmpDate(a,b:string):boolean; var Date1,Date2:word; Stuff:integer; begin Val(Copy(a,7,4),Date1,Stuff); Val(Copy(a,7,4),Date2,Stuff); if Date1>Date2 then CmpDate:=true else if Date1<Date2 then CmpDate:=false else begin Val(Copy(a,4,2),Date1,Stuff); Val(Copy(a,4,2),Date2,Stuff); if Date1>Date2 then CmpDate:=true else if Date1<Date2 then CmpDate:=false else begin Val(Copy(a,1,2),Date1,Stuff); Val(Copy(a,1,2),Date2,Stuff); if Date1>Date2 then CmpDate:=true else CmpDate:=false; end; end; end;
Теперь задача сведётся к нахождению максимального элемента в файле. Часть "а" совсем простая, там нужно прочитать строку(s), проверить, что (s[5]>='3') and (s[5]<='5'), если выполнится, то выводим строку на экран. Если вопросы остались, то пишите. P.S. помните, что число и месяц должны занимать по две позиции! Не "1.2.2003", а "01.02.2003". Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Пятница, 18.04.2008, 01:05