Problema programma in c++

di il
8 risposte

Problema programma in c++

Ciao a tutti ragazzi sono nuovo e ho letto le regole del forum, cercando tra le varie discussioni non ho trovato qualcosa che mi aiutasse a capire il problema del mio programma. Studio ingegneria e sto facendo un programma per fondamenti di informatica,il mio problema è utilizzare al meglio le funzioni all' interno del programma ma non riesco a capire il motivo per la quale non riesco a farlo partire. Vi pubblico il mio lavoro su un semplice esercizio che date tre matrici(A,B,C) restituisca una quarta matrice che sia il risultato di: (A*B)-C. Spero possiate aiutarmi.
P.S. il problema viene visualizzato alla riga 41 colonna 27.
Scusate ma non riesco ad allegare il file.

///////////////////////////////////////////////////

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

//typedef int **Mat;
int alloca_matrice(int**,int,int);
int inserisci_elem(int**,int,int);
int visualizza_mat(int**,int,int);
int prodotto_mat(int**,int**,int**,int,int,int);
int differenza_matrice(int**,int**,int**,int,int);

int main(int argc, char *argv[]) {

int m,n,c,d,a,b,i,j,k;
int **mat1;
int **mat2;
int **mat_prod;
int **mat3;
int **mat_result;
int alloca1,alloca2,alloca3,alloca4,allocap;
int prod,dif;

do{
printf("Inserisci prima matrice:\n"); //inserisci matrice A
printf("Inserisci numero di righe:\n");
scanf("%d",&m);
alloca1=alloca_matrice(mat1,m,n);
printf("Inserisci numero di colonne:\n");
scanf("%d",&n);

printf("\n\nInserisci seconda matrice:\n"); //inserisci matrice B
printf("Inserisci numero di righe:\n");
scanf("%d",&c);
alloca2=alloca_matrice(mat2,c,d);
printf("Inserisci numero di colonne:\n");
scanf("%d",&d);
}
while(n!=c);



insersci_elem(**mat1,m,n);
insersci_elem(**mat2,c,d);


printf("Matrice A: %dx%d\n",m,n); // visualizza traccia matrice A
visualizza_mat(mat1,m,n);

printf("\nMatrice B: %dx%d\n",n,d); // visualizza traccia matrice B
visualizza_mat(mat2,n,d);

allocap=alloca_matrice(mat_prod,m,d); //alloca matrice prodotto A*B

prod=prodotto_mat(mat_prod,mat1,mat2,m,n,d); /* Calcolo del prodotto delle matrici A*B */

printf("\nMatrice prodotto AxB:\n"); // Visualizza traccia matrice A*B
visualizza_mat(mat_prod,m,n);


do{
printf("\n\nInserisci terza matrice:\n"); //inserisci matrice C
printf("Inserisci numero di righe:\n");
scanf("%d",&a);
alloca3=alloca_matrice(mat3,a,b);
printf("Inserisci numero di colonne:\n");
scanf("%d",&b);

}
while(a!=m||b!=d);

printf("\nInserisci valori matrice C \n\n\n"); // inserisci valori matrice C
insersci_elem(**mat3,a,b);


printf("\nMatrice C: %dx%d\n",a,b); // visualizza traccia matrice C
visualizza_mat(mat3,a,b);

alloca4=alloca_matrice(mat_result,a,b); //alloca matrice risultato=(A*B)-c

dif=differenza_matrice(mat_result,mat_prod,mat3,a,b); //calcolo matrice (A*B)-C

printf("\n\nDifferenza matrice (A*B)-C\n");

visualizza_mat(mat_result,a,b);

system("pause");
return(1);
}

int alloca_matrice(int **mat,int r, int c){ //alloca matrice
int i;
mat=(int**)malloc(r*sizeof(int*));
for(i=0;i<r;i++){
mat=(int*)malloc(c*sizeof(int));
}
return(**mat);
}


int inserisci_elem(int **mat,int r,int c){
int i,j;
printf("Inserisci valori matrice \n\n\n"); // inserisci valori matrice
for(i=0;i<r;i++){
for(j=0;j<c;j++){
printf("Elemento(%d,%d)=",i+1,j+1);
scanf("%d",&mat[j]);
}
printf("\n");
}

}


int visualizza_mat(int **mat,int r,int c){ /*Visualizza matrice*/
int i,j;
for(i=0;i<r;i++){
printf("\n");
for(j=0;j<c;j++){
printf(" %d ",mat[j]);
}
}
}

int prodotto_mat(int**mat_prod,int **mat1,int **mat2,int r,int c,int x){

int i,j,k;

for(i=0;i<r;i++){ /* Calcolo del prodotto delle matrici A*B */
for(j=0;j<x;j++){
mat_prod[j]=0;
for(k=0;k<c;k++){
mat_prod[j]+=mat1[k]*mat2[k][j];
}
}
}

}


int differenza_matrice(int**mat_result,int**mat_prod,int**mat3,int r,int c){
int i,j;
for(i=0;i<r;i++){ //calcolo matrice (A*B)-C
for(j=0;j<c;j++){
mat_result[j]=mat_prod[j]-mat3[j];
}
}
}

8 Risposte

  • Re: Problema programma in c++

    Utilizza i tag code per il codice altrimenti non si capisce ...

    E poi, quale sarebbe la linea 41 ? E di quale problema si tratta esattamente ?
  • Re: Problema programma in c++

    Salve, spero di aver scritto nella sezione corretta e spero di aver utilizzato correttamente il pulsante code. Mi sto approcciando da poco al C++ e ho trovato molto interessante questo forum. Il mio ambiente di lavoro è eclipse. Ho un problema con un programma: il programma deve permette l'inserimento di un indefinito numero di venditori e di 10 numeri, che rappresentano le vendite, per ciascuno; deve poi valutare la vendita migliore del singolo venditore e la vendita migliore tra tutti i venditori e individuare il venditore migliore tra tutti. Il mio programma ha due errori: il primo è che il ciclo non riconosce il valore sentinella del while, infatti continua anche se inserisco -1. Il secondo problema è che il programma che ho fatto non attribuisce al singolo venditore la sua vendita massima, infatti se il venditore inserito successivamente ha vendite inferiori al primo, il programma attribuisce al secondo venditore la vendita massima del primo.
    In cerca di un aiuto posto il mio codice...
    #include <iostream>
    using namespace std;
    
    int main() {
    	int vendite;
    	int venditaMax = 0;
    	int venditaMaxTot = 0;
    	int codiceVenditore;
    	int Vincitore;
    
        while (codiceVenditore != -1) {
    		cout << "Inserire il codice del venditore, -1 per terminare"<< endl;
    		cin >> codiceVenditore;
    
    		cout << "Inserire il numero di vendite " << endl;
    		cin >> vendite;
    
    		for(int contatoreVendite = 1; contatoreVendite <= 10; ++contatoreVendite) {
    			cout << "Inserire il numero di vendite successivo" << endl;
    			cin >> vendite;
    
    			if (vendite > venditaMax)
    				venditaMax = vendite;
    
    		}
    
    		cout << "Il numero maggiore di vendite del venditore n° " << codiceVenditore << " é " << venditaMax << endl;
    	}
    
    			if (venditaMax > venditaMaxTot) {
    				venditaMaxTot = venditaMax;
    			    Vincitore = codiceVenditore; }
    
    
    
    	cout << "Il vincitore è il venditore n° " << Vincitore << "con " << venditaMaxTot << "vendite" << endl;
    
    	return 0;
    }
    
  • Re: Problema programma in c++

    Babi ... devi utilizzare un tuo thread ... questa discussione è di un altro utente ... (a parte il fatto che "in cerca di aiuto" è un buon modo per non avere risposte ... indica chiaramente il quesito ...)
  • Re: Problema programma in c++

    Ok, grazie
  • Re: Problema programma in c++

    Oregon il problema è nella funzione visualizza_mat subito dopo il ciclo do-while iniziale in cui inserisco righe e colonne. Il programma mi da:"la funzione visualizza_mat non è stata dichiarata a questo scopo"....
    P.S. non so come scrivere meglio o più chiaramente il codice.
  • Re: Problema programma in c++

    Scusa mi devo correggere la funzione è inserisci_elem dopo il ciclo do-while prima di visualizza_mat per visualizzare la matrice A.
  • Re: Problema programma in c++

    #include <stdio.h>
    #include <stdlib.h>
    
    //typedef int **Mat;
    int alloca_matrice(int**,int,int);
    int inserisci_elem(int**,int,int);
    int visualizza_mat(int**,int,int);
    int prodotto_mat(int**,int**,int**,int,int,int);
    int differenza_matrice(int**,int**,int**,int,int);
    
    int main(int argc, char *argv[]) {
    
    int m,n,c,d,a,b,i,j,k;
    int **mat1;
    int **mat2;
    int **mat_prod;
    int **mat3;
    int **mat_result;
    int alloca1,alloca2,alloca3,alloca4,allocap;
    int prod,dif;
    
    do{
    	printf("Inserisci prima matrice:\n");                    //inserisci matrice A                      
    	printf("Inserisci numero di righe:\n");
    	scanf("%d",&m);
    	alloca1=alloca_matrice(mat1,m,n);
    	printf("Inserisci numero di colonne:\n");
    	scanf("%d",&n);
    	
    	printf("\n\nInserisci seconda matrice:\n");              //inserisci matrice B                            
    	printf("Inserisci numero di righe:\n");
    	scanf("%d",&c);
    	alloca2=alloca_matrice(mat2,c,d);
    	printf("Inserisci numero di colonne:\n");
    	scanf("%d",&d);
    	}
    	while(n!=c);
    	
       
       
      insersci_elem(**mat1,m,n);
      insersci_elem(**mat2,c,d);
        
       	
    	printf("Matrice A: %dx%d\n",m,n);                 // visualizza traccia matrice A
    		visualizza_mat(mat1,m,n);
    		
    	printf("\nMatrice B: %dx%d\n",n,d);              // visualizza traccia matrice B
    		visualizza_mat(mat2,n,d);
    
    	allocap=alloca_matrice(mat_prod,m,d);	         //alloca matrice prodotto A*B
    	
    	prod=prodotto_mat(mat_prod,mat1,mat2,m,n,d);   /* Calcolo del prodotto delle matrici A*B */
        
        printf("\nMatrice prodotto AxB:\n");       // Visualizza traccia matrice A*B
    	visualizza_mat(mat_prod,m,n);
    	
    	
    		do{
    		printf("\n\nInserisci terza matrice:\n");                    //inserisci matrice C                      
    	    printf("Inserisci numero di righe:\n");
    	    scanf("%d",&a);
    	    alloca3=alloca_matrice(mat3,a,b);
    	    printf("Inserisci numero di colonne:\n");
    	    scanf("%d",&b);
    	    
    		}
    		while(a!=m||b!=d);
    		
    	    printf("\nInserisci valori matrice C \n\n\n");        // inserisci valori matrice C
    		insersci_elem(**mat3,a,b);
    		
    		
    		printf("\nMatrice C: %dx%d\n",a,b);              // visualizza traccia matrice C
    		    visualizza_mat(mat3,a,b);
    		
    		alloca4=alloca_matrice(mat_result,a,b);      //alloca matrice risultato=(A*B)-c
    			
    	    dif=differenza_matrice(mat_result,mat_prod,mat3,a,b);        //calcolo matrice (A*B)-C
    	
    		printf("\n\nDifferenza matrice (A*B)-C\n");
    		
    		visualizza_mat(mat_result,a,b);
    		
        system("pause");
    	return(1);
    }
    
    int alloca_matrice(int **mat,int r, int c){                //alloca matrice
    	int i;
    	mat=(int**)malloc(r*sizeof(int*));
    	for(i=0;i<r;i++){
    		mat[i]=(int*)malloc(c*sizeof(int));
    	}	
    	return(**mat);
    }
    
    
    int inserisci_elem(int **mat,int r,int c){
    	int i,j;
    	printf("Inserisci valori matrice  \n\n\n");        // inserisci valori matrice 
    	for(i=0;i<r;i++){		
    		for(j=0;j<c;j++){
    		    printf("Elemento(%d,%d)=",i+1,j+1);
    		    scanf("%d",&mat[i][j]);
    		}
    		printf("\n");		                                   
        }
        
    }
    
    
    int visualizza_mat(int **mat,int r,int c){       /*Visualizza matrice*/
    	int i,j;
    		for(i=0;i<r;i++){
    			printf("\n");
    			for(j=0;j<c;j++){
    			printf(" %d ",mat[i][j]);	
    			}
    		}
    }
    
    int prodotto_mat(int**mat_prod,int **mat1,int **mat2,int r,int c,int x){
    
    	int i,j,k;
    	
    	for(i=0;i<r;i++){                  /* Calcolo del prodotto delle matrici A*B */
        	for(j=0;j<x;j++){              
        		mat_prod[i][j]=0;
        		for(k=0;k<c;k++){
        			mat_prod[i][j]+=mat1[i][k]*mat2[k][j];
        		}
        	}
        }
    	
    }
    
    
    int differenza_matrice(int**mat_result,int**mat_prod,int**mat3,int r,int c){
    	int i,j;
    		for(i=0;i<r;i++){                              //calcolo matrice (A*B)-C
    			for(j=0;j<c;j++){
    				mat_result[i][j]=mat_prod[i][j]-mat3[i][j];
    			}
    		}
    }
    
    
  • Re: Problema programma in c++

    In molte parti del programma hai scritto

    insersci_elem

    e non

    inserisci_elem


    L'hai visto?
Devi accedere o registrarti per scrivere nel forum
8 risposte