Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 16:38   #11
dmgcodevil
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

Вот исправил под структуру ООН, работает но не совсем правильно. Т.е. иногда ложится в рантайме, а вообще не сортирует два-три числа. Где-то мне кажется ошибка в алгоритме.
uses
crt;

type
country = record
name: string[20];
area: real;
population: real;
end;

var
f0, f1, f2, d1, d2: file of country;
i, n, prov : integer;
x: country;
countrymas : array[1..5] of country;

procedure firstras(var prov: integer);
var
k, i: integer;
x, last: country;
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.population < last.population) and (k = 1)) then begin
write(f1, x);
last := x;
end;
if ((x.population < last.population) and (k = 2)) then begin
write(f2, x);
last := x;
end;
if (x.population > last.population) 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 country; var prov: integer );
var
a, b, alast, blast : country;
k, m, 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.population > b.population 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.population > alast.population then fl := false end;
if m = 2 then begin read(f2, b); if b.population > blast.population then fl := false end;
while (not eof(f1)) and (not eof(f2)) do
begin

if fl = true then begin

if a.population > b.population then begin
if k = 1 then write(d1, a)
else write(d2, a);
alast := a;
m := 1;
read(f1, a);
if a.population > alast.population 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.population > blast.population 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.population < blast.population) 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.population < alast.population) 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.population > alast.population then
if k = 1 then k := 2
else k := 1;
end;

if k = 1 then begin
if a.population < b.population then begin write(d1, b); write(d1, a); end
else begin write(d1, a); write(d1, b); end
end
else begin
if a.population < b.population 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.population > blast.population then
if k = 1 then k := 2
else k := 1;
end;

if k = 1 then begin
if a.population < b.population then begin write(d1, b); write(d1, a) end
else begin write(d1, a); write(d1, b); end;
end
else begin
if a.population < b.population 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;
dmgcodevil вне форума Ответить с цитированием
Старый 22.12.2011, 16:38   #12
dmgcodevil
 
Регистрация: 21.12.2011
Сообщений: 6
По умолчанию

begin
countrymas[1].name := 'New York';
countrymas[1].population := 5;
countrymas[2].name := 'L.A.';
countrymas[2].population := 3;
countrymas[3].name := 'Vitebsk';
countrymas[3].population := 25;
countrymas[4].name := 'Moscow';
countrymas[4].population := 8;
countrymas[5].name := 'Minsk';
countrymas[5].population := 12;
//countrymas[5].name := 'Florida';
//countrymas[5].population := 6;
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);
n := 5;
rewrite(f0);
for i := 1 to n do
begin
write(f0, countrymas[i]);
write(countrymas[i].population, ' ');
end;
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.population, ' ');
end;
writeln;
close(f0);
erase(f1); erase(f2);
erase(d1); erase(d2);
end.
dmgcodevil вне форума Ответить с цитированием
Старый 27.12.2011, 16:40   #13
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

У меня со странами было... но я сделал так. Просто много геммороя будет... нужно или вручную заполнять все данные, или записать их в файл... Стран очень много. Я сделел так, в задании(РГР) написал условие без стран.... просто Применить......

чтобы сделать как надо... нужно читать не числа из файла и записи, сделать это довольно просто... ну тогда и в сортировке нужно будет немного подправить.
nicklifs вне форума Ответить с цитированием
Старый 27.12.2011, 16:45   #14
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

dmgcodevil, есть такая структура данных как запись, которая включает несколько переменных различного типа...
например
type strana = record
stoliza: string [20];
pop: integer;
end;
var temp:strana;
nicklifs вне форума Ответить с цитированием
Старый 27.12.2011, 16:50   #15
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

Извиняюсь, плохо посмотрел код... вы испотльзуете записи.
Зачем вам массив записей?
Просто циклом вводите данные в запись, её записываете в файл и всё.
Ну в принципе можно и через массив записей, но это неправильно со стороный памяти (препод может ...)
nicklifs вне форума Ответить с цитированием
Старый 27.12.2011, 16:55   #16
nicklifs
Пользователь
 
Регистрация: 10.12.2011
Сообщений: 32
По умолчанию

Может и алгоритм работает не правильно... Но с большим кол-вом данных вроде работает правильно.
nicklifs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отсортировать файл с ростом первых букв предложений.. 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