Страница 1 из 2

Задача на Паскале.

Добавлено: 19 ноя 2010, 12:37
papalamer
Создать файл, содержащий записи о дате: день (1..31), месяц (1..12), год (00..99). Переписать этот файл в два текстовых файла, дату представить в форме дд.мм.гг. В одну строку включить одну дату. В один текстовый файл включить даты для летних месяцев, в другой – для зимних.

Код: Выделить всё

program Lr3;
uses crt;
     var
     date,summer,winter : text;
     d,s,w : integer;
     begin
          assign(d, 'date.txt');
          rewrite(s, 'summer.txt');
          rewrite(w, 'winter.txt');
          assign(s, 'summer.txt');
          assign(w, 'winter.txt');
          reset(d);
              while not EOF do readln(date)
              begin
                  if pos(.1. or .2. or .12.) then append(w)
                  if pos(.6. or .7. or .8.) then append(s)
              end;
                  readln(s);
                  readln;
           close(d);
           close(s);
           close(w);
      end.
Что не так?

Re: Задача на Паскале.

Добавлено: 19 ноя 2010, 14:10
dr.Jekill
В первую очередь занеси чтение данных в цикл и посмотри какие параметры у функции pos.
И ты ничего не пишешь в файлы summer.txt и winter.txt - только открываешь для добавления в конец.

Re: Задача на Паскале.

Добавлено: 19 ноя 2010, 15:38
XTen
Пиши, реализую
ICQ: 410691984

Re: Задача на Паскале.

Добавлено: 20 ноя 2010, 22:22
papalamer

Код: Выделить всё

program Lr3;
uses crt;
     var
     date,summer,winter : text;
     d,s,w : string;
     begin
          assign(date, 'date.txt');
          assign(summer, 'summer.txt');
          assign(winter, 'winter.txt');
          rewrite(summer);
          rewrite(winter);
          reset(date);
          append(winter);
          append(summer);
              while not EOF(date) do
              begin
                   readln(d);
                  if pos('..',d) = (12 or 1 or 2) then writeln(winter);
                  if pos('..',d) = (6 or 7 or 8) then writeln(summer);
              end;
           close(date);
           close(summer);
           close(winter);
      end.
Подправил, но в файлы не пишет. Что дальше?

Re: Задача на Паскале.

Добавлено: 20 ноя 2010, 23:31
dr.Jekill
Переменные d,s,w целочисленного типа, а вы используете их как файловые переменные.
В вашем случаем достаточно 4 переменных: 3-ёх файловых и 1-ой строки.
append убрать;
для чтения из файла в readln нужно указывать файл, из которого читаем;
если в файле данные хранятся в формате dd.mm.yy, то месяц можно взять так: copy(date,4,2)

Re: Задача на Паскале.

Добавлено: 20 ноя 2010, 23:49
papalamer
Переменные я изменил на string. Дата в формате день (1..31), месяц (1..12), год (00..99).

Re: Задача на Паскале.

Добавлено: 21 ноя 2010, 00:03
dr.Jekill
papalamer писал(а):Переменные я изменил на string.
а зачем? нужно три файловых переменных - у вас они описанны:
date ,summer,winter : text]Дата в формате день (1..31), месяц (1..12), год (00..99).[/QUOTE]
А это что? :
papalamer писал(а):дату представить в форме дд.мм.гг.

Re: Задача на Паскале.

Добавлено: 21 ноя 2010, 00:14
papalamer
Условие не я придумал.

Код: Выделить всё

program Lr3;
uses crt;
     var
     date,summer,winter : text;
     d : string;
     begin
          assign(date, 'd:\date.txt');
          assign(summer, 'summer.txt');
          assign(winter, 'winter.txt');
          rewrite(summer);
          rewrite(winter);
          reset(date);
          while not EOF(date) do
              begin
                  read(date,d);
                  if pos('..',d) = (12 or 1 or 2) then writeln(winter);
                  if pos('..',d) = (6 or 7 or 8) then writeln(summer);
              end;
           close(date);
           close(summer);
           close(winter);
      end.
Компилится без ошибок, но в файлы не пишет.

Re: Задача на Паскале.

Добавлено: 21 ноя 2010, 00:41
dr.Jekill
[syntax='pascal']
while not eof(date) do
begin
readln(date,d);
d:=copy(d,4,2);
if (d='12') or (d='01') or (d='02') then
writeln(winter,d);
if (d='06') or (d='07') or (d='08') then
writeln(summer,d);
end;
[/syntax]

Re: Задача на Паскале.

Добавлено: 21 ноя 2010, 00:43
dr.Jekill
papalamer, называйте темы правильно!