Найти удельные веса и названия всех полупроводников - PascalABC.NET
Формулировка задачи:
Собственно задача.
Сведения о веществе состоят из его названия, удельного веса и проводимости (проводник, полупроводник, изолятор).
Дан набор, состоящий из 100 таких сведений.
Найти:
а) удельные веса и названия всех полупроводников выбрать сведения о проводниках и упорядочить их по убыванию б) удельных весов.
Решение задачи: «Найти удельные веса и названия всех полупроводников»
textual
Листинг программы
type vid=(pr,pl,iz);
vesh=record
nz:string[15];
uv:real;
pr:vid;
end;
prvd=record
nz:string[15];
uv:real;
end;
const prv:array[0..2] of string[20]=('проводник','полупроводник','изолятор');
var f:file of vesh;
a: array[1..100] of prvd;
v:vesh;
x:prvd;
n,i,j,k:integer;
begin
assign(f,'veshestva');
rewrite(f);
repeat
write('Сведения о скольки веществах внести n=[2..100] n=');
readln(n);
until n in [2..100];
for i:=1 to n do
begin
writeln('Вещество ',i);
write('Название: ');readln(v.nz);
write('Удельный вес: ');readln(v.uv);
repeat
writeln('Выберите проводимость 0-проводник, 1-полупроводник, 2-изолятор');
readln(k);
until k in [0..2];
v.pr:=vid(k);
write(f,v);
end;
writeln('Полный список веществ');
writeln('-------------------------------------------');
writeln('| Название | Уд. вес | Проводимость |');
writeln('-------------------------------------------');
reset(f);
while not eof(f) do
begin
read(f,v);
write('| ',v.nz);
for i:=1 to 15-length(v.nz) do write(' ');
write('|',v.uv:8:2);
write(' |',prv[ord(v.pr)]);
for i:=1 to 14-length(prv[ord(v.pr)]) do write(' ');
writeln('|');
end;
writeln('-------------------------------------------');
writeln('Удельные веса и названия полупроводников');
writeln('----------------------------');
writeln('| Название | Уд. вес |');
writeln('----------------------------');
k:=0;
reset(f);
while not eof(f) do
begin
read(f,v);
if v.pr=pl then
begin
k:=1;
write('| ',v.nz);
for i:=1 to 15-length(v.nz) do write(' ');
write('|',v.uv:8:2);
writeln(' |');
end;
end;
writeln('----------------------------');
if k=0 then writeln('Нет полупроводников');
reset(f);
k:=0;
while not eof(f) do
begin
read(f,v);
if v.pr=pr then
begin
k:=k+1;
a[k].nz:=v.nz;
a[k].uv:=v.uv;
end;
end;
close(f);
if k=0 then write('Нет проводников')
else
begin
for i:=1 to k-1 do
for j:=i+1 to k do
if a[i].uv<a[j].uv then
begin
x:=a[i];
a[i]:=a[j];
a[j]:=x;
end;
writeln('Проводники в порядке убывания удельных весов');
writeln('----------------------------');
writeln('| Название | Уд. вес |');
writeln('----------------------------');
for i:=1 to k do
begin
write('| ',a[i].nz);
for j:=1 to 15-length(a[i].nz) do write(' ');
write('|',a[i].uv:8:2);
writeln(' |');
end;
writeln('----------------------------');
end;
end.