Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Capire cosa si cela dietro un ciclo for
Forum - C/C++ - Capire cosa si cela dietro un ciclo for

Avatar
DAN (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/06/2008

Segnala al moderatore
Postato alle 20:00
Mercoledì, 04/06/2008
Scusatemi se il titolo può sembrare strano o fuorviante ma non saprei come riassumerlo diversamente.
Dunque dal principio. Tra le varie esercitazioni che avevo da fare ce ne stava una che diceva.

Codice sorgente - presumibilmente Plain Text

  1. /* Scrivere un programma che disegni sullo schermo un trangolo
  2.  * di asterischi data l'altezza dall'utente.
  3.  * L'altezza sara' minore di 20
  4.  *
  5.  * Es.
  6.  *
  7.  *      *
  8.  *     ***
  9.  *    *****
  10.  *   *******
  11.  *  *********
  12.  *    
  13.  * */



Dal punto di vista strettamente organizzativo non ci ho messo molto a capire cosa avrei dovuto fare (chiedere l'altezza, verificare che fosse < 20 e nidificare dei for prima rispetto l'altezza, poi gli spazi infine gli *)
Il problema, è che finchè non ho visto la soluzione, non riuscivo ad immaginare l'operazione anzi le due operazioni che mi portavano a calcolare  lungo l'esecuzione degli ultimi due for, come calcolare le successioni matematiche che ponevano il numero corretto di spazi e asterischi.
Il meglio che sono riuscito a cavare è stato un triangolo rettangolo.



Adesso mi chiedo, in vista di future esercitazioni di questo tipo es. disegnare rombi come posso fare per allenarmi a capire che razza di forma dare alla successione che controlla il relativo ciclo for ?
E' al quanto snervante "vedere" la strada giusta e non poterla seguire perchè non mi accorgo di un muretto all'altezza delle ginocchia...


Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.         int h,i,j,k;
  6.  
  7.         printf("Inserire l'altezza dell'albero : ");
  8.         scanf("%d",&h);
  9.  
  10.         printf("\n");
  11.         for(i=0;i<h;i++)
  12.         {
  13.                 for(j=0;j<h-i;j++)
  14.                         printf(" ");
  15.                 for(k=0;k<( (i+1)*2-1);k++)
  16.                         printf("*");
  17.  
  18.                 printf("\n");
  19.         }
  20. }



Nel caso in oggetto questa è la soluzione e come potete vedere non mi veniva proprio in testa quel
k<( (i+1)*2-1)

Come faccio a riuscirci in futuro ?

PM Quote
Avatar
Bond93 (Ex-Member)
Pro


Messaggi: 135
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 21:02
Mercoledì, 04/06/2008
Be allora innanzi tutto hai capito perchè il programma si doveva fare così?
Se sì è già un gran passo avanti...
Comunque la chiave è fare esercizio provare e riprovare e nel modo più assoluto non guardare le soluzioni ( a meno che non debbe consegnare il compito ) sbattici la testa e avrai anche delle belle soddisfazioni se proprio non sai che 'pesci pigliare' vai per tentativi ( a compilare ci perdi qlc secondo ) o chiedi sulla comunity ma posso garantirti che più fai da solo più impari...
Poi il for non non nasconde proprio nulla fai un po di es e non avrai + problemi
:k::k:

PM Quote
Avatar
DAN (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/06/2008

Segnala al moderatore
Postato alle 21:10
Mercoledì, 04/06/2008
Beh tolta sta mania strana di usare singole lettere come variabili (preferisco di gran lunga nomi comprensibili e prefissi tipo C_ --> Contatore) alla lunga lo capisco, solo che mi viene la paura che una eventuale prossima volta sarò di nuovo punto a capo.
Fra non molto tento la fortuna con un esercizio simile che prevede un rombo.

PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 21:14
Mercoledì, 04/06/2008
la soluzione non è necessariamente ed esclusivamente quella , puoi benissimo fartelo da te l'algoritmo , ci pensi un pò su come costruire questo triangolo e continui a buttar giù codice

PM Quote
Avatar
Bond93 (Ex-Member)
Pro


Messaggi: 135
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 21:27
Mercoledì, 04/06/2008
Togliti le paure davvero prova mica stai facendo un programma per dei missili nucleari:D stai solo disegnando dei rombi alla peggio vengono sbilenchi:k: cmq Per le variabili sappi che in C troverai pochissime perseno che usano variabili come cnt C_for1 ecc.. I contatori 'classici' sono i, k, j o n e sono i più utilizzati:k:

PM Quote
Avatar
DAN (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/06/2008

Segnala al moderatore
Postato alle 22:04
Mercoledì, 04/06/2008
Ma non esiste un modo umano per ricostruire una successione (perchè alla fine è quello che controlla il for) a partire dai risultati ?

Edit: A prop. del modo Umano penso di aver trovato un metodo di ragionamento che segno a futura memoria di altri niubbi e del sottoscritto non appena se ne dimenticherà :D

Dato il disegno d'esempio (se è sbagliato quello sono  cavoli amari) e dato l'aver già compreso come nidificare i for (chi arriva prima e chi dopo)

Segnarsi a lato del disegno i numeri delle righe come si fa per gli indici dei vettori e segnarsi sopra a quale variabile di quale for appartengono (visto che i for nidificati fanno uso delle variabili dei for "nidificatori").
Poi in maniera simile al passo-passo farsi tutti i conti in modo da essere ben consci del valore di ogni singola variabile ad ogni giro di for.

Ragionare solo sulle lettere e per pochi giri, manda in pappa il cervello ed al terzo passaggio si finisce per domandarsi già chi era uno chi l'altro e soprattutto perchè si faceva tutto questo.

Ultima modifica effettuata da DAN il 04/06/2008 alle 23:45
PM Quote