Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.

Slides:



Advertisements
Presentazioni simili
C++ Di Marco Cozzani.
Advertisements

Corso di Fondamenti di Programmazione canale E-O
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Iterazione A. Ferrari.
Dati strutturati A. Ferrari.
Stringhe di caratteri In linguaggio C.
Array multidimensionali
Interazione con lutente I menu. Menu La forma più semplice di interazione con lutente è il menu che fornisce una serie di opzioni tra le quali lutente.
Procedure e funzioni ricorsive
Sviluppo di programmi strutturati
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
INFORMATICA Strutture iterative
Tail recursion: esempio
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Algoritmi Politecnico di Milano
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Process synchronization
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
APPUNTI SUL LINGUAGGIO C
INFORMATICA Esercizi.
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
File di testo, file binari
Esercizi C su array e matrici
Dichiarazioni e tipi predefiniti nel linguaggio C
Le liste dinamiche La ricorsione
I File.
Le funzioni.
Calcolo del Massimo Comun Divisore
Equazione di secondo grado.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Programmazione di Calcolatori
void binario(int n); …………………
Massimo Comun Divisore
Unità Didattica 3 Linguaggio C
Radice quadrata di un numero
Esercizi su File.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
C14 #5 I cicli FOR e WHILE Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Ricerca sequenziale in un array di interi
A LGORITMI DI ORDINAMENTO Cinzia Reverberi. COS’È UN ALGORITMO? Un algoritmo è un insieme ben ordinato di operazioni non ambigue ed effettivamente calcolabili.
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Temp. Esercizio DataSet Generare 100 numeri interi casuali tra 1 e Visualizzare la loro media e il valore massimo. A questo scopo realizzare la.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array n-dimensionali e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi sui dati strutturati 13 Tipi di dati strutturati.
Appunti su formati numerici. Tipi numerici Il C dispone di due tipi numerici: tipi interi e tipi reali; I tipi reali sono anche detti floating, ovvero.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

Politecnico di Milano Esercizi Preparazione alla prima prova intermedia

- 2 - Filtraggio Lutente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento) Lelaboratore calcola la seguente formula: v[i] (v[i-1] + v[i] + v[i+1]) / 3 e visualizza larray così filtrato Quando i corrisponde ai bordi dellarray, assumere che v[i-1] (oppure v[i+1]) valga zero.

- 3 - Filtraggio #include void main() { unsigned int tot = 0, i; float n, precedente, successivo, numeri[100]; printf ("Numero non negativo: "); scanf ("%f", &n); while (n >= 0) { numeri[tot] = n; tot++; printf ("Numero non negativo: "); scanf ("%f", &n); }.

- 4 - Filtraggio for (i = 0; i < tot; i++) { if (i == 0) { precedente = 0; } else { precedente = numeri[i - 1]; }.

- 5 - Filtraggio if (i == tot - 1) { successivo = 0; } else { successivo = numeri[i + 1]; } printf ("%f\n", (precedente + numeri[i] + successivo)/3.0); } /* fine ciclo for */ }.

- 6 - Trasformazione Lutente inserisce un array di numeri interi, di lunghezza desiderata Chiamando v larray e indicando con m la posizione dellultima cella inserita (larray sarà quindi composto da m+1 celle), il programma applica il seguente calcolo: per ogni i: in v[i] ed in v[m-i] si inserisce il valore v[i]+v[m-i] Esempio: v[0, 3, -7, 5, -2] v[-2, 8, -14, 8, -2] v[5, -7, 3, 2] v[7, -4, -4, 7].

- 7 - #include void main() { const unsigned int MAX = 100; unsigned int tot, m, i; int numeri[MAX], temp; printf ("Quanti numeri: "); scanf ("%u", &tot); /* saranno riempite tot celle, da 0 a tot-1 */ for (i = 0; i < tot; i++) { printf ("Numero:"); scanf ("%d", &numeri[i]); } m = tot - 1;. Trasformazione

- 8 - for (i = 0; i <= m / 2; i++) { temp = numeri[i] + numeri[m - i]; numeri[i] = temp; numeri[m - i] = temp; } for (i = 0; i < tot; i++) { printf ("%d\n", numeri[i]); } }. Trasformazione

- 9 - Def. Struttura dati Si definisca il tipo strutturato Esame che permetta di rappresentare le informazioni riguardanti un esame superato da un certo studente. Esame è composto dai seguenti dati: codiceCorso: una sequenza di 6 caratteri, votoRiportato: numero intero non negativo, annoAccademico: numero intero non negativo; Si definisca il tipo strutturato Studente che permetta di rappresentare informazioni riguardanti tutti gli esami superati da un certo studente. Studente è composto dai seguenti dati: matricola: una sequenza di 6 caratteri; vettEsamiSuperati: un vettore composto da 30 celle di tipo Esame numeroEsamiSuperati: numero intero non negativo;

Def. Struttura dati Si definisca inoltre la variabile vettStudenti, che permetta di rappresentare linsieme degli studenti ad una certa università. Luniversità in questione potrà gestire un massimo di 1000 studenti. Supponendo di riferirsi ad una architettura in cui una variabile di tipo char occupi 1 byte e un intero occupi 2 byte, calcolare loccupazione in memoria della variabile vettStudenti.

typedef struct { char codiceCorso[6]; unsigned int votoRiportato; unsigned int annoAccademico; } Esame; typedef struct { char matricola[6]; Esame vettEsamiSuperati[30]; unsigned int numeroEsamiSuperati; } Studente; Studente vettStudenti[1000]; Def. Struttura dati

Def. Struttura dati Occupazione di memoria: Esame: 6 caratteri x 1 byte + 1 intero x 2 byte + 1 intero x 2 byte = 10 byte Studente: 6 caratteri x Esame x 10 byte + 1 intero x 2 byte = 308 byte Quindi, vettStudenti: 1000 Studente x 308 byte = byte.

Offerte fornitori Il programma permette di inserire un certo numero di offerte di fornitori: Codice fornitore (numero naturale) Nome fornitore (stringa) Importo offerta in euro (numero float) Quando lutente inserisce 0 come codice fornitore, linserimento ha termine. Il programma cerca e visualizza lofferta migliore (la più economica).

#include void main() { const unsigned int MAX_OFFERTE=1000, MAX_CAR=20; typedef char Stringa[MAX_CAR]; typedef struct { unsigned int codFornitore; Stringa nomeFornitore; float importo; } Offerta; Offerta arrayOfferte[MAX_OFFERTE], nuovaOfferta; int numOfferte = 0, j; float offertaMin; unsigned int posizOffertaMin;. Offerte fornitori

printf ("Codice fornitore: "); scanf ("%u", &nuovaOfferta.codFornitore); printf ("Nome fornitore: "); scanf ("%s", nuovaOfferta.nomeFornitore); printf ("Importo offerta (euro): "); scanf ("%f", &nuovaOfferta.importo); while (nuovaOfferta.codFornitore != 0) { arrayOfferte[numOfferte] = nuovaOfferta; numOfferte++; printf ("Codice fornitore: "); scanf ("%u", &nuovaOfferta.codFornitore); printf ("Nome fornitore: "); scanf ("%s", nuovaOfferta.nomeFornitore); printf ("Importo offerta (euro): "); scanf ("%f", &nuovaOfferta.importo); }. Offerte fornitori

offertaMin = arrayOfferte[0].importo; posizOffertaMin = 0; for (j = 1; j < numOfferte; j++) { if (arrayOfferte[j].importo < offertaMin) { offertaMin = arrayOfferte[j].importo; posizOffertaMin = j; } } printf ("Cod.fornitore:%u,nome:%s,importo:%f\n", arrayOfferte[posizOffertaMin].codFornitore, arrayOfferte[posizOffertaMin].nomeFornitore, arrayOfferte[posizOffertaMin].importo); }. Offerte fornitori

Varie: C Programmazione: Tipi strutturati (lettura, copia, stampa) Array (lettura, copia, stampa) Funzioni (var. locali/globali, regole di visibilità, parametri di ingresso, valore di ritorno, prototipo) Algoritmi tipici: Scambio contenuto di due variabili, multiplo Array: max/min, somme elementi, media, ordinamento, ricerca, merge Definizione di un tipo strutturato complesso: Campi a loro volta strutturati Campi array Calcolo dello spazio allocato in memoria; bit o byte.

Varie: assegnamento con vettori Variabili di tipo semplice (int, float, …): int a = 3, b = 4; a = b; Variabili array : char a[10], b[10]; a = b;

ilMioRecord2 ??????? ilMioRecord ? Varie: assegnamento con struct Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; Record ilMioRecord1, ilMioRecord2; ilMioRecord1.campo1 = ' A ' ; ilMioRecord1.campo2 = 24.56; ilMioRecord1.campo3[0] = 23; ilMioRecord1.campo3[1] = 45; ilMioRecord2 = ilMioRecord1; A ilMioRecord1 45 ilMioRecord A45

Varie: array Copia di un array: char a[10], b[10]; unsigned int i, lungh; …larray a viene riempito con lungh caratteri… for (i = 0; i < lungh; i++) { b[i] = a[i]; } Quando usare unarray? Leggo più dati, con il medesimo contenuto informativo, sui quali eseguirò il medesimo algoritmo I dati, per essere elaborati, devono essere tutti presenti (no elaborazione al volo); oppure devono essere conservati (es. stampa dopo elaborazione).

Diagramma a blocchi e traccia di esecuzione A) Sia data una sequenza di numeri interi positivi diversi da zero. I valori sono letti in input da tastiera. La fine dellinput è indicata dallinserimento dello 0. Si calcoli: Il numero di coppie di numeri consecutivi uguali Il numero di coppie in cui il secondo numero e divisore del primo, ma non uguale Si visualizzi un messaggio che dica quale tipo di coppie tra i due precedenti è presente in numero maggiore. Ad esempio, se la sequenza letta in input è , allora lalgoritmo calcolerà 4 come n.ro di coppie di interi uguali e 2 come n.ro di coppie in cui il secondo numero è divisore del primo e visualizzerà il messaggio: La sequenza contiene un numero maggiore di coppie di numeri uguali. B) Si costruisca la traccia di esecuzione del programma in corrispondenza della sequenza di ingresso: NOTA: non è necessario controllare che i dati di ingresso siano maggiori o uguali a 0

- 22 -

Traccia di esecuzione - 1 Nº blocco Prox blocco testd1d2divisugua V V 67V

Traccia di esecuzione - 2 Nº blocco Prox blocco testd1d2divisugua 56V 67V V 68F 89V 9 1

Traccia di esecuzione - 3 Nº blocco Prox blocco testd1d2divisugua V 68F 8 F F 12V(1)(2)

Traccia di esecuzione - 4 Nº blocco Prox blocco testd1d2divisugua 1213V(1)(2)

Varie: diagramma a blocchi Diagramma a blocchi: E necessario usare i vettori? Numerare i blocchi Traccia di esecuzione: Non ripetere il valore delle variabili se il contenuto non viene modificato I valori tra parentesi servono solo per maggiore chiarezza Usare lo stile visto a lezione per num. blocchi, variabili, test, ecc.

Varie: codifica binaria Usare il numero di bit corretto per codifica e calcoli In CPL 2 i numeri non negativi cominciano con uno zero! Formula logica tabella della verità formula logica Nella tabella della verità, ordinare i bit secondo la modalità vista a lezione