Oppure

Loading
20/02/17 9:16
lallo12
salve a tutti vi ringrazio anticipatamente per l aiuto
ho un progetto che mi chiede di implementare un distributore di carburante per un mese e poi dato un giorno verificare quanto ho venduto.
il distributore è finito ma non riesco a fare quello che ho scritto di sopra il codice scritto fino ad ora è questo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// Creazione delle STRUCT.
struct carburante {
char nome[100];
int codice;
float prezzo;
int disponibilita;
};
struct data {
int giorno;
int mese;
double codice;
};

int main()
{
// Creazione del distributore.
typedef struct carburante Carburante;
Carburante array_carburante[3] = {{"Metano", 0, 0.60, 1000},
{"Benzina", 1, 0.50, 1000},
{"Gasolio", 2, 1.00, 1000}};
typedef struct data Data;
Data array_data[31];
// Scelta di una bibita da parte dell'utente.
printf("Sono presenti i seguenti carburanti:\n";);
// Dichiarazione delle variabili.
float banconota_inserite, resto;
int i, carburante_scelta;
int j = 0;
for (i = 0; i <3; i++) {
printf("%d - %s - %f - %d \n", array_carburante[i].codice, array_carburante[i].nome, array_carburante[i].prezzo, array_carburante[i].disponibilita );
}
printf("\n";);
printf("(10)Termina la macchina.\n";);
printf("(11)Resoconto.";);
// Trova la data di oggi.
time_t t = time(NULL);
struct tm *time;
time = localtime(&t);
int giorno = time->tm_mday;
int mese = time->tm_mon;
while (1) {
printf("\n";);
printf("SCELTA CARBURANTE (INSERISCI IL CODICE CORRISPONDENTE):\n";);
scanf("%d", &carburante_scelta);
if (carburante_scelta == 10) {
printf("Operazioni eseguite: %d", j);
break;
}
if (carburante_scelta == 11) {
int giorno_1, codice_1;
printf("Il giorno richiesto:\n";);
scanf("%d", &giorno_1);
printf("Il prodotto richiesto:\n";);
scanf("%d", &codice_1);
break;
}
if (carburante_scelta != 10 && carburante_scelta != 11) {
printf("Hai scelto di prelevare %s", array_carburante[carburante_scelta].nome);
printf("\n";);
printf("Inserisci delle banconote (5.00, 10.00, 20.00, 50.00):\n";);
scanf("%f", &banconota_inserite);
printf("\n";);
}
// Controllo se è possibile ricevere la bibita.
if (banconota_inserite == 5.00 || banconota_inserite == 10.00 || banconota_inserite == 20.00 || banconota_inserite == 50.00) {
if (banconota_inserite < array_carburante[carburante_scelta].prezzo) {
printf("NON HAI ABBASTANZA CREDITO PER AVERE IL CARBURANTE SCELTO.\n";);
} if (banconota_inserite >= array_carburante[carburante_scelta]. prezzo)
array_carburante[carburante_scelta].disponibilita-(array_carburante[carburante_scelta].prezzo*banconota_inserite);
{
printf(" STAI PER RICEVERE %f ", (array_carburante[carburante_scelta].prezzo*banconota_inserite));
printf("\n" );
printf("\n" );
printf("\n" );
printf("RIMANENZA CARBURANTE SCELTO\n" );
printf("%d - %s - %f - %f", array_carburante[carburante_scelta].codice, array_carburante[carburante_scelta].nome, array_carburante[carburante_scelta].prezzo, array_carburante[carburante_scelta].disponibilita-(array_carburante[carburante_scelta].prezzo*banconota_inserite));

// Inserisci la data di oggi nell'array di struct.
j++;
array_data[j].giorno = giorno;
array_data[j].mese = mese;
array_data[j].codice = carburante_scelta;
}
}
return 0;
}}




aaa
20/02/17 11:31
Salve, innanzitutto usa i tag CODE altrimenti il codice non si capisce.
Secondo, hai provato il codice? o è copiato da qualche parte? (ad un punto parli di bibite e non benzina)

Comunque, il codice presenta diversi errori,

- array_carburante è definito come Array, ma non lo usi come tale , dovresti usarlo con gli indici
(nella printf iniziale ad esempio)
array_carburante[i]

- Non c'è nessun controllo nell'input, Potrei inserire come scelta "$%$&$%" il programma andrebbe in crash.

- Non mi permette di inserire più di una banconota (ma questo è anche un aspetto che puoi modificare in seguito, non influisce sul programma)
Ti consigliere i spezzettare il programma in funzioni, anche questo aspetto non influisce sul funzionamento del programma, ma lo rende più "mantenibile".

-
Esattamente cosa ti aspetteresti che facesse questa parte di codice?
if (banconota_inserite == 5.00 || banconota_inserite == 10.00 || banconota_inserite == 20.00 || banconota_inserite == 50.00) {
if (banconota_inserite < array_carburante[scelta].prezzo) {
	printf("NON HAI ABBASTANZA CREDITO PER AVERE IL CARBURANTE SCELTO.\n");
} if (banconota_inserite >= array_carburante[scelta].prezzo)
	array_carburante[scelta].disponibilita - (array_carburante[scelta].prezzo*banconota_inserite);
{


Sicuro che la disponibilità debba essere di tipo int ?


- Non si capisce il significato dei vari valori a video , io ci sono andato ad intuito su cosa volessero significare.

Inizia a sistemare questa parte, poi spostasti alle successive (ad esempio quando scegli 10 o 11, anche li ci sono alcuni errori), cerca di sistemare questo pezzo di codice e postalo.

P.s. Mio consiglio personale, ragruppa le variabili ad inizio delle funzioni, da senso di maggior ordine.
Ultima modifica effettuata da 20/02/17 12:23
20/02/17 12:25
lallo12
in quel pezzo di codice da lei postato mi aspetto di inserirre delle banconote, se il valore è minore del prezzo del carburante allora esce a video on hai abbastanza credito per , mentre se è uguale o maggiore al prezzo del carburante decremento la disponibilità per carburante (richiesto nel esercizio)
aaa
20/02/17 12:36
Postato originariamente da lallo12:

in quel pezzo di codice da lei postato mi aspetto di inserirre delle banconote, se il valore è minore del prezzo del carburante allora esce a video on hai abbastanza credito per , mentre se è uguale o maggiore al prezzo del carburante decremento la disponibilità per carburante (richiesto nel esercizio)


Esaminiamo il codice:

if (banconota_inserite == 5.00 || ...) {
    if (banconota_inserite < array_carburante[scelta].prezzo) {
            printf("NON HAI ABBASTANZA CREDITO PER AVERE IL CARBURANTE SCELTO.\n");

// array_carburante[scelta].prezzo sarà 0.5 - 0.6 -  o 1 (i valori li hai inseriti ad inizio main) quindi sarà sempre 
// maggiore di banconote inserite (che minimo potrà essere 5) la printf("..."); non arà mai eseguita
 questo è un errore logico  


    } if (banconota_inserite >= array_carburante[scelta].prezzo)
            array_carburante[scelta].disponibilita - (array_carburante[scelta].prezzo*banconota_inserite);

// Questa differenza e' fine a se stessa  ... il risultato verrà perso. Manca la variabile dove inserire
 il risultato 

20/02/17 12:47
lallo12
potrebbe correggermi lei gli errori che non vanno ??
Ultima modifica effettuata da lallo12 20/02/17 13:00
aaa
20/02/17 14:02
Postato originariamente da lallo12:

potrebbe correggermi lei gli errori che non vanno ??


le cose che non vanno le ho, più o meno, esposte.
cerca tu di aggiustare il codice.
Per qualsiasi problema chiedi in forum
20/02/17 14:17
lumo
Ciao lallo12, qui nessuno fa i compiti per casa degli altri,sfrutta i generosi suggerimenti di Mikelius e se avrai ancora problemi ti aiuteremo a patto che tu riporti precisamente il tuo errore/difficoltà e non un generico "non funziona".
aaa