Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve ragazzi, sono un nuovo iscritto e vi anticipo che sono alle prime armi con la programmazione in c. Chiedo ai più esperti se è possibile creare un ciclo for in cui l'indice vada prima da 0 a 10, poi da 10 a - 10 e poi dinuovo da - 10 a 0. Grazie in anticipo a chi può aiutarmi.
Ma questo ciclo si deve ripetere o deve essere fatto solo una volta?
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à.
Ultima modifica effettuata da nessuno il 10/04/2020 alle 0:33
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à.
Io ho seguito un ragionamento un po' diverso da quelli proposto dal goblin e da... solo lui, perché non c'è nessun altro.
Prima di tutto ho fatto questo, che porta la variabile i a "ciclare" all'infinito tra un limite dato e il suo simmetrico di segno opposto. Per orientare il movimento, viene impostata una variabile dir (per "direzione") che sarà 1 se il limite è positivo, -1 se il limite è negativo. Da notare: questa funzione "gela" il programma, poiché lo "impalla" in una continua ripetizione degli stessi calcoli.
Codice sorgente - presumibilmente C++
void oscilla_ocariddi(int lim ){
if( lim ){// come oscilla intorno allo zero, se e' zero?
int dir = lim>0 ? 1 :-1;// la direzione punti verso il limite
int i =0;
while(1){// all'infinito
printf("%d\n", i );
i += dir;
if( i==lim ){
dir =-dir;// inverte la direzione dell'incremento
lim =-lim;// limite simmetrico rispetto allo zero
}
}
}
}
Come si può notare, la funzione "rifiuta" di impiegare lo zero come parametro, anche perché se i valori devono "oscillare" attorno allo zero, dare limite zero significa impedire l'oscillazione.
In un secondo tempo ho posizionato un valore che agisce da "condizione di fermo" (qZeri, ovvero quantità di zeri), valore che viene incrementato ad ogni "incrocio" di i con lo zero fino a raggiungere una quantità massima determinata dalla quantità delle oscillazioni richieste. Se viene richiesta una sola oscillazione, maxZeri sarà 3, poiché i partirà da zero per raggiungere il limite massimo, quindi invertirà la direzione puntando al simmetrico di segno opposto del limite, attraversando nuovamente lo zero, quindi invertirà ancora una volta la direzione puntando al limite originale ma fermandosi al terzo raggiungimento dello zero. Ogni oscillazione aggiuntiva comporterà due ulteriori incroci con lo zero.
if( lim ){// come oscilla intorno allo zero, se e' zero?
unsignedint qZeri =1;// conta la quantita' di incroci con lo zero
unsignedint maxZeri = qOsc*2+1;// quantita' massima d'incroci con zero
int i =0;
while( qZeri<=maxZeri ){
printf("%d\n", i );
qZeri += 0==i;
lim =(i+=lim>0?1:-1)!=lim?lim:-lim;
}
}
}
Ammetto che quest'ultima formulazione l'ho scritta apposta in modo fumoso.
P.S. Ho trovato questa definizione di "goblin", ben poco lusinghiera: "...esseri crudeli, barbarici e poco civilizzati, creature spesso fetide e poco apprezzate dalle altre razze. Sebbene in alcuni ambiti siano considerati molto inclini alla creatività e all'ingegno, cedono volentieri all'impeto e alle passioni, prediligendole quindi ad un raziocinio maggiormente ponderato e alle decisioni sofferte." Non credo tu ti ci riconosca, dai!
Ultima modifica effettuata da AldoBaldo il 10/04/2020 alle 1:06
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.
Per distrarmi dalle porcherie che i "vertici" stanno facendo ANCHE nel mondo della scuola, ho voluto strafare. Ecco un programmino che crea pure un grafico della "oscillazione" del valore.
if( lim ){// come oscilla intorno allo zero, se e' zero?
size_t qx = 4*lim*qOsc+1;// ci sono qx "campioni" nel grafico
size_t qy = 2*lim+1;// ci sono qy possibili valori per y
size_t o = lim>0 ? lim :-lim;// o: offset, centra y nel grafico
unsignedint qZeri =1;// conta la quantita' di incroci con lo zero
unsignedint maxZeri = qOsc*2+1;// quantita' massima d'incroci con zero
size_t x =0;// x e' per forza positivo
int y =0;// y oscilla tra positivo e simmetrico negativo
char**m = crea_array_2d(sizeof(char), qx, qy );
if(!m ){puts("Allocazione fallita");return;}
while( qZeri<=maxZeri ){
m[o-y][x]='*';
qZeri += 0==y;
lim =(y+=lim>0?1:-1)!=lim?lim:-lim;
++x;
}
mostra_matrice( m, qx, qy );
free( m ); m =NULL;
}
}
Ora vado a dormire. Spero di riuscire a reggere il sonno, perché appena smetto di impegnare i neuroni con if, then, else, for, while ecc. mi torna in mente il modo in cui mi (ci) stanno fregando e mi monta la iena in corpo. Magari mi ingollo qualche goccina, va'.
Ciao, programmatori. Dita incrociate.
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.