PDA

Просмотр полной версии : Помогите решить задачу на Pascal



Djarx
08.04.2008, 21:14
Помогите пожалуйста решить задачку на Pascal. Готовлюсь к гос. экзаменам. Сам пробывал ничего не получается.
Условие задачи:
Файл состоит из записей, содержащих следующие сведения о столицах государств:
название (15 символов);
площадь (вещественное число);
количество жителей(вещественное число).
Вывести на экран сведения о городе с самой высокой плотностью населения.

MOTOCoder
08.04.2008, 21:50
А Вы покажите, что получилось у вас, и вам обязательно помогут.

Djarx
08.04.2008, 22:39
Вот что получилось:


uses crt;
type
City = record
Name: string [15];
Ploshad: real;
Naselenie: real
end;
var
max, min : City;
mn, mx: real;
i,s,j,k: integer;
F: text;
m: string[100];
begin
i:=0;
s:=3;
max.Name:='';
max.Ploshad:=0;
max.Naselenie:=1;
Assign(F, 'F:\1.txt');
Reset(F);
while not EOF(F) do
begin
Readln(F,m[i]);
if m[i] =';' then
begin
k:=i;
while j>16 do
begin
min.Name[j-1]:=m[k-s];
j:=j-1;
s:=s+1;
end;
min.Ploshad := m[k-2];
min.Naselenie := m[k-1];
mn := min.Ploshad/min.Naselenie;
mx := max.Ploshad/max.Naselenie;
if mn < mx tnen
max:=min;
end;
k:=i;
end;
else
i:=i+1;
end;
close(F);
end;
writeln ('Gorod s samoi visokoi plotnostiu',max.Name);
writeln ('Ploshad',max.Ploshad);
writeln ('Naselenie',max.Naselenie);
readln;
end.

Хыиуду
09.04.2008, 11:09
Ой, ужас... извините...
Во-первых, зачем вам naselenie: real? Я думаю, для задачи не принципиально наличие в городе инвалидов и сиамских близнецов. Давайте все-таки longint. Все равно города с населением больше двух миллиардов человек нету.
Во-вторых, зачем вам весь код, связанный с нахождением МИНИМУМА, если в программе спрашивается только МАКСИМУМ?
В-третьих, нахождение максимума в массиве есть в разделе "Алгоритмы".
В-четвертых, я думаю, ваш преподаватель подразумевал, что вы должны считать все города в один массив. Ну да ладно, не хотите - как хотите. Можно и без этого.


{Здесь описание типа city, описание файла}
var max,current: city;
begin
max.ploshad:=1;
max.naselenie:=0;
{Здесь открытие файла на чтение}
repeat
readln(f, current.name);
readln(f, current.ploshad);
readln(f, current.naselenie);
if current.naselenie/current.ploshad>max.naselenie/max.ploshad then max:=current;
until eof(f);
writeln(max.name);

Djarx
09.04.2008, 11:49
Какой тип файла написать?
Если я пишу тип F: text; то выдаёт ошибку и если задаю файл как тип запись F: file of city; тоже.

somewhere
09.04.2008, 13:02
Если я пишу тип F: text; то выдаёт ошибку и если задаю файл как тип запись F: file of city; тоже.
По идее конечно File of city - но предварительно этот файл должен существовать на диске и должным образом оформлен. Т.к. вы явно с двоичным кодом не дружите, то для создания такого файла потребуется отдельная программа, на том же Паскале, например - или она должна быть предоставлена преподом в качестве исходных данных. Посколько в задании
Файл состоит из записейявно говорится, что файл существует на данный момент - то вам его должны предоставить.

Djarx
09.04.2008, 13:51
Всем большое спасибо! Разобрался, программа работает.