Изменить программку с динамическим массивом,чтоб пользователь указывал страну, а программа выводит значение - Pascal
Формулировка задачи:
изменить программку чтоб пользователь указывал страну, а программа выводит мини тарбличку
место- N
страна - Швейцария
количество золота - 5
кол серебра - 1
кол бронзы - 2
const n=8;
type country=record
name:string[30];
population:longint;
square:real;
end;
var
a:array[1..n] of country;
s,r:string;
i,j:integer;
f:file of country;
begin
assign(f,'country.dat');
if not FileExists('country.dat') or (Uppercase(ReadlnChar('Файл country.dat уже существует! перезаписать (Y/N)?'))='Y') then begin
Rewrite(f);
writeln('Введите данные по странам:');
for i:=1 to n do begin
writeln('Запись #',i);
a[i].name:=ReadlnString('Название страны:'); a[i].population:=ReadlnInteger('Население:');
a[i].square:=ReadlnReal('Занимаемая площадь:');
write(f,a[i]);
end;
end
else begin
reset(f);
for i:=1 to 8 do read(f,a[i]);
end;
close(f);
for i:=1 to n-1 do
for j:=i+1 to n do if a[i].name>a[j].name then Swap(a[i],a[j]);
writeln('отсортированный список:');
writeln(format('{0,-40}{1,20}(чел){2,20}(км^2)','Название страны','Население','Занимаемая площадь'));
for i:=1 to n do writeln(format('{0,-40}{1,20:N}{2,20:F}',a[i].name,a[i].population,a[i].square));
s:=ReadlnString('Введите название страны:');
r:='';
for i:=1 to n do
if UpperCase(s)=UpperCase(a[i].name) then r:=r+format('{0,-40}{1,20:N}{2,20:F}',a[i].name,a[i].population,a[i].square)+NewLine;
if r='' then writeln('Страна "',s,'" не найдена') else writeln(r);
end.
может как то упростить, чтоб сортировку не удалять
Решение задачи: «Изменить программку с динамическим массивом,чтоб пользователь указывал страну, а программа выводит значение»
textual
Листинг программы
type
country = record
name: string[30];
z, s, b: longint;
end;
var
a: array of country;
s, r: string;
n, i, j: integer;
f: file of country;
begin
assign(f, 'country.dat');
if not FileExists('country.dat') or (Uppercase(ReadlnChar('Файл country.dat уже существует! Перезаписать (Y/N)?')) = 'Y') then
begin
Rewrite(f);
write('Введите количество стран: ');
readln(n);
SetLength(a, n);
writeln('Введите данные по странам: ');
for i := 0 to n - 1 do
begin
writeln('Запись #', i + 1);
a[i].name := ReadlnString('Название страны: ');
a[i].z := ReadlnInteger('Введите количество золотых медалей: ');
a[i].s := ReadlnInteger('Введите количество серебряных медалей: ');
a[i].b := ReadlnInteger('Введите количество бронзовых медалей: ');
write(f, a[i]);
end;
end
else
begin
reset(f);
i := 0;
while not eof(f) do
begin
SetLength(a, i + 1);
read(f, a[i]);
inc(i);
end;
end;
n := i;
close(f);
writeln('Исходный список: ');
writeln(format('{0,-30} {1,10}', 'Название страны', 'Золото Серебро Бронза'));
for i := 0 to n - 1 do
writeln(format('{0,-30}{1,5}{1,8}{1,8}', a[i].name, a[i].z, a[i].s, a[i].b));
for i := 0 to n - 2 do
for j := i + 1 to n - 1 do
if a[i].z < a[j].z then
Swap(a[i], a[j]);
writeln('Отсортированный список: ');
writeln(format('{0,-30} {1,10}', 'Название страны', 'Золото Серебро Бронза'));
for i := 0 to n - 1 do
writeln(format('{0,-30}{1,5}{1,8}{1,8}', a[i].name, a[i].z, a[i].s, a[i].b));
SetLength(a, 0);
end.
Объяснение кода листинга программы
- Создается тип данных
countryс полямиname,z,s,b. - Создается переменная
aтипаarray of country. - Создаются переменные
s,rтипаstring. - Создается переменная
nтипаinteger. - Создается переменная
iтипаinteger. - Создается переменная
jтипаinteger. - Создается файл
fтипаfile of country. - Выполняется проверка: если файл
country.datуже существует или пользователь выбрал перезапись, то файл перезаписывается. - Если файл не существует или пользователь не выбрал перезапись, то файл создается и записывается в него информация о количестве стран.
- Пользователю предлагается ввести количество стран.
- Для каждой страны вводятся данные: название, количество золотых медалей, количество серебряных медалей, количество бронзовых медалей.
- Запись каждой страны в массив
a. - Если файл не существует или произошла ошибка при чтении данных, то сбрасывается файл и считывается информация до конца.
- Выводится исходный список стран.
- Выводится отсортированный список стран.
- Удаляется файл
country.dat.