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

papalamer
Сообщения: 7
Зарегистрирован: 19 ноя 2010, 11:26

Создать файл, содержащий записи о дате: день (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.
Что не так?
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

В первую очередь занеси чтение данных в цикл и посмотри какие параметры у функции pos.
И ты ничего не пишешь в файлы summer.txt и winter.txt - только открываешь для добавления в конец.
Нет религии выше истины
XTen
Сообщения: 59
Зарегистрирован: 05 дек 2009, 15:08

Пиши, реализую
ICQ: 410691984
papalamer
Сообщения: 7
Зарегистрирован: 19 ноя 2010, 11:26

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

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.
Подправил, но в файлы не пишет. Что дальше?
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Переменные d,s,w целочисленного типа, а вы используете их как файловые переменные.
В вашем случаем достаточно 4 переменных: 3-ёх файловых и 1-ой строки.
append убрать;
для чтения из файла в readln нужно указывать файл, из которого читаем;
если в файле данные хранятся в формате dd.mm.yy, то месяц можно взять так: copy(date,4,2)
Нет религии выше истины
papalamer
Сообщения: 7
Зарегистрирован: 19 ноя 2010, 11:26

Переменные я изменил на string. Дата в формате день (1..31), месяц (1..12), год (00..99).
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

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

Условие не я придумал.

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

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.
Компилится без ошибок, но в файлы не пишет.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

[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]
Нет религии выше истины
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

papalamer, называйте темы правильно!
Нет религии выше истины
Ответить