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

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

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

 
 Ответить  Открыть новую тему 
> Работа с файлами
сообщение
Сообщение #1


Гость






Слить в один два упорядоченных по возрастающей файла целых чисел. Файл результат тоже должен быть упорядочен по возрасающей.

Я напсиал прогу,но прблема в том что если в первом файле числа больше чем во втором,то файл-результат не получается упорядоченный по возрастающей.(Т.Е если в певом файле написать 5 6 7 8, а во втором 1 2 3 4, то файл-результат не получится упорядоченным по возрастающй)
Помогите исправить плз..
Вот что я написал:


Var
f1:file of char;
f2:file of char;
f3:file of char;
x:char;
mas:array[1..100] of char;
i,k,n,j:integer;
new:char;
begin
assign(f1,'C:\1.pas');
reset(f1);
assign(f2,'C:\2.pas');
reset(f2);
assign(f3,'C:\3.pas');
rewrite(f3);
i:=1;
while not eof (f1) do
begin
read(f1,x);
mas[i]:=x;
i:=i+1;
end;
while not eof (f2) do
begin
read(f2,x);
mas[i]:=x;
i:=i+1;
end;
for i:=1 to i-1 do
write(mas[i]);
writeln('sortiruem');
n:=i;
for j:=1 to n-1 do
begin
new:=mas[n];
k:=n;
for i:=n downto j do
if mas[i]>new then
begin
k:=i;
new:=mas[j];
mas[j]:=new;
end;
for i:=1 to n do
write (mas[i]:4);
writeln;
for i:=1 to n do
write (f3,mas[i]);
readln;
close(f1);
close(f2);
close(f3);
readln;
end;
end.



Сообщение отредактировано: Аlex -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Помощник капитана
****

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

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


   f1:file of char;
f2:file of char;
f3:file of char;

А разве нельзя использовать file of integer?

Добавлено через 1 мин.
И потом эти цифры просто сортируешь..


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
прблема в том что если в первом файле числа больше чем во втором,то файл-результат не получается упорядоченный по возрастающей.
Проблема у тебя не в этом... Что ты будешь делать, если сумма размеров файлов превысит 64К?

Сколько же можно повторять - сортировка методом слияний (Неймана), ищи (и в Гугле, и на форуме) и разбирайся...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Спс.Щас попробую.

Сообщение отредактировано: Аlex -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Помощник капитана
****

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

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


Блин,1 - читай пост volvo
2 - бери два file of integer, пихай в массив integer,сортируй и пиши в третий файл. самый тупой вариант.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Сортировка слияний (Неймана),в данной ситуации не подходит.Если мы будем использовать сортировку Неймана, то в программе мы будем использовать процедуру. А в решении этой задачи нужно обойтись без функций и процедур.
Можно ли в данной ситуации обойтись без функций и процедур?Если да, то как?

P.S Bсходный файл у меня не привысит размер 64K

Сообщение отредактировано: Аlex -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Помощник капитана
****

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

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


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

С текстовыми пойдет?

Сообщение отредактировано: Артемий -


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Если мы будем использовать сортировку Неймана, то в программе мы будем использовать процедуру. А в решении этой задачи нужно обойтись без функций и процедур.
Это что, тоже было написано в первом посте? Не было. Что ж ты хотел получить в ответ, если даешь неполное задание? Тогда, извини - но может и ЭТО тоже неполная версия задания?... Не хочется изобрести очередной велосипед, чтоб ты потом опять сказал, что тебе по каким-то причинам он не подойдет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Артемий Спс,с текстовыми пойдёт. Тока почемуто компилятор ругается на 13 строку, пишет "Выход за границы диапазона изменения индекса 1..100.
Как бороться с этим?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Помощник капитана
****

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

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


i:=1;
Странно,у меня не ругнулся..

Добавлено через 2 мин.
И замени
........
b := True;
for j := 1 to i-2 do
if arr[j] > arr[j+1] then begin
............



Сообщение отредактировано: Артемий -


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Пробовал непомогло. (У мя компилятор Pascal ABC)
Теперь компилятор ругается на 32 строку и пишет :EAccessViolation. Access violation at address 0076A0D8 in module 'Pascal ABC.exe'. Read of address 00000014. Программа завершена.
Что делать?
Мож у мя проблема в компиляторе?

-----
Щас попробую в обычном TP7.1 откомпилить.

Сообщение отредактировано: Аlex -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Помощник капитана
****

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

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


У меня Turbo Pascal 7.0 ошибок не дает.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Откомпилил прогу, проблема оказалась в моем 'Pascal ABC.exe'
Есть еще один вопррос: Как вывести на экран содержимое файла f3?

Сообщение отредактировано: Аlex -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Помощник капитана
****

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

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


while not eof(f3) do begin
readln(f3,arr[i]);
writeln(arr[i]);
inc(i);
end;


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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