Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16

    [c] vettore dove ogni indice k contiene il prodotto dei k elementi di un altro vet.

    salve, dovrei scrivere una funzione, che dato un vettore di float passato come argomento, restituisca un vettore delle stesse dimensioni in cui ogni elemento di indice k conterrà il prodotto dei primi k elementi.

    ho fatto questa funzione che segue, ma purtroppo il vettore risultante è un vettore che contiene solo degli 0.00, ho provato a cambiare e modificare varie volte il ciclo for, ma ho sempre avuto dei risultati sbagliati, ila massimo che ho ottenuto è avere il primo elemento corretto ma solo perche è impostato all'esterno del ciclo for uguale al primo elemento del vettore passato come argomento. il codice che ho scritto è il seguente:
    codice:
    float* pvettore (float *vettore, int n)
             {
              int i = 0;
              float *vettore2;
    
              vettore2 = (float*) malloc (n* sizeof(float*));
              vettore2[0]= vettore[0];
              for(i=1; i<=n; i++)
               { 
                vettore2[i] = vettore2[i-1] * vettore[i];
    
                }
    return vettore2;
    }
    mi date qualche suggerimento per riuscire ad ottenere il risultato desiderato, visto che il compilatore non mi segnala errori e che ho esaurite le idee sfruttando le mie poche conoscenze del c. vi ringrazio a tutti dell' aiuto!

  2. #2
    Se ho capito bene tu vuoi che, dato ad esempio il vettore formato da (2, 3, 4), il vettore risultato sia (2, 6, 24) ?

    Se è così, come hai fatto tu, crei il vettore nuovo con una malloc.. poi con un ciclo sugli indici "i", trovi il prodotto che desideri e poi inserisci tale prodotto nella posizione giusta, quindi:

    codice:
    float prod;
    
    for (i = 0; i < n; i++)
    {
              prod = 1.0;
              for (k = 0; k < i + 1; k++);
                    prod = prod * vettore[k];
    
              vettore2[i] = prod;
    }
    
    return vettore2;
    Non l'ho provato ma dovrebbe funzionare!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    grazie per il suggerimento ma ottengo sempre lo stesso risultato, il vettore vettore2 è composto da tutti i valori uguali a 0.00, tranne l ultimo che diventa un numero senza senso!

  4. #4
    Originariamente inviato da pietroA
    grazie per il suggerimento ma ottengo sempre lo stesso risultato, il vettore vettore2 è composto da tutti i valori uguali a 0.00, tranne l ultimo che diventa un numero senza senso!
    Non mi ero accorto di un errore gravuccio nella malloc:

    [CODE] vettore2 = (float*) malloc (n* sizeof(float*));

    Il vettore deve essere riempito di "float" non di "float*"... Quindi:

    codice:
     vettore2 = (float*) malloc (n* sizeof(float));
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    purtroppo continua a darmi lo stesso errore... ecco il codice dell'intero programma magari riesci a vedere qualche errore che io non trovo... ti ringrazio per l aiuto!!

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    float* inserimento (int n);
    float* pvettore (float *vettore, int n);
    
    int main (void)
    {
         int n, i;
         float *vettore;
         float *vettoreprodotto;
         
         printf("Inserire numero elementi : ");
         scanf("%i",&n);
         
         vettore = inserimento (n);
         vettoreprodotto = pvettore (vettore, n);
         
         printf ("vettore prodotto: \n");
         for(i=0; i<n; i++)
          {
          printf("%f \n", vettoreprodotto[i]);
          }
    system ("pause");
    return 0;
    }
    
    float* pvettore (float *vettore, int n)
         {
                    int i, k;
                    float *vettore2;
                    float prod; 
                    vettore2 = (float*) malloc (n* sizeof(float));
                   for (i = 0; i < n; i++)
    {
              prod = 1.0;
              for (k = 0; k < i + 1; k++);
                    prod = prod * vettore[k];
    
              vettore2[i] = prod;
    }
                     
       return vettore2;
          }
    il vettore ottenuto è sempre una sequenza di 0.00

  6. #6
    Puoi postare anche il codice della funzione:

    codice:
     float* inserimento (int n);
    ??

    Così cerchiamo di capirci per bene!


    Edit: comunque mi sono accorto di un errore di battitura che ti avevo riportato:

    codice:
    float* pvettore (float *vettore, int n)
         {
                    int i, k;
                    float *vettore2;
                    float prod; 
                    vettore2 = (float*) malloc (n* sizeof(float));
                   for (i = 0; i < n; i++)
    {
              prod = 1.0;
              for (k = 0; k < i + 1; k++);
                    prod = prod * vettore[k];
    
              vettore2[i] = prod;
    }
                     
       return vettore2;
          }
    Nella parta evidenziata non ci va il ';' dopo il for! Diventa un ciclo inutile! Accidenti alla fretta nello scrivere
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    float* inserimento (int n);
    float* pvettore (float *vettore, int n);
    
    int main (void)
    {
         int n, i;
         float *vettore;
         float *vettoreprodotto;
         
         printf("Inserire numero elementi : ");
         scanf("%i",&n);
         
         vettore = inserimento (n);
         vettoreprodotto = pvettore (vettore, n);
         
         printf ("vettore prodotto: \n");
         for(i=0; i<n; i++)
          {
          printf("%f \n", vettoreprodotto[i]);
          }
    system ("pause");
    return 0;
    }
    
    float* pvettore (float *vettore, int n)
         {
                    int i, k;
                    float *vettore2;
                    float prod; 
                    vettore2 = (float*) malloc (n* sizeof(float));
                   for (i = 0; i < n; i++)
    {
              prod = 1.0;
              for (k = 0; k < i + 1; k++)
                    prod = prod * vettore[k];
    
              vettore2[i] = prod;
    }
                     
       return vettore2;
          }                 
    
    
    float* inserimento (int n)
        {
              float *vettore;
              int i;
              
              vettore = (float*) malloc(n* sizeof(int*));
              
              for (i=0; i<n; i++)
                  {
                    printf("Inserire elemento %i: ",i+1);
                    scanf("%i", &vettore[i]);
                  }  
                  
        return vettore;
        }
    ecco qui c'è tutto il codice del programma, purtroppo prima con la confusione non me ne sono accorto di avertelo inviato a metà... cmq anche togliendo il ";" che mi hai indicato continua a darmi lo stesso errore, a questo punto penso che avro sicuramente fatto qualche errore nella funzione di inserimento... cmq sei stato molto gentile a darmi tutto questo aiuto!!!

  8. #8
    Bè ma mi caschi su un errorino così di confusione?!

    codice:
    float* inserimento (int n)
        {
              float *vettore;
              int i;
              
              vettore = (float*) malloc(n* sizeof(int*));
              
              for (i=0; i<n; i++)
                  {
                    printf("Inserire elemento %i: ",i+1);
                    scanf("%i", &vettore[i]);
                  }  
                  
        return vettore;
        }
    Nella malloc mi fai "n * sizeof(int*)" quando il vettore deve essere riempito di float, non di puntatori a intero!!!!
    Quindi deve essere:

    codice:
    vettore = (float*) malloc (n*sizeof(float));
    Poi quando vai ad inserire ogni elemento, fai una scanf con "%i", ma il tipo di dato è sempre float, quindi devi farla con "%f"!

    E stavolta dovremmo esserci!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    laikius!!!!!!!!!!!!!!!! grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ORA SI, FINALMENTE RIUSCITO ALLE PERFEZIONE!!!!!! so che sono errori veramente di niente ma io essendo al mio primo approccio con la programmazione non ci sarei mai arrivato!!! ti ringrazio di cuore per il favore!!! (anche perche non riuscivo a darmi pace)
    spero di poterti ricambiare il favore in futuro!!!

  10. #10
    Originariamente inviato da pietroA
    laikius!!!!!!!!!!!!!!!! grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ORA SI, FINALMENTE RIUSCITO ALLE PERFEZIONE!!!!!! so che sono errori veramente di niente ma io essendo al mio primo approccio con la programmazione non ci sarei mai arrivato!!! ti ringrazio di cuore per il favore!!! (anche perche non riuscivo a darmi pace)
    spero di poterti ricambiare il favore in futuro!!!
    E' stato un piacere aiutarti!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

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.