• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль

SEBASTIAN

Новые
Регистрация
24 Фев 2011
Сообщения
13
Реакции
0
Баллы
0
Паскаль

Нужно описать структуру train с 3я(пункт,номер и время)
создать массив типа train.
запись информации в текстовый файл и чтение из него.
А также запрос номера поезда и вывод всей информации из него.
Код:
program kurs;
uses crt;
TYPE train=record
     naz:string;
     nom:integer;
     tim:string;
end;
var
mas:array[1..8  ] of train;
a:train;
otv:char; i:integer; filee:text; s:string;


procedure vvodd(s:string;otv:char);
var filee:text; i:integer;
begin
{$I-}
assign(filee,s);
if (otv='1')  then begin
append(filee);

if ioresult<>0 then begin
writeln('file not found');readln;
rewrite(filee);
end;

reset(filee);
 if eof(filee) then begin
 append(filee);
 writeln(filee,'---------------------------------------------');
 writeln(filee,'|      punkt      |   nomer   |    time     |');
 writeln(filee,'---------------------------------------------');
 end else append(filee);

 while true  do begin
 write('punkt: ');
 readln(mas[i].naz);
 if mas[i].naz='' then break;
 write('enter nomer: ');
 readln(mas[i].nom);
 write('enter time: ');
 readln(mas[i].tim);

 write(filee,'|',mas[i].naz:17,'|',mas[i].nom:11,'|',mas[i].tim:13,'|');

 writeln(filee);
end;

end;
 close(filee);
end;

procedure vivod(s:string;otv:char);
var filee:text; st:string;
begin
assign(filee,s);
{$i-}
if (otv='2')  then begin
reset(filee);
{$i+}
if ioresult<>0 then begin
write('file nod fount'); readln;
exit;
end;

if eof(filee) then begin
writeln('no infornation'); readln;
exit;
end;

while not eof(filee) do begin
readln(filee,st);
writeln(st);
end;
close(filee);
end;

end;




begin
clrscr;
while true do begin
 writeln('Menu:');
 writeln('1 Vvod information');
 writeln('2 Vivod information');
 writeln('3 Poisk information');
 writeln('4 Exit');
 readln(otv);

case otv of
 '1':vvodd('Kurs.txt',otv);
 '2':vivod('Kurs.txt',otv);
 '3':exit;
end;
writeln;

writeln('next to work?[y/n]');
readln(otv);
if (otv='N') or (otv='n') then exit;

end;

readln;
end.
мне осталось сделать последнее, запросить номер поезда и вывести на экран всю информацию о нем, не могу понять как это сделать...( помогите пожалуйста..
 
Посмотрю, но не раньше, чем Вы выложите свой файл s. Думаете, нам заняться нечем, кроме сочинения файла данных?
 
Вот он. Извиняюсь, что сразу не выложил...
 

Вложения

  • KURS.TXT
    KURS.TXT
    329 байт · Просмотры: 570
Не, как говорил Швейк: "Вот ведь гидра!". Три часа провозился. Но добил-таки:
Код:
program kurs;
uses crt;
TYPE train=record
     naz:string[17];
     nom:Word;
     tim:string[13];
end;
Const
 Nmax=20; {Max number of trains}
var
 mas:array[1..Nmax] of train;
 a:train;
 i:integer;
 otv:char;
 filee:text;
 s:String;
 N:Byte;

procedure file_form;
begin
 ReWrite(filee);
 writeln(filee,'---------------------------------------------');
 writeln(filee,'|      punkt      |   nomer   |    time     |');
 writeln(filee,'---------------------------------------------');
 Close(filee);
end;

procedure file_read(var Nf:Byte);
var stf:string[11]; chf:Char; Code:Word;
begin
 ReSet(filee);
 For i:=1 to 3 do
  ReadLn(filee);
 Nf:=0;
 While not EoF(filee) do
  begin
   Inc(Nf);
   ReadLn(filee,chf,Mas[Nf].naz,chf,stf,chf,Mas[Nf].tim);
   Val(stf,Mas[Nf].nom,Code);
  end;
 Close(filee);
end;

procedure search;
var tr_num,Ord_num:Word; is:Integer; b:boolean;
begin
 clrscr;
 Repeat
  write('Enter the number of train ');
  readln(tr_num);
  Ord_num:=0;
  b:=false;
  Repeat
   Inc(Ord_Num);
   If Mas[Ord_Num].nom=tr_num then b:=true;
  Until b or (Ord_Num=N);
  If b then
   begin
    ReSet(filee);
    For is:=1 to 3 do
     begin
      ReadLn(filee,s);
      WriteLn(s);
     end;
    For is:=1 to Ord_Num-1 do
     ReadLn(filee);
    ReadLn(filee,s);
    WriteLn(s);
   end
  else
   Writeln('The number of train is wrong!');
 Until b;
 Close(filee);
end;

procedure vvodd(var Nv:Byte);
var i:integer; Cc:Char;
begin
 Append(filee);
 Repeat
  Write('Next train (Y/N)? ');
  ReadLn(Cc);
   If (Cc='Y') or (Cc='y') then
    begin
     Inc(Nv);
     Write(filee,'|');
     WriteLn('Enter punkt: ');
     ReadLn(s);
     For i:=1 to 17-Length(s) do
      Write(filee,' ');
     Write(filee,s);
     Write(filee,'|');
     Mas[Nv].naz:=Mas[Nv].naz+s;
     WriteLn('Enter nomer: ');
     ReadLn(mas[Nv].nom);
     Write(filee,mas[Nv].nom:11);
     Write(filee,'|');
     WriteLn('Enter time (HH:MM): ');
     ReadLn(s);
     For i:=1 to 13-Length(s) do
      Write(filee,' ');
     Write(filee,s);
     WriteLn(filee,'|');
    end;
 Until (Cc='N') or (Cc='n');
 close(filee);
end;

procedure vivod;
var st:String;
begin
 Reset(filee);
 while not eof(filee) do
  begin
   readln(filee,st);
   writeln(st);
  end;
 close(filee);
 readln;
end;

begin
 {$I-}
 clrscr;
 Assign(filee,'Kurs.txt');
 ReSet(filee);
 If IOResult<>0 then
  begin
   file_form;
   vvodd(N);
  end;
 file_read(N);
 while true do
  begin
   clrscr;
   writeln('Menu:');
   writeln('1 Vvod information');
   writeln('2 Vivod information');
   writeln('3 Poisk information');
   writeln('4 Exit');
   readln(otv);
   case otv of
   '1':begin vvodd(N); file_read(N); end;
   '2':vivod;
   '3':search;
   '4':exit;
   end;
   write('Continue [y/n]? ');
   readln(otv);
   if (otv='N') or (otv='n') then exit;
  end;
end.
 
Огромное спасибо!!!
 
Владимир объясните пожалуйста, что в вашем коде делает процедура file-read?
 
Пытаюсь вставить вашу процедуру search в свой некрасивый код..))
выводит только таблицу на экран, или же только какое-то одно значение не смотря на запрос.. Что там не так не подскажите?
хочется добить еще и свой код до конца...)
 
Пытаюсь вставить вашу процедуру search в свой некрасивый код..))
выводит только таблицу на экран, или же только какое-то одно значение не смотря на запрос.. Что там не так не подскажите?
хочется добить еще и свой код до конца...)
Скорее всего, у Вас не определено значение величины N - полного количества поездов в таблице.
 
Не могу разобраться все таки(( на данный момент он просто зацикливается после запроса поезда... Пожалуйста, прошу исправте ошибки в моем коде, чтобы поиск работал...

Код:
program kurs;
uses crt;
TYPE train=record
     naz:string;
     nom:integer;
     tim:string;
end;

const
Nmax=20; 
var
mas:array[1..nmax] of train;
otv:char;n:byte; i:integer; filee:text; s:string;

procedure vvodd(v:byte);
var otv:char; i:integer;
begin
{$i-}
assign(filee,'Kurs.txt');
append(filee);

if ioresult<>0 then begin
writeln('file not found');readln;
rewrite(filee);
end;

reset(filee);
 if eof(filee) then begin
 append(filee);
 writeln(filee,'---------------------------------------------');
 writeln(filee,'|      punkt      |   nomer   |    time     |');
 writeln(filee,'---------------------------------------------');
 end else append(filee);

while true do begin
 write('punkt: ');
 readln(mas[i].naz);
 if mas[i].naz='' then break;
 write('enter nomer: ');
 readln(mas[i].nom);
 write('enter time: ');
 readln(mas[i].tim);

write(filee,'|',mas[i].naz:17,'|',mas[i].nom:11,'|',mas[i].tim:13,'|');
writeln(filee);
end;
 close(filee);
end;

procedure vivod;
var  st:string;
begin
{$i-}
assign(filee,'Kurs.txt');
reset(filee);

if ioresult<>0 then begin
write('file nod fount'); readln;
exit;
end;

if eof(filee) then begin
writeln('no infornation'); readln;
exit;
end;

while not eof(filee) do begin
readln(filee,st);
writeln(st);
end;
close(filee);
end;

procedure search;
var b:boolean; i:integer; k,j:word;
begin
clrscr;
assign(filee,s);
repeat
write('Enter the number of train: ');
readln(k);
j:=0;
b:=false;
repeat
inc(j);
if mas[j].nom=k then b:=true;
until b or (j=n);
if b then begin
reset(filee);
for i:=1 to 3 do begin
readln(filee,s);
writeln(s);
end;

for i:=1 to j-1 do
readln(filee);
readln(filee,s);
writeln(s);
end else
writeln('The number of train is wrong!');
until b;
close(filee);
end;



begin
clrscr;
while true do begin
clrscr;
 writeln('Menu:');
 writeln('1 Vvod information');
 writeln('2 Vivod information');
 writeln('3 Search information');
 writeln('4 Exit');
 readln(otv);

case otv of
 '1':vvodd(n);
 '2':vivod;
 '3':search;
 '4':exit;
end;
writeln;

writeln('next to work?[y/n]');
readln(otv);
if (otv='N') or (otv='n') then exit;

end;

readln;
end.
 
Не могу разобраться все таки(( на данный момент он просто зацикливается после запроса поезда... Пожалуйста, прошу исправте ошибки в моем коде, чтобы поиск работал...
Уважаемый SEBASTIAN!
Видите ли, я сделал всё, что мог: на базе Вашего кода написал свою программу, каковую (уверяю Вас, долго и тщательно) отлаживал, тестировал, согласовывал, пока не довел до полного "ума". Теперь Вы берете и устраиваете кашу из фрагментов своего и моего кодов, которая, естественно, глючит, и снова обращаетесь ко мне - мол, исправляйте! И что я могу сделать? Бросив все дела, засесть за третий вариант, который Вы тоже раскурочите? Нет уж, увольте. Давайте-ка сами.
P.S. Не говоря уже о том, что в основе требований к программе - порочная идея: держать информацию одновременно в двух видах, файловом и массива записей. На самом деле по здравому смыслу следовало бы ограничиться чем-то одним. Но ладно, сделал и это. Так чего же Вам еще?
 
Извиняюсь, вы правы! Спасибо за то что помогли.
 
Назад
Сверху