PDA

View Full Version : programmazione in c aiuto urgente per esame!


leomeya
02-04-2004, 18:35
programma che alloca dinamicamente 2 matrici e ne fa la matrice somma delle 2!
se inserisco un numero di righe maggiore del numero di colonne non funziona mentre al contrario funziona perche'?
#include <stdio.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);
}


void 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*));
for (i=0;i<c1;i++)
mat1[i]=(int*)malloc(c1*sizeof(int));
mat2=(int**)malloc(r2*sizeof (int*));
for (i=0;i<c2;i++)
mat2[i]=(int*)malloc(c2*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 ",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 ",mat2[i][j]);
printf ("\n");
}
mat3=(int**)malloc(r1*sizeof (int*));
for (i=0;i<c1;i++)
mat3[i]=(int*)malloc(c1*sizeof (int));
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 ",mat3[i][j]);
printf ("\n");
}
getch();
}

leomeya
02-04-2004, 20:14
strano vero?

anx721
03-04-2004, 01:26
Ecco una versione funzionante:


#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);
}

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 ",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 ",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 ",mat3[i][j]);
printf ("\n");
}
getchar();
return 0;
}

leomeya
03-04-2004, 08:03
c'e' ancora 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!

leomeya
03-04-2004, 11:37
ho risolto il problema bastava mettere un or al posto dell'and all'interno del while!

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);
}

void 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();
}

leomeya
03-04-2004, 11:52
sul dev che opzione devo usare per migliorere la lettura del testo del programma?
perche' sia ben incolonnato il testo del programma e non il testo dell'eseguibile