Te dejo lo que he hecho, hasta ahora, no me sale el punto 8 con la matriz.
const
N=100;
type
t_vector=ARRAY[1..N] OF REAL;
procedure leerVector(var v:t_vector);
var
i,n:integer;
begin
repeat
write('Di el numero de variables para introducir');
read(n);
until n<=N;
write('Introduce los valores');
for i:=1 to n do
readln (v[i]);
end;
procedure calcMaxMinMitjana(valor:REAL; OUT maxim,minim,mitjana:REAL);
var
max,min,suma,mitja:REAL;
comptador:INTEGER;
begin
max:=valor;
min:=valor;
comptador:=0;
suma:=0;
while valor<>0 do
begin
if valor<min then
min:=valor
else
if valor>max then
max:=valor;
suma:=suma+valor;
comptador:=comptador+1;
readln(valor);
end;
if comptador=0 then
mitja:=0
else
mitja:=suma/comptador;
maxim:=max;
minim:=min;
mitjana:=mitja;
end;
function fcalcTolerancia(comptador,nopassen,ddp,I:REAL):REAL;
var
R,percent:real;
begin
while (ddp<>0) or (I<>0) do
begin
R:=ddp/I;
if (R>900) and (R<1100)then
begin
writeln(R:4:0,' Ohms');
comptador:=comptador+1;
end
else
begin
writeln(R:4:0,' Ohms');
writeln('La resistencia no passa la tolerancia');
nopassen:=nopassen+1;
end;
readln(ddp);
readln(I);
end;
;
percent:=(comptador/(comptador+nopassen))*100;
result:=percent;
end;
var
{Introduim ddp (diferència de potencial en Volts), I (intensitat en Amperes)
i ens dóna la resistència, R, en Ohms}
ddp,I,tolermostra:REAL;
comptador,nopassen:INTEGER;
{PROGRAMA PRINCIPAL}
var
a,b,c,d,tolerancia,valor,maxim,minim,mitjana:REAL;
v:t_vector;
begin
leerVector(v);
calcMaxMinMitjana(valor,maxim,minim,mitjana);
writeln('El maxim es: ',maxim:4:4,' El minim es: ',minim:4:4,' La mitjana es: ',mitjana:4:4);
readln;
writeln('Introdueix la diferencia de potencial (ddp) en Volts i la intensitat');
writeln('en Amperes per a calcular la tolerancia de les resistencies');
writeln('Un valor valid sera aquell que estigui entre 900 i 1100 Ohms');
writeln('Escriu el valor 0 per parar la introduccio de dades');
comptador:=0;
nopassen:=0;
readln(ddp);
readln(I);
tolermostra:=100-fcalcTolerancia(comptador,nopassen,ddp,I);
writeln('Unitats de resistencies ben fabricades: ',comptador);
writeln('Unitats de resistencies mal fabricades: ',nopassen);
writeln('Percentatge de resistencies defectuoses: ',tolermostra:4:2,' %');
readln;
tolerancia:= fcalcTolerancia(a,b,c,d);
end.
const
MAX_VALORES=100;
MAX_DIAS=5;
TYPE t_matriu = RECORD
valors : ARRAY [1..MAX_VALORES,1..MAX_DIAS] OF REAL;
fil : 1..MAX_VALORES;
col : 1..MAX_DIAS;
END;
PROCEDURE LlegirMatriu(VAR M : t_matriu);
VAR i, j : INTEGER;
BEGIN
REPEAT
WRITE('Introdueixi el nombre de files i columnes de la matriu : ');
READLN( M.fil , M.col );
UNTIL (M.fil >= 1) AND (M.fiL <= MAX_VALORES) AND
(M.col >= 1) AND (M.col <= MAX_DIAS);
FOR i := 1 TO M.fil DO
FOR j := 1 TO M.col DO
BEGIN
WRITE('Introdueixi l''element [', i, ',', j, '] de la matriu : '
);
READLN(M.valors[i,j]);
END;
END;
procedure calcMaxMinMitjana(m:t_matriu; OUT maxim,minim,mitjana:real);
var
max,min,suma,mitja:real;
comptador:INTEGER;
i,j:integer;
begin
comptador:=0;
suma:=0;
while m.fil<>0 do
begin
if m.fil<min then
min:=m.fil
else
if m.fil>max then
max:=m.fil;
suma:=suma+m.fil;
comptador:=comptador+1;
readln(m.fil);
end;
if comptador=0 then
mitja:=0
else
mitja:=suma/comptador;
maxim:=max;
minim:=min;
mitjana:=mitja;
end;
(* Programa principal *)
VAR
valor,maxim,minim,mitjana:REAL;
M1:t_matriu;
BEGIN
LlegirMatriu(M1);
calcMaxMinMitjana(valor,maxim,minim,mitjana);
END.