Diagrammi di flusso..da dove cominciare? ._.

Ora non posso che sono in game queue, magari domani dal lavoro



ma sono esercizi per l'università? che corso è?


E' semplice, 4<4? No -> Esco dal mio ciclo for ed eseguo l'istruzione dopo.
Dal momento che il for che cicla su j è dentro un for che cicla su i e visto che non ci sono istruzioni "esplicite" dopo il for su j, devo controllare le condizioni su i

i=0<20 si -> i++ -> i=1
Continuo l'esecuzione da vet[i]="I"

Spero di essere stato chiaro


Allora esco dal ciclo di j perchè 4<4? no e fino a li ci sono. Ma a questo punto devo ripartire da i=0? o da i=5? e poi devo rientrare nel ciclo di j?

guardando la soluzione dell'esercizio io arrivo fino a metà dove c'è la prima riga di I+I+I+I+I ma non riesco a capire perchè poi si ripete e diminuisce di un +I ad ogni passo...



Ok allora quando puoi dammi una mano anche tu.. si sono esercizi del corso di fondamenti di informatica.. ma in economia non ci capiamo un granchè di queste cose

fino a qui è ok


qui non più.
l'idea è che con la variabile "i" cicli sui 10 elementi del vettore, mentre con "stop":
- cresci fino a metà "if( i< (max/2)) stop = i;"
- poi decresci "else stop= max-i-1;"

quando arrivi a i=5, "i < (max/2)" è falso quindi inizi col ramo else.
a questo punto stop è sempre max (=10) -1 -i => 9 - i

"i = 5" => "stop = 4"

" for (j=0; j aggiunge altre "I", non esce come dici nella parte in grassetto.


quando i=5 stop=max-i-1 quindi stop=10-5-1=4 stop=4 ok quindi non posso andare avanti con j=4 perchè non rispetta la condizione jMa a questo punto devo ripartire da j=0 e i=5 e stop=4:

ij=0 jvet[5]?


Il problema è che non so cosa mettere in vet[5]...

allora io sono arrivata qui nel risultato ma poi non ho ben capito come diminuisce:
I
I+I
I+I+I
I+I+I+I
I+I+I+I+I


scusa se ti faccio tutte queste domande ma sono cose che non mi hanno mai spiegato quindi se non capisco il ragionamento non ci riesco..


Dunque il barbatrucco è in questo ciclo:

1 for (i=0;i2 vet[i]="I";
3 if( i< (max/2)) stop = i;
4 else stop= max-i-1;
5 for (j=0; j6 vet[i]=vet[i]+"+I";
7 }
8 }


Poniamo che i=5, che è il punto a cui sei arrivata.
Alla riga 2 setti vet[5] = "I";
poi l'if della riga 3 è falso, quindi entri nell'else della riga 4
e col ciclo alla riga 5 inizi la parte che decrementa: for (j = 0; j < 5; j++) => aggiungi 4 volte "I" a vet[5]
poi i=6, stop=3, a vet[6] aggiungi 3 "I"
i=7, stop=2, a vet[7] aggiungi 2 "I"
e giù a scalare

ti torna?



non mi torna quello che ti ho evidenziato in grassetto cioè:
l'aggiungere quattro I poi tre I poi due I ecc..
Come faccio a sapere quante I devo aggiungere??
Ho solo notato che il numero di I che aggiungo coincide con lo stop ma non so se è una coincidenza


non è una coincidenza, ed il trucco è qui:

if (i < (max/2)) stop = i;
else stop = max - i - 1;


sappiamo che i cresce da 0 a 9, quindi:
- se i < max/2, cioè se i < 5 (prima metà) stop = i, quindi stop parte da 0 e ad ogni ciclo si incrementa.
- altrimenti (seconda metà) stop = max - i - 1, cioè stop = 9 - i, quindi raggiunto questo punto stop riparte da 4 e ad ogni ciclo si decrementa (perchè i cresce, e quindi 9 - i cala).

più chiaro ora?



Ora ho capito grazie pero da sola non sarei mai arrivata alla conclusione che avrei dovuto aggiungere tante I quante il numero corrispondente a stop.. dal codice non si capisce mica...
Il fatto che non si capisca subito ma vada fatto passo-passo a mano credo sia voluto, per allenare ad un certo tipo di ragionamento. Serve solo un pò di abitudine
Pensa che c'e' gente che fa quelle cose di mestiere (code review)
è ufficiale ho proprio dei problemi con i codici in cui ci sono due cicli uno dentro l'altro..
uffff qualunque esercizio provi a fare non mi da giusto
Vabè, è anche normale. Già vi prendete 5 giorni al mese di incazzatura libera con un ciclo solo, con due non oso nemmeno immaginarlo!
giustamente già ci capisco poco con un ciclo figuriamo con 2 uno dentro l'altro.. ma sto cercando di fare esercizi un pò di tutti i tipi perchè il prof ogni volta li cambia..
Non stavo mettendo in dubbio le tue qualità informatiche, era una battuta di bassa levatura morale ed etica
mettile pure in dubbio perchè tanto scarseggiano ahahah mi daresti una mano?
Ma guarda, il consiglio che posso darti è di indentare bene il codice e di separare i cicli in maniera chiara.

Poi magari con una buona IDE (Visual Studio, ad esempio), fai girare il codice o un codice con struttura equivalente, lo metti in debugging e controlli istruzione per istruzione come si muove la logica del programma e le variazioni delle variabili, in modo da capire quali sono i passaggi e perché.

Appena ci prendi un poco l'occhio la soluzione diventerà man mano molto più semplice da trovare.


emhhh grazie del consiglio ma a dirti la verità non ho capito niente di ciò che mi hai scritto troppi termini tecnici di cui non conosco il significato
sono solo una studentessa universitaria alle prese con l'esame di fondamenti di informatica... non posso usare i programmi devo risolvere l'esercizio a mano..
A mano. Igh.

L'idea di utilizzare i programmi per capire "come" il computer si muove nel codice e trovarsi più a proprio agio nella risoluzione manuale è inattuabile?

Se è così, allora per lo meno utilizza un editor testuale che "colori" il programma in modo da distinguerne in maniera più semplice gli elementi che lo compongono, come Notepad++