Lista Utenti taggati

Risultati da 1 a 13 di 13

Discussione: Ciclo while in c

  1. #1

    Data Registrazione
    09-12-11
    Messaggi
    81
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Ciclo while in c

    Salve a tutti,
    ho una domanda riguardo l'uso del ciclo while in c.
    Quando inserisco un valore sentinella in un ciclo while, come faccio a chiudere il ciclo senza che vengano eseguite le istruzioni successive nel ciclo?

    mi spiego meglio: sto facendo un programma che prende in input litri utilizzati e km percorsi per calcolare il consumo km/l.
    Ora siccome le iterazioni sono indefinite, ho introdotto un valore sentinella (-1) da inserire come input per i litri usati. Quando eseguo e inserisco il valore sentinella, il ciclo prima di chiudersi mi chiede anche il valore dei km.. Io vorrei invece che si chiudesse non appena venisse inserito il valore sentinella. Come devo fare?

  2.  
    Stanco della Pubblicità? Registrati

  3. #2

    Data Registrazione
    23-10-11
    Messaggi
    940
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    78 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    Ciao, nei cicli la condizione viene controllata ad ogni iterazione. Se il cambiamento del valore di guardia viene fatto a inizio ciclo, potresti usare (se ho capito bene il tuo problema) la parola chiave "continue", che fa in modo che la condizione venga ricontrollata prima di andare avanti nell'esecuzione del ciclo. E' utile per fare un ciclo e mezzo Ad esempio:

    Codice:
    int a = 5;
    while (a>1){
    //fai quello che vuoi...
    
    continue;
    //L'uso di continue causerà che la condizione venga ricontrollata prima di andare avanti.
    --a;
    }
    In ogni caso credo che per il tuo problema ti basta cambiare l'ordine delle istruzioni. Se posti il tuo codice magari ti riusciamo ad aiutare meglio. Ciao e buone cose

  4. #3

    Data Registrazione
    09-12-11
    Messaggi
    81
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    mmmh allora il mio codice è il seguente (dopo un po di valori, prova a mettere -1; io vorrei che non chiedesse di nuovo i chilometri, ma andasse direttamente al calcolo del consumo complessivo)
    Calcolo consumi.txt

    io non vorrei usare il comando break, per non uscire dalla programmazione strutturata
    Ultima modifica di Dino 92; 04-06-2012 alle 19:02 Motivo: precisazione

  5. #4

    Data Registrazione
    30-07-11
    Messaggi
    456
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    il ciclo prima esegue tutte le istruzioni dentro e poi torna al controllo, quindi a meno che non usi break o continue non credo che tu possa riuscire a trovare un modo più semplice per risolvere il problema
    Muletti





  6. #5

    Data Registrazione
    23-10-11
    Messaggi
    940
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    78 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    Citazione Originariamente Scritto da Dino 92 Visualizza Messaggio
    mmmh allora il mio codice è il seguente (dopo un po di valori, prova a mettere -1; io vorrei che non chiedesse di nuovo i chilometri, ma andasse direttamente al calcolo del consumo complessivo)
    Calcolo consumi.txt

    io non vorrei usare il comando break, per non uscire dalla programmazione strutturata
    Allora puoi semplicemente usare una variabile di guardia per evitare il problema. Ad esempio:
    Codice:
    int a = 0;
    while(a != -1){
    [...]//codice omesso
    printf("inserisci -1 per terminare");
    if(litri == -1){a=-1; continue;}
    [...] //codice omesso
    }
    Ps: per allegare il codice usa i tag [co.de] [/code] (ovviamente senza il punto fra co e de era per farti capire )

  7. #6

    Data Registrazione
    02-10-10
    Messaggi
    139
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    Ciao Dino,il while lo hai impostato in modo che il ciclo venga eseguito sino a che non venga assegnato il valore -1 alla variabile litri.
    Pertanto io posso presumere che quando alla variabile litri venga assegnato il valore -1,si debba uscire definitivamente da tale ciclo,dopo avere stampato il consumo per pieno.
    Pertanto basta modificare il tuo codice nel modo seguente:
    printf ("inserisci i litri utilizzati (-1 per concludere)\n");
    scanf ("%f", &litri);
    if(litri==-1)
    break;

    La parte di codice scritta in blu è indispensabile,perchè(così come ti hanno scritto giustamente altri prima di me)nel codice così come lo hai scritto tu,il controllo sul valore della variabile litri avviene solamente all'inizio di tale while,ma poi non vi sono altri controlli fino alla successiva iterazione,e di conseguenza tutte le istruzioni scritte all'interno del corpo di tale ciclo iterativo,verranno eseguite in successione.
    Sinceramente,come istruzione di controllo del ciclo while avrei ritenuto più esatta la seguente:
    while(litri<0)
    {
    ...

    ed in tal caso il controllo sulla variabile litri posto all'interno del while(la parte che prima ti ho scritto in blu)
    verrebbe modificato nel modo seguente:
    if(litri<0)
    break;

    Conclusione:
    -Quando utilizzi molte istruzioni printf(); e scanf() una dopo l'altra,sarebbe consigliabile che dopo ciascuna istruzione scanf();
    scrivessi l'istruzione fflussh(stdin); per eliminare eventuali caratteri indesiderati dallo schermo.

    -Sinceramente in questo caso,l'istruzione continue non la vedo appropriata dal punto di vista della parte logica del discorso,anche se è giusto quanto altri hanno postato prima di me,ossia che porta al risultato esatto.
    Questo perchè tramite essa viene effettuato un nuovo controllo(superfluo)sul valore della variabile litri,e ciò non ha senso,in quanto non si può consumare un numero di litri inferiori a zero.

    IMPORTANTE!!!
    -Infine,il codice andrebbe modificato,in quanto ci sarebbe ancora un errore sostanziale,ossia quello che ne deriverebbe da una
    inizializzazione a zero della variabile litri.
    Come tu sai,è noto che dalla matematica una divisione per zero può dare come valore +infinito o -infinito(se a numeratore c'è un valore diverso da zero) oppure indeterminato,se a numeratore c'è zero.
    Quindi sarebbe opportuno costruire un ramo if-else,in modo che se alla variabile litri viene assegnato il valore zero(ramo if),venga immediatamente stampato a video che il consumo è zero,altrimenti(ramo else) vengono scritte tutte le istruzioni giustissime che hai scritto tu,con l'aggiunta di quelle che ti ho riportato io o di altre,a seconda del tuo gradimento.

    Ciao Dino,spero di essere stato chiaro.
    Ultima modifica di ebox07; 06-06-2012 alle 01:29

  8. #7

    Data Registrazione
    05-06-12
    Messaggi
    15
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    Se posso permettermi, dal momento che Dino ha espresso di preferire il non utilizzo del break (e suppongo anche del continue), io suggerirei di fare così:
    Codice:
    while (litri != -1)                                                           /*cicla finchè non si inserisce il valore -1*/
    {                                                      
         printf ("inserisci i litri utilizzati (-1 per concludere)\n");         
         scanf ("%f", &litri);                                                            /*prende in input i litri per pieno*/
         if(litri!=-1)
         {
              printf ("inserisci i km percorsi\n");
              scanf ("%f", &km);                                                    /*prende in input i km per pieno*
              km_tot += km;                                                         /*calcola i km complessivi percorsi*/
              litri_tot += litri;                                                        /*calcola i litri complessivi percorsi*/                                                       
              printf ("il consumo per questo pieno e': %.4f km/l\n\n", km / litri); /*visualizza il consumo per pieno*/
         }
    }
    Edit: combinato un casino con la risposta rapida

    @ebox07: già, potrebbe sempre tornare utile a qualcun altro, visto che la tua risposta è stata molto approfondita
    Ultima modifica di Nerebril; 06-06-2012 alle 01:44

  9. ebox07 ringrazia per questo messaggio
  10. #8

    Data Registrazione
    02-10-10
    Messaggi
    139
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    E' vero,mi dispiace,non me ne ero accorto!!!Grazie per avermelo fatto notare.
    Comunque il post preferirei non eliminarlo,almeno che non lo facciano i moderatori,in quanto potrebbe esserci al suo interno qualcosa di utile a chi muove i primi passi nel mondo della programmazione.
    Ciao

  11. #9

    Data Registrazione
    09-12-11
    Messaggi
    81
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    Ragazzi, anche se con grande ritardo, vi rispondo solo ora; la motivazione è semplice: ho appena concluso il corso di informatica e ho dato l esame qualche giorno fa (con un bel 30 e lode ). Per cui sono stato impegnato.
    Ad ogni modo, vi ringrazio tutti quanti. Passando al problema che vi ho postato, ho risolto semplicemente mettendo fuori dal ciclo while una delle due condizioni: vi posto il codice, così potrete vedere con i vostri occhi.
    File Allegati File Allegati

  12. #10

    Data Registrazione
    02-05-12
    Località
    Access violation
    Messaggi
    2,141
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    100 Post(s)
    Tagged
    1 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    Complimenti.
    Anche se non credo fosse necessario del supporto, l'algoritmo è abbastanza semplice...
    Il Saggio coltiva Linux, tanto Windows si pianta da solo.


  13. #11

    Data Registrazione
    09-12-11
    Messaggi
    81
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    sì, ma sai com'è.. ero all inizio dei miei studi. E finchè non ti scervelli su un problema e ne trovi la soluzione, non puoi dire di averlo risolto

  14. #12

    Data Registrazione
    13-04-07
    Messaggi
    30
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    ma usare un "do while"?

  15. #13

    Data Registrazione
    09-12-11
    Messaggi
    81
    Specifiche del sistema
    Ringraziamenti / Mi Piace
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Problems Posted
    0
    Problems Solved
    0
    Best Answers
    0
    Good Answers
    0

    Predefinito Re: Ciclo while in c

    No, non si conosceva ancora il comando do while

  16.  
    Stanco della Pubblicità? Registrati

Informazioni Discussione

Utenti che Stanno Visualizzando Questa Discussione

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Torna Su