Другие языки программирования и технологии
Найдите пожалуйста ошибку! очень прошу!
я запуталась в процедуре ввода. надо создать фаил с даными, а я,к своему стыду,забыла как. подскажите пожалуйста! и если есть ошибки прошу сказать. заранее спасибо!!! program zaprosy;uses crt;type sportsmen=record name:string; strana:string; rost:150..220; ves:30..100; god:integer; end;var f:file of sportsmen; sp:sportsmen; c:char; a,b:string; i,k,n,v,r,g:integer; sv,sr:real;procedure vivod; begin assign(f,'F:\Учеба\спортсмен.txt'); reset(f); writeln('Имя','','|','Страна','','|','Рост','','|','Вес','','|','Год',''); while not(eof(f)) do begin read(f,sp); writeln(sp.name,'','|',sp.strana,'','|',sp.rost,'','|',sp.ves,'','|',sp.god,''); end; close(f); end;procedure menu; begin clrscr; writeln('1 ввод'); writeln('2 вывод'); writeln('3 запрос1'); writeln('4 запрос2'); writeln('5 запрос3'); writeln('6 выход'); end;procedure zapros1; begin writeln('введите страну'); readln(a); for i:=1 to 10 do if sp.strana=a then writeln(sp.name) else writeln('нет спортсмена'); end;procedure zapros2; begin writeln('введите страну'); readln(b); for i:=1 to 10 do if sp.strana=b then begin begin v:=v+sp.ves; r:=r+sp.rost; k:=k+1; end; sv:=v/k; sr:=r/k; writeln('средний вес=',sv,'','средний рост=',sr); end else writeln('нет такой страны'); end;procedure zapros3; begin writeln('введите год'); readln(g); for i:=1 to 10 do if sp.god=g then writeln(sp.name) else writeln('нет спортсмена'); end;procedure vvod; begin assign(f,'F:\Учеба\спортсмен.txt'); rewrite(f); reset(f); seek(f,filesize(f)); repeat writeln('введите имя'); readln(sp.name); writeln('введите страну'); readln(sp.strana); writeln('введите рост'); readln(sp.rost); writeln('введите вес'); readln(sp.ves); writeln('введите год'); readln(sp.god); write(f,sp); writeln('продолжить ввод'); until c='n'; close(f);end;beginclrscr;menu;repeatc:=readkey;case c of'1':begin clrscr; vvod; menu; end;'2':begin clrscr; vivod; menu; end;'3':begin clrscr; zapros1; menu; end;'4':begin clrscr; zapros2; menu; end;'5':begin clrscr; zapros3; menu; end; end;until c='6';readln;end.
Доброго времени суток.
Все смотреть времени нет, а во вводе действительно есть неточности, мягко говоря.. . Я комменты проставлю.
procedure vvod;
begin
assign(f,'F:\Учеба\спортсмен. txt'); {это прнятно}
rewrite(f); {допустим... а что будет если файл уже существует? будем его переписывать? }
reset(f); {не совсем понято, зачем это надо}
seek(f,filesize(f));
В общем, вместо того, что выше попробуйте так
Assign(F, 'F:\Учеба\спортсмен. txt'); {связали файловую переменную с файлом на диске}
{$I-}
Reset(F); {пытаемся открыть файл}
{$I+}
if IOResult <> 0 then Rewrite(F) {ошибка, файла нет - создадим}
else Seek(F, FileSize(F)); {будем добавлять записи}
Ну а дальше, как у вас
repeat
Write('введите имя : '); {только для вывода подсказок используйте оператор без Ln, чтобы не было перевода строки}
readln(sp.name);
write('введите страну : ');
readln(sp.strana);
write('введите рост : ');
readln(sp.rost);
write('введите вес : ');
readln(sp.ves);
write('введите год : ');
readln(sp.god);
write(f,sp);
writeln('продолжить ввод');
ReadLn(c); {наверное надо ввести ответ пользователя? и будьте осторожны с глобальными переменными. Лучше сделать эту переменную локальной, иначе будет искажаться выбор меню в основной программе}
until c='n';
close(f);
end;
Ну и еще поправлю основную программу. В каждом пункте меню вы делаете очистку экрана и вывод меню, поэтому есть смысл вынести их из оператора case.
begin
clrscr;
repeat
Menu;
c:=readkey;
ClrScr;
case c of
'1' : vvod;
'2': vivod;
'3' : zapros1;
'4' : zapros2;
'5' : zapros3;
end;
Write('Ввод для продолжения... ');
ReadLn; {а вот здесь можно поставить задержку чтобы меню не "вытолкнуло" с экрана нужные строки}
until c='6';
readln; {это уже не надо, т. к. нажата 6 для выхода и притормаживать нет смысла}
end.
Удачи!
Все смотреть времени нет, а во вводе действительно есть неточности, мягко говоря.. . Я комменты проставлю.
procedure vvod;
begin
assign(f,'F:\Учеба\спортсмен. txt'); {это прнятно}
rewrite(f); {допустим... а что будет если файл уже существует? будем его переписывать? }
reset(f); {не совсем понято, зачем это надо}
seek(f,filesize(f));
В общем, вместо того, что выше попробуйте так
Assign(F, 'F:\Учеба\спортсмен. txt'); {связали файловую переменную с файлом на диске}
{$I-}
Reset(F); {пытаемся открыть файл}
{$I+}
if IOResult <> 0 then Rewrite(F) {ошибка, файла нет - создадим}
else Seek(F, FileSize(F)); {будем добавлять записи}
Ну а дальше, как у вас
repeat
Write('введите имя : '); {только для вывода подсказок используйте оператор без Ln, чтобы не было перевода строки}
readln(sp.name);
write('введите страну : ');
readln(sp.strana);
write('введите рост : ');
readln(sp.rost);
write('введите вес : ');
readln(sp.ves);
write('введите год : ');
readln(sp.god);
write(f,sp);
writeln('продолжить ввод');
ReadLn(c); {наверное надо ввести ответ пользователя? и будьте осторожны с глобальными переменными. Лучше сделать эту переменную локальной, иначе будет искажаться выбор меню в основной программе}
until c='n';
close(f);
end;
Ну и еще поправлю основную программу. В каждом пункте меню вы делаете очистку экрана и вывод меню, поэтому есть смысл вынести их из оператора case.
begin
clrscr;
repeat
Menu;
c:=readkey;
ClrScr;
case c of
'1' : vvod;
'2': vivod;
'3' : zapros1;
'4' : zapros2;
'5' : zapros3;
end;
Write('Ввод для продолжения... ');
ReadLn; {а вот здесь можно поставить задержку чтобы меню не "вытолкнуло" с экрана нужные строки}
until c='6';
readln; {это уже не надо, т. к. нажата 6 для выхода и притормаживать нет смысла}
end.
Удачи!
Похожие вопросы
- Владеющие паскалем! SOS! Найдите пожалуйста ошибку!((( думаю уже долго, ошибку найти не могу(((Помогите пожалуйста!!!
- Проверьте пожалуйста эту програму на C++, и исправьте ошибки?, очень прошу
- Помогите Пожалуйста....не могу настроить сеть между 2-я компютерами... очень прошу кто шарит загляньте...
- Пожалуйста, как вы думаете , скажите, я вас очень прошу!!!!
- люди подскажите пожалуйста, как в двух файлах excel найти совпадения????помогите очень нужно!!!
- Пожалуйста! Помогите я вас очень прошу! Где скачать виртуал дуб последнюю версию.
- Пожалуйста, очень прошу, помогите, кто разбирается в программировании
- помогите найти синтаксическую ошибку
- Не могу найти, где ошибка в проге и нужна помощь в составлении блоксхемы. Program zadacha1; uses crt; var i,t, j: b
- Пацаны помогите найти логическую ошибку в C++