Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26
  1. #11
    Originariamente inviato da Cranfi
    Adesso ho provato semplicemente incollandolo all'interno del main(), mi dice che c'è errore nella riga del richiamo alla calculateChanges, dice:"undefined reference to '_CalculateChanges'
    codice:
    #include <stdio.h> #include <stdlib.h> #define N 3 void calculateChanges(int ticket[N]); int main () {     int i,j;     int v[N];     int ticket[N];     j=1;     for (i=0;i<N;i++)     {         printf ("Inserisci ore cliente %d: ",j);         scanf ("%d",&v[i]);         // controlliamo le ore di parcheggio, non devono essere superiori a 24          if (v[i]>24)               {                   puts("Ore massime di parcheggio consentite: 24.");                   abort();               }                calculateChanges(v);  //richiamo la funzione     }     j=1;     for (i=0;i<N;i++)     {         printf ("Cliente: %d%d%d", j,v[i],ticket[i]);         j++;     }      void calculateChanges(int ticket[N])     {         int i,v[i];         for (i=0;i<N;i++);         {             if (v[i]<3) ticket[i]=2;     // se le ore sono minori di 3, paga 2euro             if (v[i]>3 && v[i]<=19) ticket[i]=((v[i]-3)*0.5)+2;  // se le ore sono maggiori di 3, paga 2euro +0.5 ogni ora in più             if (v[i]>19) ticket[i]=10;              // se le ore sono maggiori di 19, paga 10euro         }     }     return 0; }

    Allora, intanto posta meglio il codice che non è possibile leggerlo su una sola riga!!

    In ogni caso, "undefined reference to '_CalculateChanges' " significa che non trova la funzione calculateChages, il tutto deriva dal fatto che non puoi metterla all'interno del main
    Stai facendo parecchia confusione... devi mantenerla esterna al main (come ogni altra funzione);
    il prototipo della procedura calculateChanges dovrebbe essere:

    codice:
    void calculateChanges (int v[N], int ticket [N]); /* passi il vettore di orari v GIA' RIEMPITO 
    e quello ticket da riempire! */
    togli quel 'v[i]' dentro a calculateChanges per favore: se ci ragioni un po' non ha nessun senso...

    Prova a ragionare su queste modifiche e dopo riposta il codice per bene please
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  2. #12
    Originariamente inviato da Laikius91


    togli quel 'v[i]' dentro a calculateChanges per favore: se ci ragioni un po' non ha nessun senso...
    No non solo non ha senso ma dovrebbe dare anche questo errore

    Error: undeclared v[i]

    In effetti non ne vedo la dichiarazione. Forse per questo ha messo la sua funzione dentro il main? Cosicchè lo avesse al suo interno?


  3. #13
    Originariamente inviato da _Alfabetagamma_
    No non solo non ha senso ma dovrebbe dare anche questo errore

    Error: undeclared v[i]

    In effetti non ne vedo la dichiarazione. Forse per questo ha messo la sua funzione dentro il main? Cosicchè lo avesse al suo interno?

    Esatto! Ma oltre a questo, scrivendo:

    codice:
    int i, v[i];
    il compilatore non sa quanto spazio allocare perchè i non è definito.... a meno che lui non lavori con gcc che, come ho letto ultimamente, concede anche queste porcherie

    In ogni caso ho capito quello che vuole fare, ma per farlo così deve utilizzare una procedura come avevo scritto sopra, passando entrambi i vettori!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  4. #14
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Laikius91
    il compilatore non sa quanto spazio allocare perchè i non è definito.... a meno che lui non lavori con gcc che, come ho letto ultimamente, concede anche queste porcherie
    [OT]Giusto per puntualizzare: non è il gcc che concede questa porcheria, ma c'è uno standard internazionale che prevede la possibilità dell'allocazione degli array a lunghezza variabile (VLA). Che poi sia una cosa poco pulita è fuori dubbio, ma è pur vero che nessuno è obbligato a usarla (non sia mai che il C diventi come Java che per evitare problemi al programmatore vieta l'utilizzo di qualsiasi cosa). Tra l'altro, per la cronaca, compilando con -pedantic viene segnalato un warning su eventuali VLA, mentre con -pedantic-errors il warning diventa un errore e la compilazione viene impedita del tutto, quindi se proprio si vuole essere C90-compliant in un modo o nell'altro si fa [/OT]
    every day above ground is a good one

  5. #15
    Utente di HTML.it L'avatar di Cranfi
    Registrato dal
    Feb 2011
    Messaggi
    22
    Si, in effetti la confusione è tanta..ma anche la voglia di imparare
    Apportando le vostre modifiche sembra che vada meglio, ma allora perchè quando richiamo la funzione, adesso mi dice "too few arguments to function calculateChanges..quali altri parametri devo indicare?
    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    #define N 3 void calculateChanges (int v[N], int ticket [N]); /* passi il vettore di orari v GIA' RIEMPITO e quello ticket da riempire! */ 
    int main () 
    {     
    int i,j;     
    int v[N];     
    int ticket[N];    
     j=1;     f
    or (i=0;i<N;i++)    
    {         
    printf ("Inserisci ore cliente %d: ",j);   
          scanf ("%d",&v[i]);         // controlliamo le ore di parcheggio, non devono essere superiori a 24          
    if (v[i]>24)              
     {                   
    puts("Ore massime di parcheggio consentite: 24.");                 
      abort();             
      }     
    calculateChanges(v);  //richiamo la funzione    
     }     
    j=1;    
     for (i=0;i<N;i++)    
     {         
    printf ("Cliente: %d%d%d", j,v[i],ticket[i]);        
     j++;     
    }      
    return 0; 
    }       
    void calculateChanges(int v[N], int ticket[N])     
    {        
     int i;        
     for (i=0;i<N;i++);       
      {             
    if (v[i]<3) ticket[i]=2;          // se le ore sono minori di 3, paga 2euro             
    if (v[i]>3 && v[i]<=19) ticket[i]=((v[i]-3)*0.5)+2;  // se le ore sono maggiori di 3, paga 2euro +0.5 ogni ora in più            
     if (v[i]>19) ticket[i]=10;         // se le ore sono maggiori di 19, paga 10euro        
    }     
    }
    Cri

  6. #16
    Se ora la fuzione riceve in ingresso le ore e il ticket

    void calculateChanges (int v[N], int ticket [N]);

    e tu gli passi solo le ore

    calculateChanges(v);

    ti dice che ha troppi pochi elementi per chiamare la funzione

  7. #17
    Originariamente inviato da Laikius91
    Esatto! Ma oltre a questo, scrivendo:

    codice:
    int i, v[i];
    il compilatore non sa quanto spazio allocare perchè i non è definito.... a meno che lui non lavori con gcc che, come ho letto ultimamente, concede anche queste porcherie

    In ogni caso ho capito quello che vuole fare, ma per farlo così deve utilizzare una procedura come avevo scritto sopra, passando entrambi i vettori!
    Ma anche se i fosse definito non si potrebbe fare

    int i=10;

    char nome[i];

    perchè il compilatore prima alloca lo spazio per le variabili, poi esegue il programma E' come se quando accendessi il cmq prima vai su facebook e poi ti parte windows XD

  8. #18
    Originariamente inviato da _Alfabetagamma_
    Ma anche se i fosse definito non si potrebbe fare

    int i=10;

    char nome[i];

    perchè il compilatore prima alloca lo spazio per le variabili, poi esegue il programma E' come se quando accendessi il cmq prima vai su facebook e poi ti parte windows XD

    xD buona questa davvero a parte che io ho Mac :P

    [OT] In ogni caso in un paio di thred ho letto che le ultime versioni di gcc consentono anche cose di questo tipo, come ha chiarito anche YuYevon (grazie come sempre per i chiarimenti ).. ma noi siamo bravi programmatori e non ci pensiamo nemmeno a farle... [/OT]
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  9. #19
    Utente di HTML.it L'avatar di Cranfi
    Registrato dal
    Feb 2011
    Messaggi
    22
    Grazie dell'aiuto,
    Adesso ho 0 errori, ma il codice mi restituisce dei valori di ticket randomici, sembra che faccia i calcoli su dei v[i] diversi da quelli che sono presenti in main()..
    Cri

  10. #20
    Nella funzione hai messo

    if
    if
    if


    o

    if
    else if
    else

    ??

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 © 2025 vBulletin Solutions, Inc. All rights reserved.