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

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

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

 
 Ответить  Открыть новую тему 
> Работа с файлами
Аlex
сообщение 7.06.2007 18:31
Сообщение #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 - 7.06.2007 18:33
 К началу страницы 
+ Ответить 
Артемий
сообщение 7.06.2007 19:22
Сообщение #2


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

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

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


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

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

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


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


Гость






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

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


Гость






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

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


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

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

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


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


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


Гость






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

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

Сообщение отредактировано: Аlex - 7.06.2007 20:02
 К началу страницы 
+ Ответить 
Артемий
сообщение 8.06.2007 9:00
Сообщение #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

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

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


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


Гость






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


Гость






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


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

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

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


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

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



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


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


Гость






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

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

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


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

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

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


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


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


Гость






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

Сообщение отредактировано: Аlex - 8.06.2007 18:54
 К началу страницы 
+ Ответить 
Артемий
сообщение 8.06.2007 22:13
Сообщение #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

 



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