Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Помоги разобраться, что я пишу не так? 
:(
    Опции темы
Logree
Дата 23.3.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



требуется следущее

В файле содержатся различные даты. Каждая дата - это число, месяц и год. В новый файл переписать все даты, которые предшествуют заданной. Выдать на печать те даты, которые приходятся на високосные года.

я написал вот что

Код

program n13;
Const manth:array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31); {Создаем потояный массив из 12 эл и 
                                                                                 присваеваем каждому эл значения}
var f:text; {Объявляем переменную -связку с файлом}
    d,m,y:integer;

function is_v(year:integer):boolean; {Функция проверяет является ли год високосным или нет если да то возвращаем true иначе false}
var t:boolean;
Begin
    if (year mod 4=0) and
       ((year mod 100<>0) or
       (year mod 400 =0)) then
        t:=true
    else
        t:=false;
End;

procedure make_file(var f:text);  {Процидура создает файл(source.txt) и заполняет его значениями}
var yyyy,c,
    m,year,
    d:integer;
Begin
  year:=2006;     {начинаем с этого года}

    ReWrite(f);   {Разрешение на запись в файд f}

    for yyyy:=year to year+5 do            {В 3-х вложенных циклах формеруем дату}
    for m:=1 to 12 do begin
        c:=0;                              {обнуляем С}
        if is_v(yyyy) and (m=2) then c:=1; {Если год високосный и месяц февраль то количество дней будет 29
                                                                       (manth[m]+c = 28+1) иначе 28 (28+0)}
        for d:=1 to manth[m]+c do begin
            write(f,d,m,yyyy);             {записываем сформир дату}
            writeln(f);                    {переход на новую строку}
        end;
    end;
End;

procedure poisk(var f:text;dd,mm,yy:integer); {функция читает файл(source.txt) и если дата в файле меньше даты 
                                               указанной пользователем то записывыет ей  в файл (res.txt) если 
                                               при том год является високосным то  выводит дату на экран}
var nf:text;
    d,m,yyyy:integer;
Begin
    ReSet(f);             {Разрешение на чтение файла source.txt }
    Assign(nf,'res.txt'); {связываем  файл с указателем на него}
    ReWrite(nf);          {разрешение записывать в файл res.txt }

    while not Eof(f) do begin      {Пока файл не кончится считывам из файла source.txt данные и сверяем их с условием}
        read(f,d,m,yyyy);
        if (d<dd) and
           (m<=mm) and
           (yyyy<=yy) then begin

            if is_v(yyyy) then writeln(d,'/',m,'/',yyyy); {если год високосный то выводим на экран дату}
            write(nf,d,m,yyyy);                           {записываем  данные в новый файл если они уд условию}
            writeln(nf);
        end;
    end;
    Close(nf); {закрываем файл}
End;

BEGIN
    ASSIGN(f,'source.txt'); {связываем  файл с указателем на него}

    make_file(f);           {Передаем указатель  в функцию создающюю файл}
    writeln('d m yyyy');
    read(d,m,y);
    poisk(f,d,m,y);         {Передаем указвнную дату в функцию ищющюю дыты меньшие данной}

    CLOSE(f);               {закрываем файл}
    readln;
END.




вообще на паскале я не пишу, но тут попросили, и поэтому я плохо понимаю как он работает с файлами
на мой взгляд проблема именно в этом... то ли  я не так  считываю толи записываю неправилтно...

И еще вопросик  где можно посмотреть какие нибудь малоиспользуемые но полезные конструкции,функции и т д  в паскале..

Модератор: Название темы должно отражать ее суть!

Это сообщение отредактировал(а) volvo877 - 25.3.2008, 15:51


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
ILyAHA
Дата 23.3.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

Репутация: нет
Всего: 3



А что за проблема то? Просто непонятно, что объяснить...
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
Logree
Дата 23.3.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



почему у меня в файл res.txt вываливается вот это
Код

-1578-326501814
-1577-326491815
-1576-326481816
-1575-326471817
-1574-326461818
-1573-326451819
000


а в файле source.txt
в каждом году в феврале по 29 дней?


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
Logree
Дата 23.3.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



еще раз вниматьльно почитал нашёл много логических ошибок, исправил
Код

program n13;
Const month:array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

var f:text;
    d,m,y:integer;

function is_v(year:integer):boolean;
var r:boolean;
Begin
    if (year mod 4=0) and
       ((year mod 100<>0) or
       (year mod 400 =0)) then
        r:=TRUE
    else
        r:=FALSE;
End;

function compere(d,m,dd,mm:integer):boolean;
var r:boolean;
    val1,val2:integer;
Begin

    val1:=d+d*(month[m]);
    val2:=dd+dd*(month[mm]);
    if val1<val2 then
        r:=TRUE
    else
        r:=FALSE;
End;

procedure make_file(var f:text);
var yyyy,c,
    m,year,
    d:integer;
Begin
  year:=2006;

    ReWrite(f);

    for yyyy:=year to year+5 do
    for m:=1 to 12 do begin

        if is_v(yyyy) and (m=2) then c:=1 else c:=0;

        for d:=1 to month[m]+c do begin
            write(f,d,m,yyyy);
            writeln(f);
        end;
    end;
End;

procedure poisk(var f:text;dd,mm,yy:integer);
var nf:text;
    d,m,yyyy:integer;
Begin
    ReSet(f);
    Assign(nf,'res.txt');
    ReWrite(nf);

    while not Eof(f) do begin
        read(f,d,m,yyyy);
        if compere(d,m,dd,mm) and (yyyy<=yy) then begin

            if is_v(yyyy) then writeln(d,'/',m,'/',yyyy);
            write(nf,d,m,yyyy);
            writeln(nf);
        end;
        readln(f);
    end;
    Close(nf);
End;

BEGIN
    ASSIGN(f,'source.txt');

    make_file(f);
    writeln('d m yyyy');
    read(d,m,y);
    poisk(f,d,m,y);

    CLOSE(f);
    readln;
END.


возможно стало лучше... но в результирующем файе опять чушь...


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.