Principiante chiede aiuto per dimensione matrici in function

di il
8 risposte

Principiante chiede aiuto per dimensione matrici in function

L'esercizio è il seguente:

//Sviluppare una function C che, dati come parametri di input
//un array 2D di int, il numero delle righe, il numero delle colonne,
//un int p e un int q, determina e restituisce come parametro di
//output la somma degli elementi che hanno gli indici di riga e
//di colonna compresi tra int p e int q.

Io ho preferito realizzare l'intero programma, invece che soltanto la funzione.

Il fatto è che nel prototipo di funzione, io ho inserito una dimensione a cavolo, tipo m[100][100], poi nel main ho chiesto all' utente le nuove dimensioni, tramite questa istruzione:
printf("Dammi valori riga e colonna\n");
    do{
        scanf("%d", &r);
        scanf("%d", &c);
      } while((r<=0)||(c<=0)||(r>5)||(c>5));
ecco, adesso sta il problema! Quando passo la matrice alla funzione, che dimensioni devo inserire per far si che siano esattamente quelle create nel main? Quindi i nuovi valori "r" e "c" - rispettivamente riga e colonna?
Con i puntatori? Mi spiegate come, possibilmente commentando, perchè non ho ancora imparato ad usarli...

Ditemi se la mia domanda non era chiara e grazie a chi risponderà

8 Risposte

  • Re: Principiante chiede aiuto per dimensione matrici in function

    Come crei la matrice? puntatori o allocazione statica?
    inoltre
    Quando passo la matrice alla funzione, che dimensioni devo inserire per far si che siano esattamente quelle create nel main?
    questo è sempre una questione di creazione, cosa devi passare alla funzione già è scritto nella traccia da te specificata.
    forse se posti l'intero codice del programma potremmo valutare meglio la cosa.
  • Re: Principiante chiede aiuto per dimensione matrici in function

    Si certamente scusami se sono stata poco chiara!
    Mi correggi eventuali errori? E ti chiedo scusa se ne troverai, ma non sono ancora tanto brava xD
    #include <stdio.h>
    #include <stdlib.h>
    float confr_somma(int p, int q);
    
    int main()
    {
    
           int p=0, q=0, i, j;
        float somma=0;
    
          printf("Dammi p e q\n");
            scanf("%d", &p);
            scanf("%d", &q);
    
    
        somma=confr_somma(p,q);
        printf("%f", somma);
    
    }
    
    
    
    
    float confr_somma(int p, int q)
    {
         int i, j, r=0, c=0;
        float m[10][10], somma1=0;
    
    
        printf("Dammi val riga e colonna\n");
        do{
            scanf("%d", &r);
            scanf("%d", &c);
          } while((r<=0)||(c<=0)||(r>5)||(c>5));
            printf("Dammi i val decimali di matrice\n");
        for(i=0;i<r;i++)
            {
                for(j=0.0;j<c;j++)
                    {
                        scanf("%f", &m[i][j]);
                    }
                }
    
            for(i=0;i<r;i++)
            {
                for(j=0;j<c;j++)
                    {
                 printf("%f\t", m[i][j]);
                 }
                 printf("\n");
            }
    
    
    
        if(i==p && j==q){
            for(i=p+1;i<q;i++)
            {
                for(j=p+1;j<q;j++)
                {
    
                            somma1=somma1+m[i][j];
    
                }
            }
        }
          return somma1;
    }
    
    
  • Re: Principiante chiede aiuto per dimensione matrici in function

    Da quello che ho visto però la tua implementazione è diversa da quella che hai descritto nella traccia. infatti c'è solo una funzione , confr_somma() che riceve in input solo p e q, e non anche l'array 2D con le sue dimensioni. Inoltre se devi restituire la somma di numeri interi, perché restituisci con la funzione un 'float' e non sempre un 'int'? per quanto riguarda l'array 2D, vedo che lo hai allocato staticamente, con dimensioni fisse 10x10, all'interno di confr_somma(). Quindi, anche se hai fatto tutto il programma da zero, sei andata totalmente fuori traccia e , anche se hai fatto diciamo 'qualcosa' in più, non vuol dire che sia la soluzione migliore.
    Il mio consiglio è quello di cominciare prima nel soddisfare ciò che la traccia chiede, poi se rimane tempo oppure se si ha voglia, si può aggiungere in seguito qualcosa per migliorare il codice.
  • Re: Principiante chiede aiuto per dimensione matrici in function

    Scusate..Che significato hanno i "|" nella funzione while?
  • Re: Principiante chiede aiuto per dimensione matrici in function

    I doppi || sono gli or..

    In realtà, più che andare fuori traccia, ho voluto implementare l'intero programma, per vedere se mi funzionava il tutto, dato che non devo esercitarmi solo nelle funzioni, ma in tutto.
    Deve restituirmi un float come somma, perchè l'array 2D ha valori float, la somma di float da float, quindi "somma" è float.
    La dimensione mi hanno detto che inizialmente si da una dimensione massima così, ma poi il compilatore effettivamente, quando faccio la scanf di r e c - riga e colonna, mi crea la matrice con quello che chiedo..

    Sono andata fuori traccia in quanto l'esercizio mi chiedeva di fare una function con solo la somma al suo interno, ecco perchè chiedevo a voi come si passavano le dimensioni (date dall'utente) di una matrice, in una function..
    Comunque sicuramente non lo presenterò così al professore..

    Comunque ho cambiato alcune cose, c'ho fatto due function in modo da non confondermi il tutto! L'unica cosa è che non mi fa la somma...
    Se volete controllare, mi farebbe tanto piacere.
    
    
    #include <stdio.h>
    #include <stdlib.h>
    float matrice();
    float sottomatrice(int r, int c, float m[10][10]);
    
    
    int main()
    {
    
        float somma=0;
    
    
        somma=matrice();
        printf("%0.3f", (matrice));
    
    }
    
    
    
    
    float matrice()
    {
         int i, j, r=0, c=0;
        float m[10][10], somma2=0.0;
    
            printf("Dammi val riga e colonna\n");
    
        do{
            scanf("%d", &r);
            scanf("%d", &c);
        }while((r<=0)||(c<=0)||(r>5)||(c>5));
    
            printf("Dammi i val decimali di matrice\n");
    
        for(i=0;i<r;i++)
            {
            for(j=0;j<c;j++)
                {
                    scanf("%f", &m[i][j]);
                }
            }
    
        for(i=0;i<r;i++)
            {
            for(j=0;j<c;j++)
                 {
                    printf("%0.3f\t", m[i][j]);
                 }
                    printf("\n");
            }
    
            somma2=sottomatrice(r,c,m);
    
        return somma2;
    }
    
    
    
    float sottomatrice(int r, int c, float m[10][10])
    {
    
           int p=0, q=0, i, j;
           float somma1=0.0;
    
           printf("Dammi p e q\n");
    
        do{
            scanf("%d", &p);
            scanf("%d", &q);
        }while((p>r) || (p=0) || (q>c) || (q=0));
    
        for(i=0;i<p;i++)
            {
            for(j=0;j<q;j++)
                {
                    somma1=somma1+m[p][q];
                }
    
                    printf("%0.3f", somma1);
            }
    
          return somma1;
    }
    
  • Re: Principiante chiede aiuto per dimensione matrici in function

    DavSen3 ha scritto:


    Scusate..Che significato hanno i "|" nella funzione while?
    Praticamente quelli restituiscono valori booleani, e significa che "fintanto che si verifica ciò - la condizione- continua l'istruzione"
  • Re: Principiante chiede aiuto per dimensione matrici in function

    Ciao Lucia,
    hai fatto qualche errore di distrazione:
    1)
    
        do{
            scanf("%d", &p);
            scanf("%d", &q);
        }while((p>r) || (p=0) || (q>c) || (q=0)); // FIXME p==0 , q==0
    
    2)
    
       for(i=0;i<p;i++)
       {
          for(j=0;j<q;j++)
          {
             somma1=somma1+m[p][q]; // FIXME somma1=somma1+m[i][j];
          }
          printf("%0.3f\n", somma1);
       }
    
    3)
    
    int main()
    {
       ...
       printf("%0.3f", (matrice)); // ?? somma ??
    
       return 0;  // main DEVE SEMPRE restituire un int
    }
    
  • Re: Principiante chiede aiuto per dimensione matrici in function

    Grazie per avermeli corretti!
Devi accedere o registrarti per scrivere nel forum
8 risposte