ESERCIZIO Grammatiche 1

Documenti analoghi
GRAMMATICA FORMALE. Albero sintattico

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche. ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) P = {

Fondamenti di Informatica T-1 Esercitazione 1. Grammatiche Complemento a 2 Analisi Record di attivazione

Esercizi di preparazione alla I Prova Intermedia di Fondamenti di Informatica L-A a.a. 2002/2003 Prof. Paola Mello, Prof.

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

LINGUAGGI DI ALTO LIVELLO

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.

LINGUAGGI DI ALTO LIVELLO

Esercizio 1. Esercizio 1 - Soluzione

A lezione sono stati presentati i seguenti passi per risolvere un problema:

ESERCIZIO: Analisi di un programma. Dato il seguente programma C:

Lab 04 Istruzioni, cicli e array"

#include <stdio.h> #include <stdlib.h> #define L 20 void Proc(char [], int); int N=L; main () { char *s; int i;

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) ESERCIZI DI ANALISI

Fondamenti di Informatica T-1 Modulo 2

Lab 04 Programmazione Strutturata"

Un po di storia sui linguaggi

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Esempio di Prova Scritta

Un po di storia sui linguaggi

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Passaggio dei parametri. Passaggio dei parametri

Lab 03 Istruzioni Prima Parte"

Lab 04 Programmazione Strutturata

ALGHERO 5 16 VARIABILE ANCONA 7 9 NUVOLOSO AOSTA 0 4 NEVE BARI VARIABILE BOLOGNA 7 9 PIOGGIA...

Esercizio 1" input tre numeri interi e stampi a video la loro somma e la media. n Realizzare un programma che legga da. Lab03 2

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

ESEMPIO 1. #include <math.h> void eq2gr(float a, float b, float c, int* reali, float* x1,float* x2)

LINGUAGGI DI ALTO LIVELLO

Fondamenti di Informatica T-1 Modulo 2

Ricerca binaria ricorsiva!

Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1

Fondamenti di Informatica T-1 Modulo 2

Esempio di Prova Scritta

Fondamenti di Informatica T-1 Modulo 2

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Passaggio dei parametri

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b);

Esercizio 1. Esercizio 2

Rapida Nota sulla Rappresentazione dei Caratteri

do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b); while(b!=0 && a/b<0);

Esercizio 1 - Soluzione

IEIM Esercitazione 1 Primi passi con la programmazione" Alessandro A. Nacci -

TECNOLOGIA DIGITALE. TECNOLOGIA DIGITALE (segue)

Linguaggio C: Espressioni

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

Primo programma in C

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica

ESEMPIO: le variabili LETTURA/SCRITTURA DI VARIABILI. Specifica Leggere da tastiera un intero, un carattere, un float e un double. Stamparli a video.

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista)

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli

Compito A. Compito A Sintesi (main(

Strutture di controllo

Fondamenti di Informatica T-1 Modulo 2

20/10/2014 M. Nappi/FIL 1

Esercizio sintesi (1) Esercizio sintesi (1)

Opinione calcolamedia( ) Opinione inverti( )

Università degli Studi di Ferrara

Fondamenti di Informatica e Laboratorio T-AB e Fondamenti di Informatica T1 Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione

TUTORAGGIO INFORMATICA Settimana 2

Esercizio 1 - Soluzione (array)

L ELABORATORE ELETTRONICO

STRUCT - ESERCIZIO 1

Informatica B

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;

sum = 0; positivenumbers = 0; /* Passo 1 */ printf("introduci i numeri (0 per finire): "); scanf("%d", &number);

Dati due punti sul piano calcolare la loro distanza

ESERCIZI CICLI. Σ Σ j

Ricorsione. Prof. Orazio Mirabella. La ricorsione. La ricorsione consiste nella possibilità di definire una funzione mediante se stessa.

Blocchi. a=10; { b=2; 2 C-strutture di controllo.tex: Versione 1.0, aa

Char. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Esempi comparati while, do...while

Istruzioni decisionali

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 05 Array. Lab06 1

Transcript:

ESERCIZIO Grammatiche 1 Data la grammatica G con scopo S e simboli terminali {a,c,0,1 S ::= a F c F ::= a S c E E ::= 0 1 si mostri (mediante derivazione left-most) che la stringa aaa1ccc appartiene alla grammatica ESERCIZIO 1: Soluzione S ::= a F c F ::= a S c E E ::= 0 1 S afc aascc aaafccc aaaeccc aaa1ccc

ESERCIZIO Grammatiche 2 Si consideri la grammatica G con scopo S e simboli terminali {il, la, Alice, regina, coniglio, sgrida, saluta, gioca S::= T P A T P P::= V V T V A T T::= Alice regina coniglio A::= il la V::= sgrida saluta gioca Si dica se la stringa la regina sgrida Alice è sintatticamente corretta rispetto a tale grammatica e se ne mostri l'albero sintattico ESERCIZIO 2: Soluzione

ESERCIZIO Grammatiche 3 Espressioni algebriche G = VT,VN,P,S, dove: VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> S = <E> P = { ESERCIZIO Grammatiche 3 Espressioni Algebriche <E> ::= <E> + <T> <E> - <T> <T> <T> ::= <T> * <F> <T> / <F> <F> <F> ::= <cifra> ( <E> ) <cifra> ::= 0 <cifra-non-nulla> <cifra-non-nulla> ::= 1 2 3 4 5 6 7 8 9 Disegnare il diagramma sintattico di tale grammatica. Determinare poi se le seguenti frasi fanno parte del linguaggio generato da questa grammatica o no, e disegnarne l albero di derivazione sintattica: 1. 5 + 3 * 7 2. 3 / 0 + 4

ESERCIZIO Grammatiche 3 Soluzione Diagramma sintattico: <E>::= <E> + <E> - <T>::= <T> * <T> / <F>::= <cifra> ( <E> ) <T> <F> <cifra>::= 0 <cifra_non_nulla> ESERCIZIO Grammatiche 3 Soluzione 5 + 3 * 7: <E> <E> + <T> <T> <T> * <F> <F> <F> <cifra> <cifra> <cifra> <cifra_non_nulla> <cifra_non_nulla> <cifra_non_nulla> 5 + 3 * 7

ESERCIZIO Grammatiche 3 Soluzione 3 / 0 + 4: <E> <E> + <T> <T> <T> / <F> <F> <F> <cifra> <cifra> <cifra> <cifra_non_nulla> <cifra_non_nulla> 3 / 0 + 4 ESERCIZIO Grammatiche 4 if statement Sia data una nuova grammatica G1, definita come la grammatica precedente G estesa con i seguenti elementi: G = VT1, VN1, P1, S1 VT1 = VT { if, else, >, <, ==,!= VN1 = VN { <INSTR>, <IF>, <IF_BODY>, <ELSE_BODY>, <COND>, <COND_OP> S1 = <INSTR>

P = P1 { ESERCIZIO Grammatiche 4 if statement <INSTR> ::= <IF> <E> <IF> ::= <IF_BODY> <IF_BODY> <ELSE_BODY> <IF_BODY> ::= if ( <COND> ) <INSTR> <ELSE_BODY> ::= else <INSTR> <COND> ::= <E> <COND_OP> <E> <COND_OP> ::= > < ==!= Determinare se la seguente frase e derivabile dal linguaggio, e, in caso affermativo, disegnare l albero di derivazione sintattica: if (4<5) if (5>3) (5+3) else (6+4) if (4<5) if (5<3) (5+3) else (6+4) ESERCIZIO Grammatiche 4 Soluzione 1 <INSTR> <IF> <IF_BODY> if ( <COND> ) <INSTR> <IF> <IF_BODY> <ELSE_BODY> if ( <COND> ) <INSTR> else <INSTR> <E> <E> if ( 4 < 5 ) if ( 5 > 3 ) ( 5 + 3 ) else ( 6 + 4 )

if (4<5) if (5<3) (5+3) else (6+4) ESERCIZIO Grammatiche 4 Soluzione 2 <INSTR> <IF> <IF_BODY> <ELSE_BODY> if ( <COND> ) <INSTR> <IF> <IF_BODY> if ( <COND> ) <INSTR> else <INSTR> <E> <E> if ( 4 < 5 ) if ( 5 > 3 ) ( 5 + 3 ) else ( 6 + 4 ) ESERCIZIO Grammatiche 4 if statement La stessa frase può essere generata tramite due differenti alberi di derivazione sintattica La grammatica di questo esercizio è ambigua!!!! In C l istruzione if è definita proprio come in questa grammatica per ovviare al problema di interpretare a quale if si riferisce la keyword else, si è deciso di riferirsi sempre alla istruzione di if più vicina!!!! Quindi in C l albero generato è quello della soluzione 1!!!!

ESERCIZIO Grammatiche 5 Compito A - 13 Novemre 2002 (disponibile su web) Si consideri la grammatica G con scopo S e simboli terminali {a, z, 0, 1. S ::= C B C C C ::= B A A B ::= a z A ::= 0 1 Si dica se la stringa a1z0 è sintatticamente corretta secondo tale grammatica, e se ne mostri dla derivazione left-most. ESERCIZIO Grammatiche 5 Compito A - 13 Novemre 2002 Soluzione La stringa è sintatticamente corretta. Derivazione left most: S -> C B C -> B A B C -> a A B C -> a 1 B C -> a 1 z C -> a 1 z A -> a 1 z 0

ESERCIZI RAPPRESENTAZIONE (1) Un elaboratore rappresenta numeri interi su 8 bit. Scrivere tramite questa rappresentazione interna i numeri 17 e 23 (espressi in base 10), e eseguirne la somma (sempre tramite la rappresentazione interna). ESERCIZI RAPPRESENTAZIONE (1) Soluzione: +17 00010001 +23 00010111 ------------------------- 00101000 40 (in base 10)

ESERCIZI RAPPRESENTAZIONE (2) Un elaboratore rappresenta numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare qual è l intervallo di interi rappresentabile. Come varia tale intervallo se si dedicano invece 9 bit alla rappresentazione? (8 dedicati al modulo e uno al segno) Soluzione: L intervallo di interi va da 127 a +127. Aggiungendo un bit, l intervallo raddoppia, da 255 a +255 ESERCIZI RAPPRESENTAZIONE (3) Un elaboratore rappresenta numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare come viene svolta la seguente operazione aritmetica: 37 + 51 in codifica binaria.

ESERCIZI RAPPRESENTAZIONE (3) Soluzione +37 0 0100101 +51 0 0110011 Tra i (moduli dei) due numeri si esegue una somma: 0100101 0110011 ------- 1011000 che vale 88 in base 10 ESERCIZI RAPPRESENTAZIONE (4) Un elaboratore rappresenta numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare come viene svolta la seguente operazione aritmetica: in codifica binaria 59 27

ESERCIZI RAPPRESENTAZIONE (4) Soluzione 59 0 0111011-27 1 0011011 Tra i (moduli dei) due numeri si esegue una sottrazione: 0111011-0011011 ------- 0100000 che vale 32 in base 10 ESERCIZI RAPPRESENTAZIONE (5) Compito B - 13 Novembre 2002 (disponibile su web) Un elaboratore rappresenta i numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare come viene svolta la seguente operazione aritmetica e determinarne il risultato traslandolo poi in decimale per la verifica: 118-37

ESERCIZI RAPPRESENTAZIONE (5) Compito B - 13 Novembre 2002 (disponibile su web) 118 -> 0 1110110-37 -> 1 0100101 Tra i moduli dei numeri si esegue una sottrazione: 1110110-0100101 ---------- 1010001 che vale 81 in base dieci. ESERCIZI RAPPRESENTAZIONE (6) Un elaboratore rappresenta i numeri interi su 8 bit dei quali 7 sono dedicati alla rappresentazione del modulo del numero e uno al suo segno. Indicare come viene svolta la seguente operazione aritmetica e determinarne il risultato traslandolo poi in decimale per la verifica: 39-91

ESERCIZI RAPPRESENTAZIONE (6) 39 -> 0 0100111 91 -> 0 1011011 Tra i moduli dei numeri si esegue una sottrazione: 1011011 0100111 ---------- 0110100 che vale 52 in base dieci. Notare che il risultato finale è - 52, cioè: 1 0110100. Esercizio Analisi (1) Un compito precedente (9/11/2001) Esercizio 1 Dato il seguente programma C: #include <stdio.h> int f1(int x, int y) { if (x>y) return x; else return y; main() { int x=0,z=0; for (x=5; x>0; x-=2) { z=f1(x,z); printf("%d\n", x+z); Che cosa fa la funzione f1? Cosa stampa il programma (motivare opportunamente la risposta)?

Esercizio Analisi (2) 5 Novembre 2003 Compito A Es. 1 Esercizio 1 Dato il seguente programma C: #include <stdio.h> int fun(int a, int b) { if ((a%3) == 0 ) return ++b; else return fun(a-1, b); main() { int x = 9; int y = 0; Che cosa fa la funzione fun? Cosa stampa il programma (motivare opportunamente la risposta)? while (x > 0) { y = fun(x, y); printf("%d\n", y); x-=3; Esercizio Record di Attivazione (1) 5 Novembre 2003 Compito A Es. 3 Esercizio 3 Si consideri la seguente funzione g(): int g(int a, int b) { if ((a/b) <2 ) return (b-1); else return 1 + g(a-2, b); Si scriva il risultato della funzione quando invocata come g(9, 2) e si mostrino i record di attivazione. La funzione è tail-ricorsiva?

4 3 2 1 RA RA RA RA a=9 b=2 a=7 b=2 a=5 b=2 a=3 b=2 DL DL DL DL La funzione non è tail-recursive Esercizio Record di Attivazione (2) 13 Luglio 2004 Es. 4 Si consideri la seguente funzione FUN(): int FUN(int a, int b){ a=a/b; if ((a%b)>0) return FUN(a, b) + a; else return 1; Si scriva il risultato della funzione quando invocata come FUN(15, 2) e si disegnino i corrispondenti record di attivazione.

12 5 2 1 RA RA RA RA a=15 7 b=2 a=7 3 b=2 a=3 1 b=2 a=1 0 b=2 DL DL DL DL Esercizio sintesi (1) Calcolo delle radici di un polinomio Problema: Dati i coefficienti a,b,c di un polinomio di 2 grado della forma: ax^2 + bx + c = 0, calcolare le radici. A lezione sono stati presentati i seguenti passi per risolvere un problema: 1. Individuazione di un procedimento risolutivo 2. Scomposizione del procedimento in un insieme ordinato di azioni (algoritmo( algoritmo) 3. Rappresentazione dei dati e dell algoritmo attraverso un formalismo comprensibile al calcolatore (linguaggio di programmazione, programma)

Esercizio sintesi (1) Calcolo delle radici di un polinomio Passo 1: Individuazione di un procedimento risolutivo Cosa sappiamo di questo problema? Qual è la conoscenza specifica che abbiamo sul dominio del problema? 2 b ± b 4ac 2 x1,2 =, b 4ac 2a 0 Esercizio sintesi (1) Calcolo delle radici di un polinomio Passo 2: Scomposizione del procedimento in un insieme ordinato di azioni (algoritmo) Leggi a,b,c Calcola il delta Se il delta è maggiore (o uguale) a 0: allora calcola il numeratore (utilizzando il segno +) dividi il num. per il den. e memorizza il primo risultato calcola il numeratore utilizzando il segno dividi il num. per il den. e memorizza il secondo risultato restituisci entrambi i risultati altrimenti restituisci il messaggio di errore Radici non reali!

Esercizio sintesi (1) Calcolo delle radici di un polinomio - soluzione #include <stdio.h> #include <math.h> void main() { int a; int b; int c; float delta; float d; float rad1; float rad2; Esercizio sintesi (1) Calcolo delle radici di un polinomio - soluzione /* Passo 1 */ printf("digitare i coefficienti: "); scanf("%d%d%d", &a, &b, &c); /* Passo 2 */ delta = (b*b - 4*a*c); /* * Non c'e' una funz. che calcola una potenza??? * Se voglio calcolare b^12, devo scrivere b*b*b*... * per dodici volte??? * COMPITO: riscrivere questa soluzione facendo uso * di una apposita funzione per calcolare b^n. */

Esercizio sintesi (1) Calcolo delle radici di un polinomio - soluzione /* Passo 3 */ d = sqrt(delta); /* * Cosa succede se delta < 0??? * Non sarebbe meglio mettere un controllo??? */ /* Passo 4 */ rad1 = (-b + d)/(2*a); rad2 = (-b - d)/(2*a); /* Passo 5 */ printf("radici: %f %f", rad1, rad2); Esercizio sintesi (2) Numeri perfetti Dato un numero, stabilire se esso è un numero perfetto o no. In particolare, realizzare una funzione perfetto(int x) che restituisca true se e solo se il numero x è perfetto. Si ricordi che un numero è perfetto se risulta essere la somma di tutti i suoi divisori (escluso sé stesso). Progettare poi un programma main che, utilizzando tale funzione, chieda ad un utente un numero, e calcoli tutti i numeri perfetti compresi tra 1 e tale numero.

Esercizio sintesi (2) Numeri perfetti Soluzione int perfetto(int x) { int somma = 0; int i; for(i=1; i<x; i++) { if ( (x%i)==0 ) somma = somma + i; return somma==x; Esercizio sintesi (2) Numeri perfetti Soluzione void main() { int num; int i; printf( Inserire limite: ); scanf("%d", &num); for(i=1; i<= num; i++) if (perfetto(i)) printf("%d e un numero perfetto\n", i);

Esercizio sintesi (3) Il numero Pi-Greco Realizzare un programma che calcoli il numero PI-Greco con precisione arbitraria. In particolare, realizzare una funzione pigreco(int x) che riceva in ingresso un intero x (che rappresenterà la precisione), e restituisca in uscita il valore di PI-Greco, calcolato secondo la seguente formula: π = x i ( 1) i= 0 2i + 1 4 Continua > Esercizio sintesi (3) Il numero Pi-Greco Si realizzi poi un programma main() che, almeno una volta, chieda all utente di immettere un valore x. Se tale valore è uguale a -1, il programma termini immediatamente; se il valore è maggiore o uguale a 0, allora il programma calcoli pi-greco con tale precisione e chieda un nuovo numero all utente. Qualora il valore non sia ammissibile (nel nostro caso, minore di -1), il programma ne richieda uno corretto all utente.

#include <stdio.h> #include <math.h> Esercizio sintesi (3) Il numero Pi-Greco Soluzione double pigreco(int x) { double somma = 0; int i; for (i=0; i<=x; i++) somma = somma + pow(-1, i)*(4.0/(2*i +1)); return somma; Continua > Esercizio sintesi (3) Il numero Pi-Greco Soluzione void main() { int num; double pi; do { printf("inserire numero: "); scanf("%d", &num); if (num >=0) { pi = pigreco(num); printf("pi Greco vale: %f\n\n", pi); while (num!= -1);

Esercizio sintesi (4) Interesse composto Una banca vuole realizzare un programma per il calcolo dell interesse composto. Tale problema consiste nel calcolare a quanto ammonterebbe il capitale finale qualora si avesse un capitale iniziale noto, per N anni con un tasso di interesse pari a r. Il programma deve quindi chiedere all utente a quanto ammonta il capitale iniziale, quale è il tasso di interesse, ed il numero di anni su cui simulare. Ovviamente è necessario controllare che i dati inseriti corrispondano a valori plausibili (tasso d interesse >= 0 e <= 100) (anni > 0). Continua > Esercizio sintesi (4) Interesse composto La formula per il calcolo degli interessi composti, dove r e il tasso di rendimento e N e il numero di anni a cui gli interessi sono applicati, è la seguente: Cfin r Cin = * 1 + 100 N

Esercizio sintesi (4) Interesse composto - Soluzione #include <stdio.h> float interessi(float c_in, float tasso, int anni) { float tasso_perc; float tasso_tot; float result; int i; result = 1; tasso_perc = tasso/100; tasso_tot = 1 + tasso_perc; for (i=0; i<anni; i++) result=result*tasso_tot; r Cfin Cin = * 1 + 100 N return c_in*result; Continua > Esercizio sintesi (4) Interesse composto - Soluzione int main() { float c_in; float tasso; float c_fin; int anni; printf("inserire il capitale iniziale: "); scanf("%f", &c_in); printf("inserire il tasso d'interesse: "); scanf("%f", &tasso); while ((tasso<0) (tasso>100)) { printf("tasso errato\n"); printf("inserire il tasso d'interesse: "); scanf("%f", &tasso); Continua >

Esercizio sintesi (4) Interesse composto - Soluzione anni); printf("inserire anni: "); scanf("%d", &anni); while (anni<0) { printf("anni negativi.\n"); printf("inserire anni: "); scanf("%d", &anni); c_fin = interessi(c_in, tasso, anni); printf("interessi simulati, con:\n"); printf("capitale iniziale: %6.2f\n", c_in); printf("tasso d'interesse: %6.2f\n", tasso); printf("anni di applicazione degli interessi: %d\n", printf("capitale finale: %6.2f\n", c_fin); return 0; Esercizio sintesi (5) 5 Novembre 2003 compito A es. 2 Esercizio 2 (disponibile su web) a) Si definisca una funzione iterativa long fact (long n) che calcoli in maniera iterativa il fattoriale del parametro n. Si definisca inoltre una funzione ricorsiva float power (float base, long exp) che calcoli in maniera ricorsiva la potenza del parametro base elevato ad exp.

Esercizio sintesi (5) 5 Novembre 2003 compito A es. 2 (disponibile su web) b) Si definisca una funzione float newton(float a, float b, long n) che calcoli il seguente valore: n k= 0 n a k n k dove il simbolo del binomio è così definito: b k n = k n! k!( n k)! Esercizio sintesi (5) 5 Novembre 2003 compito A es. 2 (disponibile su web) c) Si scriva infine un programma main che chieda all utente di inserire tre valori, a e b (float), e n (int). Il programma controlli, in particolare, che n sia maggiore o uguale a zero (in caso contrario si continui a chiedere all utente un nuovo valore finché questi non soddisfa la condizione posta). Il programma stampi infine il valore ottenuto invocando la funzione newton() con parametri a, b, n e poi termini.

/* Punto a): */ Esercizio sintesi (5) 5 Novembre 2003 compito A es. 2 Soluzione long fact(long n) { long result = 1; for ( ; n>0; n--) result = result * n; return result; float power(float base, long esp) { if (esp == 0) return 1; else return base * power(base, esp-1); Esercizio sintesi (5) 5 Novembre 2003 compito A es. 2 /* Punto b): */ Soluzione long binomio(long n, long k) { return fact(n)/(fact(k) * fact(n-k)); n = k n! k!( n k)! float newton(float a, float b, long n) { long i; float result = 0; for (i=0; i<=n; i++) result = result + binomio(n, i) * power(a, n-i) * power(b, i); return result; n n n k k= 0 a k b k

Esercizio sintesi (5) 5 Novembre 2003 compito A es. 2 /* Punto c): */ Soluzione main() { float a; float b; long n; printf("inserire a, b e n: "); scanf("%f %f %d", &a, &b, &n); while (n<0) { printf("re-inserire n: "); scanf("%d", &n); printf("(%f + %f)^%d = %f\n", a, b, n, newton(a, b, n));