• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Problema (per voi banale) con il C.. Far ricominciare un programma con ciclo while

Akylle

Utente Attivo
Autore del topic
9 Settembre 2009
260
0
Miglior risposta
0
Ciao a tutti..
Vi scrivo per un problema che ho incontrato..
Premetto che questo è il primo programma che scrivo, e so che sicuramente a voi più esperti risulterà poco "elegante", quindi accetto molto volentieri dei consigli per migliorare.. Quello che ho utilizzato, è il punto a cui sono arrivato nell studio (uso il libro "C corso completo di programmazione 3^ ed.", edito dalla Apogeo, della Deitel).
Quindi per favore non usate altre istruzioni, perchè non le so ancora.. E so che è possibile usando quello che già so..

Intanto metto il codice..

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Il problema sta nel fatto che alla fine, vorrei poter dare la scelta per eseguire di nuovo il programma, quindi

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Quindi credo l'ultimo cilo while diventerà

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

e dovrei mettere tutta la parte di codice centrale (quindi da dove inzia ad assegnare i valori alle variabili num1 e num2 in un ciclo while, assegnando alla variabile "fin" un valore iniziale per farlo entrare nel ciclo, e poi farlo cambiare alla fine, in 1 o 2 a seconda della scelta, e quidni terminare o ricominciare il programma, oppure se l'utente mette un muero diverso da 1 e 2, dar eil messaggio di errore che ho messo prima..
Forse sono un po' consufsionale nel spiegare, ma spero mi potrete aiutare.. Grazie mille

Akylle

(ps.. visto che non è un compito o altro, non mi interessa il codice in sè, finito, ma che sia accompagnato da delle spiegazioni magari.. Grazie)
 
Prima di risponderti vorrei dirti una cosa : ricontrolla la stesura del programma, nel senso di controllare come lo scrivi. Metti troppe righe, troppi spazi inutili. Non è un male per chi inizia da poco a programmare in C, ma una volta che diventa un'abitudine non te la togli più, comunque, rispondo al tuo problema :

Tu vuoi che premendo il tasto 1 si chiuda il programma, e premendo il tasto 2 ricominci il programma quando inizia ad assegnare le variabili, giusto ? Ottimo, ma io ti chiedo : Perchè ti complichi la vita ?. Tanto vale far scrivere all'utente il numero 1 o il numero 2 no ?

Adesso ti scrivo il codice per fare questo, poi ti riscrivo tutto il codice, con l'aggiunta di quel che ho scritto io :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Con questo codice prima fa scegliere la variabile, se la variabile è uguale a 1, allora si chiude il programma, altrimenti se è uguale a 2 ritorna all'assegnazione delle variabili ( con la stringa : goto riprova; ). Quest'ultima però non la considerare PER ORA.

Adesso ti riscrivo tutto il codice con l'aggiunta del mio :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Così il tuo programma funziona alla grande :-) Se qualcosa non dovesse essere chiara cercherò di spiegarmi meglio.
 
Ultima modifica:
Ok.. Grazie del consiglio.. Io mettevo molti spazi e interlinee perchè nel libro consigliano di farlo, per rendere più leggebile il tutto..
E.. Grazie mille per la spiegazione.. Ma queste cosa ancora non le ho studiate.. Ho chiesto al mio professore di informatica e sistemi, e mi ha detto che si può fare con un ciclo while.. Solo che era finita la lezione e non aveva tempo..
(A scuola non stiamo facendo programmazione, quindi non può dedicarmi molto tempo)..E vorrei riuscirci con quello..

Akylle
 
Ok.. Grazie del consiglio.. Io mettevo molti spazi e interlinee perchè nel libro consigliano di farlo, per rendere più leggebile il tutto..
E.. Grazie mille per la spiegazione.. Ma queste cosa ancora non le ho studiate.. Ho chiesto al mio professore di informatica e sistemi, e mi ha detto che si può fare con un ciclo while.. Solo che era finita la lezione e non aveva tempo..
(A scuola non stiamo facendo programmazione, quindi non può dedicarmi molto tempo)..E vorrei riuscirci con quello..

Akylle

Ok, ma almeno hai capito quello che ho scritto ? Cioè, hai capito quello che ti ho spiegato ?
 
Grossomodo si.. anceh se dovrei studiare la sintassi dei comandi che hai messo..
perchè hai messo 2 volte riprova?
Cioè capisco cosa fa, ma non saprei analizzare e riprodurre la sintassi..
 
Grossomodo si.. anceh se dovrei studiare la sintassi dei comandi che hai messo..
perchè hai messo 2 volte riprova?
Cioè capisco cosa fa, ma non saprei analizzare e riprodurre la sintassi..

Cosa è che non hai esattamente capito del codice che ti ho scritto ?

Ps : Con l'istruzione : goto riprova; oppure con : goto ritenta; non cambia nulla. Sono entrambe le stesse, solo che la prima si riferisce all'inizio del programma, quindi a quando ti chiede di scegliere le operazioni da effettuare. La seconda invece si riferisce al fatto che se non inserisci un numero che sia o 1 o 2 ( perchè tu hai detto che volevi far chiudere il programma scrivendo il numero 1 e continuare con il numero 2 ), il programma quindi ti fa scegliere fino a che non inserisci un numero che sia o 1 o 2 attraverso un cliclo while ( che era quello che volevi tu ), spero sia chiaro. Se non hai capito qualcosa oltre al goto riprova; dimmelo, sono qua apposta per questo.
 
Ok quindi se non ho capito male, il primo è riferito al punto da quale ricominciare, il secondo il punto in cui chiedere se ricominciare.. giusto?
--------------- AGGIUNTA AL POST ---------------
E uguale per il ritenta.. se non ho capito male funziona così..

(Riprova)

Codice da eseguire..

Scegli 1 o 2..

(ritenta)

Se la scelta è 1,, termina il prgoramma (con il comando exit)

Se la scelta è 2 torna al riprova.

Se la scelta non è ne 1 ne 2, chiedi di assegnare un nuovo valore e torna al ritenta, dove verifica se è 1 o 2..

Giusto?
 
Ultima modifica:
No.

Il primo ritorna all'inizio del programma, e con system("CLS"); pulisce la console ( in modo da non fare tutto attaccato ), cioè quando scegli l'operazione da fare. Il secondo invece, attraverso un ciclo while se metti un numero che non è nè 1 nè 2, ti fa ritornare alla scelta ( che deve essere tra 1 e 2 ). Se il numero che immetti è diverso da 1 o 2 il programma ti chiederà SEMPRE, di continuo, di mettere il numero 1 per chiudere e il numero 2 per continuare. Capito adesso ?
 
Non è quello che ho scritto io?

Allora, quando ho scritto NO come risposta, tu avevi soltato scritto questo :

Ok quindi se non ho capito male, il primo è riferito al punto da quale ricominciare, il secondo il punto in cui chiedere se ricominciare.. giusto?

Invece questo è quello che tu hai aggiunto :

--------------- AGGIUNTA AL POST ---------------
E uguale per il ritenta.. se non ho capito male funziona così..

(Riprova)

Codice da eseguire..

Scegli 1 o 2..

(ritenta)

Se la scelta è 1,, termina il prgoramma (con il comando exit)

Se la scelta è 2 torna al riprova.

Se la scelta non è ne 1 ne 2, chiedi di assegnare un nuovo valore e torna al ritenta, dove verifica se è 1 o 2..

Giusto?

Ed è corretto, hai capito come funziona :-)
 
Ah ok.. Perchè dopo ho riletto il codice e ho capito meglio =)
Ora provo ad applicare la struttura del goto e il resto al mio codice, così me lo ricordo.. sennò se copio il tuo non mi ricordo niente la prossima volta ;)
Grazie mille ancora

Akylle
 
Scusami.. Utimo post..
Ho corretto, sistemato, aggiunto parti di codice.. Sopprattutto ho sistemato il problema della divisione per 0, che faceva terminare il programma.. Ora è a posto..

Grazie mille ancora

Akylle

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica:
Riferimento: Problema (per voi banale) con il C.. Far ricominciare un programma con ciclo

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

boh forse sono un po' in ritardo xD comunque volevo chiedere se il codice che ho fatto vada meglio o peggio. ho ridotto all'osso sia gli if che i while, utilizzando solo 4 variabili anzichè 6 e senza utilizzare i goto (su quest'ultimi ho letto qualcosa e tante persone ne sconsigliano l'uso).
di seguito ti posto il mio codice (finalmente ho trovato qualcuno con cui posso confrontarmi :emoji_smiley:)
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Edit: aggiungo anche questo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica:
Riferimento: Problema (per voi banale) con il C.. Far ricominciare un programma con ciclo

E' una gara a chi riduce il codice sorgente all'osso?E' inutile, vinco io...se sapessi il C++...ma io studio il C#...
 
Riferimento: Problema (per voi banale) con il C.. Far ricominciare un programma con ciclo

E' una gara a chi riduce il codice sorgente all'osso?E' inutile, vinco io...se sapessi il C++...ma io studio il C#...

questo non è c++, è c . comunque non penso si tratti di una gara ma di un confronto :emoji_smiley:
si potrebbe definire un miglioramento di performance (anche se è piccolo come programma) e di comprensibilità, soprattutto quest'ultima
 
Riferimento: Problema (per voi banale) con il C.. Far ricominciare un programma con ciclo

La riduzione delle variabili lo è...davvero.

ehm non sono un esperto ma mi sembra di cogliere dell'ironia. confermi?
comunque non èè una vera e propria riduzione (intesa come voler necessariamente eliminare alcune variabili) ma piuttosto un'eliminazione di variabili che secondo me sono inutili. mi farebbe piacere ascoltare pareri altrui cosi giusto per confrontarmi
 
Ultima modifica:
Riferimento: Problema (per voi banale) con il C.. Far ricominciare un programma con ciclo

ehm non sono un esperto ma mi sembra di cogliere dell'ironia. confermi?
comunque non èè una vera e propria riduzione (intesa come voler necessariamente eliminare alcune variabili) ma piuttosto un'eliminazione di variabili che secondo me sono inutili. mi farebbe piacere ascoltare pareri altrui cosi giusto per confrontarmi
Non scherzo -.-
Una riduzioni di variabili è davvero un modo per risparmiare memoria. Ogni variabile occupa un certo numero di byte in memoria...4, 8, 16 bytes sono le grandezze più frequenti.