Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: function in c

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255

    function in c

    esercizio
    ho in input una matrice di m righe ed n colonne (float a[][]),
    in uscita devo trovarmi un vettore che abbia sulla sua riga la somma della 1 colonna della matrice m*n.

    es.
    input matrice float a[][]
    N1 N2 N3 N4
    + 1 2 3 4
    + 1 2 3 4
    + 1 2 3 4
    + 1 2 3 4

    output matrice float b[]
    = 4 8 12 16

    avendo in input un array 2d ,devo avere come risultato in uscita un array 1d,usando questa function:

    void somma_colonne(int n, int m, float a[][], float b[]);

    Ciao

  2. #2
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Questo sarebbe l'algoritmo per eseguire l'operazione che tu hai detto, cioè mettere in un array di n elementi, la somma delle colonne di una matrice n*n:



    codice:
    #include <stdio.h>
    #include <iostream.h>
    #include <conio.h>
    #define n 4
    
    
    int i, j, somma;
    float matrice[n][n], array[n];
    void somma_colonne(void);
    
    int main(){
      /* caricamento matrice */
      for(i=0;i<n;i++)
       for(j=0;j<n;j++)
          cin>>matrice[i][j];
      /*visualizzazione matrice*/
      for(i=0;i<n;i++){
       cout<<"\n";
       for(j=0;j<n;j++)
          cout<<matrice[i][j] <<" ";
      }
      /*richiama la procedura per la somma delle colonne della matrice*/
      somma_colonne();
      getch();
      return 0;
    }
    
    
    void somma_colonne(void){
         for(i=0;i<n;i++){
            somma=0;
            for(j=0;j<n;j++)
               somma += matrice[j][i];
            array[i]=somma;
         }
         cout<<"\nEcco il vettore :";
         for(i=0;i<n;i++)
           cout<<array[i] <<" ";
    }

    Scusami il cahoso sistema di input, ma l'ho fatto velocemente, all'inizio dell'esecuzione metti i tuoi numeri da inserire nella matrice e vedrai che poi il resto lo fa come vuoi tu...però il fatto è che nn soddisfa la tua richiesta ma spero ti sia d'aiuto

  3. #3

    Re: function in c

    Originariamente inviato da s_p_81
    esercizio
    ho in input una matrice di m righe ed n colonne (float a[][]),
    in uscita devo trovarmi un vettore che abbia sulla sua riga la somma della 1 colonna della matrice m*n.

    es.
    input matrice float a[][]
    N1 N2 N3 N4
    + 1 2 3 4
    + 1 2 3 4
    + 1 2 3 4
    + 1 2 3 4

    output matrice float b[]
    = 4 8 12 16

    avendo in input un array 2d ,devo avere come risultato in uscita un array 1d,usando questa function:

    void somma_colonne(int n, int m, float a[][], float b[]);

    Ciao
    spero soddisfi le tue richieste gngn LOL
    leggi i commenti che ti ho messo poi
    codice:
    /* FUNZIONE DI SOMMA DELLE n COLONNE DELLA MATRICE M x N */
    float* somma_colonne(int m,int n,float mat[][]){ /* è inutile, se non illogico, passare l'array contenente la somma finale...quindi lo metto come valore di ritorno della funzione che quindi sarà di tipo *float e non + void */
    int i=0,j;
    float somma,vet_som[n]; /*ha dimensione in base al numero,n, delle colonne della mat */
    
    while(i<n){ //scorre le colonne
     somma=0.0;//azzero il valore della somma  
      for(j=0;j<m;j++) //scorre le righe
         somma += mat[i][j];
    
        vet_som[i] = somma;
      i++;
    }
    return vet_som;
    }
    provalo cmq..
    :gren:

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    ciao ma l'algoritmo deve essere eseguito usando questa function:

    void somma_colonne(int n, int m, float a[][], float b[]);

  5. #5
    Originariamente inviato da s_p_81
    ciao ma l'algoritmo deve essere eseguito usando questa function:

    void somma_colonne(int n, int m, float a[][], float b[]);
    usa quella...non ha senso passare ad una funzione un array che dovra contenere una somma.
    Ad una funzione in genere si passano parametri utilizzati al suo interno,non qualcosa che dovrà scaturire da un'elaborazione,una sommatoria come in questo caso.In questi casi lo si mette come valore di ritorno.

    Per il resto è tutto come lo chiedevi tu :gren:



    ps se propio,ma non capisco xchè :quipy: ,vuoi passare l'array alla funzione basterebbe cambiarebbe due cose(di numero :gren: )...l'algoritmo te l'ho scritto ... non credo il problema sia il fatto dell'array passato o ritornato
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  6. #6

    Re: Re: function in c

    Originariamente inviato da andrea_NET-_DSL
    codice:
    [...]
    /* FUNZIONE DI SOMMA DELLE n COLONNE DELLA MATRICE M x N */
    
    float somma,vet_som[n]; <-----
    [...]
    credo tu non possa dichiarare la dimensione di un array in questo modo :quipy:
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  7. #7
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Già il vettore non si puà dichiarare in quel modo, ma questo è solo un frammento di programma ah andrea volevo sapere perchè in:

    codice:
    float* somma_colonne(int m,int n,float mat[][]){
    metti l'asterisco dopo float...premetto prima di essere derisco pubblicamente che nn capisco ancora le funzioni, ma solo le procedure che sono molto più facili

    E poi scusa, ma non è più semplice l'algoritmo per la somma delle colonne come ho postato io, cioè:
    codice:
    for(i=0;i<n;i++){
            somma=0;
            for(j=0;j<n;j++)
               somma += matrice[j][i];
            array[i]=somma;
         }
    perchè come hai scritto tu credo che non scorra le colonne, ma le righe, perchè avresti dovuto invertire l'ordine degli indici della matrice:

    codice:
    while(i<n){ //scorre le colonne
     somma=0.0;//azzero il valore della somma  
      for(j=0;j<m;j++) //scorre le righe
         somma += mat[i][j]; <-- incrementi prima il secondo indice, che la fa scorrere orizzontale, e poi dopo il primo che la fa scorrere verticalmente 
    
        vet_som[i] = somma;
      i++;
    }
    O sbaglio???? :master:

  8. #8

    Re: Re: Re: function in c

    Originariamente inviato da Anªkin
    credo tu non possa dichiarare la dimensione di un array in questo modo :quipy:
    no?
    n è una costante globale definita con #define n 5 o con const int n=5


    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  9. #9
    Originariamente inviato da Iena87
    Già il vettore non si puà dichiarare in quel modo, ma questo è solo un frammento di programma ah andrea volevo sapere perchè in:

    codice:
    float* somma_colonne(int m,int n,float mat[][]){
    metti l'asterisco dopo float...premetto prima di essere derisco pubblicamente che nn capisco ancora le funzioni, ma solo le procedure che sono molto più facili

    E poi scusa, ma non è più semplice l'algoritmo per la somma delle colonne come ho postato io, cioè:
    codice:
    for(i=0;i<n;i++){
            somma=0;
            for(j=0;j<n;j++)
               somma += matrice[j][i];
            array[i]=somma;
         }
    perchè come hai scritto tu credo che non scorra le colonne, ma le righe, perchè avresti dovuto invertire l'ordine degli indici della matrice:

    codice:
    while(i<n){ //scorre le colonne
     somma=0.0;//azzero il valore della somma  
      for(j=0;j<m;j++) //scorre le righe
         somma += mat[i][j]; <-- incrementi prima il secondo indice, che la fa scorrere orizzontale, e poi dopo il primo che la fa scorrere verticalmente 
    
        vet_som[i] = somma;
      i++;
    }
    O sbaglio???? :master:
    float * perchè la funzione ritorna l'array di tipo float contente la somma delle n colonne

    Il mio programma "tiene" ferma una riga alla volta (tramite il while)e con il for successivo scorre la colonna per verticale(scorrere la colonna significa passare da una riga all'altra,fino ad arrivare all'ultima) effettuandone la somma,poi passa alla colonna dopo.

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    /* FUNZIONE DI SOMMA DELLE n COLONNE DELLA MATRICE M x N */
    #include <stdio.h>

    float* somma_colonne(int m,int n,float mat[][]);{



    /* è inutile, se non illogico, passare l'array
    contenente la somma finale...quindi lo metto come valore di ritorno della funzione che
    quindi sarà di tipo *float e non + void */

    int i=0,j;
    float somma,vet_som[n]; //ha dimensione in base al numero,n, delle colonne della mat

    while(i<n){ //scorre le colonne
    somma=0.0; //azzero il valore della somma
    for(j=0;j<m;j++) //scorre le righe
    somma += mat[i][j];

    vet_som[i] = somma;
    i++;
    }
    return vet_som;
    }
    andrea ho provato il tuo algoritmo,ma nn gira!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.