PDA

Visualizza la versione completa : [C] esercizio sulle matrici (ERA: aiuto urgente per esame in c!)


leomeya
03-04-2004, 09:55
programma che calcola la matrice somma di due matrici date!



void Inserisci (int *r,int *c)
{
printf ("Inserisci il numero delle righe della matrice:\n");
scanf ("%d",r);
printf ("Inserisci il numero delle colonne della matrice:\n");
scanf ("%d",c);
}

int main()
{
int r1;
int c1;
int r2;
int c2;
int i,j;
int** mat1;
int** mat2;
int** mat3;
do
{
printf ("Prima matrice!\n");
Inserisci (&r1,&c1);
printf ("Seconda matrice!\n");
Inserisci (&r2,&c2);
}
while ((r1!=r2) && (c1!=c2));

mat1 = (int **) malloc(r1 * sizeof(int *));
mat2 = (int **) malloc(r2 * sizeof(int *));
mat3 = (int **) malloc(r1 * sizeof(int *));

for (i=0;i<r1;i++){
mat1[i] = (int *) malloc(c1 * sizeof(int));
mat2[i] = (int *) malloc(c2 * sizeof(int));
mat3[i] = (int *) malloc(c1 * sizeof(int));
}

printf ("Inserisci gli elementi della prima matrice:\n");
for (i=0;i<r1;i++)
for (j=0;j<c1;j++)
scanf ("%d",&mat1[i][j]);
printf ("La prima matrice e':\n\a");
for (i=0;i<r1;i++)
{
for (j=0;j<c1;j++)
printf ("%d\t",mat1[i][j]);
printf ("\n");
}
printf ("Inserisci gli elementi della seconda matrice:\n");
for (i=0;i<r2;i++)
for (j=0;j<c2;j++)
scanf ("%d",&mat2[i][j]);
printf ("La seconda matrice e':\n\a");
for (i=0;i<r2;i++)
{
for (j=0;j<c2;j++)
printf ("%d\t",mat2[i][j]);
printf ("\n");
}

for (i=0;i<r1;i++)
for (j=0;j<c1;j++)
mat3[i][j] = mat1[i][j] + mat2[i][j];

printf ("La matrice somma delle matrici inserite e':\n\a");
for (i=0;i<r1;i++)
{
for (j=0;j<c1;j++)
printf ("%d\t",mat3[i][j]);
printf ("\n");
}
getch();
return 0;
}


c'e' un errore e non riesco a capire dove.
c'e' il controlo nel while che controlla che il numero di righe e colonne sia ugale
se inserisco per la prima 2 e 3 e per la seconda 2 e 3 ok
se inserisco per la prima 3 e 5 e per la seconda 6 e 3 ok mi chiede di riinserirle perche' sono diversi
il problema che se inserisco per la prima 3 e 5 e per la seconda 3 e 4 va avanti perche' se una delle due uguale va avanti io ho messo un and non un or!

Johnny_Depp
03-04-2004, 10:34
ciao,
visto che sei nuovo ti invito a leggere il regolamento di questo forum: Leggi_Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=588640)

p.s. il titolo (questa volta) lo modifico io... "aiuto" e "urgente" in questo forum sono termini banditi in quanto
non aiutano a capire quale sia il reale problema da risolvere ;)

leomeya
03-04-2004, 10:36
ok! grazie non lo sapevo
riguardo al mio problema sai mica perche' da questo buffo errore?

Johnny_Depp
03-04-2004, 11:58
#include <stdio.h>
#include <stdlib.h>

void Inserisci (int *r,int *c)
{
printf ("Inserisci il numero delle righe della matrice:\n");
scanf ("%d",r);
printf ("Inserisci il numero delle colonne della matrice:\n");
scanf ("%d",c);
}

char controllo (int r1, int r2, int c1, int c2)
{
if(r1==r2 && c1==c2)
return 0;
return 1;
}

int main()
{
int r1;
int c1;
int r2;
int c2;
int i,j;
int **mat1;
int **mat2;
int **mat3;
char sw=1; /* loop infinito */

while(sw)
{
printf ("Prima matrice!\n");
Inserisci (&r1,&c1);
printf ("Seconda matrice!\n");
Inserisci (&r2,&c2);
sw = controllo (r1,r2,c1,c2);
};

mat1 = (int **) malloc(r1 * sizeof(int *));
mat2 = (int **) malloc(r2 * sizeof(int *));
mat3 = (int **) malloc(r1 * sizeof(int *));

for (i=0;i<r1;i++)
{
mat1[i] = (int *) malloc(c1 * sizeof(int));
mat2[i] = (int *) malloc(c2 * sizeof(int));
mat3[i] = (int *) malloc(c1 * sizeof(int));
}

printf ("Inserisci gli elementi della prima matrice:\n");
for (i=0;i<r1;i++)
for (j=0;j<c1;j++)
scanf ("%d",&mat1[i][j]);
printf ("La prima matrice e':\n\a");
for (i=0;i<r1;i++)
{
for (j=0;j<c1;j++)
printf ("%d\t",mat1[i][j]);
printf ("\n");
}

printf ("Inserisci gli elementi della seconda matrice:\n");
for (i=0;i<r2;i++)
for (j=0;j<c2;j++)
scanf ("%d",&mat2[i][j]);
printf ("La seconda matrice e':\n\a");
for (i=0;i<r2;i++)
{
for (j=0;j<c2;j++)
printf ("%d\t",mat2[i][j]);
printf ("\n");
}



for (i=0;i<r1;i++)
for (j=0;j<c1;j++)
mat3[i][j] = mat1[i][j] + mat2[i][j];
printf ("La matrice somma delle matrici inserite e':\n\a");
for (i=0;i<r1;i++)
{
for (j=0;j<c1;j++)
printf ("%d\t",mat3[i][j]);
printf ("\n");
}

while(getchar()!='\n')
;
printf("premi un tasto per uscire");
getchar();
return 0;
}
Cos dovrebbe andare... provalo.

p.s. la prossima volta sei pregato di INDENTARE il codice (altrimenti praticamente impossibile capire il flusso del programma (con tutti quei cicli FOR :dh: ) )

per indentare il codice basta inserirlo tra i tag [CODE*]codice programma[/CODE*] senza mettere l'asterisco!!!

anx721
03-04-2004, 12:00
Si, ma qual era l'errore???

Johnny_Depp
03-04-2004, 12:03
c'e' un errore e non riesco a capire dove.
c'e' il controlo nel while che controlla che il numero di righe e colonne sia ugale
se inserisco per la prima 2 e 3 e per la seconda 2 e 3 ok
se inserisco per la prima 3 e 5 e per la seconda 6 e 3 ok mi chiede di riinserirle perche' sono diversi
il problema che se inserisco per la prima 3 e 5 e per la seconda 3 e 4 va avanti perche' se una delle due uguale va avanti io ho messo un and non un or!
il ciclo while non andava! (da buon idraulico l'ho sostituito :D )

il resto non l'ho controllato... ma credo che funzioni.

Johnny_Depp
03-04-2004, 12:19
scusami...

ho riletto:

sufficiente mettere (giustamente) un OR

do
{
...
...
/* la funzione controllo e lo switch (sw) non servono a nulla */
} while ( r1!=r2 || c1!=c2 );

in questo modo "passa" soltanto se r1 uguale a r2 e anche c1 uguale a c2

leomeya
03-04-2004, 12:23
si ma non riesco a capire dove era l'errore nel mio
do
{
printf ("Prima matrice!\n");
Inserisci (&r1,&c1);
printf ("Seconda matrice!\n");
Inserisci (&r2,&c2);
}
while ((r1!=r2) && (c1!=c2));

fa una volta la parte del do poi controlla se r1 diverso da r2 e c1 diverso da c2 riparte con le istruzioni sotto al do altrimenti va avanti!
boh

leomeya
03-04-2004, 12:24
hai ragione ci va messo un or!!!!sono proprio un cazzone se faccio un errore cosi' all'esame mi sparo!
il problema che sei cosi' convinto di averlo fatto bene che non ti accorgi dell'errore!
sul dev che opzione devo usare per migliorere la lettura del testo del programma?

Johnny_Depp
03-04-2004, 12:27
devi utilizzare l'operatore OR (vedi il mio post sopra) al posto dell' AND

Loading