Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Progetto Distributore in C
Forum - C/C++ - Progetto Distributore in C - Pagina 7

Pagine: [ 1 2 3 4 5 6 7 8 9 ] Precedente | Prossimo
Avatar
Joker22 (Normal User)
Rookie


Messaggi: 37
Iscritto: 03/02/2016

Segnala al moderatore
Postato alle 16:51
Sabato, 13/02/2016
Ho studiato prima la tua spiegazione .. poi ho letto il codice che hai messo .. ed è tutto chiaro :k:

PM
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 16:53
Sabato, 13/02/2016
Benissimo :k:

In ogni caso, pensaci comunque all'acquisto del libro che ho citato: la ricorsione non è solo quelle quattro cose discusse in questo topic, ed avere una valida guida introduttiva (tanto più se è possibile acquistarla al costo di un romanzo) è essenziale ;)

Ultima modifica effettuata da Template il 13/02/2016 alle 16:54
PM
Avatar
Joker22 (Normal User)
Rookie


Messaggi: 37
Iscritto: 03/02/2016

Segnala al moderatore
Postato alle 17:03
Domenica, 14/02/2016
Non picchiatemi ...

Main
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #define MAX_VENDITE 1000
  6.  
  7. struct vendita {
  8.         int bibita;
  9.         int giorno;
  10.         int mese;
  11.         int anno;
  12. };
  13.  
  14. // Struct Bibite
  15. struct bibite {
  16.     char nome[100];
  17.     int codice;
  18.     float prezzo;
  19.     int disponibilita;
  20. };
  21.  
  22. typedef struct vendita venditaS;
  23. venditaS = elenco_vendite[MAX_VENDITE];
  24. int numero_vendite;
  25. int contatore = 0;
  26. int posizione = 0;
  27. int main()
  28. {
  29.  
  30. // Dichiaro variabili.
  31.     float monete_inserite, resto;
  32.     int i, bibita_scelta;
  33.     int j = 0;
  34.                // Distributore.
  35.               typedef struct bibite Bibite;
  36.     Bibite array_bibite[10] = {{"Sprite", 0, 0.50, 10},
  37.                               {"Acqua", 1, 0.30, 10},
  38.                               {"RedBull", 2, 1.00, 10},
  39.                               {"The-Pesca", 3, 0.50, 10},
  40.                               {"Fanta", 4, 0.40, 10},
  41.                               {"PowerRade", 5, 1.00, 10},
  42.                               {"Energy", 6, 0.50, 10},
  43.                               {"The-Limone", 7, 0.50, 10},
  44.                               {"Pepsi", 8, 0.50, 10},
  45.                               {"Gatorade", 9, 1.00, 10}};
  46.  
  47.  
  48.     printf("Sono presenti le seguenti bibite:\n");
  49.  
  50.    for (i = 0; i < 10; i++) {
  51.         printf("%d - %s\n", array_bibite[i].codice, array_bibite[i].nome);
  52.     }
  53.     printf("\n");
  54.     printf("(10)Termina la macchina.\n");
  55.     printf("(11)Resoconto.");
  56.  
  57.     while (1) {
  58.         printf("\n");
  59.         printf("Scegli una bibita (INSERISCI IL CODICE CORRISPONDENTE):\n");
  60.         scanf("%d", &bibita_scelta);
  61.  
  62.         if (bibita_scelta > 11) {
  63.         printf("Non hai inserito un codice corrispondente ad una bibita. \n");
  64.         break;
  65.     }
  66.  
  67.  
  68.         if (bibita_scelta == 10) {
  69.             printf("Operazioni eseguite: %d", j);
  70.             break;
  71.         }
  72.  
  73.         if (bibita_scelta == 11) {
  74.             int giorno_1, codice_1;
  75.             printf("Il giorno richiesto:\n");
  76.             scanf("%d", &giorno_1);
  77.             printf("Il prodotto richiesto:\n");
  78.             scanf("%d", &codice_1);
  79.             trova_vendita(bibita, numero_vendite, elenco_vendite[], giorno, mese , anno, contatore, posizione);
  80.             break;
  81.         }
  82.  
  83.  
  84.             if (bibita_scelta < 10) {
  85.             printf("Hai scelto di prelevare %s", array_bibite[bibita_scelta].nome);
  86.             printf("\n");
  87.             printf("Inserisci delle monete (0.10, 0.20, 0.50, 1.00):\n");
  88.             scanf("%f", &monete_inserite);
  89.             printf("\n");
  90.         }
  91.  
  92.           // Controllo se h possibile ricevere la bibita.
  93.         if (monete_inserite == 0.10f || monete_inserite == 0.20f || monete_inserite == 0.50 || monete_inserite == 1.00)
  94.                 {
  95.             if (monete_inserite < array_bibite[bibita_scelta].prezzo)
  96.                         {
  97.                 printf("NON HAI ABBASTANZA CREDITO PER AVERE LA BIBITA SCELTA.\n");
  98.             }
  99.                         if (monete_inserite == array_bibite[bibita_scelta]. prezzo)
  100.                         {
  101.                 printf("STAI PER AVERE LA BIBITA SCELTA.\nGRAZIE.\n");
  102.                 printf("(Nessun resto da dare).");
  103.  
  104.             }
  105.             venditaS v;
  106.                                 v.bibita = bibita_scelta;
  107.  
  108.                                 time_t rawtime;
  109.                                 struct tm * timeinfo;
  110.                                 char buffer[80];
  111.  
  112.                                 time(&rawtime);
  113.                                 timeinfo = localtime(&rawtime);
  114.  
  115.                                 strftime(buffer, 80, "Now it's %I:%M%p.", timeinfo);
  116.                                 puts(buffer);
  117.  
  118.                                 v.giorno = timeinfo->tm_mday;
  119.                                 v.mese = timeinfo->tm_mon;
  120.                                 v.anno = timeinfo->tm_year;
  121.  
  122.                                 elenco_vendite[numero_vendite] = v;
  123.                                 numero_vendite++;
  124.             }
  125.                         if (monete_inserite > array_bibite[bibita_scelta].prezzo)
  126.                         {
  127.                 printf("STAI PER RICEVERE LA BIBITA SCELTA.\nGRAZIE.\n");
  128.                 resto = monete_inserite - array_bibite[bibita_scelta].prezzo;
  129.                                 printf("(Resto da ricevere: %f).", resto);
  130.  
  131.  
  132.                                 venditaS v;
  133.                                 v.bibita = bibita_scelta;
  134.  
  135.                                 time_t rawtime;
  136.                                 struct tm * timeinfo;
  137.                                 char buffer[80];
  138.  
  139.                                 time(&rawtime);
  140.                                 timeinfo = localtime(&rawtime);
  141.  
  142.                                 strftime(buffer, 80, "Now it's %I:%M%p.", timeinfo);
  143.                                 puts(buffer);
  144.  
  145.                                 v.giorno = timeinfo->tm_mday;
  146.                                 v.mese = timeinfo->tm_mon;
  147.                                 v.anno = timeinfo->tm_year;
  148.  
  149.                                 elenco_vendite[numero_vendite] = v;
  150.                                 numero_vendite++;
  151.             }
  152.         }
  153.                 if (monete_inserite != 0.10f && monete_inserite != 0.20f && monete_inserite != 0.50 && monete_inserite != 1.00)
  154.                 {
  155.                         printf("CI DISPIACE, MA LA MACCHINA ACCETTA SOLO MONETE DA 0.10, 0.20, 0.50, 1.00.");
  156.         }
  157.  
  158.     }
  159.  
  160.     return 0;
  161. }



Funzione

Codice sorgente - presumibilmente C++

  1. int trova_vendite(int bibita, int numero_vendite, int elenco_vendite [], int giorno, int mese , int anno, int contatore, int posizione)
  2. {
  3.     int trova_vendite();
  4.     {
  5.         if(posizione >= numero_vendite)
  6.                 return contatore;
  7.         if(elenco_vendite[posizione].bibita == bibita
  8.         && elenco_vendite[posizione].giorno == giorno
  9.         && elenco_vendite[posizione].mese == mese
  10.         && elenco_vendite[posizione].anno == anno);
  11.                 contatore++;
  12.  
  13.     trova_vendite(bibita, numero_vendite, elenco_vendite, giorno, mese, anno, contatore, posizione + 1);
  14.                  return 0;
  15.     }
  16.  
  17. }



Header

Codice sorgente - presumibilmente C++

  1. void trova_vendite(int bibita, int numero_vendite, char elenco_vendite[], int giorno, int mese , int anno, int contatore, int posizione)



C'è un errore nella Function ... :_doubt:

PM
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 18:12
Domenica, 14/02/2016
Ti avevo consigliato di non dividere il programma in più file, e non mi hai ascoltato... va be'...

Comunque, posso sapere che senso ha la scrittura che hai usato?



Codice sorgente - presumibilmente C++

  1. int trova_vendite(int bibita, int numero_vendite, int elenco_vendite [], int giorno, int mese , int anno, int contatore, int posizione)
  2. {
  3.     int trova_vendite();
  4.     {
  5.            /*...*/
  6.     }
  7.  
  8. }




Dove mai s'è vista una funzione dentro un'altra funzione? :_doubt:


Lasciando stare che hai scritto una funzione ricorsiva sbagliata, che al caso terminale ritorna il contatore ed in tutti gli altri ritorna 0 (così che il valore effettivamente raggiunto dal contatore non tornerà mai indietro, visto che tra l'altro lo passi come parametro by value)...


Ah, quasi dimenticavo... ora te lo scrivo in grassetto così forse lo capisci (e che cazzo, te l'abbiamo detto venti volte!): SE CREI UN HEADER TUO, LO DEVI INCLUDERE NEL FILE DOVE STA IL MAIN (ED IN TUTTI GLI ALTRI FILES CHE HANNO A CHE FARE CON LE SUE FUNZIONI)!!!!!!

Ultima modifica effettuata da Template il 14/02/2016 alle 18:19
PM
Avatar
Joker22 (Normal User)
Rookie


Messaggi: 37
Iscritto: 03/02/2016

Segnala al moderatore
Postato alle 18:16
Domenica, 14/02/2016
Allora i file li devo dividere perché lo vuole il prof ...
Il progetto va consegnato così , ahime .. Function in un file , chiamata in un altro e il resto nel Main ..

Chiarito questo , probabilmente avrò fatto un errore di trascrizione .. infatti in quello che tengo aperto ora c'è solo il primo rigo .. cmq l'errore che mi da è nel secondo IF ...:_doubt:

In verità il fatto del return non ero sicurissimo ..

Volevo inizialmente mettere al primo return numero_vendite , al secondo contatore .. però non penso sia giusto ... perché il contatore va aggiornato anche nel primo If ..
allora al primo ho messo return , al secondo volevo mettere contatore++ , ma ho dimenticato di trascrivere ...

Ultima modifica effettuata da Joker22 il 14/02/2016 alle 18:20
PM
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 18:18
Domenica, 14/02/2016
L'errore nel secondo if sta nel fatto che subito dopo l'istruzione condizionale hai messo un punto e virgola.
Ma non è quello il problema del programma (leggesi sopra).

PM
Avatar
Joker22 (Normal User)
Rookie


Messaggi: 37
Iscritto: 03/02/2016

Segnala al moderatore
Postato alle 18:24
Domenica, 14/02/2016
nel main lo legge .. nella function da errore

PM
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 23:03
Domenica, 14/02/2016
Testo quotato

Postato originariamente da Joker22:
nella function da errore  



L'errore è quel punto e virgola che ti ho detto.

E se continua a darti errori anche dopo averlo tolto, vuol dire che c'è qualche altro problema... in tal caso, postami le specifiche del messaggio di errore...

PM
Pagine: [ 1 2 3 4 5 6 7 8 9 ] Precedente | Prossimo