-
.Cicli for, while, do-while ed Esercizi di RiepilogoArriviamo adesso ad uno degli argomenti più importanti in termini di programmazione: i cicli. I cicli sono delle istruzioni che ripetono il codice che contengono nel loro blocco, nel loro dominio, fino a quando la condizione che viene dichiarata non viene soddisfatta. Abbiamo due tipologie di cicli: cicli con controllo della condizione in entrata e cicli con controllo in uscita. I cicli con controllo in entrata controllano la condizione prima di eseguire le istruzioni contenute nel suo blocco; i cicli con controllo in uscita eseguono prima le istruzioni e poi verificano se la condizione è soddisfatta. In entrambi i casi sta al programmatore trovare l'algoritmo adatto per il tipo di ciclo.
while
Il ciclo while si implenta nel codice con questa sintassi:
while(condizione){
/*codice*/
}
La condizione del ciclo while, come quella di tutti gli altri cicli, ricalca quelle del costrutto if-else. E' un tipo di ciclo con controllo in entrata, quindi il programma verificherà prima la condizione e poi eseguirà il codice. "Finché è vero questo, esegui queste istruzioni"do-while
Il ciclo do-while si implenta nel codice con questa sintassi:
do{
/*codice*/
}while(condizione);
Il ciclo do-while è un tipo di ciclo con controllo in uscita, quindi il programma prima eseguirà il codice e poi verificherà la condizione. "Esegui queste istruzioni finché è vero questo."for
Il ciclo for è un ciclo leggermente più complesso degli altri due. Ammette una condizione d'entrata (che molto spesso è un assegnamento di un valore ad una variabile), una per rimanere nel ciclo e una d'uscita che viene eseguita ogni volta che il ciclo si ripete.
E' un tipo di ciclo con controllo in entrata. "Esegui questa istruzione; Finché è vero questo, esegui il codice; Infine esegui questa istruzione e ricontrolla la condizione"
for(istruzione_d'ingresso;condizione_di_permanenza_nel_ciclo;istruzione_d'uscita){
/*codice*/
}Esercizi
L'esercizio costante porta al successo. Sono a difficoltà crescente, soluzioni sotto spoiler.
Esercizio 0.1 (ripresa dell'if): Si scriva un programma in C che, dati in ingresso tre numeri stampi a video rispettivamente il maggiore, il minore e la loro somma (solo if, niente cicli)
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
int main(void) {int a,b,c,somma;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
printf("---------------------------REPORT--------------------------------------\n");
somma=a+b+c;
if(a==b&&b==c) {printf("I numeri %d %d %d sono uguali\n", a,b,c);
printf("---------------------------END REPORT----------------------------------\n");}
else {
if (a>=b&&a>c){printf("Il massimo e': %d\n", a);}
if (b>a&&b>c){printf("Il massimo e': %d\n", b);}
if (c>=b&&c>a){printf("Il massimo e': %d\n", c);}
if (a<=b&&a<c){printf("Il minimo e': %d\n", a);}
if (b<a&&b<c){printf("Il minimo e': %d\n", b);}
if (c<=b&&c<a){printf("Il minimo e': %d\n", c);}
printf("La somma e': %d\n", somma);
printf("---------------------------END REPORT----------------------------------\n");
}
getchar();
return(0);
}Esercizio 1: Si scriva un programma in C che calcoli la radice quadrata intera di un numero dato da tastiera.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
int main(void) {int x,radx,i;
scanf("%d", &x);
i=0;
for(radx=0;radx<x;i++){
radx=i*i;
}
printf("La radice quadrata (intera) e' %d", i-1);
getchar();
return(0);
}Esercizio 2: Si scriva un programma in C che calcoli la somma di tutti i numeri che vengano inseriti da tastiera fino a che non si inserisca -1.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
int main(void) {int n=0,a,somma;
scanf("%d",&a);
if(a>-1){
for(somma=a;n>-1;somma=somma+n){
scanf("%d",&n);
}
printf("La somma e' %d", somma+1);
}
else printf("La somma e' 0");
getchar();
return(0);
}Esercizio 3: Si scriva un programma in C che, dato un numero da tastiera tra 0 e 30, stampi a video tutti i numeri pari e i numeri dispari precedenti a quel numero. Esempio: preso in input 4: i numeri pari sono: 2, i dispari sono: 1, 3.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
int main (void){int x,i,n;
scanf("%d", &x);
if(x>=0&&x<=30) {
printf("Dispari:\n");
for(i=1;i<x;i++)
{
n=i%2;
if(n!=0) printf("%d\n", i);
}
printf("Pari:\n");
for(i=1;i<x;i++){
n=i%2;
if(n==0){printf("%d\n", i);}
}
}
else printf("Non provarci neanche.\n");
getchar();
return 0;
}Esercizio 4: Si scriva un programma in C che, dato una numero di valori in input, crei un array contenenti questi valori e chieda all'utente se stamparli a video in ordine d'inserimento o inverso. La dimensione fisca dell'array è 100.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
#include <conio.h>
#define N 100
int main (void){int n, i, A[N]; char z;
printf("Numero valori:\n");
scanf("%d", &n);
printf("Insert valori:\n");
for(i=0;i<n;i++) {
scanf("%d", &A[i]);
}
printf("Stampare in ordine normale o inverso?[s=stesso ordine, i=inverso]\n");
scanf("%c", &z);
if (z==115){
for(i=0;i<n;i++) printf("%d\\", A[i]);
}
else {
if(z==105){
for(i=n-1;i>=0;i--) printf("%d\\", A[i]);}
}
getchar();
return 0;
}Esercizio 5: Si scriva un programma in C che, dato un array da tastiera, chieda all'utente di cercare un elemento, e di stampare a video la posizione nell'array e quante volte lo trova se lo trova; altrimenti deve stampare un messaggio di all'utente che comunichi che l'elemento non è stato trovato. La dimensione fisica dell'array è 100.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
int main(void){int A[100],i,n,x,rip;
printf("Bla bla\n");
scanf("%d", &n);
if (n>0&&n<=100){
for (i=0;i<n;i++){
scanf("%d", &A[i]);
}}
else printf("Dati non validi");
printf("Elemento X:\n");
scanf("%d", &x);
rip=0;
for(i=0;i<n;i++){
if(x==A[i]) {printf("Found in: %d \n", i+1);
rip++;}
}
if (rip==0) printf("Elemento non presente.\n");
else printf("Frequenza: %d", rip);
getchar();
return(0);Esercizio 6: Si scriva un programma in C che riconosca se un numero di telefono è valido oppure no, attraverso il seguente criterio: il primo numero deve essere 0, e le due cifre successive devono essere comprese tra 1 e 4 mentre le rimanenti cifre possono essere tra 0 e 9 con l'eccezione della 4 cifra del numero che deve essere diversa da 0. Il programma deve stampare a video la conferma o meno.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
#include <stdlib.h>
int main (void){char tel[21];
scanf("%s",tel);
int i=1;
if(tel[0]!='0'){
printf("\nInvalid Number.");
getchar();
exit(0);
}
if(tel[10]!='\0'){
printf("\nInvalid Number.");
getchar();
exit(0);
}
while(i<=2){
if (tel[i]!='1' || tel[i]!='2' || tel[i]!='3' || tel[i]!='4'){
printf("\nInvalid Number.");
getchar();
exit(0);
}
i++;
}
if(tel[3]=='0'){
printf("\nInvalid Number.");
getchar();
exit(0);}
printf("Valid.");
}Esercizio 7: Si scriva un programma in C che calcoli, dato un capitale iniziale di un conto bancario e un tasso di interesse, quanti soldi avrà accumulato in totale trascorsi gli anni.
N.B.: Gli interessi variano con il passare del tempo.
Soluzione:SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
int main (void) {int ci, cf,anni,tasso,anniI, c;
printf("Insert Capitale Iniziale, Anni e Tasso di Interesse(separati da virgola)\n");
scanf("%d,%d,%d",&ci,&anni,&tasso);
c=(ci*tasso)/100;
cf = ci;
for (anniI=0;anniI!=anni;anniI++) {
cf=cf+c;
c = (cf*tasso)/100;
}
printf("Hai un Capitale finale di %d", cf);
getchar();
return 0;
}RIPRODUZIONE RISERVATA | COPYRIGHT © Blues_Man, 2016
@Legion Errant
Edited by Blues_Man - 5/2/2017, 18:35. -
SSlevin.
User deleted
Non capisco il perchè della chiamata a getchar alla fine del programma. . -
.
Questioni storiche e di necessità. La getchar() serve per congelare il programma, altrimenti una volta fatti i calcoli e stampato, la finestra si chiude. . -
SSlevin.
User deleted
Ah capito, in pratica lo usi al posto di system ("pause") in ambiente di sviluppo, io ho dato un occhiata da terminale Ubuntu prima di commentare e lì non cambia niente per ovvi motivi. Comunque era un metodo che non avevo mai visto, è vero che non si smette mai di imparare xD . -
.
È il metodo più antico infatti. .