Program BBC;
uses crt;
type
mas=array [1..3] of integer;
gos=record
naz: string[20];
pl,ch,doh: Integer;
kol: mas;
mor: char;
case form: integer of
1: ();
2: ();
3: ();
end;
Pelem=^Telem;
Telem=record
Inf: gos;
Left, Right: Pelem;
end;
Var
Head: Pelem;
n,i,j:integer;
x: gos; el: pelem;
Procedure Tab(n: Integer); Begin GoToXY(n,WhereY); End;
Procedure vvod;
begin
with x do
begin
WriteLn('Государство № ',i);
Write('Название: '); ReadLn(naz);
Write('Площадь территории: '); ReadLn(pl);
Write('Численность населения: '); ReadLn(ch);
Write('Общий доход населения в $: '); ReadLn(doh);
Write('Количество больниц: '); ReadLn(kol[1]);
Write('Количество школ: '); ReadLn(kol[2]);
Write('Количество вузов: '); ReadLn(kol[3]);
Write('Наличие выхода к морю: '); ReadLn(mor);
WriteLn('Форма правления: ');
WriteLn('(1-Республика, 2-Королевство');
WriteLn(' 3-малое гос-во )');
ReadLn(form);
clrscr;
end;
end;
Procedure newring(x: gos);
begin
New(Head); Head^.inf:=x;
Head^.Left:=Head;
Head^.Right:=Head;
end;
Procedure add(x: gos);
begin
New(El); El^.inf:=x;
Head^.left^.Right:=El;
El^.Left:=Head^.Left;
El^.right:=Head;
Head^.Left:=El;
End;
procedure upor;
var d: pelem;
begin
for i:=1 to n do
begin
el:=head;
while el^.right<>head do
begin
d:=el^.right;
if el^.inf.doh>d^.inf.doh then
begin
x:=d^.inf;
d^.inf:=el^.inf;
el^.inf:=x;
end;
el:=el^.right;
end;
end;
for i:=1 to n do
begin
el:=head;
while el^.right<>head do
begin
d:=el^.right;
if (el^.inf.doh=d^.inf.doh) and (el^.inf.kol[3]/el^.inf.ch>d^.inf.kol[3]/el^.inf.ch) then
begin
x:=d^.inf;
d^.inf:=el^.inf;
el^.inf:=x;
end;
el:=el^.right;
end;
end;
end;
procedure print;
begin
El:=Head; j:=1;
repeat
with El^.inf do
begin
WriteLn('Государство № ',j);
WriteLn('Название: ',naz);
WriteLn('Площадь территории: ',pl);
WriteLn('Численность населения: ',ch);
WriteLn('Общий доход населения в $: ',doh);
WriteLn('Количество больниц: ',kol[1]);
WriteLn('Количество школ: ',kol[2]);
WriteLn('Количество вузов: ',kol[3]);
WriteLn('Наличие выхода к морю: ',mor);
WriteLn('Форма правления: ');
if form=1 then writeln('Рeспублика');
if form=2 then writeln('Монархия');
if form=3 then writeln('Малое гос-во');
readkey; clrscr;
end; j:=j+1;
El:=El^.right;
until El=Head;
end;
Procedure delmax;
begin
el:=Head;
while el^.right<>Head do
begin
if el^.inf.doh>300 then
begin
El^.left^.right:=El^.right;
El^.right^.left:=El^.left;
Dispose(el);
end;
el:=el^.right;
end;
WriteLn('Данные удалены');
end;
begin
clrscr;
Write('Введите кол-во государств: '); ReadLn(n);
clrscr; i:=1;
with x do vvod;
newring(x);
for i:=2 to n do
begin
vvod;
add(x);
end;
WriteLn('Формирование кольца завершено');
WriteLn('Элементы кольца');
print;
upor;
WriteLn('Упорядоченные элементы кольца');
print;
delmax;
WriteLn('Кольцо после удаления c наибольшим доходом');
print;
Writeln('Введите данные ещё о двух государствах: ');
i:=1;
with x do vvod;
newring(x);
for i:=2 to 2 do
begin
vvod;
add(x);
end;
repeat until keypressed;
end.
Создать тип данных и описать структуру, отображающую следующую информацию
• название государства,
• площадь территории,
• численность населения,
• общий доход населения в долларах,
• количество больниц, школ, вузов,
• наличие выхода к морю,
• форма государства (республика, монархия, малое государство)
Создать динамическое кольцо из данных о 5-6 государствах. Предусмотреть вывод всей введенной информации, промежуточных результатов и результатов выполнения указанного ниже задания. После выполнения удаления добавить в кольцо два новых элемента.
Вывести данные о трех государствах с минимальными доходами населения,
указав среднее количество вузов на душу населения. данные о государстве с наибольшим показателем - удалить не работает((
Код:
помогите исправить недоработку....