29/05/10 9:15
Suxdario88
ragazzi ho ripreso in mano il progetto ed ho visto, mandandolo in esecuzione, che le matrici me le compila a partire da 0;0 e non da 1;1 :S
ho provato a cambiare un pò di valori ma ora mi dà errori in esecuzione e mi chiude in automatico il programma
vi prego ragazzi aiutatemi!!
ho provato a cambiare un pò di valori ma ora mi dà errori in esecuzione e mi chiude in automatico il programma
vi prego ragazzi aiutatemi!!
aaa
30/05/10 16:42
Suxdario88
il compilatore non mi dà problemi, solo che quando vado in esecuzione, appena inizio a mettere i valori nella matrice mi salta tutto...
mi dà runtime error 201 ...
che valori devo cambiare???
mi dà runtime error 201 ...
che valori devo cambiare???
Ultima modifica effettuata da Phi 31/05/10 10:42
aaa
31/05/10 10:47
Phi
L'errore 201 vuol dire che hai cercato di inserire o leggere un valore in un array con un indice che non esiste.
In sostanza, può essere un esempio questo:
ho a : array[0..5] of byte e provo a scrivere a[12323] := valore;.
prova a controllare se le dimensioni dell'array vanno aumentate, usa setlength.
Posta un codice che possiamo controllare.
In sostanza, può essere un esempio questo:
ho a : array[0..5] of byte e provo a scrivere a[12323] := valore;.
prova a controllare se le dimensioni dell'array vanno aumentate, usa setlength.
Posta un codice che possiamo controllare.
aaa
31/05/10 11:19
Suxdario88
il codice è rimasto uguale da come lo avevo inserito qui nel forum e come vedi setlenght è rimasto invariato...
non capisco cosa c'è da cambiare... ho dichiarato le mie matrici come array of real, quindi dovrei considerare tutti i numeri...
cosa può dargli noia? ho cambiato solamente gli 1 con gli 0 e messo "R1,C1,R2,C2" invece che "R1-1,C1-1,R2-1,C2-1"
non capisco cosa c'è da cambiare... ho dichiarato le mie matrici come array of real, quindi dovrei considerare tutti i numeri...
cosa può dargli noia? ho cambiato solamente gli 1 con gli 0 e messo "R1,C1,R2,C2" invece che "R1-1,C1-1,R2-1,C2-1"
SetLength(myArray1,R1*C1); (* Alloco memoria per la matrice *) SetLength(myArray2,R2*C2); (* Alloco memoria per la matrice *) Writeln('Inserisci la prima matrice'); for i:=0 to R1-1 do begin for j:=0 to C1-1 do begin write('Inserisci: Matrice[',i,',',j,']='); Readln(myArray1[i*C1+j]); end; end; Writeln('Hai inserito questa matrice: '); printMatrice(myArray1,R1,C1); Writeln('Inserisci la seconda matrice'); for i:=0 to R2-1 do begin for j:=0 to C2-1 do begin write('Inserisci: Matrice[',i,',',j,']='); Readln(myArray2[i*C2+j]); end; end; Writeln('Hai inserito questa matrice: '); printMatrice(myArray2,R2,C2);
Ultima modifica effettuata da Phi 31/05/10 11:24
aaa
31/05/10 12:16
Suxdario88
questo è quanto ho fatto...
ho tolto gli "1" dal conteggio dei cicli for, e infatti in questo modo la mia matrice parte da [1,1] e non + da [0,0]... solo che poi mi dà problemi quando deve cambiare riga di inserimento dati...
secondo voi cosa può esserci di sbagliato?
ho tolto gli "1" dal conteggio dei cicli for, e infatti in questo modo la mia matrice parte da [1,1] e non + da [0,0]... solo che poi mi dà problemi quando deve cambiare riga di inserimento dati...
secondo voi cosa può esserci di sbagliato?
Program ProdottoMatriciale(output); Type mioTipo = Array of Real; (* La matrice Ë di numeri reali *) var R1,R2,C1,C2: Integer; (* Dimensioni delle matrici *) Var myArray1 : mioTipo; (* Matrice vera e propria *) myArray2 : mioTipo; (* Stampa la schermata iniziale *) procedure printWS(); begin Writeln('***********************'); Writeln('* Prodotto tra *'); Writeln('* Matrici *'); Writeln('***********************'); Writeln(); (*Stampa una riga vuota*) end; (* Stampa la matrice con 2 cicli FOR *) procedure printMatrice(mat: mioTipo; R: Integer; C: Integer); var i,j: Integer; begin For i:=1 to R do begin For j:=1 to C do begin Write(mat[i*C+j]); end; Writeln; end; end; (* Fa il prodotto tra matrici: ris(i,j) = m1(i,k)*m2(k,j) Per k = 1..R1 *) procedure product(m1,m2: mioTipo; R1,C1,R2,C2: Integer); var i,j,k: Integer; var attuale: Real; begin attuale :=0; (* Il singolo elemento. Viene azzerato ogni volta dopo che l'ho stampato *) For i:=1 to R1 do begin For j:=1 to C2 do begin For k:=1 to R1 do begin attuale := attuale + m1[i*C1+k]*m2[k*C2+j] end; Write(attuale); attuale :=0 end; Writeln() end end; (* Questo e' il main *) var i,j: Integer; begin printWS(); (* Dati di input *) Write('Inserisci il numero di righe della prima matrice:'); Readln(R1); Write('Inserisci il numero di colonne della prima matrice:'); Readln(C1); Write('Inserisci il numero di righe della seconda matrice:'); Readln(R2); Write('Inserisci il numero di colonne della seconda matrice:'); Readln(C2); (* Controllo se il prodotto di puÚ fare ( C1 = R2) *) if C1 = R2 then begin SetLength(myArray1,R1*C1); (* Alloco memoria per la matrice *) SetLength(myArray2,R2*C2); (* Alloco memoria per la matrice *) Writeln('Inserisci la prima matrice'); For i:=1 to R1 do begin For j:=1 to C1 do begin Write('Inserisci: Matrice[',i,',',j,']='); Readln(myArray1[i*C1+j]); end; end; Writeln('Hai inserito questa matrice: '); printMatrice(myArray1,R1,C1); Writeln('Inserisci la seconda matrice'); For i:=1 to R2 do begin For j:=1 to C2 do begin Write('Inserisci: Matrice[',i,',',j,']='); Readln(myArray2[i*C2+j]); end; end; Writeln('Hai inserito questa matrice: '); printMatrice(myArray2,R2,C2); Writeln('Verr‡ ora eseguito il prodotto. Premi INVIO per continuare'); Readln(); product(myArray1,myArray2,R1,C1,R2,C2); end else Writeln('Operazione non permessa: C1!=R2') end.
aaa
31/05/10 19:32
Phi
Visto che non parti più da 0 ma da 1 devi anche ingrandire l'array.
Scrivi:
Ma ricordati sempre il readln finale
Scrivi:
SetLength(myArray1,R1*(C1+1)+1); (* Alloco memoria per la matrice *) SetLength(myArray2,R2*(C2+1)+1); (* Alloco memoria per la matrice *)
Ma ricordati sempre il readln finale
Ultima modifica effettuata da Phi 31/05/10 19:38
aaa