Дано три страны. Напечатать списко стран в порядке спаданя плотность населения, указать количесвто школ, больниць, ВУЗов которые припадають на 1000 человек.
Как сделать условие что бы страны выводило в порядке спадание плотности населения ? И количесвто школ, больниць, ВУЗов которые припадають на 1000 человек?
Что я сделал. <--->
FreeMan
28.03.2006 21:45
shkoly/nas*1000 - колво школ на 1000 населения
а насчёт плотности - отсортируй массив. плотность=nas/plosh
Desktop II
28.03.2006 22:25
Не совсем понял как в даном случае отсортировать массив....
Вот код но он работает: <--->
мисс_граффити
29.03.2006 1:18
Цитата(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
29.03.2006 13:23
С сортировкой я уже разобрался. Но нде мне надо расположить нахождение площяди 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); <--->
мисс_граффити
29.03.2006 13:42
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
29.03.2006 14:05
Я правильно понял сюда надо ставить нахождение плотности населения ? И там же больницы вузы и школы на 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.
29.03.2006 14:13
Цитата(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
29.03.2006 14:45
Вроде все работает только ответы минусовые, почему ? 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.
29.03.2006 14:54
Цитата
Вроде все работает только ответы минусовые, почему ?
То-есть, нам предлагается телепатически определить, какие ты данные вводил? Или ты все-таки приведешь их САМ? Есть идея, что было введено "Население" больше 32767, произошло переполнение, результат ушел в минус.
Используй более емкий тип: LongInt, например.
Desktop II
29.03.2006 14:57
В первом площядь 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
Большое всем спасибо !
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.