Esercizi Svolti di Programmazione

Documenti analoghi
Esercizio. Pseudocodice

Formalismi per la descrizione di algoritmi

Informatica (A-K) 5. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica

Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Risoluzione di un problema

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Introduzione agli Algoritmi

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

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

Rappresentazione degli algoritmi

INFORMATICA. Strutture iterative

Nota: Si consideri il valore di pi greco.

Scrittura formattata - printf

Corso di Informatica 1 Esercitazione n. 4

Fondamenti di Informatica T-1 Modulo 2

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

IL TEOREMA DI BOEHM-JACOPINI

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Esercizi. Stringhe. Stringhe Ricerca binaria

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

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

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

Fasi di creazione di un programma

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

Esercizi di programmazione in C

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

Rappresentazione degli algoritmi

Esercizi. Filtraggio

Lab 04 Istruzioni, cicli e array"

Informatica (CIV) Esercitazione su FORTRAN. Andrea Romanoni

Programmi in Assembly

Transcript:

Esercizi Svolti di Programmazione Walter Cazzola DICo - Dipartimento di Informatica e Comunicazione Università degli Studi di Milano cazzola@dico.unimi.it Introduzione Di seguito sono riportati alcuni esercizi svolti di programmazione, lo scopo è sia quello di darvi degli esercizi con soluzione, sia quello di farvi vedere cosa è necessario produrre per l esame. A lezione si è introdotto un processo di sviluppo del software composto di quattro passi: analisi del problema, specifica funzionale, outline dell algoritmo (contenitori dei dati e diagramma di flusso) e scrittura del programma. In questo foglio mi limiterò a riportare il diagramma di flusso ed il programma nel linguaggio LP, mentre per l esame dovrete produrre anche un analisi del problema e della soluzione proposta. Nota, siccome è stata presentata a lezione, includo anche il codice C della soluzione. Esercizio: Radici Calcolare le radici di un equazione di secondo grado.

Esercizi Svolti di Programmazione 2 Programma C. a, b, c, delta: int read(a); read(b); read(c); delta := b*b-4*a*c; if delta < 0 then write( Nessuna soluzione. ); else if delta = 0 then write( Radici coincidenti =,-b/(2*a)); else write( Radici distinte =, (-b+sqrt(delta))/(2*a), e, (-b-sqrt(delta))/(2*a)); #include <stdio.h> int main() { int a, b, c, delta; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); printf("c = "); scanf("%d", &c); delta = b*b-4*a*c; if (delta < 0) { printf("nessuna soluzione.\n"); } else { if (delta == 0) { printf("coincidenti = %lf\n", -b/(2*a)); } else { printf("radici distinte = %lf e %lf\n", (-b+sqrt((double)delta))/(2*a), (-b-sqrt((double)delta))/(2*a)); } } }

3 Walter Cazzola Esercizio: Ricerca del Minimo. Ricerca del minimo tra i K (1 K 50) numeri introdotti come input. K,i,min,x: int, read(k); i:=1; read(min); while i<=k do read(x); if x < min then min:=x; i :=i+1; write(min);

Esercizi Svolti di Programmazione 4 Esercizio: Conversioni Temperature Programma di conversione delle temperature date in input da gradi Celsius a gradi Fahrenheit (t F = 9 5 t C + 32). Il programma si ferma quando si introduce il numero zero. Alla fine stampiamo la somma delle temperature sia Celsius che Fahrenhait calcolate e la loro media. SC,SF,C,F: float, i: int; read(c); i:=0; SC:=C; SF:=0; while not(c=0) do F := 9/5*C+32; write(c, C =, F, F ); SC:= SC+C; SF:= SF+F; i:=i+1; read(c); write( Totale, SC, C =, SF, F ); write( Media, SC/i, C =, SF/i, F );

5 Walter Cazzola Esercizio: Moltiplicazione Calcolare la moltiplicazione di due numeri interi dati in input avendo a disposizione solo addizione e sottrazione. mul, a, b: int; read(a); read(b); write(a, x, b, = ); mul := 0; while b>0 do mul := mul + a; b := b - 1; write(mul);

Esercizi Svolti di Programmazione 6 Esercizio: Ordinamento di un Array Ordinare in ordine crescente e stampare un array di K interi con 1 K 50. Nota nel seguente diagramma sia la lettura che la scrittura di un array sono indicate in modo compatto con leggi A e scrivi A. A: array 1..50 of int, K,i,j,l,min: int; read(k); i := 0; while i<k do read(a[i]); i := i+1; i := 0; while i<k do min := A[i]; l := i; j := i+1; while j<k do if A[j] < min then l:=j; min:=a[j]; j := j+1; A[l] := A[i]; A[i] := min; i := i +1; i := 0; while i<k do write(a[i]); i := i+1;

7 Walter Cazzola Esercizio: Agenda Telefonica. Implementare un agenda telefonica contenente esattamente 100 nominativi. Ogni nominativo è composto da: Nome, Cognome e numero di telefono. L agenda è ordinata lessicograficamente. Scrivere l algoritmo di ordinamento e l algoritmo per ritroe un numero dato il cognome ed il nome. Sono valide le stesse considerazioni fatte sul diagramma dell esercizio precedente. Diagramma di Flusso: Ordinamento Agenda Diagramma di Flusso: Ricerca in Agenda

Esercizi Svolti di Programmazione 8 const K=100; agenda: array 1..K of record nome: string; cognome: string; numero: int; end; i,j,l: int, tmp: record nome: string; cognome: string; numero: int; end; i := 0; while i<k do l:=i; j :=i+1; while j<k do if (agenda[j].cognome < agenda[l].cognome) or ((agenda[j].cognome = agenda[l].cognome) and (agenda[j].nome < agenda[l].nome)) then l:=j; j := j+1; tmp := agenda[l]; agenda[l] := agenda[i]; agenda[i] := tmp; i := i +1; elem: record nome: string; cognome: string; numero: int; end; min, max, med: int; read(elem.nome); read(elem.cognome); read(elem.numero); min := 1; max := K; med := (max-min)/2; while not ((elem.cognome=agenda[med].cognome) and (elem.nome=agenda[med].nome)) and not (med = min) do if (elem.cognome < agenda[med].cognome or ((elem.cognome=agenda[med].cognome) and (elem.nome < agenda[med].nome))) then max := med; else min := med; med := min + (max-min)/2; write(med);

9 Walter Cazzola Esercizio: Crittografia. Realizzare un sistema crittografico che translittera un testo secondo uno schema (carattere nel testo, carattere con cui sostituirlo) dato in input. Il testo da codificare sarà al più di 5000 caratteri. Nota: supponiamo l esistenza di una funzione ord() che passatogli un carattere restituisce la sua posizione nell alfabeto, es. ord( A ) ritorna 1 e ord( Z ) ritorna 26. const card_alfabeto = 26; schema : array 1..card_alfabeto of char; testo : array 1..5000 of char; i,n: int; i := 1; while i <= card_alfabeto do read(schema[i]); i := i+1; read(n); i := 1; while i <= n do read(testo[i]); testo[i] := schema[ord(testo[i])]; i := i +1; i := 1; while i <= n do write(testo[i]); i := i +1;