Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Postato originariamente da nessuno: Direi che potresti scrivere
Codice sorgente - presumibilmente C/C++
int a, b, s=1;
for (a = b = 0; a <= 40; a++, b += s)
{
printf("%d ", b);
if (b == 10 || b==-10) s = -s;
}
Hai ragione nessuno, parte del codice l'ho preso da te ma non l'ho usato per un altro motivo, i valori di partenza, di inizio e fine e il numero di cicli da effettuare sono tutte delle variabili. A me serviva capire il concetto. Come scritto da te non c'è una diretta valutazione del numero di cicli da effettuare, ma bisogna calcolarlo. Poi ti ripeto sono all'inizio con la programmazione da autodidatta, ad esempio non ho capito perché il ciclo for ha 4 argomenti. Purtroppo è un mio limite e preferisco usare solo ciò che capisco meglio. Però si ho preso spunto proprio dal tuo codice.
Nello: "non ho capito perché il ciclo for ha 4 argomenti"
Un ciclo for prevede tre elementi:
- inizializzazione preliminare
- controllo condizionale prima di ogni ciclo
- operazioni da eseguire in chiusura di ogni ciclo
I tre elementi sono separati tra loro dal classico punto e virgola.
Tutti e tre gli elementi possono contenere istruzioni multiple, separate da virgola, che vengono eseguite in sequenza, nello stesso ordine in cui compaiono nel codice.
Ho provato a metter giù un esempio, sperando risultasse chiaro, invece avendo dovuto inserire un sacco di cose non lo è come credevo.
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
#define V "vero"
#define F "falso, interrompi il ciclo"
int main(){
int val, lim, inc, i;
for(
// inizializzazione, in questo caso 4 istruzioni per 4 variabili,
// piu' una istruzione printf() per vedere cosa sta succedendo
val=37, lim=50, inc=10, i=0,
printf("INIZIALIZZAZIONE\n val = %d\n lim = %d\n inc = %d\n i = %d\n\n",val,lim,inc,i);
// nota le virgole e il punto e virgola
// controllo condizionale prima di ogni ciclo
0<printf("CONTROLLO CONDIZIONALE prima del ciclo #%d\n printf() riuscita\n val<=lim: %s\n i<5: %s\n",i+1,val<=lim?V:F,i<5?V:F)&& val<=lim && i<5;
// il printf() iniziale e' chiaramente un'idiozia, pero' viene controllato
// anche il suo valore di ritorno, che e' negativo in caso di errore;
// il ciclo continua a meno che si verifichi una qualsiasi di queste condizioni...
// 1: printf() genera un errore
// 2: val risulta essere maggiore del limite preimpostato
// 3: sta per iniziare un sesto ciclo, non voluto
// operazioni da eseguire in chiusura di ogni ciclo
i++, printf("OPERAZIONI IN CHIUSURA DEL CICLO #%d\n i incrementato a %d\n\n",i,i)
// qui il punto e virgola non ci va perche' e' l'ultimo dei tre elementi
// nota comunque la virgola dopo i++
)// fine del codice dell'istruzione for
{
// blocco con le istruzioni da eseguire se le precedenti
// istruzioni determinano condizioni valide
printf("ESECUZIONE DEL BLOCCO DI ISTRUZIONI nel ciclo #%d\n", i+1 );
printf(" val prima dell'operazione: %d\n", val );
val += inc;
printf(" val dopo l'operazione val+=inc: %d\n", val );
}
return0;
}
Probabilmente è più esplicito quel che manda in uscita che non il codice in sè:
Codice sorgente - presumibilmente Python
INIZIALIZZAZIONE
val = 37
lim = 50
inc = 10
i = 0
CONTROLLO CONDIZIONALE prima del ciclo #1
printf() riuscita
val<=lim: vero
i<5: vero
ESECUZIONE DEL BLOCCO DI ISTRUZIONI nel ciclo #1
val prima dell'operazione: 37
val dopo l'operazione val+=inc: 47
OPERAZIONI IN CHIUSURA DEL CICLO #1
i incrementato a 1
CONTROLLO CONDIZIONALE prima del ciclo #2
printf() riuscita
val<=lim: vero
i<5: vero
ESECUZIONE DEL BLOCCO DI ISTRUZIONI nel ciclo #2
val prima dell'operazione: 47
val dopo l'operazione val+=inc: 57
OPERAZIONI IN CHIUSURA DEL CICLO #2
i incrementato a 2
CONTROLLO CONDIZIONALE prima del ciclo #3
printf() riuscita
val<=lim: falso, interrompi il ciclo
i<5: vero
Process returned 0 (0x0) execution time : 0.094 s
Press any key to continue.
Se invece che su 10 inc viene inizializzato con 20, si ottiene questo:
Codice sorgente - presumibilmente Python
INIZIALIZZAZIONE
val = 37
lim = 50
inc = 20
i = 0
CONTROLLO CONDIZIONALE prima del ciclo #1
printf() riuscita
val<=lim: vero
i<5: vero
ESECUZIONE DEL BLOCCO DI ISTRUZIONI nel ciclo #1
val prima dell'operazione: 37
val dopo l'operazione val+=inc: 57
OPERAZIONI IN CHIUSURA DEL CICLO #1
i incrementato a 1
CONTROLLO CONDIZIONALE prima del ciclo #2
printf() riuscita
val<=lim: falso, interrompi il ciclo
i<5: vero
Process returned 0 (0x0) execution time : 0.218 s
Press any key to continue.
Se ti ho confuso le idee, perdonami ed ignorami. Apprezza però la buona volontà e lo "spirito di corpo"!
Ultima modifica effettuata da AldoBaldo il 11/04/2020 alle 9:52
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
Grazie, gente! Poi dicono che chi programma è arido dentro....
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
Bisognerebbe dire che quegli elementi non sono obbligatori
Potresti scrivere
Codice sorgente - presumibilmente Plain Text
for(;;)
per ottenere ... cosa?
Ultima modifica effettuata da nessuno il 11/04/2020 alle 19:23
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
Ho scritto questo oscillatore su unity per muovere un oggetto su e giu in loop.
tipo per raccogliere monetine alla classica di super mario.
La gif è scattosa ma assicuro che è molto fluido
Trattandosi di oscillazione appunto, nella fase finale rallenta per poi riprendere la spinta corretta.
Ho dichiarato alcuni campi fissi in modo da non confondere gli utenti.
Puoi allungare la scala modificando il valore in amplitude tipo per una salita e discesa piu lunga.
ovviamente relativo anche all'offset per sposare la scala di salita e discesa.
basta sostiture il MathF.PI * 2 con il valore di offset per spostare la scala.
per il resto giocando sui parametri si può ottenere quello che si cerca.
Ultima modifica effettuata da Thejuster il 11/04/2020 alle 23:33
In pratica però identifichi un solo punto lungo una ipotetica sinusoide della quale devi gestire esternamente ogni aspetto, giusto?
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.