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

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

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

> Не могу найти ошибку, Записи в файле
Zundell
сообщение 22.01.2007 0:13
Сообщение #1


Пионер
**

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

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


I. Удалить из внешнего файла все записи, удовлетворяющие условию, заданному в варианте, и распечатать информацию, оставшуюся в файле.
II. Добавить N записей в конец внешнего файла

я так понял,что добавить необходимо в первоначальный вариант введенных данных,а не в тот файл,где находятся записи подходящие нашему условию.
Условие такого:удалить тех у кого отличные оценки и в аттестате и при вступительных экзаменах,а добавить например 2-х человек,а затем распечатать тех,кто сдал вступительные экзамены на 4 и 5(я так понял из все вообще введенных студентов,т.е изначальные+добавленные)!Заранее всем огромное спасибо! yes2.gif

вот мой код:
uses crt;
type abit=record
fio:string[20];
godrow:integer;
godokon:integer;
at_mat:integer;
at_rus:integer;
at_fiz:integer;
Obwaga:char;
ab_mat:integer;
ab_rus:integer;
ab_fiz:integer;
end;
var
f,f1:file of abit;
s,r1,r:abit;
ch:char;
i,k,n,m:integer;
key1,key2:boolean;

procedure Vvod;
begin
with s do
begin
writeln;
writeln('______');
writeln('Vvedite dannue o ',i,'-m abiture:');
writeln('_______');
writeln('vvedite FIO:');
readln(Fio);
writeln('Vvedite God rowd:');
readln(godrow);
writeln('Vvedite god okonch wkolu:');
readln(godokon);
writeln;
writeln('Vvedite ozenki attestata:');
writeln('matematika:');
readln(at_mat);
writeln('Russkij:');
readln(at_rus);
writeln('fizika');
readln(at_fiz);
writeln;
key1:=false;
writeln('Nuwna obwaga:[y/n]');
readln(obwaga);
if (obwaga in ['Y','y','N','n']) then key1:=true;
writeln;
writeln('Vvedite ozenki vstupit ekzov:');
writeln('matematika');
readln(ab_mat);
writeln('Russkij');
readln(ab_rus);
writeln('fizika');
readln(ab_fiz);
write(f1,r);
end;
end;

procedure udal;
var
i,j:integer;
begin
reset(f1);
for i:=1 to filesize(f1) do
with r do begin
if (at_mat<>5) and (at_rus<>5) and (at_fiz<>5) and (ab_mat<>5) and (ab_rus<>5)
and (ab_fiz<>5) then
write(f,s);
end;
end;


procedure Vivod;
begin
reset(f);
while not eof(f) do
begin
read(f,s);
with s do begin
writeln('|',fio,'|',godrow,'|',godokon,'|',at_mat,'|',at_rus,'|',at_fiz,'|',ab_mat,'|',ab_rus,'|',ab_fiz,'|',obwaga,'|');
end;
end;
close(f);
end;

Procedure sortirovka;
var
i,j,n:integer;
f:text;
begin
reset(f1);
n:=filesize(f1)-1;
for i:=0 to n do begin
for j:=0 to n-1 do begin
seek(f1,j);
read(f1,r);
read(f1,r1);
with s do begin
if r.at_fiz>r1.at_fiz then
begin
seek(f1,j);
write(f1,r1);
write(f1,r);
end;
end;
end;
end;
close(f1)
end;

procedure dobav;
var
j,i,k:integer;
c:char;
l:boolean;
begin
reset(f1);
writeln('Dobavit tovar?,Esli da,to nawmite Y,esli net to lubuju knopko');
readln©;
i:=0;
while c='y' do
begin
i:=i+1;
with r1 do
begin
writeln('vvedite FIO:');
readln(Fio);
writeln('Vvedite God rowd:');
readln(godrow);
writeln('Vvedite god okonch wkolu:');
readln(godokon);
writeln;
writeln('Vvedite ozenki attestata:');
writeln('matematika:');
readln(at_mat);
writeln('Russkij:');
readln(at_rus);
writeln('fizika');
readln(at_fiz);
writeln;
key1:=false;
writeln('Nuwna obwaga:[y/n]');
readln(obwaga);
if (obwaga in ['Y','y','N','n']) then key1:=true;
writeln;
writeln('Vvedite ozenki vstupit ekzov:');
writeln('matematika');
readln(ab_mat);
writeln('Russkij');
readln(ab_rus);
writeln('fizika');
readln(ab_fiz);

end;
k:=0;
reset(f1);
l:=false;
while (not eof(f1)) do
begin
read(f1,r);
k:=k+1;
if r.at_fiz=r1.at_fiz then
begin
seek(f1,k-1);
for j:=(k-1) to filesize(f)-2 do
begin
seek(f1,j+1);
read(f1,r);
seek(f1,j);
write(f1,r);
end;
seek(f1,filesize(f1)-1);
truncate(f1);
write(f1,r1);
l:=true;
end;
end;
if l=false then
begin
seek(f1,filesize(f1));
write(f1,r1);
end;
writeln('Dobavit tovar?Ecli da,to nawmite Y,esli net to lubuju knopku');
readln©;
end;
clrscr;
close(f1);
end;

procedure Vivod2;
begin
reset(f1);
while not eof(f1) do
begin
read(f1,r);
with r do begin
writeln('|',fio,'|',godrow,'|',godokon,'|',at_mat,'|',at_rus,'|',at_fiz,'|',ab_mat,'|',ab_rus,'|',ab_fiz,'|',obwaga,'|');
end;
end;
close(f1);
end;





begin
clrscr;
assign(f1,'zad8.dat');
rewrite(f1);
writeln('Programmu vupolnyal student 1-ogo kursa Zimin Egor');
writeln('_____________________________________________________');
writeln(' ');
writeln('vvedite kol tovarov-');
readln(n);
for i:=1 to n do
begin
vvod;
end;
close(f1);
assign(f,'zad8.dat');
rewrite(f);
udal;
vivod;
dobav;
vivod2;
readln;
end.








 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 14)
мисс_граффити
сообщение 22.01.2007 0:25
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Цитата
удалить тех у кого отличные оценки и в аттестате и при вступительных экзаменах

а ты пытаешься удалять что-то совсем не то:
with r do begin   if (at_mat<>5) and (at_rus<>5) and (at_fiz<>5) and (ab_mat<>5) and (ab_rus<>5)  and (ab_fiz<>5) then  write(f,s);

по идее, после этого могли бы остаться только те, кто не имеет ни одной пятерки.
"могли бы остаться" - потому что я не понимаю, как может работать udal.
ты хочешь читать из одного файла, а при необходимости писать в другой? можешь ткнуть пальцем в место, где ты читаешь запись? (где пишешь - сама вижу).
З.Ы. на будущее - форматированием кода не пренебрегай. сильно облегчает чтение.
З.З.Ы. и тестовый файлик хорошо бы... rolleyes.gif zad8.dat... заполненный....


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.01.2007 0:26
Сообщение #3


Гость






В чем глубинный смысл вот этой процедуры:
procedure udal;
var
i,j:integer;
begin
reset(f1);
for i:=1 to filesize(f1) do
with r do begin { <--- Вроде проверяем R }
if (at_mat<>5) and (at_rus<>5) and (at_fiz<>5) and (ab_mat<>5) and (ab_rus<>5)
and (ab_fiz<>5) then
write(f,s); { <--- Но записываем в файл S }
end;
end;
?
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.01.2007 0:27
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


только заметила.
как думаешь, что после
assign(f,'zad8.dat');  rewrite(f);
останется в файле?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 22.01.2007 0:35
Сообщение #5


Пионер
**

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

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


To Volvo, я хотел так сделать...сначала я вводил информацию и записывал ее в (f1,r)!далее мысль в том,чтобы в файле (f1,r) проверить на условие все находящиеся там записи,те которые не удовлетворяют записать в другой файл,который уже вывести на печать!а далее уже добавлять че нам там нада.

To мисс,да,эт я лохонулся...файл ведь очиститься полностью((Мне нужно удалить тех кто удовлетворяет условию,а вывести кто остался неудволетворенным smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.01.2007 1:23
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 22.01.2007 16:35
Сообщение #7


Пионер
**

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

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


Можно вопрос?Вот например я ввел нное колличество записей в файл,так...далее я проверяю на какое-либо условие...если данная запись удовлетворяет условию,то она записывается в другой файл!Теперь вопрос,а запись записанная в другой файл,останется в изначальном файле?или безвозвратно перепишется?Заранее спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.01.2007 18:01
Сообщение #8


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Останется, конечно.
Представь: ты взял учебник и некоторые параграфы (удовлетворяющие определенным условиям) переписываешь в тетрадку....


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 22.01.2007 18:16
Сообщение #9


Пионер
**

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

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


А можно подругому удалить удовлетворяющее условие?не способом переписывания в другой файл!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.01.2007 18:38
Сообщение #10


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Можно. Например, если порядок не критичен, можно на место удаляемой записи написать последнюю из файла, а последнюю отсечь...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 22.01.2007 18:54
Сообщение #11


Пионер
**

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

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


Панятна,ааа нет...но ведь мне еще нужно ко ВСЕМ записям первоначальным добавить еще новые,но как я добавлю,если я перепишу?извиняюсь за занудство
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.01.2007 18:59
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


blink.gif
Цитата
I. Удалить из внешнего файла все записи, удовлетворяющие условию, заданному в варианте, и распечатать информацию, оставшуюся в файле. II. Добавить N записей в конец внешнего файла

Я так понимаю, удаляем лишнее, а потом к результату добавляем N записей.
Соответственно, алгоритм может быть такой: открываем старый файл для чтения, новый для записи. Переписываем нужное.
Удаляем старый. Переименовываем новый.
Начинаем добавлять N записей.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 22.01.2007 19:35
Сообщение #13


Пионер
**

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

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


нет..нада вывести файл с удаленным лишним!а добавить нада к нетронотому файлу..первоначально введенному и его тоже вывести!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 22.01.2007 21:20
Сообщение #14


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


ну тогда так:
все, что не надо удалять, пишешь в новый файл. в итоге имеешь 2 файла - один - неизменный старый, к которому будешь добавлять, а второй новый - содержащий только подходящие записи.

или, если не хочешь с 2 файлами возиться, то так:
type abit=record  
fio:string[20];
godrow,godokon,at_mat,{все старые поля}:integer;
delete: boolean;
end;

то есть каждая запись будет содержать метку - удалена она или нет. соответственно, ты, с одной стороны, можешь к ней обратиться - а с другой, понятно, что она удалена и в новый файл не входит.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 22.01.2007 21:36
Сообщение #15


Пионер
**

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

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


панятна..спасибо!Щя все сделаю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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