[c] aiuto matrici

di il
5 risposte

[c] aiuto matrici

Salve mi sono appena iscritto a questo forum e spero di trovare qualcuno che possa aiutarmi con la programmazione C.

Ho un problema devo scrivere un programma che prende in input due matrici "rettangolari" A e B.
Nella matrice A ne somma le colonne nella B somma le righe, fa un confronto per vedere quale somma e maggiore e la colonna o la riga con il risultato maggio deve essere inserita in una nuova matrice C.
Ho buttato giu un po di codice... mi gira quasi tutto bene, solo che non riesco a creare la nuova matrice ...potreste aiutarmi... grazie
#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>

int ** leggi(int,int,int,int);
   void somma(int**,int**,int,int,int,int);


int main(){
    int i,j;
	int r,c,r1,c1;
	int **matrix;
	int **matrix2;
	
	


printf("**********\n*\t *\n* Step 1 *\n*\t *\n**********\n");
	printf("Ins numero di righe: ");
	scanf("%d",&r);
	printf("Ins numero di colonne: ");
	scanf("%d",&c);
	  
    matrix=(int**)malloc(r*sizeof(int*));  
    printf("**********\n*\t *\n* Step 2 *\n*\t *\n**********\n");	
    printf("\n** Inserisci i valori della  matrice **\n");
	for(i=0;i<r;i++){
		matrix[i]=(int*)malloc(c*sizeof(int));
		}
   
	matrix=leggi(r,c,i,j);
   	

printf("**********\n*\t *\n* Step 1 *\n*\t *\n**********\n");
	printf("Ins numero di righe: ");
	scanf("%d",&r1);
	printf("Ins numero di colonne: ");
	scanf("%d",&c1);
	
	matrix2=(int**)malloc(r1*sizeof(int*));  
    printf("**********\n*\t *\n* Step 2 *\n*\t *\n**********\n");	
    printf("\n** Inserisci i valori della seconda matrice **\n");
	for(i=0;i<r1;i++){
		matrix2[i]=(int*)malloc(c1*sizeof(int));
		}
	
   
	matrix2=leggi(r1,c1,i,j);
    somma(matrix,matrix2,r,c,r1,c1);
   

                                    
	system("Pause");
	return 0;
}


int** leggi(int r,int c,int i,int j){
    void stampa(int**,int,int);
    //void somma(int**,int,int);
    
      int **matrix;
	
    for(i=0;i<r;i++){
		for(j=0;j<c;j++){
			printf("inserisci valore in %d %d: ",i,j);
			scanf("%d",&matrix[i][j]);
			}
		}
 
 stampa(matrix,r,c);
 return matrix;

}

void stampa(int **matrix,int R,int C){
	int i,j;
	printf("matrice con %d righe e %d colonne:\n",R,C);
	for(i=0;i<R;i++){
		for(j=0;j<C;j++){
			printf("\t%d",matrix[i][j]);
			}
		printf("\n");
		}
}


void somma(int **matrix, int **matrix2,int r,int c,int r1,int c1){
     int k[3][2];
     
    int sc;
    int sr;
    int i,j;
	int sommaC = 0;
	int sommaR = 0;


          for(j=0 ; j<c; j++){
           int somma = 0;
           for(i=0; i<r; i++){
           somma = somma + matrix[i][j] ;
           sc = (int)somma; 
           }
            printf("Somma colonna matrice 1:: %d\n", sc) ; 
           }
            
           for(i=0; i<r1; i++){
           int sommaR = 0;
          for(j=0 ; j<c1; j++){
           sommaR = sommaR + matrix2[i][j] ;
           sr = (int)sommaR;
           }
            printf("Somma riga matrice 2:: %d\n", sr) ;
           }
          
     }
     

5 Risposte

  • Re: [c] aiuto matrici

    Ma nessuno puo aiutarmi???? ne ho urgente bisogno... grazie
  • Re: [c] aiuto matrici

    Ciao VashTheStampede7,
    mi spieghi come come fai ad assegnare la matrice?
    
    int** leggi(int r,int c,int i,int j){
        void stampa(int**,int,int);
        void somma(int**,int,int);
       
          int **matrix;
       
        for(i=0;i<r;i++){
          for(j=0;j<c;j++){
             printf("inserisci valore in %d %d: ",i,j);
             scanf("%d",&matrix[i][j]);
             }
          }
    
  • Re: [c] aiuto matrici

    È una domanda perchè c'è qualcosa che non va nel mio codice o è una curiosità? Comunque dichiaro un puntatore a puntatore nella funzione leggi passo le righe e le colonne prese in input dal main e allocate dinamicamente con la malloc.. con due for mi scorro gli indici delle righe e delle colonne e passo alla matrice l'indirizzo di ogni elemento... o almeno è quello che credo di aver fatto ;D
  • Re: [c] aiuto matrici

    Non è una curiosità.
    La funzione è sbagliata perché la matrice che hai allocato nel main non la stai passando.

    Devi passare l'array di puntatori come parametro insieme alle dimesioni r e c ed andare a scriverci dentro.

    Tu invece definisci un altro puntatore, senza allocare niente, che punta in una zona non precisata e ci scrivi dentro. Come se non bastasse restituisci quest'indirizzo e lo assegni all'allocazione corretta.

    La funzione di lettura è semplicemente:
    
    void leggi(int **matrix, int r, int c){
      int i,j;
      for(i=0;i<r;i++){
        for(j=0;j<c;j++){
          printf("inserisci valore in %d %d: ",i,j);
          scanf("%d",&matrix[i][j]);
        }
      }
      stampa(matrix,r,c);
    }
    
    Nella matrice A ne somma le colonne nella B somma le righe, fa un confronto per vedere quale somma e maggiore e la colonna o la riga con il risultato maggio deve essere inserita in una nuova matrice C.

    Questa parte non la capisco, (de)scrivila meglio
  • Re: [c] aiuto matrici

    (de)scrivo meglio: ho una matrice A 3x4 e una matrice B 4x3 sommo gli elementi delle 3 righe della matrice A, e sommo gli elementi delle colonne della matrice B confronto le somme ottenute e se: la somma della prima riga della matrice A è maggiore della somma della prima colonna della matrice B allora la riga A dovrà essere inserita come colonna in una nuova matrice che chiamo C lo stesso vale se la somma della colonna di B è maggiore della somma della riga di A. Spero tu possa aiutarmi al piu presto ho la prova oggi...grazie
Devi accedere o registrarti per scrivere nel forum
5 risposte