Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Помогите с задачкой (http://www.tehnari.ru/f43/t61356/)

Pyx 16.12.2011 23:04

Помогите с задачкой
 
Создайте текстовый файл данных о расписании движения поездов. Выведите на экран информацию о поездах, отправляющихся в Киев после 19:00.

Pyx 16.12.2011 23:12

program Rozklad;

{$APPTYPE CONSOLE}

uses
SysUtils;
var myfile: text;
zvidku: string[10];
kyda: string[10];
chas: real;
begin
assign (myfile ,'C:\Documents and Settings\Пользователь\Рабочий стол\АМП\ьбт\poizd.txt');
reset (myfile);
while not eof (myfile) do
begin
readln (myfile, zvidku, kyda, chas);
if kyda='Kiev '
then writeln (zvidku:10, kyda:10, chas:2:2);
end;
close (myfile);
readln
end.



Что не правильно подзкажите....

Vladimir_S 17.12.2011 11:03

Цитата:

Сообщение от Pyx (Сообщение 636319)
Создайте текстовый файл данных о расписании движения поездов.

Выложите, пожалуйста, сам файл, чтобы можно было поместить его в нормальную (без, упаси Боже, кириллицы в путях!) директорию и запустить программу.
А так, на взгляд: требуется вывести данные о поездах, отправляющихся в Киев после 19:00, а значит нужно время отправления преобразовать в численный формат и вместо
if kyda='Kiev ' (кстати, никакого пробела после "v" быть не должно!)
записать
if (kyda='Kiev') and ({время отправления в числовом формате}>={19:00 тоже в числовом формате})
Могу помочь с конкретной реализацией, но только, повторяю, после того, как будет выложен файл данных.

Pyx 17.12.2011 18:10

текстовый файл
 
Код HTML:

Moskva    Kiev      22.30
Berlin    Odesa    09.00
Rum      Kiev      19.50
Yalta    Parish    19.30
Xarkiv    Kiev      15.25


Vladimir_S 17.12.2011 19:58

Ну извольте (как видите, не так-то уж и просто):
Код:

var
 myfile: text;
 S,zvidku,kyda,time: string;
 chas: real;
 i,Code:Integer;

begin
 assign(myfile ,'D:\poizd.txt');
 reset(myfile);
 while not eof (myfile) do
  begin
  readln(myfile,S);
  i:=1;
  zvidku:='';
  while S[i]<>' ' do
    begin
    zvidku:=zvidku+S[i];
    Inc(i);
    end;
  while S[i]=' ' do Inc(i);
  kyda:='';
  while S[i]<>' ' do
    begin
    kyda:=kyda+S[i];
    Inc(i);
    end;
  while S[i]=' ' do Inc(i);
  time:='';
  while i<=length(S) do
    begin
    time:=time+S[i];
    Inc(i);
    end;
  VAL(time,chas,Code);
  if (kyda='Kiev') and (chas>=19.0) then
    begin
    write(zvidku);
    for i:=length(zvidku)+1 to 10 do write(' ');
    writeln(kyda+'  '+time);
    end;
  end;
 close (myfile);
 readln
end.


Pyx 17.12.2011 20:03

Спасибо, работает:tehnari_ru_288:

Vladimir_S 17.12.2011 20:31

Цитата:

Сообщение от Pyx (Сообщение 636779)
Спасибо, работает

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

var
 myfile: text;
 zvidku,kyda: string[10];
 chas: real;
 i:Integer;

begin
 assign(myfile ,'D:\poizd.txt');
 reset(myfile);
 while not eof (myfile) do
  begin
  readln(myfile,zvidku,kyda,chas);
  if (kyda='Kiev      ') and (chas>=19.0) then
    begin
    write(zvidku);
    for i:=length(zvidku)+1 to 10 do write(' ');
    writeln(kyda,chas:7:2);
    end;
  end;
 close (myfile);
 readln
end.


Pyx 17.12.2011 20:37

супер, все запускается:tehnari_ru_203:

Pyx 17.12.2011 21:23

а вы не могли бы посмотреть еще эту задачу
нужно создать файл целых чисел (количество элементов файла и сами элементы вводятся с клавиатуры). Добавить элемент в конец файла. Выводить на экран содержимое нового файла.

Vladimir_S 17.12.2011 21:51

Цитата:

Сообщение от Pyx (Сообщение 636840)
а вы не могли бы посмотреть еще эту задачу
нужно создать файл целых чисел (количество элементов файла и сами элементы вводятся с клавиатуры). Добавить элемент в конец файла. Выводить на экран содержимое нового файла.

Пожалуйста:
Код:

Var
 f:Text;
 n:Integer;
 C:Char;
BEGIN
 Assign(f,'D:\fff');
 Rewrite(f);
 Close(f);
 Repeat
  Write('Next n (Y/N)? ');
  Readln(C);
  If (C='Y') or (C='y') then
  begin
    Append(f);
    Write('n= ');
    Readln(n);
    Writeln(f,n);
    Close(f);
  end
  else
    begin
    Write('Show file (Y/N)? ');
    Readln(C);
    If (C='Y') or (C='y') then
      begin
      Reset(f);
      Repeat
        Readln(f,n);
        Write(n,' ');
      Until EoF(f);
      Close(f);
      Writeln;
      end;
    end;
 Until (C='N') or (C='n');
END.



Часовой пояс GMT +4, время: 20:19.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.