IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> В этом коде определенно есть ошибка!
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Проблема в том, что в файле после его заполнения есть данные, а процедуры Print и ShowInfo не срабатывают. Вообще ничего не выдают.

Помогите, пожалуйста, разобраться с данной проблемой.
Надеюсь на понимание.

С уважением,
Юрий.
program rec;
uses crt;
type

TRec = record
name : string [31];
bornyear : integer;
bornmonth : integer;
bornday : integer;
adress : string [250];
end;

TBase = array [1..100] of TRec;

TFile = file of TBase;





procedure ShowInfo (var b : TBase; var f : TFile; x : integer; k : integer);
var
i : byte;
begin
read(f, b);
writeln('Infromation about mans : ');
for i := 1 to k do
with b[i] do begin
if bornyear > x then begin
writeln('Name : ' , name);
writeln('Born day: ' , bornday , '; Born month: ' , bornmonth , 'Born year: ' , bornyear);
writeln('Adress: ' , adress);
writeln;
end;
end;
end;





procedure Input(var b : TBase; var f : TFile; var k : integer);
var
i : byte;
begin
writeln('Vvod bazy dannyx. ');writeln('');
for i := 1 to k do
with b[i] do begin
writeln('Chelovek N ',i);
write('Name : '); readln(name);
write('Born day: '); readln(bornday); write('Born month: '); readln(bornmonth); write('Born year: '); readln(bornyear);
write('Adress: '); readln(adress);
writeln;
end;
write(f, b);
end;



procedure Print(var b : TBase; var f : TFile; var k : integer);
var
i : byte;
begin
read(f, b);
writeln('Infromation about mans : ');
for i := 1 to k do
with b[i] do begin
writeln('Name : ' , name);
writeln('Born day: ' , bornday , '; Born month: ' , bornmonth , 'Born year: ' , bornyear);
writeln('Adress: ' , adress);
writeln;
end;
end;





var
base : TBase;
baseFile : TFile;
birthYr : integer;
temp : integer;
k : integer;



begin
CLRSCR;
temp := -1;
assign(baseFile, 'c:\students.db');

while temp <> 0 do
begin

CLRSCR;
write('1 - create database; 2 - mans which born after X year; 3 - prints database; 0 - exit ... ');
readln(temp);


if temp = 1 then
begin
rewrite(baseFile);
Write('Enter count fo rows for file: '); Readln(k);
Input(base, baseFile, k);
writeLn('Press any key ...'); ReadKey;
close(baseFile);
end;


if temp = 2 then
begin
reset(baseFile);
write('Enter start birthyear: ');
readln(birthYr);
ShowInfo(base, baseFile, birthYr, k);
close(baseFile);
end;


if temp = 3 then
begin
reset(baseFile);
Print(base, baseFile, k);
close(baseFile);
end;


end;

writeln('Press any button for exit ...');
ReadKey
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


iSlayter, а почему вы не используете отладчик?
Вопрос не возник бы...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Цитата(Altair @ 28.04.2007 12:33) *

iSlayter, а почему вы не используете отладчик?
Вопрос не возник бы...

Не знаю ни одного дебагера для паскаля smile.gif

Прошу посмотреть в последний раз, честное слово!
Всё переписал немного. Ну и это уже для другого человека лаба.
Вообщем проблема такая - есть процедура записи новых рекордов в файл, и есть процедура удаления их из файла. Соответственно процедуры с именами Add и Delete. Помогите пожалуйста разобраться! Алгоритм вроде бы верный, но изменения не вносятся - вероятно некорректно их записываю! Или всё же есть ошибка в алгоритме?
program rec;
uses crt;
type
TRec = record
name : string [31];
result : real;
startnum : integer;
end;
TBase = array [1..100] of TRec;
TFile = file of TBase;




procedure Delete ( var b : TBase; var f : TFile; var k : integer) ;
var
i, g : byte;
endv : integer;
begin
read (f, b);
endv := filesize(f)+1;
For i := 1 to endv do if k = b[i].startnum then g := i;
For i := g to (endv-1) do b[i] := b[i+1];
endv := endv-1;
write(f, b);
writeln('Sportsmen was successfully deleted.');
write('Press any button for return to menu.');
ReadKey;
end;




procedure Add (var b : TBase; var f : TFile; var k : integer);
var
i, start, endv : byte;
begin
read (f, b);
writeln(filesize(f));
start := (filesize(f)+1);
endv := (start+k-1);
seek (f, (filesize(f)+1));
for i := start to endv do
begin
writeln('Chelovek N ' , i);
write('Name: '); readln(b[i].name);
write('Startnum: '); readln(b[i].startnum);
write('The result: '); readln(b[i].result);
writeln;
end;
write(f, b);
write('Press any button for return to menu.');
ReadKey;
end;




procedure ShowInfo (var b : TBase; var f : TFile);
var
i : byte;
min, max : real;
mini, maxi : integer;
begin
read(f, b);
writeln('Infromation about mans : ');
for i := 1 to (FileSize(f)+1) do
with b[i] do begin
maxi := 1;
mini := 1;
min := 0;
max := 0;
if min < result then
begin
min := result;
mini := i;
end;
if max > result then
begin
max := result;
maxi := i;
end;
end;
if mini = maxi then
begin
writeln('oops! ' , b[mini].name , ' is first and last at the same time!');
end
else
begin
writeln('First is ' , b[mini].name , ' in time ' , b[mini].result:6:3 , '!');
writeln('Last is ' , b[maxi].name , ' in time ' , b[maxi].result:6:3 , '!');
end;
write('Press any button for return to menu.');
ReadKey;
end;




procedure Input(var b : TBase; var f : TFile; var k : integer);
var
i : byte;
begin
writeln('Creating database. ');writeln;writeln;
writeln('If sportsmen does not take part in competitions write 0 in "Result" field.');
for i := 1 to k do
with b[i] do begin
writeln('Man N ',i);
write('Name: '); readln(name);
write('Startnum: '); readln(startnum);
write('The result: '); readln(result);
writeln;
end;
write(f, b);
write('Press any button for return to menu.');
ReadKey;
end;




procedure Print(var b : TBase; var f : TFile);
var
i : byte;
begin
read(f, b);
writeln('Infromation about mans : ');
for i := 1 to (FileSize(f)) do
with b[i] do begin
writeln('Name: ' , name);
writeln('Startnum: ' , startnum , ';');
writeln('Result: ' , result:6:3 , ';');
writeln;
end;
write('Press any button for return to menu.');
ReadKey;
end;





var
base : TBase;
baseFile : TFile;
birthYr : integer;
temp : integer;
k : integer;
begin
CLRSCR;
temp := -1;
assign(baseFile, 'c:\students.db');
while temp <> 0 do
begin
CLRSCR;
writeln('1 - create database(rewrite file);');
writeln('2 - first and last sportsmen;');
writeln('3 - prints database;');
writeln('4 - add information in database;');
writeln('5 - edit info;');
writeln('6 - delete information from DB;');
writeln('0 - exit.');
readln(temp);

if temp = 1 then
begin
rewrite(baseFile);
Write('Enter count of rows for file: '); Readln(k);
Input(base, baseFile, k);
close(baseFile);
end;

if temp = 2 then
begin
reset(baseFile);
ShowInfo(base, baseFile);
close(baseFile);
end;

if temp = 3 then
begin
reset(baseFile);
Print(base, baseFile);
close(baseFile);
end;

if temp = 4 then
begin
reset(baseFile);
write('How many rows you want to add in database? '); readln(k);
Add(base, baseFile, k);
close(baseFile);
end;

if temp = 6 then
begin
reset(baseFile);
write('Enter number of deleting sportsmen: '); readln(k);
Delete(base, baseFile, k);
close(baseFile);
end;
end;
writeln('Press any button for exit ...');
ReadKey
end.


С уважением,
Юрий

Сообщение отредактировано: iSlayter -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 5:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name