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

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

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

 
 Ответить  Открыть новую тему 
> Работа с записью в файлы, циклы, сравнение., Укажите на мою ошибку
Bulkin
сообщение 24.11.2010 10:19
Сообщение #1





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

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


Всем привет!
Есть условия:
В один файл (F) пишем 5 чисел. В другой (G) другие 5 чисел. Пример: 12345 и 34567

Потом читаем их из этих файлов и ищем совпадения, те которые совпали пишем в файл (H1) которые не совпали пишем в другой файл (H2).

Мой результат: в H1 пишет цифру 1, в H2 34567.

Где я ошибься!?

Тело программы:

Program Zapis_i_chtenie;
uses crt;
var
n,i:integer;
fs,gs:integer;
f,g,h1,h2:text;
begin
writeln('Vvedite 5 cyfr dlya F: ');
assign(f,'d:\f.txt');
rewrite(f);
append(f);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(f,n);
end;
close(f);
Writeln('Vvedite 5 cyfr dlya G: ');
assign(g,'d:\g.txt');
rewrite(g);
append(g);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(g,n);
end;
close(g);
assign(f,'d:\f.txt');
assign(g,'d:\g.txt');
assign(h1,'d:\h1.txt');
assign(h2,'d:\h2.txt');
reset(f);
reset(g);
rewrite(h1);
rewrite(h2);
while not EOF(f) do
begin
Readln(f,fs);
begin
while not EOF(g) do
begin
Readln(g,gs);
if fs=gs
then writeln(h1,gs)
else writeln(h2,gs);
end;
end;
end;
close(f);
close(g);
close(h1);
close(h2);
end.


Сообщение отредактировано: Bulkin - 24.11.2010 10:30
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.11.2010 10:22
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


М
Плевать на твою сессию. Сделаешь название по правилам - укажем..



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bulkin
сообщение 24.11.2010 10:32
Сообщение #3





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

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


Исправил название темы.

Сообщение отредактировано: Bulkin - 24.11.2010 10:33
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.11.2010 11:43
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Bulkin @ 24.11.2010 10:19) *
Потом читаем их из этих файлов и ищем совпадения, те которые совпали пишем в файл (H1) которые не совпали пишем в другой файл (H2).
...
Где я ошибься!?

Много, где.

Смотри, я даю тебе прогу, исправленную НАПОЛОВИНУ.
Program Zapis_i_chtenie;
uses crt;
var
n,i:integer;
fs,gs:integer;
f,g,h1,h2:text;
b: boolean;
begin
writeln('Vvedite 5 cyfr dlya F: ');
assign(f,'f.txt');
rewrite(f);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(f,n);
end;
close(f);
Writeln('Vvedite 5 cyfr dlya G: ');
assign(g,'g.txt');
rewrite(g);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(g,n);
end;
close(g);
assign(h1,'h1.txt');
assign(h2,'h2.txt');
reset(f);
rewrite(h1);
rewrite(h2);
while not EOF(f) do begin
Readln(f,fs);
reset(g);
b:=true;
while b and not EOF(g) do begin
Readln(g,gs);
if fs=gs then begin
b:=false;
writeln(h1,gs)
end
end;
if b then writeln(h2,fs)
end;
close(f);
close(g);
close(h1);
close(h2);
end.

Существенно:
- добавлена булева переменная b (разбирешься, зачем?)
- reset(g) переставлен внутрь цикла

Несущественно:
- убраны ненужные append и лишние assign, а также begin и end

Эта прога пишет все, что нужно в файл H1. Но в файл H2 она пишет только те несовпавшие числа, которые были в файле f. Остается добавить еще один цикл, тоже двойной. В нем только два отличия от того, что есть.
1. надо поменять местами файлы f и g (g - во внешнем цикле, f - во внутреннем).
2. выкинуть запись в файл h1

В промежутке между этими циклами файл H2 не трогай (не открывай заново). Файл H1 можешь закрыть совсем, он уже готов.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bulkin
сообщение 24.11.2010 11:49
Сообщение #5





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

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


Спасибо, твоя ширина мысли намного больше моей и поэтому я не смог уловить ее. Т.е. решение понимаю, но в циклах уже запутался. (нет опыта).

Спасибо, буду дальше искать кто поможет.

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

Спасибо!

Сообщение отредактировано: Bulkin - 24.11.2010 11:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.11.2010 12:05
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Вот, бери.
Только прошу: разберись.
Что непонятно - спрашивай.
Program Zapis_i_chtenie;
uses crt;
var
n,i:integer;
fs,gs:integer;
f,g,h1,h2:text;
b: boolean;
begin
writeln('Vvedite 5 cyfr dlya F: ');
assign(f,'f.txt');
rewrite(f);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(f,n);
end;
close(f);
Writeln('Vvedite 5 cyfr dlya G: ');
assign(g,'g.txt');
rewrite(g);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(g,n);
end;
close(g);
assign(h1,'h1.txt');
assign(h2,'h2.txt');
rewrite(h1);
rewrite(h2);
reset(f);
while not EOF(f) do begin
Readln(f,fs);
reset(g);
b:=true;
while b and not EOF(g) do begin
Readln(g,gs);
if fs=gs then begin
b:=false;
writeln(h1,gs)
end
end;
if b then writeln(h2,fs)
end;
reset(g);
while not EOF(g) do begin
Readln(g,gs);
reset(f);
b:=true;
while b and not EOF(f) do begin
Readln(f,fs);
b:=fs<>gs;
end;
if b then writeln(h2,gs)
end;
close(f);
close(g);
close(h1);
close(h2);
end.

А за деньги - в раздел "Задачи на заказ"..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 24.11.2010 12:17
Сообщение #7


Гость






Спасибо за решение. Все работает.

Прошу извинить меня за то, что 2 раза нарушил правила Форума.
 К началу страницы 
+ Ответить 
TarasBer
сообщение 24.11.2010 12:26
Сообщение #8


Злостный любитель
*****

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

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


> В один файл (F) пишем 5 чисел. В другой (G) другие 5 чисел. Пример: 12345 и 34567
> var
> n,i:integer;

Эээээ

> 34567
> integer

Надеюсь, у тебя 32-битный режим?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.11.2010 13:11
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(TarasBer @ 24.11.2010 12:26) *
Эээээ

> 34567
> integer

Надеюсь, у тебя 32-битный режим?

ээээээээ
Running "h:\...\fp101124_bulkin.exe "
Vvedite 5 cyfr dlya F:
->1
->2
->3
->4
->5
Vvedite 5 cyfr dlya G:
->3
->4
->5
->6
->7


smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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