PDA

View Full Version : [Turbo Pascal] Aiuto su variabile in una procedura


Qwertid
02-03-2005, 13:15
Ciao a tutti! :)

Visto che domani ho l'esame di programmazione sto facendo qualche esercizio. Eccone uno:

"Sia dato un array bidimensionale A di interi di dimensione MxN. In ogni riga della matrice vi sono N-1 elementi >0 ed un solo elemento uguale a 0. Scrivere una procedura che sostituisca in ogni riga il valore 0 con un valore >0 in modo che tutte le righe della matrice abbiano la stessa somma".

Il problema è banale e infatti l'ho risolto. Ho solo una difficoltà con una variabile della procedura.

Questa è la procedura:


PROCEDURE SOMMA (RIGHE, COLONNE: INTEGER; VAR MATRICE: VETTORE);
VAR I,J,MASSIMO: INTEGER;
SOMME: ARRAY [1..RIGHE] OF INTEGER;
BEGIN
FOR I:=1 TO 4 DO
BEGIN
SOMME[I]:=0;
END;
FOR I:=1 TO RIGHE DO
BEGIN
FOR J:=1 TO COLONNE DO
BEGIN
SOMME[I]:=SOMME[I]+MATRICE[I,J];
END;
END;
MASSIMO:=SOMME[1];
FOR I:=2 TO 4 DO
BEGIN
IF SOMME[I]>MASSIMO THEN MASSIMO:=SOMME[I];
END;
FOR I:=1 TO RIGHE DO
BEGIN
FOR J:=1 TO COLONNE DO
BEGIN
IF MATRICE[I,J]=0 THEN MATRICE[I,J]:=MASSIMO-SOMME[I]+1;
END;
END;
END;


Questa è la procedure call (dove M=righe, N=colonne, A= matrice)

SOMMA (M,N,A);


Perchè stando così le cose mi dà errore qui:

SOMME: ARRAY [1..RIGHE] OF INTEGER;

dicendomi che non può valutare l'espressione [1..righe] se io righe gliele ho passate dal main? Grazie!

:D

Qwertid
02-03-2005, 13:20
Già che ci sono posto anche il main: :D

PROGRAM SOMMAEMEDIA;
CONST
M_MAX = 100;
N_MAX = 100;

TYPE

VETTORE= ARRAY [1..M_MAX, 1..N_MAX] OF INTEGER;

VAR

A: VETTORE;
M,N,I,J: INTEGER;


BEGIN

repeat
write('Numero di righe della matrice: ');
readln(M);
until (M<= M_MAX) and (M>=1);

repeat
write('Numero colonne della matrice: ');
readln(N);
until (N<= N_MAX) and (N>=1);

writeln; writeln;
writeln('INIZIALIZZAZIONE DELLA MATRICE');
writeln;
for i:=1 to M do
for j:=1 to N do begin
write('Inserisci linea ', i, ' colonna ', j, ' val: ');
readln(A[i,j])
end;

writeln; writeln;
writeln('MATRICE A INSERITA');
for i:=1 to M do begin
writeln;
for j:=1 to N do
write(A[i, j]:8);
end;

SOMMA (M,N,A);

writeln; writeln;
writeln('MATRICE A TRASFORMATA');
for i:=1 to M do begin
writeln;
for j:=1 to N do
write(A[i, j]:8);
end;

READLN;
END.