APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2015

Documenti analoghi
APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO II.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2014

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IX.2014

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2019

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2018

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO I.2015

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV.2019

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE)

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE)

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE)

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

Dati aggregati. Violetta Lonati

Esercitazione 11. Liste semplici

Passare argomenti al programma

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III.2018, PARTE 2.

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

LABORATORIO 7 ARRAY. ATTENZIONE: argomenti da linea di comando!!!

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO IV Indice

Introduzione al linguaggio C Dati aggregati

Programmazione II Compitino (Vers. A)

Laboratorio di Informatica

Primi passi Output formattato Le quattro operazioni. Programmazione 1. Lezione 2 Parte 2. Vincenzo Marra.

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C. Funzioni: variabili e tipi locali e globali, passaggio parametri per valore, prototipo

Esercizi. La funzione swapint() primo tentativo

Informatica A (per gestionali) A.A. 2004/2005. Esercizi di programmazione C Funzioni: passaggio di parametri per indirizzo, passaggio di array.

Capitolo 10 - Strutture

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Manualistica 3 Le strutture di controllo

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Esercizi. FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo. Funzioni

Programmazione I - Preparazione A.A. 2010/2011

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Esercitazione n 2. Obiettivi

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

3. Terza esercitazione autoguidata: progetto gestione voli

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE) Indice

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

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

LABORATORIO 4 - Iterazioni

Lezione 6 programmazione in Java

Manualistica 3 Le strutture di controllo

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

Calcolo su Polinomi ===================

Array. Walter Didimo

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

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

Laboratorio di programmazione

Guida dettagliata per la compilazione della domanda di laurea online

Esercizio. Vogliamo scrivere delle funzioni che ci permettano di estrarre delle informazioni statistiche da un vettore (array) di dati:

Laboratorio di Informatica L-A

Programmazione II Compitino (Vers. B)

Università degli Studi di Ferrara

I puntatori Referencing e Dereferencing Tipi e Dichiarazioni Assegnazioni. Programmazione 1. Lezione 11. Vincenzo Marra.

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Esercitazione n 2. Obiettivi

Lab 2 Info B. Diego Carrera Ing. Gian Enrico Conti 7 Novembre 2016

Fondamenti di Informatica 2

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

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Programmazione Preparazione al II Compitino

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Primi passi Output formattato Le quattro operazioni Tipi, variabili, espressioni. Programmazione 1. Lezione 2. Vincenzo Marra.

Esercizio 1. Tavola ordinata in memoria centrale

Il linguaggio C Strutture

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

L'Allocazione Dinamica della Memoria nel linguaggio C

Corso di Informatica

Laboratorio di Informatica

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri.

File binari e file di testo

C: primi elementi. Lezione 4

Programmazione I - Laboratorio

Informatica B Esercitazione 3

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C e diagrammi a blocchi. Preparazione prima prova intermedia

Laboratorio con DERIVE

LABORATORIO DI PROGRAMMAZIONE TURNO 3 (SERALE)

Fondamenti di Informatica 2

INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C

Transcript:

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 14.IX.2015 VINCENZO MARRA Indice Preliminari 2 Esercizio 1 2 Memorizzazione, lettura e visualizzazione di numeri complessi. 2 Punti: 6. 2 Esercizio 2 3 Memorizzazione, lettura e visualizzazione di polinomi. 3 Punti: 8. 3 Esercizio 3 5 Due semplici test. 5 Punti: 7. 5 Esercizio 4 6 Derivazione. 6 Punti: 9. 6 Istruzioni per la consegna 7 Avvertenza. Il tema d esame richiede lo sviluppo di un singolo programma che permetta di eseguire delle semplici operazioni su polinomi a coefficienti complessi. Il primo paragrafo di Preliminari fissa alcune convenzioni. Svilupperete varie funzioni ausiliarie nel risolvere gli esercizi. Integrerete poi tutte le funzioni ausiliarie in un unico programma finale, che consisterà di un unico file sorgente. (Il tema d esame richiede esplicitamente l implementazione di alcune funzioni ausiliarie. È comunque sempre ammissibile aggiungere altre funzioni ausiliarie qualora lo riteniate opportuno per una migliore implementazione della vostra soluzione.) Si raccomanda di leggere interamente il tema d esame con attenzione prima di cominciare a scrivere le soluzioni dei singoli esercizi, in modo da avere chiaro l obiettivo finale. La raccomandazione si applica a maggior ragione ai Preliminari. Ultima revisione: 7 ottobre 2015. 1

2 V. MARRA Preliminari Scriverete per questo esame un programma che permetta all utente di eseguire alcune semplici manipolazioni di un polinomio (*) c 0 + c 1 X + c 2 X 2 + + c n X n, c n 0, a coefficienti c i C nel campo dei numeri complessi. Il grado del polinomio (*) è il numero intero non negativo n. Stabiliamo per convenzione che il grado del polinomio nullo (il polinomio, cioè, avente coefficienti tutti nulli) è pari a 1. Il polinomio su cui il programma lavora è inserito dall utente. L utente interagisce col programma tramite un menu. Rappresenterete i numeri complessi tramite un appropriata struttura i cui campi rappresentino la parte intera e la parte reale del numero complesso, ciascuna di tipo double. Rappresenterete poi il polinomio (*) tramite un array di numeri complessi, il cui elemento i-esimo contiene il coefficiente del monomio di grado i del polinomio. L array sarà dimensionato una volta per tutte nella procedura main del programma. (Si noti quindi che l array è locale alla procedura main, e non è invece una variabile globale.) Il numero dei suoi elementi è una costante intera MAXEL il cui valore, ai fini dell esame, potete assumere pari a 10. (Potete per esempio definire la costante MAXEL tramite una direttiva #define.) Con questa convenzione, i polinomi rappresentabili hanno grado massimo pari a MAXEL-1. Esercizio 1 Memorizzazione, lettura e visualizzazione di numeri complessi. Punti: 6. Dichiarate una struttura dati atta a memorizzare numeri complessi, rappresentati per mezzo di due double: la parte reale e quella immaginaria. Usate la parola chiave typedef per rinominare il tipo della struttura come complex. Scrivete poi le tre funzioni: int zeron(complex c) void readn(...) void shown(...) Tutte e tre le funzioni accettano un solo parametro in ingresso, di cui dovrete stabilire il tipo laddove non già indicato. La prima funzione restituisce 0 se il valore complesso c in argomento è nullo, e 1 altrimenti. La seconda funzione legge dalla console un numero complesso e lo memorizza nella struttura passata in argomento, chiedendo all utente di inserire prima la parte reale, e poi quella immaginaria. Per la lettura dei singoli double, usate scanf. La terza funzione visualizza il numero complesso nella forma a + bi, con a parte reale e b parte immaginaria. Cercate di scrivere la funzione in modo che la visualizzazione sia curata, nei limiti di quanto vi è possibile. Ecco alcuni suggerimenti. (I suggerimenti non sono vincolanti.) (1) Se il numero è nullo, la funzione visualizza 0, e non per esempio 0 + 0i o 0i. (2) Se il numero è reale, la funzione visualizza a, e non per esempio a + 0i. (3) Se il numero ha parte reale nulla, la funzione visualizza bi, e non per esempio 0 + bi. (4) Se b < 0, la funzione visualizza a b i, e non per esempio a + b i.

PROGRAMMAZIONE 1 APPELLO SCRITTO DEL 14.IX.2015 3 Figura 1. Esempio di esecuzione (Esercizio 2). Prima di proseguire, scrivete una procedura main minimale per testare la vostra implementazione. Esercizio 2 Memorizzazione, lettura e visualizzazione di polinomi. Punti: 8. Scrivete una procedura main che presenti all utente il seguente menu. 1. Inserisci nuovo polinomio. 2. Visualizza polinomio corrente. 3. Esci. Se l utente sceglie 3, il programma termina. Se l utente sceglie 2 ma non ha ancora inserito alcun polinomio, il programma informa l utente con un messaggio d errore appropriato, e torna al menu. Se invece l utente sceglie 2 e ha già inserito un polinomio, il programma visualizza il polinomio corrente e torna al menu. Se l utente sceglie 1, il programma dà all utente la possibilità di inserire un nuovo polinomio, che diventa quello corrente, e torna al menu. L eventuale polinomio precedente va perduto. La lettura del polinomio avviene acquisendo prima dall utente il grado n del polinomio da inserire (usate scanf), forzando il reinserimento fino a quando l intero inserito non soddisfi n 1. Acquisito il grado, il main invoca una funzione ausiliaria per leggere i coefficienti del polinomio, come dettagliato qui di seguito.

4 V. MARRA Figura 2. Esempio di esecuzione (Esercizio 2). Per memorizzare il polinomio corrente il programma utilizza un array i cui elementi hanno tipo complex, di dimensione MAXEL. L i-esimo elemento dell array è il coefficiente del monomio di grado i. Per implementare la procedura main appena descritta, scrivete due funzioni ausiliarie, come segue. La funzione void readp(complex *c, int n) acquisisce dall utente un polinomio di grado n>=-1, e lo memorizza nell array c passato in ingresso. Se n==-1, gli elementi dell array sono posti tutti a zero. Altrimenti, la funzione chiede all utente di inserire i coefficienti dei monomi fino al grado massimo, uno alla volta. La funzione controlla pure che il coefficiente del monomio di grado massimo n non sia nullo: se lo è, forza il reinserimento fin quando la condizione è soddisfatta. La funzione void showp(complex* c, int n) visualizza il polinomio c di grado n passato in ingresso. Cercate di scrivere la funzione in modo che la visualizzazione sia curata, nei limiti di quanto vi è possibile. Si vedano le Fig. 1 e 2 per due esempi di esecuzione di una possibile risoluzione, dai quali potrete anche trarre qualche suggerimento per implementare la funzione di visualizzazione showp.

PROGRAMMAZIONE 1 APPELLO SCRITTO DEL 14.IX.2015 5 Figura 3. Esempio di esecuzione (Esercizio 2). Due semplici test. Punti: 7. Esercizio 3 Aggiungete due voci al menu della procedura main. Il menu dovrà adesso essere: 1. Inserisci nuovo polinomio. 2. Visualizza polinomio corrente. 3. E' un monomio? 4. E' reale? 5. Esci. Se l utente sceglie 3 o 4 ma non ha ancora inserito alcun polinomio, il programma informa l utente con un messaggio d errore appropriato, e torna al menu. Se invece l utente sceglie 3 e ha già inserito un polinomio, il programma verifica se il polinomio corrente è un monomio, e informa l utente del risultato. Se l utente sceglie 4 e ha già inserito un polinomio, il programma verifica se il polinomio corrente è reale

6 V. MARRA (ossia, ha tutti i coefficienti reali), e informa l utente del risultato. Il polinomio nullo, di grado 1, è da considerarsi un monomio reale. Implementate le seguenti funzioni ausiliarie. int monomio(complex*, int n) restituisce 1 se il polinomio è un monomio, e 0 altrimenti. int realen(complex c) restituisce 1 se l argomento è reale, e 0 altrimenti. int realep(complex*, int n) restituisce 1 se il polinomio e reale, 0 altrimenti. Derivazione. Punti: 9. Esercizio 4 Aggiungete un ultima voce al menu della procedura main. Il menu dovrà adesso essere 1. Inserisci nuovo polinomio. 2. Visualizza polinomio corrente. 3. E' un monomio? 4. E' reale? 5. Deriva. 6. Esci. Se l utente sceglie 5 ma non ha ancora inserito alcun polinomio, il programma informa l utente con un messaggio d errore appropriato, e torna al menu. Se invece l utente sceglie 5 e ha già inserito un polinomio, il programma sostituisce il polinomio corrente di grado n con la sua derivata, ossia col polinomio di grado n 1: c 1 + (2c 2 )X + + (nc n )X n 1. Il polinomio nullo, di grado 1, è da considerarsi la derivata di se stesso. Qualunque polinomio di grado 0 (ossia, qualunque polinomio costante) ha come derivata il polinomio nullo. Scrivete la funzione ausiliaria per implementare la derivata. void deriva(complex*, int *n)

PROGRAMMAZIONE 1 APPELLO SCRITTO DEL 14.IX.2015 7 Istruzioni per la consegna Funzioni da consegnare (in un unico file sorgente). main() zeron() readn() shown() readp() showp() monomio() realen deriva Sito per la consegna: Tutte le eventuali altre funzioni ausiliarie che abbiate scritto. https://upload.mat.unimi.it Autenticarsi con le proprie credenziali di posta elettronica d ateneo. Consegnare solo il codice sorgente (file *.c), non l eseguibile. (V. Marra) Dipartimento di Matematica Federigo Enriques, Università degli Studi di Milano, via Cesare Saldini, 50, I-20133 Milano E-mail address: vincenzo.marra@unimi.it