PDA

View Full Version : [C]errore calcolo prodotto di matrici


peppozzolo
16-01-2011, 05:45
Beh il discorso e semplice non mi funzione si incasina proprio dove c'e il prodotto e non capisco dove sia l'errore vi prego :help:
grazie a tutti


#include<stdio.h>
#include<stdlib.h>

#define N 100

main(){
int m[N][N],m1[N][N],mp[N][N],i,j,r1,c1,r2,c2,k;

do{
printf("Inserire numero righe della matrice1 ");
scanf("%d",&r1);
if((r1<1)||(r1>100))
printf("Errore");
}while((r1<1)||(r1>100));

do{
printf("Inserire numero colonne della matrice1 ");
scanf("%d",&c1);
if((c1<1)||(c1>100))
printf("Errore");
}while((c1<1)||(c1>100));

do{
printf("Inserire numero righe della matrice1 ");
scanf("%d",&r2);
if((r2<1)||(r2>100))
printf("Errore");
}while((r2<1)||(r2>100));

do{
printf("Inserire numero colonne della matrice1 ");
scanf("%d",&c2);
if((c2<1)||(c2>100))
printf("Errore");
}while((c2<1)||(c2>100));

if(c1==r2){

for(i=0;i<r1;i++){
for(j=0;j<c1;j++){
printf("Inserire elemento m[%d][%d]",i+1,j+1);
scanf("%d",&m[i][j]);
}
}
printf("\n\n");
for(i=0;i<r2;i++){
for(j=0;j<c2;j++){
printf("Inserire elemento m1[%d][%d]",i+1,j+1);
scanf("%d",&m1[i][j]);
}
}
for(i=0;i<r1;i++){
for(j=0;i<c2;j++){
mp[i][j]=0;
for(k=0;k<r2;k++) {
mp[i][j]=mp[i][j]+(m[i][k]*m1[k][i]);
}
}
}
for(i=0;i<r1;i++){
for(j=0;j<c1;j++){
printf("%d\t",m[i][j]);
}
printf("\n");
}
printf("\n\n");
for(i=0;i<r2;i++){
for(j=0;j<c2;j++){
printf("%d\t",m1[i][j]);
}
printf("\n");
}


for(i=0;i<r1;i++){
for(j=0;j<c2;j++){
printf("%d ",mp[i][j]);
}
printf("\n");
}
}
else
printf("Prodotto non valido");

system("pause");
}

peppozzolo
16-01-2011, 20:34
nessuno che mi sa dare una mano forse no e chiaro qualcosa?:cry:

alemoppo
17-01-2011, 01:13
Sostituisci

for (j=0;i<c2;j++)

con

for (j=0;j<c2;j++)


Usa il debug :D

p.s: non ho controllato la logica del prodotto matriciale se è corretta... Ho solo guardato perché si "impallava" :-D

Ciao!

bobbytre
17-01-2011, 01:21
cosi a occhio o me sembra sbagliato anche il prodotto vero e proprio

...
mp[i][j]=mp[i][j]+(m[i][k]*m1[k][i]);
...

e forse ma dovrei verificare anche la posizione all'interno della matrice mp

peppozzolo
17-01-2011, 03:07
Sostituisci

for (j=0;i<c2;j++)

con

for (j=0;j<c2;j++)


Usa il debug :D

p.s: non ho controllato la logica del prodotto matriciale se è corretta... Ho solo guardato perché si "impallava" :-D

Ciao!
grazie mille era li l'errore e dire che ho riguardato il codice per quasi due ora sara la similitudine fra i e j che a colpo d'occhio puo sfuggire

ps come hai fatto ad accorgertene ? e poi ti volevo chiedere come funziona il discorso debug e come lo si utilizza

pps noi smanettatori facciamo orari assurdi :)

alemoppo
17-01-2011, 18:31
per programmare utilizzi un IDE, giusto??

Ovvero un programma che ha al suo interno un editor di testo e un compilatore.
Incluso nell'IDE, c'è quasi sempre la funzione di debug, ma il loro utilizzo varia da IDE a IDE.. quindi non so nello specifico il tuo come funziona.... E poi alcuni non funzionano benissimo.. se vuoi saperlo, io uso codeblocks.

Comunque è IMPORTANTISSIMO il debug!, imparalo ad usarlo!. Con il debug puoi far eseguire comando per comando e in ogni "step" puoi vedere il valore delle variabili e che linea di codice sta eseguendo....

Ciao!

peppozzolo
17-01-2011, 20:36
io per motivi scolastici uso devc dpve c'e il tasto debug ma non ho la minima idea di come funzioni mi indicheresti come fare su quelli che usi tu?

Supdario
17-01-2011, 20:42
E' molto semplice... Con il debug puoi impostare dei punti di interruzione, cioè puoi fare in modo che quando il programma arriva al punto in cui decidi tu si ferma e ti permette di guardare il valore delle variabili, o andare avanti passo per passo.

Per impostare un punto di interruzione basta che clicchi sullo spazio nero a sinistra di Dev C++, in quel modo comparirà un pallino e la riga verrà evidenziata.
Poi fai partire il debug ed il resto lo vedi da te. :asd:

alemoppo
17-01-2011, 22:03
Con dev c++ io a volte avevo problemi.. non mi ricordo ma a volte non mi partiva :muro:

Comunque online ci sono sicuramente guide che dicono come si usa...

Ciao!

peppozzolo
19-01-2011, 22:02
E' molto semplice... Con il debug puoi impostare dei punti di interruzione, cioè puoi fare in modo che quando il programma arriva al punto in cui decidi tu si ferma e ti permette di guardare il valore delle variabili, o andare avanti passo per passo.

Per impostare un punto di interruzione basta che clicchi sullo spazio nero a sinistra di Dev C++, in quel modo comparirà un pallino e la riga verrà evidenziata.
Poi fai partire il debug ed il resto lo vedi da te. :asd:

grazie mille :) e pensare che mi sono semrpe chiesto cosa fosse quel pallino :D

@alemoppo ti ricordi benissimo ogni tanto si impalla senza motivo e mi tocca ricopiare il codice da un altra parte :rolleyes: