Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа с файлами

Автор: Domin9es 27.12.2007 15:17

Здравствуйте! Помогите с задачкой. Файлы а и в, компоненты которых являются целыми числами, упорядочены по неубыванию. Получить в файле с все числа файлов а и в без повторений. Файл с должен быть упорядочен по неубыванию. Файлы а и в заполняются вручную.

Автор: Гость 27.12.2007 16:02

Тов. Domin9es.
Поиск, поиск и еще раз поиск! (Как завещал Великий Ленин и как учит Коммунистическая Партия!).
Ну, стопудово уже решалось! И не раз.

Автор: Ozzя 27.12.2007 16:03

Пред. сообщ. - моё. Почему-то форум выплюнул. nea.gif

Автор: Domin9es 27.12.2007 17:15

Перерыл поиск. Ненашел. mad.gif mad.gif mad.gif

Все из одного файла в другой!!!

Автор: Michael_Rybak 27.12.2007 17:25

Что у тебя не получается с задачей?

Автор: Domin9es 27.12.2007 17:41

Нашел сортировку, но с использованием готового файла. Помогите переделать на забивание значений вручную и удаление повторяющегося элемента


Var
f1,f2,f3: text;
max,min,i,t,j: integer;
b: boolean;
arr: array [1..100] of integer;
begin
i:=0;
{$I-}
assign(f1,'C:\1.txt'); reset(f1);
assign(f2,'C:\2.txt'); reset(f2);
assign(f3,'C:\3.txt'); rewrite(f3);
while not eof(f1) do begin
readln(f1,arr[i]);
inc(i);
end;
while not eof(f2) do begin
readln(f2,arr[i]);
inc(i);
end;
repeat
b := True;
for j := 1 to i-1 do
if arr[j] > arr[j+1] then begin
t := arr[j];
arr[j] := arr[j+1];
arr[j+1] := t;
b := False
end
until b;
for j:=1 to i-1 do writeln(f3,arr[j]);
close(f3);
readln


Автор: volvo 27.12.2007 17:52

Это тебя устраивает? То, что надо считать все в массив, потом отсортировать массив в памяти, и вернуть назад в файл? Обычно сортировка файла подразумевает нечто другое... Я бы порекомендовал посмотреть вот на этот вариант:

http://forum.pascal.net.ru/index.php?s=&showtopic=10838&view=findpost&p=68835 (для твоего случая придется чуть-чуть подкорректировать программу)

Автор: Domin9es 27.12.2007 18:18

Я не пойму что делает эта программа. Она переписывает три первых введенных числа каждой строки. blink.gif

Проверьте эту программу


var a,b,c:file of integer;
x,y,t:integer;
begin
assign(a,'a.int');
assign(b,'b.int');
assign(c,'c.int');
{ Vvod znacheniy v faylu a,b -
(esli ne nuzhno - mozhno udalit)}
writeln('Vvedite chisla iz fayla A, v konce - 0');
rewrite(a);
readln(x);
while x<>0 do
begin
write(a,x);
readln(x);
end;
close(a);
writeln('Vvedite chisla iz fayla B, v konce - 0');
rewrite(b);
readln(x);
while x<>0 do
begin
write(b,x);
readln(x);
end;
close(b);
{Formirovanie fayla C};
reset(a); reset(b); rewrite©;
read(a,x); read(b,y);
if x<y then t:=x-1 else t:=y-1;
while not(eof(a)) and not(eof(b)) do
begin
while (x<=t) and not(eof(a)) do read(a,x);
while (y<=t) and not(eof(b)) do read(b,y);
if (x<y) and (x>t) then
begin
t:=x;
write(c,t);
end
else if (y>t) then
begin
t:=y;
write(c,t);
end;
end;
while not(eof(a)) do
begin
read(a,x);
if x>t then
begin
t:=x;
write(c,t);
end;
end;
close(a);
while not(eof(b)) do
begin
read(b,x);
if x>t then
begin
t:=x;
write(c,t);
end;
end;
close(b); close©;
{Vivod sodergimogo fayla C na ekran
(esli ne nuzhno - mozhno udalit)}
writeln('Itogovyj fayl:');
reset©;
while not(eof©) do
begin
read(c,x);
write(x:5);
end;
readln;
end.



Удаляет неповторяющиеся элементы sad.gif

Автор: volvo 27.12.2007 18:33

Цитата
Удаляет неповторяющиеся элементы
Например, какие? Что вводишь, покажи...

Автор: Domin9es 27.12.2007 18:42

1ый файл 1 1 2 56 8 0
2ой файл 4 8 3 19 6 0

Выдает 1 2 4 8 19

Автор: volvo 27.12.2007 19:03

Задание перечитай: файлы должны быть упорядочены по неубыванию... Для упорядоченных файлов этот алгоритм работает...

Автор: Гость 27.12.2007 19:09

Я видимо недопонял задание, но неупорядочены по убыванию это про компоненты файлов?

Автор: Domin9es 27.12.2007 19:28

Упорядочены по неубыванию- это как, по возрастанию? blink.gif

Автор: compiler 27.12.2007 19:51

Цитата(Domin9es @ 27.12.2007 14:28) *
Упорядочены по неубыванию- это как, по возрастанию? blink.gif
не совсем, у иебя могут идти одинаковые элементы подряд, то есть
a b c d ,при условии a<=b<=c<=d, например 0 1 1 2

Автор: Domin9es 27.12.2007 20:13

=>програма верна smile.gif smile.gif smile.gif

Автор: Domin9es 8.01.2008 0:00

Объясните алгоритм!!! Само формирование файла с непонятно

 reset(a); reset(b); rewrite©;
read(a,x); read(b,y);
if x<y then t:=x-1 else t:=y-1;
while not(eof(a)) and not(eof(b)) do
begin
while (x<=t) and not(eof(a)) do read(a,x);
while (y<=t) and not(eof(b)) do read(b,y);
if (x<y) and (x>t) then
begin
t:=x;
write(c,t);
end
else if (y>t) then
begin
t:=y;
write(c,t);
end;
end;
while not(eof(a)) do
begin
read(a,x);
if x>t then
begin
t:=x;
write(c,t);
end;
end;
close(a);
while not(eof(b)) do
begin
read(b,x);
if x>t then
begin
t:=x;
write(c,t);
end;
end;
close(b); close©;