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

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

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

 
 Ответить  Открыть новую тему 
> помогите найти ошибку,плз, прога с файлом
Гость
сообщение 17.11.2007 11:39
Сообщение #1


Гость






народ, пожалуйста помогите вот с чем...
вот задание:
(-----------------------------------------------------------------------------)
1. Создать на диске типизированный файл произвольного доступа с записями заданной структуры.
2. Для созданного файла предусмотреть возможность:
– изменения выбранного поля некоторой записи;
– удаления выбранной записи с последующим уменьшением размеров файла;
– добавления записи в произвольное место файла;
– вывода содержимого файла в виде таблицы;
– выполнения указанного в варианте задания;
– удаления всего файла при завершении работы программы.
Структура записи:
- отделение банка;
- фамилия вкладчика;
- номер счета;
- сумма вклада.
Определить вкладчика заданного отделения банка с наибольшей суммой вклада
(---------------------------------------------------------------------------------)

у меня что-то не работает вот это: "Определить вкладчика заданного отделения банка с наибольшей суммой вклада" помогите испарвить или найти ошибку плз


program file13;
uses crt;
type bank = record
otdelenie: integer;
surname : string[20];
Number: integer;
summa :integer;
end;

var f : file of bank;mass: array[1..5] of bank;
end_menu: boolean; vid: byte;
Name : string [20]; num_array: 1..5;

procedure Name_File;
begin
write ('enter name of file...');
readln (Name);
end;
{------------}
procedure AddRec;
begin
writeln ('VVod zapisi', Filepos(f)+1);
with mass[Num_array] do
begin write ('vvedite nomer otdeleniya banka:');
readln (otdelenie);
write ('vvedite surname:');
readln (surname);
write ('vvedite nomer s4eta:');
readln (Number);
write ('vvedite summy vklada:');
readln (summa);
write (f, mass[Num_array]);
end;
end;
{------------}
procedure Create_bank_file;
var
ind :integer;
begin
Name_File;
Assign (f,Name );
rewrite (f);
writeln ('sozdanie zapisej fajla',Name);
for ind:= 1 to 5 do
addRec;
writeln ('sozdanie Fajla zaverweno');
writeln ('file have ', FileSize (f),' records');
close (f);
end;
{------------}
procedure OutputRec;
begin
read (f,mass[num_array]);
with mass[Num_array] do
begin
writeln ('|',filepos(f):7,' |',otdelenie:8,' |',surname:8,' |',number:5,' |',summa:6,' |');
end;
end;
{------------}
procedure outputALLRec;
begin
Name_File;
assign (f,Name);
Reset (f);
if IOresult = 0 then begin
seek (f,0);
writeln ('*** Vivod infi o vklad4ikah iz fajla ', Name,'***');
writeln ('| Nomer zapisi | otdelenie | surname | Number | summa |');
while (not Eof (f)) do outputRec;
end
else writeln (' Fajla s imenem ',Name,' na diske net');
end;
{------------}
procedure UpdateRec;
var NumRec: Longint;
begin
Name_File;
assign (f, name);
reset (f);
if IOresult = 0 then
begin
write ('ykagite nomer izmenyaemoj zapisi:');
readln (Numrec);
seek (f,Numrec-1);
writeln ('..staroe zna4enie zapisi.. :');
outputRec;
seek (f, Numrec-1);
writeln ('zadaem novoe zna4enie ' , Numrec,' zapisi');
addrec;
close (f);
end
else
writeln ('Fajla s imenem ', Name, ' na diske net');
end;
{------------}
procedure AddrecToEnd;
begin
Name_File;
assign (F,Name);
reset (f);
if IOresult = 0 then
begin
seek( f, Filesize (f));
Addrec;
writeln ('izmenennij file dannih imeet vid ' ,Filesize(f), ' zapisi');
close (f);
end
else writeln ('fajla s imenem ' , Name,' na diske net');
end;
{------------}
procedure max_summ;
var otdelenie: byte; max :integer;
begin
Name_file;
assign(f,name);
reset(f);
if IOresult = 0 then begin
writeln ('vvedite nomer otdeleniya banka:');
readln (otdelenie);
max:= mass[1].summa;
for num_array:=1 to 5 do
if mass[num_array].otdelenie = otdelenie then begin
if mass[num_array].summa>max then max:=mass[num_array].summa;
end;
end;
writeln ('vklad4ik s naibolwej summoj:');
writeln (max);
end;
{------------}
procedure exitpr;
begin
erase (f);
end_menu := true;
end;
{------------}
begin
clrscr;
end_menu:= false;
repeat
writeln ('***Menu banka***');
writeln ('viberete pynkt');
writeln ('1- create new file');
writeln ('2- prosmotr');
writeln ('3- izmenenie zapisi');
writeln ('4- dopolnenie zapisi');
writeln ('5- vklad4ik zadannogo otdeleniya s naibolwej summoj vklada');
writeln ('0- exit and delete file');
writeln ('BaIII Bbl6op:');
readln (vid);
case vid of
1: Create_bank_file;
2: outputallRec;
3: updaterec;
4: addrectoend;
5: max_summ;
0: exitpr;
end;
writeln ('Dlya prodolgeniya nagmite "ENTER"');
readln;
clrscr;
until End_Menu
end.



Сообщение отредактировано: klem4 - 17.11.2007 12:53
 К началу страницы 
+ Ответить 
volvo
сообщение 17.11.2007 12:10
Сообщение #2


Гость






Во-первых, ты в процедуре outputALLRec не закрываешь файл, то есть, если после ее вызова попытаться вызвать max_summ, то программа скорее всего вылетит.

Ну, а во-вторых - логическая ошибка. Ты делаешь:
writeln ('vvedite nomer otdeleniya banka:');
readln (otdelenie);
max:= mass[1].summa; { <--- !!! }

По какому праву? Ты что, уверен, что в первом элементе массива содержится клиент с заданным тобой номером отделения? Я бы вообще переписал эту процедуру, чтоб она работала с файлом, а не с массивом:

procedure max_summ;
var
otdelenie: integer; { <--- Описал в типе Bank как Integer - вот и пусть будет Integer }
max :integer;
R: bank;
begin
Name_file;
assign(f,name);
{$i-}
reset(f);
{$i+}
if IOresult = 0 then begin
writeln ('vvedite nomer otdeleniya banka:');
readln (otdelenie);
max:= 0;
while not eof(f) do begin
read(f, R);
if R.otdelenie = otdelenie then
if R.summa > max then max := R.summa;
end;
close(f);
end;
writeln ('vklad4ik s naibolwej summoj:');
writeln (max);
end;



И вообще неплохо было бы избавиться от массива, у тебя работа с файлом, а не с массивом, все-таки...
 К началу страницы 
+ Ответить 
Гость
сообщение 17.11.2007 12:30
Сообщение #3


Гость






просто, я сначала сделал без массива, но тоже с ошибкой, мне мои знакомые сказали, что так с массивом легче, я переписал на массив, ну, лан, спасибо большое, ща попробую сделать без массива
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 19.07.2025 13:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"