Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2015, 21:59   #1
Nyash
Пользователь
 
Регистрация: 28.01.2015
Сообщений: 11
По умолчанию Ошибка в коде

Код:
Uses crt;
Type znak=record
  FIO:string[30];
  Data:string[10];
  Zodiak:string[15];
  end;
var
Z:file of znak;
E1:znak;
procedure print_file;
begin
seek(Z,0);
writeln('________________________________________________________________________________');
writeln('            FIO  ':15,'           DATA            ':5,     '         ZODIAK    ':10);
writeln('________________________________________________________________________________');
while not eof(Z) do
 begin
 read(Z,E1);
 writeln('   ',E1.FIO:15,'               ',E1.DATA:5,'              ',E1.ZODIAK:10,'     ');
 writeln('________________________________________________________________________________');
 end;
readln;
end;

Procedure Create_file;
var
 i:integer;
begin
Clrscr;
Seek(Z, FileSize(Z));
writeln('Vvedite svedeniya o ludah');
writeln('Dlya vbIhoda napechataite "*"');
writeln('________________________________________________________________________________');
while True do
 begin
 Write('Vvedite datu : ');
 readln(E1.data);
 if E1.DATA='*' then Break;
 write('Vvedite znak : ');
 readln(E1.zodiak);
 write(Z,E1)
 end;
end;

Procedure Poisk;
var Found:boolean;
s:string[10];

begin
While true do begin
writeln('Vvedite FIO');
readln(s);
if s='*' then break;
found:=false;
seek(z,0);
writeln('            FIO   ':15,'          DATA           ':5,     '         ZODIAK    ':10);
while not eof(Z) and not found do
begin
read(Z,E1);

if (Pos(s,E1.FIO)<>0) then
begin

writeln('________________________________________________________________________________');
writeln('   ',E1.FIO:15,'               ',E1.DATA:5,'                ',E1.ZODIAK:10,'  ');
writeln('________________________________________________________________________________');

end;
end;
if (Pos(s,E1.FIO)=0) then
writeln ('                 ');
writeln ('                 ');
writeln ('                         |TAKOGO 4ELOVEKA HET|');
writeln ('                 ');
end;
readln;
end;

procedure Vse_LUDI;
begin
seek(Z,0);
writeln('________________________________________________________________________________');
writeln('                       Spisok vseh LUDEI':15);
writeln('________________________________________________________________________________');
while not eof(z) do
 begin
 read(z,E1);
 write(E1.FIO:15);
end;
readln;
end;


Procedure menu;
var
 Number:integer;
begin

TextBackground(9);
while true do
 begin
 clrscr;
 while true do
  begin
  clrscr;
  writeln('________________________________________________________________________________');
  writeln('1 - Sozdanie faila ');
  writeln('2 - Vse LUDI');
  writeln('3 - Poisk');
  writeln('4 - Spisok');
  writeln('5 - Vyhod');
  writeln('________________________________________________________________________________');
  writeln('                             Vvedite nomer punkta menu');
readln(Number);
  case Number of
   1:Create_file;
   2:Print_file;
   3:Poisk;
   4:Vse_LUDI;
   5:Exit;
   end;
  end;
 end;
end;

begin
clrscr;
assign(z,'d:\hitsun\znak');
reset(z);
if fileexists(' Pytb nazvanie faila ') then
writeln('Dobavlenie zapisei v suchestvuechiy fail')
 else
  begin
  rewrite(z);
  writeln('Zapis v novii fail');
  end;
readln;
menu;
end.
Ошибка в коде, объясните, пожалуйста, как исправить? среда ТП или Pascal abc
Nyash вне форума Ответить с цитированием
Старый 29.01.2015, 22:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых,
Цитата:
Код:
if fileexists(' Pytb nazvanie faila ') then
а) в Turbo Pascal нет стандартной функции FileExists
б) функция FileExists проверяет наличие файла. Там нужно написать ПУТЬ к вашему файлу, а не белетристику, как у Вас!

во-вторых, у Вас собственно каталог hitsun на диске D имеется?!

да и процедуру надо чуть изменить - сначала проверить наличие файла ZNAK, а уже потом его открывать (если он есть) или создавать, если его нет.

Код:
const DatFileName =  'd:\hitsun\znak';
begin
clrscr;
assign(z, DatFileName);
if fileexists( DatFileName ) then begin
   writeln('Dobavlenie zapisei v suchestvuechiy fail '+  DatFileName);
   reset(z);
 end
 else
  begin
    writeln('Zapis v novii fail ' +  DatFileName);
    rewrite(z);
  end;
readln;
menu;
end.

Последний раз редактировалось Serge_Bliznykov; 29.01.2015 в 22:33.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.01.2015, 22:36   #3
Nyash
Пользователь
 
Регистрация: 28.01.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых,


а) в Turbo Pascal нет стандартной функции FileExists
б) функция FileExists проверяет наличие файла. Там нужно написать ПУТЬ к вашему файлу, а не белетристику, как у Вас!

во-вторых, у Вас собственно каталог hitsun на диске D имеется?!
да, имеется

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых,


а) в Turbo Pascal нет стандартной функции FileExists
б) функция FileExists проверяет наличие файла. Там нужно написать ПУТЬ к вашему файлу, а не белетристику, как у Вас!

во-вторых, у Вас собственно каталог hitsun на диске D имеется?!
Спасибо большое, программа заработала, только сортировка по дате не работает и список всех людей

Последний раз редактировалось Stilet; 30.01.2015 в 07:53.
Nyash вне форума Ответить с цитированием
Старый 29.01.2015, 23:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
да, имеется
отлично. Есть шанс, что код в Pascal ABC заработает.

p.s. не смотрел логику вашего кода, но когда я просто зашёл в программу (мне программа сообщила, что "Zapis v novii fail d:\hitsun\znak"
потом нажал 5 (выбрал пункт меню '5 - Vyhod') и получил ошибку - что файл остался не закрытым.
Сообщаю Вам, что открытые файлы нужно закрывать ( в вашем случае процедурой Close(z); )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.01.2015, 23:20   #5
Nyash
Пользователь
 
Регистрация: 28.01.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
отлично. Есть шанс, что код в Pascal ABC заработает.

p.s. не смотрел логику вашего кода, но когда я просто зашёл в программу (мне программа сообщила, что "Zapis v novii fail d:\hitsun\znak"
потом нажал 5 (выбрал пункт меню '5 - Vyhod') и получил ошибку - что файл остался не закрытым.
Сообщаю Вам, что открытые файлы нужно закрывать ( в вашем случае процедурой Close(z); )
Код:
uses crt;
const DatFileName =  'd:\hitsun\znak';
Type znak=record
  FIO:string[30];
  Data:string[10];
  Zodiak:string[15];
  end;
var
Z:file of znak;
E1:znak;
procedure print_file;
begin
seek(Z,0);
writeln('________________________________________________________________________________');
writeln('            FIO  ':15,'           DATA            ':5,     '         ZODIAK    ':10);
writeln('________________________________________________________________________________');
while not eof(Z) do
 begin
 read(Z,E1);
 writeln('   ',E1.FIO:15,'               ',E1.DATA:5,'              ',E1.ZODIAK:10,'     ');
 writeln('________________________________________________________________________________');
 end;
readln;
end;

Procedure Create_file;
begin
Clrscr;
Seek(Z, FileSize(Z));
writeln('Vvedite svedeniya o ludah');
writeln('Dlya vbIhoda napechataite "*"');
writeln('________________________________________________________________________________');
while True do
 begin
 Write('Vvedite FIO : ');
 readln(E1.FIO);
 if E1.DATA='*' then Break;
 Write('Vvedite datu : ');
 readln(E1.data);
 write('Vvedite znak : ');
 readln(E1.zodiak);
 write(Z,E1)
 end;
end;

procedure sort_by_name;
var i,j,k:integer;
m:array[1..150]of znak;
b:znak;
begin
 k:=0;
 reset(z);
 while not eof(z) do
 begin
  read(z,B  );
  inc(k);
  m[k]:=b;
 end;
 for i:=1 to k do
 for j:=1 to k-1 do
 if m[j].data<m[j+1].data then
 begin
  b:=m[j];
  m[j]:=m[j+1];
  m[j+1]:=b;
 end;
 rewrite(z);
 for i:=1 to k do write(z,m[i]);
end;

Procedure Poisk;
var Found:boolean;
s:string[10];

begin
While true do begin
writeln('Vvedite FIO');
readln(s);
if s='*' then break;
found:=false;
seek(z,0);
writeln('            FIO   ':15,'          DATA           ':5,     '         ZODIAK    ':10);
while not eof(Z) and not found do
begin
read(Z,E1);

if (Pos(s,E1.FIO)<>0) then
begin

writeln('________________________________________________________________________________');
writeln('   ',E1.FIO:15,'               ',E1.DATA:5,'                ',E1.ZODIAK:10,'  ');
writeln('________________________________________________________________________________');

end;
end;
if (Pos(s,E1.FIO)=0) then
writeln ('                 ');
writeln ('                 ');
writeln ('                 ');
writeln ('                         |TAKOGO 4ELOVEKA HET|');
writeln ('                 ');
end;
readln;
end;

procedure Vse_LUDI;
begin
seek(Z,0);
writeln('________________________________________________________________________________');
writeln('                       Spisok vseh LUDEI':15);
writeln('________________________________________________________________________________');
while not eof(z) do
 begin
 read(z,E1);
 write(E1.FIO:15);
end;
readln;
end;


Procedure menu;
var
 Number:integer;
begin

TextBackground(9);
while true do
 begin
 clrscr;
 while true do
  begin
  clrscr;
  writeln('________________________________________________________________________________');
  writeln('1 - Sozdanie faila ');
  writeln('2 - Vse LUDI');
  writeln('3 - Sortirovka'); 
  writeln('4 - Poisk');
  writeln('5 - Spisok');
  writeln('6-  Vyhod');
  writeln('________________________________________________________________________________');
  writeln('                             Vvedite nomer punkta menu');
readln(Number);
  case Number of
   1:Create_file;
   2:Print_file;
   3:Sort_by_name;
   4:Poisk;
   5:Vse_LUDI;
   6:Exit;
 
   end;
  end;
 end;
end;
begin
clrscr;
assign(z, DatFileName);
if fileexists( DatFileName ) then begin
   writeln('Dobavlenie zapisei v suchestvuechiy fail '+  DatFileName);
   reset(z);
 end
 else
  begin
    writeln('Zapis v novii fail ' +  DatFileName);
    rewrite(z);
  end;
readln;
menu;
close(z);
end.


суть программы :надо ввести данные о человеке (ФИО, дату, знак зодиака), отсортировать по дате рождения при нажатие пункта "сортировка\все люди"
Nyash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде mockk Общие вопросы C/C++ 0 25.09.2013 11:26
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка в коде X_ALONE_X Паскаль, Turbo Pascal, PascalABC.NET 2 24.08.2011 18:40
Ошибка в коде drzod C# (си шарп) 1 21.02.2011 12:03
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58