n° 185
Maggio/Giugno 2013
Maggio 23, 2013, 04:44:50 am *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: problema matrice in c  (Letto 273 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
pe.pp.e
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 1


Mostra profilo
« inserita:: Agosto 27, 2012, 05:40:47 pm »

Salve a tutti.Dovrei Scrivere una funzione che prende in input una matrice e restituisca in output la matrice
trasposta (ovvero la matrice in cui la j-esima colonna è la j-esima riga della matrice data,per j = 1, 2, . . . , n).
Ho scritto il programma solo che non funziona in modo corretto.Qualcuno saprebbe come aiutarmi???.Attendo vostre riposte.Nel frattempo pubblico il codice che ho già scritto.Grazie in anticipo!!!!

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

int f(int** v,int len,int len1); //prototipo della funzione;
void stampa(int** v,int len,int len1); //prototipo della funzione;

int main(){

    int len,len1;
    int** v; //dichiaro la matrice;
    int i,j;
    int **funz;

         printf("Inserisci la grandezza delle righe della matrice:");
         scanf("%d",&len);
         printf("\nInserisci la grandezza delle colonne della matrice:");
         scanf("%d",&len1);

            v=(int**)malloc(sizeof(int)*len*len1); //alloco la matrice;

            for(i=0;i<len;i++)
              for(j=0;j<len1;j++){
                  printf("\n\nInserisci l'elelmento[%d][%d] della matrice:\t",i+1,j+1);
                      scanf("%d",&v[i][j]);
              }

              for(i=0;i<len;i++)
                for(j=0;j<len1;j++){
                      printf("\n\nL'elemento[%d][%d] della matrice vale:\t%d",i+1,j+1,v[i][j]);
                }

               funz=f(v,len,len1); //richiamo la funzione;
               stampa(funz,len,len1); //richiamo la procedura per stampara la matrice inversa;

                            free(v);
                            free(funz);
              return 0;
}

int f(int** v,int len,int len1){ //funzione che svolge l'esercizio;
          int** v2; //dichiaro la seconda matrice;
            int i,j;

            v2=(int**)malloc(sizeof(int)*len*len1); //alloco la matrice;

                for(i=0;i<len;i++)
                  for(j=0;j<len1;j++){
                       v2[i][j]=v[j][i];
                  }
            return v2;
}

void stampa(int** v,int len,int len1){ //procedura per stampare la matrice inversa;

             int i,j;
             int** v2;

                for(i=0;i<len;i++)
                  for(j=0;j<len1;j++){
                    printf("",v2[i][j]);
                  }
         printf("\n\n");
}
Registrato
Hyde
Global Moderator
Hero Member
*****

Karma: +47/-6
Scollegato Scollegato

Messaggi: 3266


I am a man who walks alone


Mostra profilo WWW
« Risposta #1 inserita:: Agosto 30, 2012, 10:57:30 am »

L'errore principale risiede nel come stai allocando la matrice.
Una matrice bidimensionale può essere allocata dinamicamente allocando prima lo spazio necessario alle righe, poi per ogni riga, quello relativo alle colonne, in questo modo:

Codice:
printf("Inserisci la grandezza delle righe della matrice:");
scanf("%d",&len);
printf("\nInserisci la grandezza delle colonne della matrice:");
scanf("%d",&len1);

v=(int**)malloc(sizeof(int)*len); //alloco le righe della matrice;

for(int x = 0;x < len;++x)
v[x] = (int*)malloc(sizeof(int)*len1);

Seguendo lo stesso principio, ma operando al contrario, devi riscivere il codice relativo alla cancellazione della memoria. Ovvero, cicli tra le righe e richiami la free per ognuna di esse, poi, al termine, chiami la free direttamente su v.

Provvedi a cambiare il codice come suggerito e rispostalo se dovessi incontrare altri errori.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
http://myitside.blogspot.com
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page