![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
![]()
Задача: В ООН имеется полный перечень всех стран, который включает в себя: название, континент, столицу, площадь, численность населения, государственный строй. Вывести названия и столицы государств в порядке убывания плотности населения. Применить многопутевое двухфазное естественное сбалансированное слиянеие.
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
![]()
На реальном примере покажите как это работает?
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
![]()
двухфазное? это как?
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
![]()
В принципе понял весь алгоритм решения. Последний вопрос (многопутевое! слияние подразумевает использование n - временных файлов) : сколько их брать?
Запросить у пользователя, или в зависимости от кол-ва серий в исходном файле или как захочу, например 3. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 21.12.2011
Сообщений: 6
|
![]()
nicklifs, дружище выручай, такая же задача в принципе и у меня, даже один в один, я слабо шарю во всех этих алгоритмах, помоги пожалуйста. Буду Очень благодарен !
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
![]()
dmgcodevil,
вот пример двухпутевого ..... - частный случай многопутевого uses crt; var f0,f1,f2,d1,d2: file of integer; i,n,prov,x: integer; procedure firstras(var prov:integer); var k, i, x,last:integer; begin reset(f0); rewrite(f1); rewrite(f2); k:=1; //записывать в k-файл(в первый изначально) в f1 i:=1; read(f0,last); write(f1,last); while not eof(f0) do begin read(f0,x); if ((x<last)and(k=1)) then begin write(f1,x); last:=x; end; if ((x<last)and(k=2)) then begin write(f2,x); last:=x; end; if (x>last) then begin if k=1 then begin write(f2,x);last:=x; k:=2 end else begin write(f1,x);last:=x; k:=1 end; end; end; reset(f2); if eof(f2) then prov:=1 //файл отсортирован! else prov:=2; close(f1); close(f2); end; // изначальное распределение procedure sort(var f1,f2,d1,d2:file of integer; var prov:integer ); var a,alast,b,blast,k,m,last,x,i,n: integer; fl:boolean; begin rewrite(d1); rewrite(d2); reset(f1); reset(f2); fl:=true; k:=1; //записываем в файл 1 m:=1; //читаем из файла 1 read(f1,a); read(f2,b); if a>b then begin write(d1,a); alast:=a; blast:=a; end else begin write(d1,b); blast:=b; alast:=b; m:=2; end; if m=1 then begin read(f1,a); if a>alast then fl:=false end; if m=2 then begin read(f2,b); if b>blast then fl:=false end; while (not eof(f1))and(not eof(f2)) do begin if fl=true then begin if a>b then begin if k=1 then write(d1,a) else write(d2,a); alast:=a; m:=1; read(f1,a); if a>alast then fl:=false end else begin if k=2 then write(d2,b) else write(d1,b); blast:=b; m:=2; read(f2,b); if b>blast then fl:=false end; end else begin if (m=1) then begin if k=1 then write(d1,b) else write(d2,b); blast:=b; read(f2,b); while (b<blast)and((not eof(f1))and(not eof(f2))) do begin if k=1 then begin write(d1,b);blast:=b; read(f2,b); end else begin write(d2,b); blast:=b; read(f2,b); end; end; end else begin if k=1 then write(d1,a) else write(d2,a); alast:=a; read(f1,a); while (a<alast)and((not eof(f1))and(not eof(f2))) do begin if k=1 then begin write(d1,a);alast:=a; read(f1,a); end else begin write(d2,b); blast:=b; read(f1,a); end; end; end; if k=1 then k:=2 else k:=1; fl:=true; end; end; //while 85 if not eof(f1) then begin while not eof(f1) do begin if k=1 then write(d1,a) else write(d2,a); alast:=a; read(f1,a); if a>alast then if k=1 then k:=2 else k:=1; end; if k=1 then begin if a<b then begin write(d1,b); write(d1,a); end else begin write(d1,a); write(d1,b); end end else begin if a<b then begin write(d2,b); write(d2,a) end else begin write(d2,b); write(d2,a) end; end; end; if not eof(f2) then begin while not eof(f2) do begin if k=1 then write(d1,b) else write(d2,b); blast:=b; read(f2,b); if b>blast then if k=1 then k:=2 else k:=1; end; if k=1 then begin if a<b then begin write(d1,b); write(d1,a) end else begin write(d1,a); write(d1,b); end; end else begin if a<b then begin write(d2,b); write(d2,a); end else begin write(d2,a); write(d2,b) end; end; end; close(d2); reset(d2); if eof(d2) then prov:=1 //файл d1 отсортирован! else prov:=2; close(d1); close(d2); close(f1); rewrite(f1); close(f1); close(f2); rewrite(f2); close(f2); end; |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
![]()
Begin
assign(f0,'f0.dat'); assign(f1,'f1.dat'); assign(f2,'f2.dat'); assign(d1,'d1.dat'); assign(d2,'d2.dat'); rewrite(f1); close(f1); rewrite(f2); close(f2); rewrite(d1); close(d1); rewrite(d2); close(d2); write('Введите кол-во элементов иcходного файла: '); readln(n); rewrite(f0); for i:=1 to n do write(f0,random(201)-100); write('Исходный файл: '); reset(f0); while not eof(f0) do begin read(f0,x); write(x,' '); end; writeln; firstras(prov); while(prov<>1) do begin sort(f1,f2,d1,d2,prov); if prov<>1 then sort(d1,d2,f1,f2,prov); end; reset(d1); reset(f1); rewrite(f0); if not eof(d1) then begin while not eof(d1) do begin read(d1,x); write(f0,x); end; end; if not eof(f1)then begin while not eof(f1) do begin read(f1,x); write(f0,x); end; end; close(f1); close(d1); close(f0); write('Результат: '); reset(f0); while not eof(f0) do begin read(f0,x); write(x,' '); end; writeln; close(f0); erase(f1); erase(f2); erase(d1); erase(d2); End. |
![]() |
![]() |
![]() |
#9 |
Регистрация: 21.12.2011
Сообщений: 6
|
![]()
Спасибо nicklifs, а у тебя того примера со странами не осталось? Или как это можно поправить, я просто паскаля совсем не знаю.
|
![]() |
![]() |
![]() |
#10 |
Регистрация: 21.12.2011
Сообщений: 6
|
![]()
Спасибо nicklifs, а у тебя того примера со странами не осталось? Или как это можно поправить, я просто паскаля совсем не знаю.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отсортировать файл с ростом первых букв предложений.. | dragon_pb_ | Общие вопросы C/C++ | 0 | 01.12.2011 22:40 |
Отсортировать структуры (Паскаль) | Traus | Помощь студентам | 0 | 04.10.2011 00:31 |
Добавить элемент в типизированный файл и его с отсортировать | Valja | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 09.05.2011 19:21 |
Найти наибольший и наименьший элемент в каждой строке матрицы. Отсортировать... (Паскаль) | Tifa | Помощь студентам | 0 | 27.01.2011 23:07 |
Тестовый файл. Найти сумму всех чисел, входящих в этот файл. (Паскаль) | Homeros | Помощь студентам | 1 | 26.01.2011 14:05 |