Помощь - Поиск - Пользователи - Календарь
Полная версия: Записи
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Desktop II
Дано три страны. Напечатать списко стран в порядке спаданя
плотность населения, указать количесвто школ, больниць, ВУЗов которые
припадають на 1000 человек.

Как сделать условие что бы страны выводило в порядке спадание плотности населения ? И количесвто школ, больниць, ВУЗов которые припадають на 1000 человек?

Что я сделал.
<--->
FreeMan
shkoly/nas*1000 - колво школ на 1000 населения

а насчёт плотности - отсортируй массив. плотность=nas/plosh
Desktop II
Не совсем понял как в даном случае отсортировать массив....

Вот код но он работает:
<--->
мисс_граффити
Цитата(Desktop II @ 28.03.2006 18:25) *
Не совсем понял как в даном случае отсортировать массив....
Вот код но он работает

мм?
так пугает работающий код?
если серьезно - глюк здесь.
for i:=1 to 3 do 
begin
max:=masv[i];
l:=i;
while j>=3 do
begin
if max<masv[j] then
begin
max:=masv[j];
l:=j;
end;
j:=j+1;
end;
masv[l]:=masv[i];
masv[i]:=max;
end;

тебе же надо сортировать по плотности?
вот и сравнивай плотности! то есть не masv[i], а masv[i].plot
Desktop II
С сортировкой я уже разобрался. Но нде мне надо расположить нахождение площяди Plot:=nas/plosh; и в писать его в запись. Тоже самое с бальницами вузами и школами где мне расположить йх
mshk:=(shkoly/nas)*1000; mbol:=(bolnic/nas)*1000; mwuz:=(wuzy/nas)*1000; ???
writeln('Na 1000 chelovek shkol',b[i].mshk);
writeln('Na 1000 chelovek bolnic',b[i].mbol);
writeln('Na 1000 chelovek',b[i].mwuz);
<--->
мисс_граффити
plot:=nas/plosh;readln(b[i].plot); 

сделай так, если хочешь хранить
b[i].plot:=b[i].nas/b[i].plosh; 


а вот эти переменные
procedure Input(var b : TBase);
var
plot: real;
nas:integer;
plosh:integer;

тебе вообще зачем?
Desktop II
Я правильно понял сюда надо ставить нахождение плотности населения ?
И там же больницы вузы и школы на 1000 человек ?
Если так поставить b[i].plot:=b[i].nas/b[i].plosh; то пишет тип неверный ( Type mistmatch ).
procedure Input(var b : TBase);
var
i : byte;

begin
for i := 1 to n do begin
write('Vvedite nazv strani');readln(b[i].nazv);
write('Ploshad');readln(b[i].plosh);
write('Kolichestvo naseleniya');readln(b[i].nas);
write('Kolichestvo shkol');readln(b[i].shkoly);
write('Kolichestvo bolnic');readln(b[i].bol);
write('Kolichestvo WUZov');readln(b[i].wuzy);
b[i].plot:=b[i].nas/b[i].plosh;
writeln;
end;
end;
F.I.A.T.
Цитата(Desktop II @ 29.03.2006 10:05)
Если так поставить b[i].plot:=b[i].nas/b[i].plosh; то пишет тип неверный ( Type mistmatch ).

Type Mismatch - это несоответствие типов. Кстати, совершенно правильно пишет: тип Byte не может хранить данные вещественного типа... Используй Trunc, если тебе достаточно целой части, или меняй тип поля plot на real...
Desktop II
Вроде все работает только ответы минусовые, почему ?
Vivido posle sortirovki:
Nazvnie: StranaII
Ploshyad: 16960
Naselenie: -26368
Shkol: 4000
Bolnic: 5000
Wuzov: 100
Plotnost: -1.5547169811E+00
Na 1000 chelovek shkol-1.5169902913E+02
Na 1000 chelovek bolnic-1.8962378641E+02
Na 1000 chelovek-3.7924757282E+00
Nazvnie: StranaI
Ploshyad: 13568
Naselenie: -25536
Shkol: 2500
Bolnic: 4000
Wuzov: 1000
Plotnost: -1.8820754717E+00
Na 1000 chelovek shkol-9.7901002506E+01
Na 1000 chelovek bolnic-1.5664160401E+02
Na 1000 chelovek-3.9160401003E+01
uses crt;
const
n = 2;
type
TRec = record
nazv : string;
plosh,shkoly,bol,wuzy,nas:integer;
plot : real;

end;
TBase = array [1..n] of TRec;

procedure Input(var b : TBase);
var
i : byte;

begin
for i := 1 to n do begin
write('Vvedite nazv strani');readln(b[i].nazv);
write('Ploshad');readln(b[i].plosh);
write('Kolichestvo naseleniya');readln(b[i].nas);
write('Kolichestvo shkol');readln(b[i].shkoly);
write('Kolichestvo bolnic');readln(b[i].bol);
write('Kolichestvo WUZov');readln(b[i].wuzy);
b[i].plot:=b[i].nas/b[i].plosh;
b[i].mshk:=(b[i].shkoly/b[i].nas)*1000;
b[i].mbol:=(b[i].bolnic/b[i].nas)*1000;
b[i].mwuz:=(b[i].wuzy/b[i].nas)*1000;
writeln;
end;
end;

procedure Print(b : TBase);
var
i : byte;
begin
for i := 1 to n do begin
writeln('Nazvnie: ',b[i].nazv);
writeln('Ploshyad: ',b[i].plosh);
writeln('Naselenie: ',b[i].nas);
writeln('Shkol: ',b[i].shkoly);
writeln('Bolnic: ',b[i].bol);
writeln('Wuzov: ',b[i].wuzy);
writeln('Plotnost: ',b[i].plot);
writeln('Na 1000 chelovek shkol',b[i].mshk);
writeln('Na 1000 chelovek bolnic',b[i].mbol);
writeln('Na 1000 chelovek',b[i].mwuz);
end;
end;

procedure Sort(var b : TBase);
var
i : byte;
temp : TRec;
flag : boolean;
begin
repeat
flag := true;
for i := 1 to n - 1 do
if not (b[i].plot >= b[i+1].plot) then begin
temp := b[i];
b[i] := b[i + 1];
b[i + 1] := temp;
flag := false;
end;
until flag;
end;

var
base : TBase;
begin
clrscr;
writeln('Ввод данных : ');
Input(base);
clrscr;
writeln('Вывод до сортировки : ');
Print(base);
Sort(base);
writeln;
writeln('Вывод после соритровки : ');
Print(base);
readln;
end.
F.I.A.T.
Цитата
Вроде все работает только ответы минусовые, почему ?
То-есть, нам предлагается телепатически определить, какие ты данные вводил? Или ты все-таки приведешь их САМ? Есть идея, что было введено "Население" больше 32767, произошло переполнение, результат ушел в минус.

Используй более емкий тип: LongInt, например.
Desktop II
В первом площядь 600000
во втором площядь 1000000
в первом население было 32000000
во втором 80000000
население и площядь впринцепи не должно миняться.

------
Сделал LongINT стало все работать.

Nazvnie: Strana II
Ploshyad: 1000000
Naselenie: 80000000
Shkol: 2500
Bolnic: 4000
Wuzov: 1000
Plotnost: 8.0000000000E+01
Na 1000 chelovek shkol 3.1250000000E-02
Na 1000 chelovek bolnic 5.0000000000E-02
Na 1000 chelovek 1.2500000000E-02
Nazvnie: Strana I
Ploshyad: 600000
Naselenie: 32000000
Shkol: 4000
Bolnic: 5000
Wuzov: 100
Plotnost: 5.3333333333E+01
Na 1000 chelovek shkol 1.2500000000E-01
Na 1000 chelovek bolnic 1.5625000000E-01
Na 1000 chelovek 3.1250000000E-03

Большое всем спасибо !
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.