View Full Version : [c]non da errori ma non fa nulla
emiliano30
21-05-2005, 18:54
ora il programma non da errori...ma neanche fa nulla (una cosa la stampa, il prodotto è 0):cry: mentre io mi ribbutto sul Deitel & Deitel chi gli da una guardata?
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
int rand( );
int matB( );
int somma(int **matriceB );
int prod(int **matrice);
main()
{
int matriceA[100][100];
int sum,prodotto,i,j,x,y;
int *matrice;
sum=i=j=x=y=0;
matrice=&matriceA[0][0];
printf("il prodotto è%d\n",prodotto);
system("PAUSE");
return 0;
}
/*FUNZIONE RIEMPIE MATRICE RAND*/
int rand()
{
int matriceA[100][100];
int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
matriceA[i][j]=1+(rand()%10);
}
/*FUNZIONE CHE CREA MATRICE B*/
int matB()
{
int i,j,x,y;
int matriceB[100][100];
int matriceA[100][100];
for(i=0;i<100;i++)
for(j=0;j<100;j++)
if(matriceA[i][j]%2==0){
matriceB[x][y]=matriceA[i][j];}
else matriceB[x][y]=matriceA[i][j]*2;
printf("matriceB è%d->\n",matriceB[x][y]);
return 0;
}
/*FUNZIONE SOMMA*/
int somma(int **matriceB )
{
int x,y;
int sum;
for(x=0;x<100;x++){
for(y=0;y<100;y++)
sum+=matriceB[x][y];}
printf("la somma della matrice b è\n",sum);
return sum;
}
int prod(int **matrice)
{
int x, prodotto=1;
for(x=0; x<100; x++)
prodotto*=matrice[x][x];
return prodotto;
}
VegetaSSJ5
21-05-2005, 19:13
come prima cosa cambia nome alla funzione rand (es. riempi)
nel main non hai richiamato la funzione riempi...
e inoltre a riempi() devi passare come parametro la matrice...
emiliano30
21-05-2005, 19:21
ma come la devo richiamare la funzione riempi ne main?
emiliano30
21-05-2005, 19:30
perchè mettere 2 asterischi :wtf: ?
int prod(int **matrice);
VegetaSSJ5
21-05-2005, 19:36
non l'ho provato quindi non so se funziona#include<math.h>
#include<stdlib.h>
#include<stdio.h>
void riempi (int **matrice);
int *matB (int **matrice);
int somma (int **matrice);
int prod (int **matrice);
int main (void) {
int matriceA[100][100];
int matriceB[100][100];
printf("Creo la matriceA");
riempi(matriceA);
printf("Il prodotto della matriceA e' %d\n", prod(matriceA));
printf("La somma della matriceA e' %d\n", somma(matriceA));
printf("Creo la matriceB...\n");
matriceB= matB(matriceA);
printf("Il prodotto della matriceB e' %d\n", prod(matriceB));
printf("La somma della matriceB e' %d\n", somma(matriceB));
system("PAUSE");
return 0;
}
/*FUNZIONE RIEMPIE MATRICE RAND*/
void riempi (int **matrice) {
int i,j;
for (i=0;i<100;i++)
for (j=0;j<100;j++)
matrice[i][j]=1+(rand()%10);
}
/*FUNZIONE CHE CREA MATRICE B*/
int *matB (int **matrice) {
int i, j, x, y;
int matriceB[100][100];
for (i=0;i<100;i++) {
for (j=0;j<100;j++) {
if (matrice[i][j]%2==0) matriceB[i][j]=matrice[i][j];
else matriceB[i][j]=matrice[i][j]*2;
}
}
return matriceB;
}
/*FUNZIONE SOMMA*/
int somma (int **matrice) {
int x, y, sum;
for (x=0;x<100;x++)
for(y=0;y<100;y++)
sum+=matrice[x][y];
return sum;
}
/*FUNZIONE PRODOTTO*/
int prod (int **matrice) {
int x, prodotto=1;
for(x=0; x<100; x++)
prodotto*=matrice[x][x];
return prodotto;
}
VegetaSSJ5
21-05-2005, 19:38
perchè mettere 2 asterischi :wtf: ?
int prod(int **matrice);
perchè la matrice ha 2 dimensioni (matrice[lunghezza][larghezza]) quindi è un puntatore (asterisco *) di puntatori (asterisco *). in totale sono 2 asterischi... :D
emiliano30
21-05-2005, 19:53
giusto :asd:
emiliano30
21-05-2005, 20:00
da un bel po di errori
VegetaSSJ5
21-05-2005, 20:06
da un bel po di errori
:D
te l'ho detto che non l'avevo provato... :fiufiu:
VegetaSSJ5
21-05-2005, 20:48
questo programma è testato e funziona bene.#include<math.h>
#include<stdlib.h>
#include<stdio.h>
#define DIM 10
int **creaMatrice (void);
void riempi (int **matrice);
void creaMatrB (int **matrOld, int **matrNew);
int somma (int **matrice);
int prod (int **matrice);
int main (void) {
int **matriceA, **matriceB;
matriceA= creaMatrice();
srand(time(NULL));
printf("Riempio la matrice A...\n");
riempi(matriceA);
printf("Il prodotto della matrice A e' %d\n", prod(matriceA));
printf("La somma della matrice A e' %d\n", somma(matriceA));
matriceB= creaMatrice();
printf("Creo la matrice B...\n");
creaMatrB(matriceA, matriceB);
printf("Il prodotto della matrice B e' %d\n", prod(matriceB));
printf("La somma della matrice B e' %d\n", somma(matriceB));
system("PAUSE");
return 0;
}
/*FUNZIONE RIEMPIE MATRICE RAND*/
void riempi (int **matrice) {
int i, j;
for (i=0; i<DIM; i++)
for (j=0; j<DIM; j++)
matrice[i][j]= 1 + (rand()%10);
}
/*FUNZIONE CHE CREA MATRICE B*/
void creaMatrB (int **matrOld, int **matrNew) {
int i, j;
for (i=0;i<DIM;i++) {
for (j=0;j<DIM;j++) {
if (matrOld[i][j]%2==0) matrNew[i][j]=matrOld[i][j];
else matrNew[i][j]=matrOld[i][j]*2;
}
}
return;
}
/*FUNZIONE SOMMA*/
int somma (int **matrice) {
int x, y, sum;
sum= 0;
for (x=0; x<DIM; x++)
for(y=0; y<DIM; y++)
sum+= matrice[x][y];
return sum;
}
/*FUNZIONE PRODOTTO*/
int prod (int **matrice) {
int x, prodotto=1;
for(x=0; x<DIM; x++)
prodotto= prodotto * matrice[x][x];
return prodotto;
}
/*FUNZIONE CHE ALLOCA MEMORIA PER UNA MATRICE QUADRATA*/
int **creaMatrice (void) {
int **matrice, i;
matrice= (int **) malloc (DIM*sizeof(int*));
for (i=0; i<DIM; i++)
matrice[i]= (int *) malloc (DIM*sizeof(int));
return matrice;
}tuttavia c'è un problema. siccome la matrice è di grandi dimensioni, la funzione che calcola il prodotto genera un numero troppo alto che non può essere rappresentato con un int. una possibile soluzione sarebbe sostituire il tipo int con unsigned long ma non so se anche questo riuscirebbe a risolvere il problema. cmq nel programma ho dato come dimensione di un "lato" della matrice quadrata 10 quindi il tipo int in questo caso va bene.
emiliano30
21-05-2005, 21:02
:D grazie funziona alla grande....ora me lo "spulcio"interessante anche la funzione che alloca memoria
VegetaSSJ5
21-05-2005, 21:05
interessante anche la funzione che alloca memoria
preferisco utilizzare i puntatori anzichè i vettori statici. se vuoi una versione che utilizza la notazione per gli array eccola qui sotto. NOTA BENE: ho semplicemente sostituito i puntatori con la notazione per gli array, l'ho provato e funziona ma secondo me è una mezza ciofeca e andrebbe rivisto per scriverlo con quest'altra notazione.#include<math.h>
#include<stdlib.h>
#include<stdio.h>
#define DIM 10
void riempi (int matrice[DIM][DIM]);
void creaMatrB (int matrOld[DIM][DIM], int matrNew[DIM][DIM]);
int somma (int matrice[DIM][DIM]);
int prod (int matrice[DIM][DIM]);
int main (void) {
int matriceA[DIM][DIM], matriceB[DIM][DIM];
srand(time(NULL));
printf("Riempio la matrice A...\n");
riempi(matriceA);
printf("Il prodotto della matrice A e' %d\n", prod(matriceA));
printf("La somma della matrice A e' %d\n", somma(matriceA));
printf("Creo la matrice B...\n");
creaMatrB(matriceA, matriceB);
printf("Il prodotto della matrice B e' %d\n", prod(matriceB));
printf("La somma della matrice B e' %d\n", somma(matriceB));
system("PAUSE");
return 0;
}
/*FUNZIONE RIEMPIE MATRICE RAND*/
void riempi (int matrice[DIM][DIM]) {
int i, j;
for (i=0; i<DIM; i++)
for (j=0; j<DIM; j++)
matrice[i][j]= 1 + (rand()%10);
}
/*FUNZIONE CHE CREA MATRICE B*/
void creaMatrB (int matrOld[DIM][DIM], int matrNew[DIM][DIM]) {
int i, j;
for (i=0;i<DIM;i++) {
for (j=0;j<DIM;j++) {
if (matrOld[i][j]%2==0) matrNew[i][j]= matrOld[i][j];
else matrNew[i][j]= matrOld[i][j]*2;
}
}
return;
}
/*FUNZIONE SOMMA*/
int somma (int matrice[DIM][DIM]) {
int x, y, sum;
sum= 0;
for (x=0; x<DIM; x++)
for(y=0; y<DIM; y++)
sum+= matrice[x][y];
return sum;
}
/*FUNZIONE PRODOTTO*/
int prod (int matrice[DIM][DIM]) {
int x, prodotto=1;
for(x=0; x<DIM; x++)
prodotto= prodotto * matrice[x][x];
return prodotto;
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.