Esercizi. Piero Demichelis 1

Documenti analoghi
Esercizi di programmazione in C

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

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

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Esercitazione 6. Array

Esercizio 1: calcolo del massimo di una sequenza (versione 1)

PROGRAMMAZIONE: Le strutture di controllo

Gli Operatori. Università degli Studi di Brescia

Gli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento

Esercizi C su array e matrici

Programmare in C. Esempio: Algoritmo del Risveglio

MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME. MATT. POME.

Le funzioni, e le istruzioni di input/output

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

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

SOLUZIONE ESERCIZIO 1

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Esercitazione 3. Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

acquisizione numero elementi del primo insieme e del secondo insieme, finché elprimoinsieme oppure elsecondoinsieme > EL_INS

6SC Informatica 9/12/2015

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Problema. Vettori e matrici. Vettori. Vettori

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Esercizi di programmazione in linguaggio C - Costrutto iterazione

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Linguaggio C: le funzioni

Esercitazione 3. Espressioni booleane I comandi if-else e while

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Sviluppo di programmi

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione I - Laboratorio

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Esercizi Programmazione I

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Introduzione alla programmazione in C(++)

Esercitazione 4. Comandi iterativi for, while, do-while

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Esercizio 1 Liste: calcolo perimetro di un poligono

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Fondamenti di Informatica T-1 Modulo 2

IL PRIMO PROGRAMMA IN C

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Rappresentazione binaria delle variabili (int e char)

$QDOLVLGHOSURJUDPPDTXDGUDWR

Algoritmi e basi del C Struttura di un programma

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

ESERCIZI SU IF/WHILE. Esercizio 1) Legge due numeri e controlla se il primo è multiplo del secondo.

Laboratorio di programmazione

Caratteri e stringhe

Espressioni semplici e condizionali

Corso sul linguaggio C Modulo Tipi di dato

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

a.a Codice corso: 21012, HOMEWORKS

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

Dall analisi alla codifica (2)

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Introduzione alla programmazione Esercizi risolti

Problemi, algoritmi e oggetti

MAPPA MULTIPLI E DIVISORI

2015 Cambridge Exams Dates / Fees

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Primi passi col linguaggio C

Esempio (if): equazione di secondo grado

Appunti, esempi ed esercizi sui linguaggi C/C++

Il linguaggio C. Notate che...

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Le Funzioni e la Ricorsione

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Scelte ed alternative. Esercizi risolti

Struttura dei programmi C

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

Esercitazione 8. Array multidimensionali

Variabili e Istruzioni

Esercizio 1. Esercizio 1 Soluzione

Istruzioni iterative (o cicliche)

Esercitazione 3. Corso di Fondamenti di Informatica

ESERCITAZIONE N.8. Il calcolatore ad orologio di Gauss. L aritmetica dell orologio di Gauss. Operazioni e calcoli in Z n

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

Primo programma in C Esercizi risolti

Istituto Tecnico Industriale M. M. Milano Polistena. Classe III D a.s. 2015/2016 C++ Guida Base

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Laboratorio di informatica Ingegneria meccanica

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

Programmi su più moduli - Esempio

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

Transcript:

Esercizi Piero Demichelis 1

Equazione di II grado Legge i coefficienti a, b e c si a = 0? no si b = 0? no delta = b*b 4*a*c si c = 0? no Equazione di I grado: x= -(c / b) Equazione Equazione w = 2*a indeterminata impossibile w = -(b / w) 1 w 2 = delta / w delta < 0? no si Radice reali: x 1 = w 1 + w 2 x 2 = w 1 - w 2 no delta = 0? si Radice doppia x = -(b / (2 * a)) Radice complesse coniugate: x = w 1 ± j w 2 Piero Demichelis 2

Equazione di II grado #include <stdio.h> #include <math.h> float a, b, c, delta; float x1, x2, w, w1, w2, mdelta; main() printf ("Coeff. a = "); /* legge i tre coefficienti a, b, c */ scanf ("%f",&a); printf ("\ncoeff. b = "); scanf ("%f",&b); printf ("\ncoeff. c = "); scanf ("%f",&c); Piero Demichelis 3

Equazione di II grado if (a == 0) /* a = 0? */ /* si, non è di II grado! */ if (b == 0) /* b = 0? */ if (c == 0) /* si, non è neppure di I grado! */ printf ("\nequazione indeterminata\n"); else printf ("\nequazione impossibile\n"); else /* b diverso da 0; è di I grado! */ x1 = - (c / b); printf ( \nequazione di I grado: x = %f\n", x1); else /* a è diverso da 0; è di II grado! */ Piero Demichelis 4

Equazione di II grado /* a è diverso da 0 è di II grado! */ delta = b * b - 4 * a * c; w = 2 * a; w1 = - (b / w); mdelta = delta; if (mdelta < 0 ) mdelta = - mdelta; w2 = sqrt (mdelta) / w; / * radice quadrata del discriminante */ if (delta == 0) /* discriminante nullo? */ printf ( \nradice doppia: x=%f\n", w1); /* si */ else /* no, il discriminante è diverso da 0 */ if (delta < 0) /* discriminante < 0? */ /* si */ printf ("\nradici complesse e coniugate:\n"); printf ("parte reale= %f ", w1); printf (" parte immag.= %f\n", w2); Piero Demichelis 5

Equazione di II grado else /* no, discriminante > 0 */ x1 = w1 + w2; /* calcola le due soluzioni */ x2 = w1 - w2; printf ("\n Radici reali: x1= %f\n x2= %f\n", x1, x2); /* chiusura dell else di if (delta == 0) */ /* chiusura dell else di if (a == 0) */ /* fine del main */ Piero Demichelis 6

Lire / Euro Programma per la conversione Lire/Euro e viceversa. L'input del programma sia la lettera L per Lire o E per Euro, seguita da uno spazio e dalla cifra da convertire: nel primo caso un'intero lungo, nel secondo caso un reale. Esempio di esecuzione: > Introduci la richiesta: >L 15000000 >15000000 lire corrispondono a 7746.85 euro Piero Demichelis 7

Lire / Euro Analisi. A seconda che il primo parametro introdotto (che è un carattere) sia L oppure E occorre eseguire in modo differenziato la lettura successiva: di un intero lungo se era L ; di un float se era E ; La lettura va pertanto suddivisa in due fasi: dapprima si legge un carattere e poi, in base al valore di questo carattere, si esegue la lettura di un intero o di un float. Piero Demichelis 8

Lire / Euro #include <conio.h> /* solo per Turbo C */ #include <stdio.h> #define rapp 1936.27 main() long int lire; double euro; char carat; clrscr(); /* solo per Turbo C */ printf ("\nintrodurre la richiesta: "); scanf ("%c", &carat); /* legge un carattere */ Piero Demichelis 9

Lire / Euro if (carat == 'L') /* è L? */ scanf ("%ld", &lire); /* si, legge le lire */ euro = (float)lire / rapp; /* converte in euro */ printf ("\n%ld lire equivalgono a %lf euro\n", lire, euro); else if (carat == 'E') /* non è L, è E? */ scanf ("%lf ", &euro); /* si, legge gli euro */ lire = (int)(euro * rapp); /* converte in lire */ printf ("\n%lf euro equivalgono a %ld lire\n", euro, lire); else /* non è né L né E, errore! */ printf ("\ncarattere non lecito\n"); Piero Demichelis 10

Anno bisestile Scrivere un programma che legga da tastiera un valore intero rappresentante un anno e stabilisca se è o meno un anno bisestile. Si ricordi che un anno per essere bisestile deve essere divisibile per 4 ma non per 100 a meno che sia divisibile per 400. Ad esempio il 2004 è un anno bisestile così come il 2000 mentre non lo è il 1900. Piero Demichelis 11

Anno bisestile Uso una variabile logica che chiamo bisestile, posta al valore vero se l anno è bisestile, al valore falso altrimenti. Pseudocodice - Ipotizzo che non sia bisestile (bisestile = falso); - divisibile per 4? si, ipotizzo sia bisestile (bisestile = vero); divisibile anche per 100? si, divisibile per 400? se no non è bisestile (bisestile = falso); - Visualizzo il risultato Piero Demichelis 12

Anno bisestile #include <conio.h> /* solo per Turbo C */ #include <stdio.h> #define falso 0 #define vero 1 main() int anno; int bisestile; clrscr(); /* solo per Turbo C */ printf ("\nintrodurre l anno: "); scanf ("%d", &anno); bisestile = falso; /* ipotizza che non sia bisestile */ Piero Demichelis 13

Anno bisestile if ((anno % 4) == 0) bisestile = vero; /* divisibile per 4: potrebbe essere bisestile */ if ((anno % 100) == 0) /* divisibile per 100? */ if ((anno % 400)!= 0) /* si, divisibile per 400? */ bisestile = falso; /* no, non bisestile */ if (bisestile) printf ("\n Bisestile!"); else printf ("\n Non Bisestile!"); Piero Demichelis 14

Fattoriale Realizzare un programma per il calcolo del fattoriale. Si ricorda che il fattoriale è definito come: n! = n (n-1) (n-2).. 2 1 con 0! = 1 - legge da tastiera il valore di n (compreso tra 0 e val_max); - Inizializza fattoriale (cioè il risultato) a 1; - finché n è maggiore di zero: moltiplica fattoriale per n ed attribuisci il risultato a fattoriale; decrementa n di un unità; - visualizza fattoriale. Piero Demichelis 15

Fattoriale #include <stdio.h> #define val_max 12 main () long int n, totale; printf ( \nfattoriale di: "); scanf ("%ld", &n); totale = 1; Piero Demichelis 16

Fattoriale if ((n >= 0) && (n <= val_max)) while (n > 0) totale *= n; n--; printf ("\nfattoriale di %ld = %ld\n", n, totale); else printf ("\nfattoriale non calcolabile, "); printf ("introdurre valori compresi tra 0 e %d", val_max); Piero Demichelis 17

MCD Scrivere un programma in linguaggio C che prenda in input da tastiera tre numeri interi e ne calcoli il massimo comune divisore. Il massimo comune divisore è il più grande tra i divisori comuni ai tre numeri. Le soluzioni possibili sono numerose, più o meno eleganti, ne proponiamo due: 1. con un indice che cresce da 1 a uno qualsiasi dei tre numeri si cerca i divisori comuni: l ultimo trovato è il mcd; 2. si cerca il minimo tra i tre numeri e poi, a partire da quel minimo e decrementando a ogni ciclo si cerca il primo divisore comune che è proprio il mcd. Piero Demichelis 18

MCD (1 a soluzione) #include <stdio.h> main() int x1, x2, x3, ind, mcd, min; printf ("\nintroduci il primo numero: "); scanf ("%d", &x1); printf ("\nintroduci il secondo numero: "); scanf ("%d", &x2); printf ("\nintroduci il terzo numero: "); scanf ("%d", &x3); for (ind = 1; ind <= x1; ind++) if ((x1 % ind) == 0 && (x2 % ind) == 0 && (x3 % ind) == 0) mcd = ind; printf("\nmcd = %d", mcd); Piero Demichelis 19

MCD (2 a soluzione) #include <stdio.h> #define falso 0 #define vero 1 main() int x1, x2, x3, trovato, mcd, min; printf ("\nintroduci il primo numero: "); scanf ("%d", &x1); min = x1; printf ("\nintroduci il secondo numero: "); scanf ("%d", &x2); if (x2 < min) min = x2; Piero Demichelis 20

MCD (2 a soluzione) printf ("\nintroduci il terzo numero: "); scanf ("%d", &x3); if (x3 < min) min = x3; trovato = falso; while (!trovato) if ((x1%min == 0) && (x2%min == 0) && (x3%min == 0)) mcd = min; trovato = vero; else min--; printf ("\nmcd = %d", mcd); Piero Demichelis 21

Matrice Realizzare un programma in C che richieda da tastiera due interi M e N e generi una matrice M x N. Gli elementi della matrice (a i,j ), con i che varia da 1 a M e j che varia da 1 a N, devono essere calcolati mediante la relazione: a i,j = i * j Infine occorre visualizzare la matrice sottoforma di tabellina. Esempio: se N = 2 e M = 3 si deve visualizzare: 1 2 3 2 4 6 Piero Demichelis 22

Matrice #include <stdio.h> #include <stdlib.h> #define NMAX 30 int main () int matrice[nmax][nmax]; int righe, col, i, j; printf ("\nnumero di righe: "); scanf ("%d",&righe); printf ("\nnumero di colonne: "); scanf ("%d",&col); Piero Demichelis 23

Matrice for (i=1; i <= righe; i++) for (j=1; j <= col; j++) matrice[i][j] = i*j; printf (" %4d ", matrice[i][j]); printf ("\n"); /* fine programma */ Oppure (senza usare la struttura dati matrice): for (i=1; i <= righe; i++) for (j=1; j <= col; j++) printf (" %4d ", i * j); printf ("\n"); /* fine programma */ Piero Demichelis 24

Matrice (2) Leggere da tastiera la dimensione di una matrice quadrata di numeri interi. Successivamente leggere ancora da tastiera i valori di tutti gli elementi della matrice. Infine calcolare e visualizzare la somma degli elementi della diagonale principale e il valor medio degli elementi della diagonale secondaria Piero Demichelis 25

Matrice (2) #include <stdio.h> #include <conio.h> #define MAX 10 /* dimensione massima */ void main() int num_r, riga, col; int matrix[max][max]; long sommaprinc=0; long sommasec=0; clrscr(); printf ( \ndimensione della matrice: "); scanf ("%d", &num_r); Piero Demichelis 26

Matrice (2) /* Riempimento della matrice */ for (riga=1; riga<=num_r; riga++) for (col=1; col<=num_r; col++) printf ("\nelemento %d %d : ", riga, col); scanf ("%d", &matrix[riga][col]); /* Somma gli elementi sulle due diagonali */ for (riga=1; riga<=num_r; riga++) sommaprinc += matrix[riga][riga]; sommasec += matrix[riga][num_r+1-riga]; Piero Demichelis 27

Matrice (2) /* Visualizza risultati */ printf ("\nla somma è %ld", sommaprinc); printf ("\nla media è %lf", (double)sommasec/(double)num_r); Piero Demichelis 28

Coseno Realizzare una funzione per il calcolo del coseno di un angolo espresso in radianti. Utilizzare allo scopo lo sviluppo in serie: 2 4 6 x x x cos ( x ) = 1 + +L 2! 4! 6! Realizzare inoltre il programma di prova che confronti il valore dalla funzione di libreria cos(x) col valore calcolato con lo sviluppo in serie. Piero Demichelis 29

Coseno Osservando la formula dello sviluppo in serie si vede come ogni termine può essere ricavato dal precedente come per il seno, con la relazione ricorrente: fatt = fa tt. prec. La differenza sta nelle inizializzazioni: N x x + 1 N + 2 ( ) ( ) - il primo termine ora vale 1 - il denominatore n parte da 0 Piero Demichelis 30

Coseno #include <stdio.h> #include <math.h> /* prototipo della funzione */ double cosenox(double x); main() double angolo; printf ( \nangolo in radianti: "); scanf ("%lf", &angolo); printf ("\ncoseno di %lf = %lf", angolo, cosenox(angolo)); printf("\nla funzione di libreria fornisce %lf ", cos(angolo)); Piero Demichelis 31

Coseno /* funzione per il coseno x */ double cosenox(double x) const double soglia = 0.00005; double accosenx, termine, termass, n; /* Inizializzazione variabili */ termine = 1; /* primo termine */ n = 0; /* denominatore */ accosenx = 1; /* accumulatore di risultato */ termass = 1; /* valore assoluto del primo termine */ Piero Demichelis 32

Coseno while (termass > soglia) /* contributo del nuovo termine */ termine *= -x * x /((n+1) * (n + 2)); /* accumula in accosenx */ accosenx += termine; /* aggiorna il denominatore */ n += 2; /* ricava valore assoluto del termine appena calcolato */ termass = fabs(termine); return (accosenx); Piero Demichelis 33

MCD di un insieme di numeri Leggere da tastiera la quantità di numeri sui quali ricercare successivamente il MCD. Leggere poi quei numeri salvandoli in un vettore (di interi) e successivamente calcolare e visualizzare il MCD. Analisi: Il problema è simile al precedente basta estendere la ricerca del divisore comune. Anziché tre numeri siamo ora in presenza di una serie di numeri la cui consistenza non è nota al momento della scrittura del programma. Risulta pertanto indispensabile memorizzare la sequenza in un vettore di dimensioni opportune il controllo sul resto ottenuto dalla divisione tra ogni numero e il divisore (presunto MCD) dovrà necessariamente essere gestito tramite un ciclo (for è il più adatto). Piero Demichelis 34

#include <conio.h> #include <stdio.h> #define falso 0 #define vero 1 MCD di un insieme di numeri main() int num, vett[100], mcd, min, i; int trovato, noresto; clrscr(); printf ("\nsu quanti numeri calcolo il MCD?: "); scanf ("%d", &num); Piero Demichelis 35

MCD di un insieme di numeri /* Legge i num numeri previsti mediante un ciclo for */ /* contemporaneamente trova il minimo controllando */ /* il loro valore man mano che vengono introdotti */ min = 32767; /* massimo valore per un intero */ for (i = 0; i < num; i++) printf ("\nintroduci il numero di indice %d: ", i); scanf ("%d", &vett[i]); if (vett[i] < min) min = vett[i]; Piero Demichelis 36

MCD di un insieme di numeri trovato = falso; while (!trovato) noresto = vero; for (i = 0; i < num; i++) if (vett[i] % min!= 0) noresto = falso; if (noresto) mcd = min; trovato = vero; else min--; printf ("\nmcd = %d", mcd); Piero Demichelis 37

Esempio: giorni nell anno Realizzare un programma che legga da tastiera l anno di riferimento e la sigla del primo giorno di quell anno (1 gennaio) composta dai primi tre caratteri del nome (ad esempio: 2003 mer) e visualizzi sul video una tabella in cui sono indicati, per ogni mese dell anno, quante volte occorre ciacun giorno della settimana. Si rammenta che sono bisestili gli anni divisibili per 4 ma, tra quelli multipli di 100, solo quelli che sono divisibili per 400. Piero Demichelis 38

Esempio: giorni nell anno Esempio di tabella in uscita: 2003 gen feb mar apr mag giu lug ago set ott nov dic lun 4 4 mar 4 4 mer 5 ecc. gio 5 ven 5 sab 4 dom 4 Piero Demichelis 39

Esempio: codice 2 su 5 Generare tutti i codici 2 su 5 (5 bit, di cui due bit devono essere a 1 e tre bit a zero), li si memorizzi in un'opportuna base dati e li si visualizzi sul videoterminale. (Si rammenti che i codici binari possono essere visti come numeri interi (senza segno), per cui è sufficiente generare tutti i codici di 5 bit e poi scartare quelli che non soddisfano la condizione di avere 2 bit ad uno e 3 a zero.) Successivamente confrontare i codici a due a due e, per ciascuna coppia, confrontare i bit a parità di posizione, conteggiando il numero di bit diversi tra di loro (il numero di bit diversi viene detto distanza tra i codici). Il programma calcoli e stampi il massimo e il minimo della distanza tra i codici. Piero Demichelis 40