DOMANDA Ciclo While e For

AlligatoreMarrone

Nuovo Utente
115
4
CPU
i7-7400
Scheda Madre
asus x99
HDD
2tb
RAM
hyperX fury 8gb
GPU
gtx 1070
OS
OSX
Ciao ragazzi, stavo seguendo una guida per imparare a programmare in Python, e mi sono imbattuto in degli ostacoli, il Ciclo while ( insieme alle sue due funzioni Brake e continue) e al Ciclo While (insieme alla sua funzione Range() ), avevo delle domande da porvi:

- Potreste spiegarmi in cosa consistono questi due cicli, magari anche con degli esempi? Perchè non ci ho capito nulla
- In che cosa consiste la loro differenza?
-A che cosa servirebbero in generale, questi due cicli?

Secondo voi questa guida è buona? https://programmareinpython.it/video-corso-python-base/
 

AlligatoreMarrone

Nuovo Utente
115
4
CPU
i7-7400
Scheda Madre
asus x99
HDD
2tb
RAM
hyperX fury 8gb
GPU
gtx 1070
OS
OSX
Possiamo dire, semplicemente, che il while esegue il ciclo fino a che una condizione è rispettata, il for invece ripete il ciclo per un numero determinato di volte.
In pratica fanno la stessa cosa ma diciamo che il for lo usiamo quando il numero di iterazioni da ripetere è conosciuto.

Per una guida abbiamo anche https://www.tomshw.it/forum/threads...li-tutorial-risorse-tutti-i-linguaggi.290243/
E in programmazione, a cosa servirebbero in "generale"?
 

Hobet

Utente Attivo
609
222
CPU
i5 6600k
Dissipatore
AIO H100
Scheda Madre
ASUS z170 Deluxe
HDD
1 WD Blue 1 TB; evo 850 500gb
RAM
Vengeance 4x4
GPU
GTX 1070ti MSI
Audio
Nope
Monitor
MG278Q
Case
750D Corsair
Net
Fastweb 200/30
OS
PucyBuntu
E in programmazione, a cosa servirebbero in "generale"?
Se guardi la sintassi essa ti parlerà.

while(un argomento solo)
for(minimo un argomento, ma essi possono crescere posso anche inizializzarci le variabili qua dentro!).

Es: for(;i == 4; ) --> è esattamente un while ma riscritto in forma for, ma viceversa non posso, il while non posso farlo stile for, rimanendo nelle tonde.

Altro es for: for(int a = 0,b = 0,c = 0, d = 0, e = 0;i == 4; i++); Qui mi sto letteralmente divertendo a inizializzare variabili interne come parametro senza farlo nel corpo senza un mero motivo posso farlo e perchè non farlo?

Nel while non sappiamo sempre il numero di iterazioni che verranno eseguite, nel for invece a prescindere sappiamo sempre quando essa finirà, e se non le sappiamo è semplicemente un while riscritto in un altra maniera, la definizione poi continua con quella di @Mursey e finisce qui.
Un esempio di for: trovare i primi 100 numeri primi.
Codice:
for(i = 0; i < 100 - 1; i++){
bla bla bla...
}
Una volta che la variabile interna "i" avrà valore 100 essa farà terminare il ciclo.

Un esempio di while: trovare tutti i numeri primi fino a quando essi sommati non faranno una tot somma da noi settata.

Codice:
#include <stdio.h>

int main(){
  int i = 0;
  while(i == 4){
    i++;
  }
 
  printf("fatto");
 
  return 0;
}

questo ciclo può durare anche un eternità a noi non interessa, il nostro interessa è che la variabile i sia uguale a 4 finchè essa non soddisfa questo requisito siamo disposti ad attendere l'infinito ed oltre mentre con un ciclo for avremmo potuto imporre un limite di iterazioni che possiamo fare anche con un while naturalmente ma non settarli come parametri nelle tonde. Detto ciò anche con un while si potrebbe emulare un for e con un for viceversa, quindi perchè non farlo perchè semplicemente il codice è orribile da vedere e crerebbe confusione nel programmatore terzo che legge il tuo codice. Un problema molto importante che affligge principianti ed esperti è che spesso si cade in trappola nei loop continui tipo questo:

while(i = 0)

Voglio aprire poi una parentesi su quest'altro argomento: una volta che tu mi compili, quando vado a debuggarlo e leggo il codice assembly mi apparirà JNE o JE, il che sta per if equal or not equal, dunque la macchina opera solo con la condizione IF, che noi chiamiamo if in programmazione sempre per pure motivo di comprensione dato che ci aiuta logicamente ad associarla alla nostra lingua ma per la macchina 0 e 1 rimane, fare un parsing e rinominarla "cacca" non ci vuole niente. Anche gli stessi loop la macchina li farà con la condizione JE o JNE, la macchina non conosce il while o il for è una cosa fatta per facilitare la programmazione a noi umani, la macchina qualunque cosa tu scriva applicherà la sintassi da me scritta, anche se essa è 0-1 lo stesso assembly usa idiomi della nostra lingua. Dunque la domanda è vale la pena di rispettare il for o il while visto che posso usarli nello stesso modo? si ma no, rispetta sempre la convenzione del tuo linguaggio a meno che tu non ottimizzi meglio di un compilatore.

mi sono dilungato troppo ma penso che abbia risposto completamente alla tua risposta
 
Ultima modifica:

AlligatoreMarrone

Nuovo Utente
115
4
CPU
i7-7400
Scheda Madre
asus x99
HDD
2tb
RAM
hyperX fury 8gb
GPU
gtx 1070
OS
OSX
Se guardi la sintassi essa ti parlerà.

while(un argomento solo)
for(minimo un argomento, ma essi possono crescere posso anche inizializzarci le variabili qua dentro!).

Es: for(;i == 4; ) --> è esattamente un while ma riscritto in forma for, ma viceversa non posso, il while non posso farlo stile for, rimanendo nelle tonde.

Altro es for: for(int a = 0,b = 0,c = 0, d = 0, e = 0;i == 4; i++); Qui mi sto letteralmente divertendo a inizializzare variabili interne come parametro senza farlo nel corpo senza un mero motivo posso farlo e perchè non farlo?

Nel while non sappiamo sempre il numero di iterazioni che verranno eseguite, nel for invece a prescindere sappiamo sempre quando essa finirà, e se non le sappiamo è semplicemente un while riscritto in un altra maniera, la definizione poi continua con quella di @Mursey e finisce qui.
Un esempio di for: trovare i primi 100 numeri primi.
Codice:
for(i = 0; i < 100 - 1; i++){
bla bla bla...
}
Una volta che la variabile interna "i" avrà valore 100 essa farà terminare il ciclo.

Un esempio di while: trovare tutti i numeri primi fino a quando essi sommati non faranno una tot somma da noi settata.

Codice:
#include <stdio.h>

int main(){
  int i = 0;
  while(i == 4){
    i++;
  }
 
  printf("fatto");
 
  return 0;
}

questo ciclo può durare anche un eternità a noi non interessa, il nostro interessa è che la variabile i sia uguale a 4 finchè essa non soddisfa questo requisito siamo disposti ad attendere l'infinito ed oltre mentre con un ciclo for avremmo potuto imporre un limite di iterazioni che possiamo fare anche con un while naturalmente ma non settarli come parametri nelle tonde. Detto ciò anche con un while si potrebbe emulare un for e con un for viceversa, quindi perchè non farlo perchè semplicemente il codice è orribile da vedere e crerebbe confusione nel programmatore terzo che legge il tuo codice. Un problema molto importante che affligge principianti ed esperti è che spesso si cade in trappola nei loop continui tipo questo:

while(i = 0)

Voglio aprire poi una parentesi su quest'altro argomento: una volta che tu mi compili, quando vado a debuggarlo e leggo il codice assembly mi apparirà JNE o JE, il che sta per if equal or not equal, dunque la macchina opera solo con la condizione IF, che noi chiamiamo if in programmazione sempre per pure motivo di comprensione dato che ci aiuta logicamente ad associarla alla nostra lingua ma per la macchina 0 e 1 rimane, fare un parsing e rinominarla "cacca" non ci vuole niente. Anche gli stessi loop la macchina li farà con la condizione JE o JNE, la macchina non conosce il while o il for è una cosa fatta per facilitare la programmazione a noi umani, la macchina qualunque cosa tu scriva applicherà la sintassi da me scritta, anche se essa è 0-1 lo stesso assembly usa idiomi della nostra lingua. Dunque la domanda è vale la pena di rispettare il for o il while visto che posso usarli nello stesso modo? si ma no, rispetta sempre la convenzione del tuo linguaggio a meno che tu non ottimizzi meglio di un compilatore.

mi sono dilungato troppo ma penso che abbia risposto completamente alla tua risposta

Nono grazie mille, ho capito nel dettaglio tutto.
 

AlligatoreMarrone

Nuovo Utente
115
4
CPU
i7-7400
Scheda Madre
asus x99
HDD
2tb
RAM
hyperX fury 8gb
GPU
gtx 1070
OS
OSX
Se guardi la sintassi essa ti parlerà.

while(un argomento solo)
for(minimo un argomento, ma essi possono crescere posso anche inizializzarci le variabili qua dentro!).

Es: for(;i == 4; ) --> è esattamente un while ma riscritto in forma for, ma viceversa non posso, il while non posso farlo stile for, rimanendo nelle tonde.

Altro es for: for(int a = 0,b = 0,c = 0, d = 0, e = 0;i == 4; i++); Qui mi sto letteralmente divertendo a inizializzare variabili interne come parametro senza farlo nel corpo senza un mero motivo posso farlo e perchè non farlo?

Nel while non sappiamo sempre il numero di iterazioni che verranno eseguite, nel for invece a prescindere sappiamo sempre quando essa finirà, e se non le sappiamo è semplicemente un while riscritto in un altra maniera, la definizione poi continua con quella di @Mursey e finisce qui.
Un esempio di for: trovare i primi 100 numeri primi.
Codice:
for(i = 0; i < 100 - 1; i++){
bla bla bla...
}
Una volta che la variabile interna "i" avrà valore 100 essa farà terminare il ciclo.

Un esempio di while: trovare tutti i numeri primi fino a quando essi sommati non faranno una tot somma da noi settata.

Codice:
#include <stdio.h>

int main(){
  int i = 0;
  while(i == 4){
    i++;
  }
 
  printf("fatto");
 
  return 0;
}

questo ciclo può durare anche un eternità a noi non interessa, il nostro interessa è che la variabile i sia uguale a 4 finchè essa non soddisfa questo requisito siamo disposti ad attendere l'infinito ed oltre mentre con un ciclo for avremmo potuto imporre un limite di iterazioni che possiamo fare anche con un while naturalmente ma non settarli come parametri nelle tonde. Detto ciò anche con un while si potrebbe emulare un for e con un for viceversa, quindi perchè non farlo perchè semplicemente il codice è orribile da vedere e crerebbe confusione nel programmatore terzo che legge il tuo codice. Un problema molto importante che affligge principianti ed esperti è che spesso si cade in trappola nei loop continui tipo questo:

while(i = 0)

Voglio aprire poi una parentesi su quest'altro argomento: una volta che tu mi compili, quando vado a debuggarlo e leggo il codice assembly mi apparirà JNE o JE, il che sta per if equal or not equal, dunque la macchina opera solo con la condizione IF, che noi chiamiamo if in programmazione sempre per pure motivo di comprensione dato che ci aiuta logicamente ad associarla alla nostra lingua ma per la macchina 0 e 1 rimane, fare un parsing e rinominarla "cacca" non ci vuole niente. Anche gli stessi loop la macchina li farà con la condizione JE o JNE, la macchina non conosce il while o il for è una cosa fatta per facilitare la programmazione a noi umani, la macchina qualunque cosa tu scriva applicherà la sintassi da me scritta, anche se essa è 0-1 lo stesso assembly usa idiomi della nostra lingua. Dunque la domanda è vale la pena di rispettare il for o il while visto che posso usarli nello stesso modo? si ma no, rispetta sempre la convenzione del tuo linguaggio a meno che tu non ottimizzi meglio di un compilatore.

mi sono dilungato troppo ma penso che abbia risposto completamente alla tua risposta
Sai mica dove posso trovare esercizi su if, while e for, per vedere le mie conoscenze?
 
U

Utente 16812

Ospite
E in programmazione, a cosa servirebbero in "generale"?

Sono "costrutti" che servono ad implementare i "cicli" (loop o iterazioni) :sisi:
Il costrutto fondamentale nella programmazione strutturata è il WHILE: con tale costrutto è possibile realizzare qualsiasi tipo di ciclo.
Il WHILE realizza il ciclo "per vero", ossia finché il risultato della condizione "booleana" è TRUE, il processore esegue le istruzioni che fanno parte del ciclo; non appena il risultato dell'espressione diventa FALSE, passa ad eseguire l'istruzione successiva al WHILE :sisi:
E' chiaro che un ciclo costruito in questo modo può anche non essere eseguito, se la condizione che segue il WHILE restituisce una valore FALSE già alla prima valutazione :asd:
Ci sono poi altri costrutti meno generali del WHILE ma più efficienti in casi di cicli che hanno caratteristiche particolari.
Uno di questi è proprio il FOR, che viene utilizzato nel caso si conosca esattamente il numero di volte che un gruppo di istruzioni deve essere eseguito :sisi:
A presto ;)
 
  • Mi piace
Reazioni: Mursey
U

Utente 16812

Ospite
E in programmazione, a cosa servirebbero in "generale"?

Gli algoritmi "iterativi" sono importantissimi perché non solo consentono di determinare la soluzione esatta, come ad es. nel calcolo del fattoriale o della potenza di un numero, di un problema attraverso una successione di passi ma consentono anche di determinare il valore approssimato della soluzione del problema, con un grado di approssimazione sempre migliore al crescere del numero di iterazioni :sisi:
Basti pensare al numero "e", la base dei logaritmi naturali (o neperiani), che è il limite della successione (1+1/n)^n (n numero naturale) per n-->+inf :sisi:
Sappiamo che è un numero irrazionale ma non possiamo scriverne il valore esatto (in forma decimale) :nono:
Possiamo però costruire la successione dei suoi valori, con un'approssimazione sempre migliore, "iterando", ad esempio, da n=1 a n=20 :asd:
I valori così ottenuti "convergeranno" al valore esatto: ecco il motivo per cui vengono chiamati algoritmi "convergenti" :sisi:
In analisi numerica molti algoritmi numerici sono iterativi: penso al metodo di Gauss-Siedel (o al metodo di Jacobi) per la risoluzione di un sistema lineare con approssimazioni successive via via migliori, penso all'algoritmo di Newton-Raphson (metodo delle tangenti) per la risoluzione approssimata di un'equazione f(x)=0, penso all'algoritmo del simplesso per la risoluzione di problemi di PL (programmazione lineare), in cui occorre massimizzare o minimizzare una funzione lineare :sisi:
A presto ;)
 
  • Mi piace
Reazioni: rodhellas

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili