Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

[Guida] Al C++ Parte 3.

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
...In questa parte vedremo altri modi per creare il nostro programma delle temperature, iniziamo... (Potete scegliere voi quale usare... io di solito uso while)

Scriviamo:

    C++ Programming
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main()
  5. {
  6. int fahr;
  7.  
  8. for (fahr = 0; fahr <= 300; fahr = fahr + 20)
  9. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  10. getch();
  11. }



Allora, in teoria saprete già che stdio.h e conio.h fanno parte della libreria standart, int indica che le variabili rappresentino numeri interi, printf significa "scrivi, % significa "scrivi qui" e getch ferma il programma...di nuovo c'è for
for "per"/"quando" simile a while, è sempre un ciclo che in questo caso si avvera e segue fahr = 0; fahr <= 300; fahr = fahr + 20)

Poi "scrivi"->("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
%3d stacca di 3 spazi la scritta, %6.1f invece stacca di 6 spazi e aggiunge un decimale .1f, quindi al %3d il programma scriverà fahr (il valore di fahr) e a %6.1f scriverà (5.0/9.0)*(fahr-32)); visto che abbiamo aggiunto un decimale dovremmo aggiungerlo anche nelle divisioni perche il C++ tronca le divisioni(es. 5/9 = 0, 5.0/9.0 = 0.5) se non richiesto il decimale. Alla fine avremo lo stesso programma della parte 2, anche se con una sola variabile!

Ora passimo ad un altro modo per creare lo stesso programma, questo metodo è quello usato da tutti i coder per fare cheat di warrock...

Questo metodo comprende l'uso di Costanti, e si usano cosi:
    C++ Programming
  1. #define nome testo da sostituire



Cosi è MOLTO piu facile capire il programma,e sostituire i valori se necessario (si capirà piu avanti Asd)
Quindi:
    C++ Programming
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define LOWER 0
  5. #define UPPER 300
  6. #define STEP 20
  7.  
  8. int main()
  9. {
  10. int fahr;
  11.  
  12. for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
  13. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  14. getch();
  15. }



Quindi appunto diamo un valore a LOWER,UPPER,STEP (descritti nella parte 2) diciamo che è una fusione tra il primo e il secondo metodo Happywide
Non c'è molto da spiegare, invece dei numeri mettiamo dei define, cosi è piu facile se li vogliamo cambiare, in un programma molto piu lungo, e complicato... puo salvare la vita Asd Alla prossima!




21/07/2011, 23:36
#1
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
e bravo Luxor,
io farei notare anche una cosa che forse non tutti hanno notato o si sono chiesti, come mai non ci sono le parentesi graffe dopo il for...



digger
21/07/2011, 23:41
#2
Cerca

Iscritto
Messaggi: 2,216
Discussioni: 102
Registrato: 03-2011
Mix: 0
(21/07/2011, 23:41)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

e bravo Luxor,
io farei notare anche una cosa che forse non tutti hanno notato o si sono chiesti, come mai non ci sono le parentesi graffe dopo il for...

da bravo nabbo non mene ero accorto...ma ora che ho letto il tuo messaggio sono incuriosito Asd

21/07/2011, 23:48
#3
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 21/07/2011, 23:51 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
Facciamo a finta che il programma sia un po' diverso, tipo cosi:
    C++ Programming
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define LOWER 0
  5. #define UPPER 300
  6. #define STEP 20
  7.  
  8. int main()
  9. {
  10. int fahr;
  11.  
  12. for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
  13. printf("Risultato successivo:\n");
  14. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  15. getch();
  16. }



notate che ho aggiunto questa riga:
printf("Risultato successivo:\n");



indovinate il risultato dell'esecuzione?


...
...

Citazione:Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
Risultato successivo:
320 160.0

e ora cercate di capire cosa è capitato



digger
21/07/2011, 23:51
#4
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
Se non si mettono le parentesi graffe le istruzioni come for, else e tante altre eseguono solo la prima istruzione che le segue, invece se le istruzioni da eseguire sono più di una bisogna racchiuderle da parentesi graffe Smile

22/07/2011, 10:42
#5
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
bravo, proprio cosi.
E questo fa capire un'altra cosa importante del C / C++ ovvero l'INDENTAZIONE
ovvero l'incolonnamento delle righe di codice, tanti programmatori alle prime armi la trascurano completamente o la sbagliano.
Se dal punto di vista del compilatore non cambia niente, dal punto di vista della chiarezza per chi legge il codice è fondamentale, sia per capire cosa il programmatore sta facendo sia per evitare errori.
Ad esempio vediamo il mio programmino modificato con la giusta indentazione:

    C++ Programming
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define LOWER 0
  5. #define UPPER 300
  6. #define STEP 20
  7.  
  8. int main()
  9. {
  10. int fahr;
  11.  
  12. for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
  13. printf("Risultato successivo:\n");
  14. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  15. getch();
  16. }



cosa è cambiato? per il compilatore niente, il codice generato sarà lo stesso, ma io che leggo il codice vedo che la riga:

printf("Risultato successivo:\n");

è incolonnata diversamente dalle altra, si trova "sotto" la riga del for e questo mi fa pensare che il for esegue solo quella riga
mentre tutte quelle che seguono no...
Se poi volessi rendermela ancora piu chiara potrei scriverla cosi:

    C++ Programming
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define LOWER 0
  5. #define UPPER 300
  6. #define STEP 20
  7.  
  8. int main()
  9. {
  10. int fahr;
  11.  
  12. for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
  13. printf("Risultato successivo:\n");
  14.  
  15. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  16. getch();
  17. }



ovvero ho anche lasciato una riga vuota tra la riga eseguita dal for e il resto, sinceramente queste sono scelte di "stile" del coder, ognuno fa come meglio gli viene, ma a me rende il codice molto piu "chiaro" e comprensibile





digger
22/07/2011, 14:45
#6
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
Un altra cosa carina, sempre parlando di indentazione, si può fare nel caso che dicevamo prima, ovvero quando ci sono 2 o più espressione da far eseguire a un ciclo...
    C++ Programming
  1. int main()
  2. {
  3. int fahr;
  4.  
  5. for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
  6. {
  7. printf("Risultato successivo:\n");
  8. //altra espressione;
  9. //altra espressione;
  10. }
  11.  
  12. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  13. getch();
  14. }


notate la posizione delle parentesi graffe e delle varie righe di codice, si capisce subito quale è il codice eseguito dal ciclo e quale no...
Ma se vogliamo essere più precisi e 'puliti' si può utilizzare questa 'configurazione':
    C++ Programming
  1. int main()
  2. {
  3. int fahr;
  4.  
  5. for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) {
  6.  
  7. printf("Risultato successivo:\n");
  8. //altra espressione;
  9. //altra espressione;
  10. }
  11.  
  12. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  13. getch();
  14. }


Dal punto di vista funzionale non è cambiato nulla, è stata spostata solamente la prima parentesi graffa, spostamento che in questo caso non ha una certa utilità, ma in un programma più complesso in cui ci sono molti cicli uno dopo l'altro e uno dentro l'altro aiuta a capire a quale ciclo appartiene un determinato pezzo di codice Blush

22/07/2011, 20:22
#7
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
esattamente! giusta precisazione, bravo sky...

anche il discorso della posizione della prima parentesi graffa è una questione di "proprio stile",
molti coder (e molti libri) suggeriscono di metterla come dici tu nel tuo esempio, a me ad esempio non piace molto messa li e quindi la continuo a mettere sotto il for, ma è una scelta personale, ognuno si scelga la sua Wink


digger
22/07/2011, 23:12
#8
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 23/07/2011, 8:39 da Skyline@69.)

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(22/07/2011, 23:12)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

esattamente! giusta precisazione, bravo sky...

anche il discorso della posizione della prima parentesi graffa è una questione di "proprio stile",
molti coder (e molti libri) suggeriscono di metterla come dici tu nel tuo esempio, a me ad esempio non piace molto messa li e quindi la continuo a mettere sotto il for, ma è una scelta personale, ognuno si scelga la sua Wink

in effetti io la metto pure sotto il for, o comunque sotto la prima lettere dell'istruzione a cui appartiene...tipo:
    C++ Programming
  1. int main()
  2. {
  3. for (int i = 0; i < 100; i++)
  4. {
  5. //istruzione 1, ciclo 1;
  6.  
  7. while(i<50)
  8. {
  9. //istruzione 1, ciclo 2;
  10. }
  11.  
  12. //istruzione 2, ciclo 1;
  13.  
  14. foreach(char c in buffer)
  15. {
  16. //istruzione 1, ciclo 3;
  17. }
  18. }
  19. }


Questo è un esempio di impostazione/stile di programmazione del sottoscritto Smile

23/07/2011, 8:30
#9
Cerca

Iscritto
Messaggi: 2,216
Discussioni: 102
Registrato: 03-2011
Mix: 0
scusate la nabbagine ma sul libro chiede di fare un esercizio...ovvero di modificate il programma di conversione delle temperature in modo che stampi la tabella in ordine inverso, cioè partendo dai 300 gradi e scendendo fino a 0...e non ho ben capito come fare...Asd

23/07/2011, 11:09
#10
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 23/07/2011, 11:18 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
sei pigro Happywide
dai che è facile, rivedi su cosa si basa il funzionamento del programma e chiediti cosa devi cambiare per fare quello che ti chiede



digger
23/07/2011, 11:17
#11
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 23/07/2011, 11:19 da digger.)

Iscritto
Messaggi: 2,216
Discussioni: 102
Registrato: 03-2011
Mix: 0
Asd se lo dici tu :sleepy: :sleepy: :sleepy:

23/07/2011, 11:18
#12
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 23/07/2011, 11:26 da Luxor.)

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
    C++ Programming
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6. int fahr;
  7.  
  8. for (fahr = 300; fahr >= 0; fahr = fahr - 20)
  9. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  10. system("pause");
  11. }



Bastava cambiare qualche piccola cosa, Invece di fahr = 0 dai fahr = 300 (vuoi iniziare da li); fahr >= 0 (fahr maggiore e uguale a 0, quindi sarà da 300 il massivo dato prima, fino a 0); fahr = fahr - 20 (toglie 20 da 300 ad ogni ciclo fino ad arrivare a 0)

23/07/2011, 11:24
#13
Cerca

Iscritto
Messaggi: 2,216
Discussioni: 102
Registrato: 03-2011
Mix: 0
(23/07/2011, 11:24)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

    C++ Programming
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6. int fahr;
  7.  
  8. for (fahr = 300; fahr >= 0; fahr = fahr - 20)
  9. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
  10. system("pause");
  11. }


Asd grazie per avermi rovinato la sorpresa u.u così non ho imparato niente Asd Asd no scherzo grazie stavo uscendo pazzo Happywide

23/07/2011, 11:27
#14
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 23/07/2011, 11:39 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
ogni occasione è buona per aggiungere qualcosa,
notate questa parte:

    C++ Programming
  1. fahr = fahr - 20



se vi piace c'è la sintassi piu compatta che fa la stessa cosa:

    C++ Programming
  1. fahr -= 20



mi piace il C perchè offre molte possibilità,
altre cosucce che uno può cambiare come preferisce,

si potrebbe togliere dal for la parte di inizializzazione e metterla fuori:

    C++ Programming
  1. int fahr = 300;
  2.  
  3. for (; fahr >= 0; fahr -= 20)
  4. printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));



bye



digger
23/07/2011, 11:36
#15
Cerca


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [Guida] Al C++ Parte 8. Luxor 12 1,441 28/07/2011, 14:42
Ultimo messaggio: digger
  [Guida] Al C++ Parte 7. Luxor 5 944 27/07/2011, 14:51
Ultimo messaggio: digger
  [Guida] Al C++ Parte 1. Luxor 7 1,462 25/07/2011, 23:38
Ultimo messaggio: digger



Utenti che stanno guardando questa discussione: 1 Ospite(i)