QUINTA ESERCITAZIONE INFO A 2008/09 prof.ssa QUINTARELLI L. MANDELLI EQUIVALENZE TRA LE ISTRUZIONE CHE GESTISCONO CICLI ES: RIPETO PER 10 VOLTE LE STESSE AZIONI: cont=1; do { . . . i++; }while(i<=10); cont=1; while(i<=10) { . . . . i++; for(i=1; i<=10; i++) { . . . . } } L’ISTRUZIONE FOR E’ COMODA PER GESTIRE CICLI DEFINITI, PERCHE’ MI BASTA UNA SOLA ISTRUZIONE, MA CI SONO PROBLEMI PER CUI SI DEVE INTERROMPERE LA SCANSIONE QUANDO SI VERIFICA UNA PARTICOLARE CONDIZIONE. ES, DATA UNA SEQUENZA DI 10 NUMERI, ESEGUIRE DELLE OPERAZIONI, INTERROMPERE AL PRIMO NEGATIVO . . . . trovato=0; // dico che non ancora trovato scanf(“%d”,&num); for (i = 0; i < 10 && trovato==0; i++) { . . . . if( variabile < 0) trovato=1; } if(trovato==1) printf(“TROVATO in posizione:%d”,i-1); else printf(“NON TROVATO”); oppure: . . . . scanf(“%d”,&num); for (i = 0; i < 10 && variabile < 0; i++); { . . . . } if(i<10) printf(“TROVATO in posizione:%d”,i-1); else printf(“NON TROVATO”); ESERCIZIO PROPOSTO PER CASA /* ITINPREN Scrivere un programma C in grado di acquisire in ingresso dall'utente una sequenza di interi che termina con uno 0 (zero). Il programma deve stampare a video il numero di volte in cui un valore e' seguito da un valore uguale. Es forniti 1 2 3 3 4 5 5 0, deve stampare 2. */ Algoritmo: Dichiarazioni, contatore = 0, precedente non esiste quindi lo pongo =0 Ripeto mentre i numeri inseriti sono !=0 Leggo numero Se numero letto == precedente Conto +1 Il precedente diventa=numero letto Stampo il contatore # include <stdio.h> void main() { int valore; /* variabile in cui memorizzo gli interi della sequenza */ int prec=0; /* variabile in cui memorizzo il valore precedente */ int contatore=0; /* per contare numero coppie di valori uguali */ printf("\n\nInserisci una sequenza di interi (0 per terminare):\n"); do { scanf("%d",&valore); if (valore==prec) contatore++; prec=valore; } while(valore!=0); printf("Il numero delle coppie di valori successivi uguali e' %d",contatore); } ESERCIZI SVOLTI IN AULA FAHRENHEIT-CELSIUS Programma per la conversione da gradi Fahrenheit a gradi Celsius con float, scrivere una tabella che dal grado 0 al grado 300 F, ogni 20 gradi, mi trovi il corrispondente grado C osservazioni su %d %f, costanti intere e float PITAGORA disegno la tavola pitagorica dei primi 10 numero naturali. Esercizio per stampare una tabella di 10x10, e poi di r righe e c colonne algoritmo: ripeto per tutte le righe ripeto per tutte le colonne calcolo il singolo elemento = riga*colonna stampo l’elemento vado a capo CORNICE disegno un rettangolo di larghezza e altezza variabili con un carattere di cornice e uno di riempimento es: xxxxxxxxxxxxxx xoooooooooooox xoooooooooooox xxxxxxxxxxxxxx algoritmo: ripeto per tutte le righe ripeto per tutte le colonne se prima o ultima riga o prima o ultima colonna stampo il carattere di cornice altrimenti stampo il carattere di riempimento vado a capo osservazioni sull’uso delle isstruzioni per leggere caratteri scanf(“%c”,&carattere): legge un carattere, quindi se si digita un carattere+invio servono due istruzioni. getchar(): legge un carattere,quindi se si digita un carattere con invio servono due istruzioni: getche(); legge un carattere, non e’ necessario l’invio, per cui basta digitare il carattere quindi una sola istruzione: esempio oppure oppure FATTORN scanf(“%c”,&carattere); scanf(“%c”,&invio); carattere=getchar(); invio=getchar(); carattere=getche(); Programma per il calcolo del fattoriale n! = n(n-1) se n>1 n! = 1 se n=0 o n=1 Algoritmo: dichiarazioni numero intero e fattoriale long int leggo il numero se numero < di 0 'Errore' altrimenti se numero =0 o =1 fattoriale = 1 altrimenti per tutti i suoi precedenti li moltiplico tra loro stampo fattoriale ESERCIZIO PROPOSTO PER CASA FATTORI PRIMI Ricordando l’algoritmo studiato che trova tutti i divisori di un numero, scrivere un programma C, completo delle opportune dichiarazioni di variabili, in grado di acquisire in ingresso dall'utente un valore intero num e stampare a video tutti i fattori primi di num.