Oppure

Loading
10/04/20 19:48
Goblin
Postato originariamente da AldoBaldo:

Sì, ma che noia questo forum! Nessuno che commenta, nessuno che scrive...

:rotfl:


E' come essere in un paese sconosciuto... tutti parlano una lingua che non conosco .. però in compenso annuisco con la testa ... tu non mi vedi .. ma lo faccio :rotfl::rotfl::rotfl::rotfl:
G.
Ibis redibis non morieris in bello
10/04/20 20:40
nello79
Postato originariamente da nessuno:
Direi che potresti scrivere

int a, b, s=1;
for (a = b = 0; a <= 40; a++, b += s)
{
	printf(&quot;%d &quot;, 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.
aaa
11/04/20 7:48
AldoBaldo
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.

#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 );
    }

    return 0;
}


Probabilmente è più esplicito quel che manda in uscita che non il codice in sè:

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:

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"! :k:
Ultima modifica effettuata da AldoBaldo 11/04/20 7: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.
11/04/20 10:12
nello79
Apprezzato :k:
aaa
11/04/20 10:13
Carlo
Anche io :k:
in programmazione tutto è permesso
11/04/20 12:52
AldoBaldo
Grazie, gente! Poi dicono che chi programma è arido dentro.... :k:
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.
11/04/20 17:23
nessuno
Bisognerebbe dire che quegli elementi non sono obbligatori

Potresti scrivere

for(;;)


per ottenere ... cosa?
Ultima modifica effettuata da nessuno 11/04/20 17: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à.
11/04/20 21:15
Thejuster
Magari dico una cavolata o non ho compreso bene il post.

Perché non usare le belle funzioni periodiche?
Ora non sò se in C++ c'è qualcosa del genere ma credo di si.

Questo script è per un plug-in che stavo scrivendo per la mia community ma posso tranquillamente scrivervi il codice
senza problemi per cui eccolo.


float oscillatore(float time, float Frequenza = 0.3f,float  amplitude = 1,float  phase = 0, float offset = 0)
    {
        var t = time * Frequenza * Mathf.PI * 2; 
        t += phase * Mathf.PI * 2; 
        var v = Mathf.Sin(t); 
        v *= amplitude; 
        v += offset; 
        return v;
    }



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.

recordit.co/…


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 11/04/20 21:33
mire.forumfree.it/ - Mire Engine
C# UI Designer