Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
printf("STAI PER RICEVERE LA BIBITA SCELTA.\nGRAZIE.\n");
resto = monete_inserite - array_bibite[bibita_scelta].prezzo;
printf("(Resto da ricevere: %f).", resto);
}
}
else
{
printf("CI DISPIACE, MA LA MACCHINA ACCETTA SOLO MONETE DA 0.10, 0.20, 0.50, 1.00.");
}
}
return0;
}
vendita elenco_vendite[100];
int indice =0;
int lunghezza =strlen(vendite);
int trova_vendite(bibita, data, contatore, elenco_vendite, posizione + 1, numero_vendite)
{
if(posizione >= lunghezza)
{
return;
}
if(elenco_vendite[posizione].data== data && elenco_vendite[posizione].bibita== tipobibita)
contatore++;
trova_vendite(bibita, data, contatore, elenco_vendite, posizione + 1, numero_vendite);
return;
}
Ho fatto questo , ma è sbagliato ..
sto da 1 settimana , il primo l'ho finto in 1 giorno ...
non ce la faccio più ...
se potete completare il codice con il procedimento giusto , mi fate un favore ..
Altrimenti , grazie lo stesso per l'aiuto che mi avete dato . Ho apprezzato molto i vostri consigli , ma purtroppo l'impegno l'ho esaurito per la teoria e l'altro progetto
Il codice presenta vari punti migliorabili ed è molto disordinato... per questo ti sei dimenticato di richiamare la funzione di ricerca vendite
Ma vediamo i problemi uno alla volta, così capisci bene cosa puoi migliorare del tuo codice:
1 - Tu hai definito, in fondo al file, una funzione trova_vendite, ma all'inizio del file non hai messo il suo prototype: come potrà mai il main() richiamare la tua funzione?
2 - RIGHE 70-77: hai dimenticato di richiamare la succitata funzione trova_vendite per farle cercare le vendite che ti interessano. Inoltre, hai dimenticato di richiedere all'utente anche l'input dell'anno e del mese
3 - RIGA 79: te l'ho già fatto notare prima: se io metto in input al tuo programma il numero - per esempio - 12, che non è effettivamente valido, nessuno me lo farà notare, perchè tu verifichi solo se è diverso da 10 e 11, non se è MINORE DI 10.
4 - RIGHE 89-133: tutto questo codice dovrebbe essere dentro l'if che inizia alla riga 79, perchè riguarda quello specifico caso: che ci fa fuori di lì?
5 - RIGA 139: quella variabile dichiarata come globale in mezzo al file è praticamente inutile: sarebbe dovuta essere nel main(), poco prima della chiamata alla funzione che non hai messo (e he ho evidenziato al punto 2)
6 - RIGA 144: la disuguaglianza non deve essere stretta: il ciclo si deve fermare per posizione >= numero_vendite, altrimenti valuterà una cella del vettore in più rispetto a quelle effettivamente usate.
7 - RIGA 160: la funzione è di tipo int, quindi deve ritornare qualcosa.
8 - OVUNQUE: stai scrivendo in C, non in C++: le variabili si dichiarano all'inizio delle funzioni, non dove capita. Inoltre, ti consiglierei di valutare bene il campo di visibilità dei tuoi dati: alle righe 26-28, per esempio, dichiari due variabili globali che potrebbero tranquillamente essere inserite nel main e passate all'altra funzione solo quando necessario. Nulla ti obbliga a non metterle lì fuori, beninteso... solo, personalmente eviterei le variabili globali quando non necessarie: si prestano a troppi errori e/o modifiche involontarie, soprattutto se gestite da persone poco esperte e poco organizzate
Ultima modifica effettuata da Template il 11/02/2016 alle 21:54
Solo una cosa ...
la chiamata alla funzione l'ho messa nel file .h
Questo è solo il main ... cambia qualcosa nella tua analisi ?
Per quanto riguarda gli altri errori , credimi , non c'ho capito nulla . Probabilmente pesa il fatto che sto sveglio da ieri mattina alle 10 , e ho lavorato su questo programma e sulla teoria non stop fino a poco fa (tranne 2 ore di sonno oggi pomeriggio) ...
Domani mattina rileggo tutto , e vedo se riesco a capirci qualcosa in più .
Dovresti mostrarmelo, questo file .h, almeno per farmi capire com'è organizzato il programma... sicuramente la mia analisi non cambierà di molto (tutto quanto ti ho scritto vale comunque), ma almeno avrò un'idea più precisa di cosa tu stia facendo
Ultima modifica effettuata da Template il 11/02/2016 alle 22:56
La chiamata si fa nel file .c non nel .h. Forse intendevi la dichiarazione.
In ogni caso nel .c manca anche l'include di cui parli e negli argomenti dichiarati nella funzione scrivi +1 evidentemente sbagliando
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
Non posso postarti il codice corretto, perchè andrei contro i tuoi interessi (se lo faccio io, tu non impari niente)... il massimo che posso fare è prendere ciò che hai scritto e proporti un modo per ordinarlo:
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_VENDITE 1000
/*Qui definisci i tipi struct*/
struct vendita {
int bibita;
int giorno;
int mese;
int anno;
};
/*..............*/
/*Qui dichiari le variabili globali*/
/*..........*/
int main()
{
/*Qui metti tutte le dichiarazioni delle variabili locali*/
typedefstruct bibite Bibite;
Bibite array_bibite[10]={{"Sprite", 0, 0.50, 10},
{"Acqua", 1, 0.30, 10},
{"RedBull", 2, 1.00, 10},
{"The-Pesca", 3, 0.50, 10},
{"Fanta", 4, 0.40, 10},
{"PowerRade", 5, 1.00, 10},
{"Energy", 6, 0.50, 10},
{"The-Limone", 7, 0.50, 10},
{"Pepsi", 8, 0.50, 10},
{"Gatorade", 9, 1.00, 10}};
/*....................*/
/*Da qui in poi implementi la procedura di scelta attività*/
int trova_vendite(bibita, giorno, mese, anno, contatore, posizione)
{
/*Qui ovviamente metti tutta la funzione trova_vendite*/
}
Detto questo, provo ancora ad aiutarti a correggere il codice (anche se, onestamente, sto iniziando a pensare che non mi ascolti: ti ho dato tutti i consigli possibili! Ah, a proposito: sto ancora aspettando il codice del famoso .h)...
Vediamo di capirci: il tuo main deve fare queste cose:
- Stampa del menu della macchinetta
- Selezione dell'attività in base alla scelta dell'utente:
- Scelta = 10: resoconto
- Lettura della data e della bibita inserite dall'utente
- Richiamo della funzione di ricerca
- Stampa del risultato
- Scelta = 11: uscita
- Scelta < 10: selezione di una bibita
- Ricerca della bibita
- Lettura dell'importo inserito dall'utente
- Se è minore del costo della bibita, segnalazione
- Altrimenti, erogazione della bibita
- Se l'importo inserito è maggiore, erogazione anche del resto
- Registrazione della transazione
Sei in grado di convertire questo schema in C? Se si, allora ti ho praticamente scritto mezzo programma
Per la funzione ricorsiva, invece, il discorso è un attimo più complesso: di fatto, per implementare una ricorsione "ben formata" occorre definire da subito se la tua funzione deve elaborare una transazione qualsiasi oppure ricercare la prima transazione utile non ancora conteggiata. Poniamo che debba fare la prima cosa, che è più intuitiva da scrivere: in questo caso, la tua funzione deve fare queste cose:
- Verifica se sei ad una posizione superiore o uguale al numero di transazioni (e dunque, se hai già analizzato tutti i dati)
- Se lo sei, puoi ritornare il risultato
- Altrimenti:
- Data la posizione cui sei arrvato:
- Se in quella posizione nel vettore delle transazioni c'è un dato che ti interessa, incrementa il contatore
- Ricorri sulla posizione successiva
Ecco tutto. Il tuo programma non deve fare altro: ti basta convertire questo schema semplicissimo in C, per avere ciò che ti serve.
Comunque, sarei curioso di sapere cosa trattate a lezione e come lo trattate: di fatto, tu stai avendo difficoltà a scrivere un codice che (funzione ricorsiva a parte) è oltre il limite del banale... due sono le cose: o il tuo docente vi ha "catapultati" nella programmazione in C senza prima istruirvi adeguatamente circa le basi della programmazione e dello specifico linguaggio, oppure tu stai sbagliando completamente approccio alla materia.
Non lo dico per insultarti o demoralizzarti: visto il tuo ultimo post, ho ritenuto doveroso da parte mia metterti a parte di questa riflessione, per il bene delle tue competenze e, probabilmente, del tuo percorso universitario.
Ultima modifica effettuata da Template il 12/02/2016 alle 17:37