Помогите решить задачу на Pascal
Помогите пожалуйста решить задачку на Pascal. Готовлюсь к гос. экзаменам. Сам пробывал ничего не получается.
Условие задачи:
Файл состоит из записей, содержащих следующие сведения о столицах государств:
название (15 символов);
площадь (вещественное число);
количество жителей(вещественное число).
Вывести на экран сведения о городе с самой высокой плотностью населения.
Условие задачи:
Файл состоит из записей, содержащих следующие сведения о столицах государств:
название (15 символов);
площадь (вещественное число);
количество жителей(вещественное число).
Вывести на экран сведения о городе с самой высокой плотностью населения.
А Вы покажите, что получилось у вас, и вам обязательно помогут.
Ни что так не ограничивает фантазию программиста, как компилятор...
Вот что у меня получилось:
uses crt;
type
City = record
Name: array [0..14] of Char;
Ploshad: real;
Naselenie: real
end;
var
max, min : City;
mn, mx: real;
i,n,j,k: integer;
F: text;
m: string [100];
begin
i:=0;
n:=0;
max.Ploshad:=0;
max.Naselenie:=0;
Assign(F, 'F:\1.txt');
Reset(F);
while not EOF(F) do
begin
Readln(F,m);
if m =';' then
begin
k:=i;
while j>16 do
begin
min.Name[j-1]:=m[k-1];
j:=j-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',min.Name);
writeln ('Ploshad',min.Ploshad);
writeln ('Naselenie',min.Naselenie);
readln;
end.
uses crt;
type
City = record
Name: array [0..14] of Char;
Ploshad: real;
Naselenie: real
end;
var
max, min : City;
mn, mx: real;
i,n,j,k: integer;
F: text;
m: string [100];
begin
i:=0;
n:=0;
max.Ploshad:=0;
max.Naselenie:=0;
Assign(F, 'F:\1.txt');
Reset(F);
while not EOF(F) do
begin
Readln(F,m);
if m =';' then
begin
k:=i;
while j>16 do
begin
min.Name[j-1]:=m[k-1];
j:=j-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',min.Name);
writeln ('Ploshad',min.Ploshad);
writeln ('Naselenie',min.Naselenie);
readln;
end.
Вот что получилось:
Код: Выделить всё
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.
Ой, ужас... извините...
Во-первых, зачем вам naselenie: real? Я думаю, для задачи не принципиально наличие в городе инвалидов и сиамских близнецов. Давайте все-таки longint. Все равно города с населением больше двух миллиардов человек нету.
Во-вторых, зачем вам весь код, связанный с нахождением МИНИМУМА, если в программе спрашивается только МАКСИМУМ?
В-третьих, нахождение максимума в массиве есть в разделе "Алгоритмы".
В-четвертых, я думаю, ваш преподаватель подразумевал, что вы должны считать все города в один массив. Ну да ладно, не хотите - как хотите. Можно и без этого.
Во-первых, зачем вам 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);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Какой тип файла написать?
Если я пишу тип F: text; то выдаёт ошибку и если задаю файл как тип запись F: file of city; тоже.
Если я пишу тип F: text; то выдаёт ошибку и если задаю файл как тип запись F: file of city; тоже.
По идее конечно File of city - но предварительно этот файл должен существовать на диске и должным образом оформлен. Т.к. вы явно с двоичным кодом не дружите, то для создания такого файла потребуется отдельная программа, на том же Паскале, например - или она должна быть предоставлена преподом в качестве исходных данных. Посколько в задании" писал(а):Если я пишу тип F: text; то выдаёт ошибку и если задаю файл как тип запись F: file of city; тоже.
явно говорится, что файл существует на данный момент - то вам его должны предоставить." писал(а):Файл состоит из записей
It's a long way to the top if you wanna rock'n'roll
Всем большое спасибо! Разобрался, программа работает.