Errore funzioni con matrici in C

di il
12 risposte

Errore funzioni con matrici in C

Ragazzi questo piccolo programmino(somma di matrici con le funzioni lo so sono un principiante) mi da un errore i fase di compilazione e non riesco a capirne la causa, ringrazio chi sapra illuminarmi

ps un piccolo commento sulla leggibilita del mio codice ? e accettabile?

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

#define N 100

void carica_matrice(int x[][],int rig,int col);
void somma(int x[][],int x2[][],int somma[][],int rig,int col);
void stampa_matrice(int x[][],int rig,int col);

main(){
       int mat1[N][N],mat2[N][N],som[N][N],r,c;
       
       printf("Somma matrici \n");
       
       do{
          printf("Inserire numero righe : ");
          scanf("%d",&r);
       }while((c<1)||(c>100));
       
       do{
          printf("Inserire numero colonne : ");
          scanf("%d",&c);
       }while((c<1)||(c>100));
       
       printf("Caricamento prima matrice : \n");
       carica_matrice(mat1,r,c);
       printf("caricamento seconda matrice :\n");
       carica_matrice(mat2,r,c);
       
       somma(mat1,mat2,som,r,c);
       printf("Matrice somma \n");
       stampa_matrice(som,r,c);  
       system("Pause");
       }
       
void carica_matrice(int x[][],int rig,int col){
     int j,i;
     
     for(i=0;i<rig;i++){
         for(j=0;j<col;j++){
               printf("Inserisci elemnto %d %d della matrice : ",rig+1,col+1);             
               scanf("%d",&x[i][j]); 
                            }               
                        }
     }

void somma(int x[][],int x2[][],int somma[][],int rig,int col){
     int i,j;
     
     for(i=0;i<rig;i++){
         for(j=0;j<col;j++){
                somma[i][j]=x[i][j]+x2[i][j];            
                            }               
                        }
     }
void stampa_matrice(int x[][],int rig,int col){
      int i,j;
     
     for(i=0;i<rig;i++){
         for(j=0;j<col;j++){
                printf("%d\t",x[i][j]);              
                            }               
         printf("\n");
                        }
      }    

12 Risposte

  • Re: Errore funzioni con matrici in C

    do{
    printf("Inserire numero righe : ");
    scanf("%d",&r);
    }while((r<1)||(r>N));
    void carica_matrice(int x[][N],int rig,int col);
    void somma(int x[][N],int x2[][N],int somma[][N],int rig,int col);
    void stampa_matrice(int x[][N],int rig,int col);
    Ti ho messo un pò di errori
  • Re: Errore funzioni con matrici in C

    Grazie mille per l'attenzione

    il primo era un errore da copia incolla , il secondo potresti essere un po piu esaustivo non ho capito molto ,come mai si mette la dimensione solo delle colonne ?

    grazie ancora
  • Re: Errore funzioni con matrici in C

    Piccolo up
  • Re: Errore funzioni con matrici in C

    Scusa non mi ero collegato. La dimensione delle colonne serve al compilatore per sapere la grandezza degli oggetti che andrà a costruire. In pratica il compilatore andrà a modificare la tua definizione:
    da:
    
    void somma(int x[][N],int x2[][N],int somma[][N],int rig,int col);
    
    a
    
    void somma(int *x[N],int *x2[N],int *somma[N],int rig,int col);
    
    quindi la tua matrice in realtà sarà vista dal compilatore come un array di puntatori di dimensione N NOTA in precedenza. Se non lo fai lui non sa la dimensione.
  • Re: Errore funzioni con matrici in C

    Non ti preoccupare sei gentilissimo

    So di essere un ignorantone ma per ne caso di vettori monodimensionali non la devo mettere?

    ps e nel caso di matrici a piu di due dimensioni?

    void (int x [][N][N],...)? si procede in questo modo?

    Grazie mille ancora
  • Re: Errore funzioni con matrici in C

    Nel caso di monodimensionali int x[] equivale a int *x, quindi non la devi mettere (se la metti è meglio cmq perche poi sai nella funzione qual'è la dimensione massima). Nel caso di più dimensioni va bene come stai faccendo. La prima dimensione non serve al compilatore ma il resto sì.
    Non entriamo nel discorso dei doppi puntatori perche poi non ne esci più, andiamo per passi se no poi ti confondi.
    Hint:
    
    int x[][]; equivale int **x;
    
  • Re: Errore funzioni con matrici in C

    Grazie ancora per le spiegazioni

    un ultima cosa poi non ti do piu fastidio giuro

    volevo chiederti il mio codice mettendo da parte per un attimo gli errori, è un codice leggibile? cosa dovrei migliorare per far si che venga compreso al meglio da altre persone

    Grazie per la disponibilita
  • Re: Errore funzioni con matrici in C

    Il tuo codice è abbastanza leggibile.
    Io toglierei system("pause"); inizializzerei le variabili r e c e farei una funzione di convalida input di riga e colonna del tipo
    
    int validate()
    {
       int val = -1;
       do{
       scanf("%d",&val);
       }while((val<1)||(val>N));
       return val;
    }
    
    poi nel main:
    
    printf("Inserire numero righe : ");
    r = validate();
    printf("Inserire numero colonne : ");
    c = validate();
    
  • Re: Errore funzioni con matrici in C

    Grazie per i suggerimenti in effeti non c'avevo pensato molto piu comodo che rifarlo ogni volta sembra una getchar ,per il system("pause") cosa mi consigleresti ? lo trovo molto utile per bloccare il programma

    ps sono diventato un un vero scocciatore ma come funziona il debug? da dove dovrei iniziare a informarmi

    Sempre gentilissimo
  • Re: Errore funzioni con matrici in C

    Una lettura interessante è il mitico manuale di stile del Pescio http://www.eptacom.net/pubblicazioni/cpp_stile/all.htm è un po vecchiotto ma i principi sono sempre validi. (Anche se come indenta lui a me non piace )

    Lo stile che uso io è questo:
    
    void StampaMatrice(int x[][], int riga, int colonna)
    {
       for(int i = 0; i < riga; i++)
       {
          for(int j = 0; j < colonna; j++)
          {
             printf("%d\t", x[i][j]);              
          }               
    
          printf("\n");
       }
    }
    
    Uso la Pascal convetion per i nomi di funzione, delle classi, dei tipi, invece la camel convention per i nomi delle variabili locali, dei parametri, ecc. ecc. (sul manuale troverai tutto)

    Nel corso degli anni ho cambiato più volte, l' importante è che il tuo codice sia sempre coerente.
    Comunque porsi il problema della leggibilità del codice è una gran cosa, ti meriti un encomio e una birretta
  • Re: Errore funzioni con matrici in C

    Per system(pause) usa getchar(). Per il debug devi vedere le info del tuo IDE. Ogni IDE ha un menù Debug. Per interrompere l'esecuzione del programma in un punto di solito si mette un pallino rosso a sx della riga dove vuoi fermare l'esecuzione. Questo lo fai semplicemente con il click del mouse.
    A cosa serve il debug:
    Serve a farti scoprire dove sono gli errori logici del tuo programma e a scoprire il perche un programma o una parte di essa non fa ciò che deve e da valori sballati.
  • Re: Errore funzioni con matrici in C

    Grazie mille per i consigli e gli aiuti

    mi sa che ci risentiremo preso
Devi accedere o registrarti per scrivere nel forum
12 risposte