Set 5 - fisiere
1. Fisierul date.in contine pe fiecare linie inaltimea si numele unei persoane separate printr-un spatiu. Se cere:
a) sa se ordoneze alfabetic persoanele inscrise in fisier
b) Sa se afiseze inaltimea medie a acestora
type persoana=record
nume:string[40];
inaltime:real;
end;
var a:array[1..100] of persoana;
n:byte;
f:text;
procedure citire;
begin
Assign(f,'date.in');reset(f);
n:=0;
while not eof(f) do
begin
n:=n+1;
readln(f, a[n].inaltime,a[n].nume);
end;
close(f);
end;
procedure sortare_alfabetic;
var i,j:byte;aux:persoana;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i].nume>a[j].nume then
begin
aux:=a[i];
a[i]:=a[j];
a[j]:=aux;
end;
end;
procedure afisare;
var i:byte;
begin
for i:=1 to n do
writeln(a[i].nume,' ',a[i].inaltime:5:2);
writeln;
end;
procedure inaltime_medie;
var s:real;i:byte;
begin
s:=0;
for i:=1 to n do
s:=s+a[i].inaltime;
writeln('inaltimea medie=',s/n);
end;
BEGIN
citire;
afisare;
sortare_alfabetic;
writeln('dupa sortare');
afisare;
inaltime_medie;
end.
2. In fisierul date.in sunt scrise mai multe cuvinte cate unul pe fiecare
linie din fisier. Se cere:
a) sa se determine numarul de cuvinte din fisier
b) sa se afiseze cuvintele care incep cu vocala
var f:text;
n:byte;
a:array[1..100]of string;
procedure citire_pct_a;
begin
Assign (f,'date.in');reset(f);
n:=0;
while not eof(f) do
begin
n:=n+1;
readln(f,a[n]);
end;
writeln('nr cuvinte=',n);
end;
procedure cuvinte_voc;
var i:byte;
begin
for i:=1 to n do
if upcase(a[i][1])in ['A','E','I','O','U'] then writeln(a[i]);
end;
BEGIN
citire_pct_a;;
cuvinte_voc;
end.
3. Din fisierul matrice.txt se preiau de pe prima linie numarul de linii, respectiv de coloane, iar de pe urmatoarele linii elementele de pe fiecarelinie a matricei, despartite prin spatii. Sa se determine produsul numarelor pare de pe coloanele impare si suma numerele impare de pe coloanele pare si sa se afiseze in fisierul rez.dat, fiecare pe cate o linie.
var f:text;
a:array[1..100,1..100]of integer;
n,m:byte;
procedure citire;
var i,j:byte;
begin
assign(f,'matrice.txt');reset(f);
readln(f,n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(f,a[i,j]);
readln(f);
end;
close(f);
end;
procedure afisare;
var i,j:byte;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(f,a[i,j]:4);
writeln(f);
end;
end;
procedure rezolvare;
var i,j:byte;s,p:real;
begin
s:=0;p:=1;
{suma numerelor impare de pe coloane pare}
for j:=1 to m do
if j mod 2=0 then
for i:=1 to n do
if a[i,j] mod 2=1 then s:=s+a[i,j];
{produsul numarelor pare de pe coloane impare}
for j:=1 to m do
if j mod 2=1 then
for i:=1 to n do
if a[i,j] mod 2=0 then p:=p*a[i,j];
writeln(f,'prod nr pare de pe col impare=',p);
writeln(f,'suma nr impare de pe col pare=',s);
end;
begin
citire;
assign(f,'rez.dat');rewrite(f);
afisare;
rezolvare;
close(f);
end.
4. In fisierul text A2.in se afla pe prima linie numarul natural n, n<100. Sa se scrie in fiserul A2.out pe prima linie separate prin spatii numerele prime mai mici decat n, iar pe a doua linie separate prin spati primele n numere prime.
var n:byte; f:text;
procedure citire;
begin
assign(f,'a2.in');reset(f);
readln(f,n);
if n>=100 then begin write('eroare');halt;end;
close(f);
end;
function prim(n:byte):boolean;
var i:byte;
begin
prim:=true;
if n<=1 then prim:=false;
for i:=2 to n div 2 do
if n mod i=0 then prim:=false;
end;
procedure prime_mici_n;
var i,j:byte;
begin
for i:=1 to n do
if prim(i) then write(f,i:3);
writeln(f);
end;
procedure primele_prime;
var j,nr:byte;
begin
j:=2;nr:=0;
while nr<n do
begin
if prim(j) then begin write(f,j:3);nr:=nr+1;end;
j:=j+1;
end;
end;
begin
citire;
assign(f,'a2.out');rewrite(f);
prime_mici_n;
primele_prime;
close(f);
end.