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

Documenti analoghi
Esercizio 1: calcolo insieme intersezione

Esercizio 1 File: ordinamento di un archivio di studenti (file binario)

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:

Esercizio 1: parole nel testo

Esercizio 1: Puntatori impiegati che sono manager

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

Informatica 1. Prova di recupero 21 Settembre 2001

STRUCT - ESERCIZIO 1

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

PROVA SCRITTA DI FONDAMENTI DI INFORMATICA L A 4 DICEMBRE 2003 Prof. Michela Milano COMPITO A

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

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

ESERCIZIO: SHIFT ARRAY (1)

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

Fondamenti di Informatica

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Esercitazione 7. Soluzione:

Esercizi. La funzione swapint() primo tentativo

Corso di Laurea in Matematica. LABORATORIO DI INFORMATICA Compito Totale - 21 Marzo Soluzione degli Esercizi

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

Astrazione sui Dati Vettori di variabili

Esercitazione 6. Array

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

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

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Esercizio 1 Conta degli elementi distinti (file esercizio1.c e leggi.h/leggi.c - 15 punti)

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

Strutture di Controllo Iterative: Istruzioni While e Do

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

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

Esercizio 1 Soluzione

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

1 (4) 2 (4) 3 (12) 4 (6) 5 (6)

Introduzione al C. Lez. 2. Funzioni e Puntatori

Esercizio 1. (trasformazioni tra matrici) Pseudocodice

Esercitazione 11. Liste semplici

Informatica (A-K) 5. Algoritmi e pseudocodifica

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 26 Novembre 2014 COGNOME E NOME RIGA COLONNA MATRICOLA

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Introduzione al C. Lez. 2 Funzioni e Puntatori

Fondamenti di informatica 1 - A.A. 2000/ 01 Prof. V. de Nitto Personè. Esercizi ("OK" indica la risposta corretta)

INFORMATICA 2010/11 - CdL in FISICA TERZO APPELLO 8/09/2011: SOLUZIONI PROPOSTE

Tutorato Elementi di Informatica 2018

Scrittura formattata - printf

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

- Dispensa IV - PROGRAMMAZIONE C (Parte II)

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

Laboratorio n 6 del Ing. Dario Cogliati

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

Manualistica 3 Le strutture di controllo

FUNZIONI che operano su LISTE e TEMI d ESAME

Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione.

Esercizio 1. float m; //media dei voti int vett_voti[max]; //array che contiene i voti di uno studente

Fondamenti di Informatica L-A

Che risultato si ottiene al termine dell esecuzione del seguente frammento di codice?

Programmazione di base

Le strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?

Politecnico di Milano - Dipartimento di Elettronica e informazione Prof. Mauro Negri

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

Algoritmi di Ricerca. Esempi di programmi Java

Cominciamo con un esempio... Utilizzando un sottoprogramma 16/12/2017

Politecnico di Milano - Facoltà di Ingegneria INFORMATICA A - Corso per allievi GESTIONALI - Prof. C. SILVANO A. A. 2003/ novembre 2003

Strutture di Controllo Iterative: Istruzione FOR

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Programmazione di base

Opinione calcolamedia( ) Opinione inverti( )

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

Matricola Nome Cognome Aula Fila (dalla cattedra) Posto (dalla porta)

Corso di Informatica 1 (IN110) Tutorato n. 4

ELEMENTI DI INFORMATICA Corsi di Laurea in Ingegneria Elettronica, Informatica e delle Telecomunicazioni

Programmazione di base

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

I Dati Strutturati ed il Linguaggio C

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

Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008

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

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA

Linguaggio C. Condizioni composte (operatori logici)

Programmazione di base

Informatica B Allievi Meccanici con cognome da Cl a L Recupero della I prova intermedia 26/02/01 Prof. Elisabetta Di Nitto. Cognome Nome Matricola

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

Esercitazione 7. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Esercizio 1 - Soluzione (array)

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

Strutture di Controllo Iterative: Istruzione FOR

Manualistica 3 Le strutture di controllo

Parte 1: tipi primitivi e istruzioni C

Fondamenti di Informatica L-A

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Fondamenti di Programmazione

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

Fondamenti di Programmazione

Iterazione (introduzione)

Transcript:

Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le seguenti dichiarazioni definiscono i tipi che descrivono un insieme numeri con parte intera e parte decimale rappresentati utilizzando la notazione scientifica con mantissa ed esponente: si intende che un numero rappresentato da una struttura di tipo numero abbia valore pari a mantissa * 10 esponente. #define NO_NUMERI 500 typedef struct long int mantissa; int esponente; numero; typedef struct int nsignificativi; numero double lista [NO_NUMERI]; media; archivionumeri; /* lunghezza della parte iniziale dell array lista che effettivamente contiene numeri significativi */ Si assuma che in una struttura di tipo archivionumeri i campi nsignificativi e lista abbiano dei valori definiti (a esempio siano stati letti dall ingresso o calcolati in qualche modo) mentre il valore del campo media sia inizialmente indefinito. Si scriva un frammento di codice, includendo eventuali dichiarazioni di variabili aggiuntive, che assegni al campo media della struttura di tipo archivionumeri il valore della media dei numeri significativi memorizzati nell archivio. A tale scopo si faccia uso della seguente funzione: double potenza (int base, int esponente) che permette di calcolare il valore del numero basepotenza. NB: non è richiesta l implementazione della funzione potenza. archivionumeri arch; int i; double s, d;... s = 0.0; for ( i = 0; i < arch.nsignificativi; i ++ ) d = arch.lista[i].mantissa * potenza (10, arch.lista[i].esponente); s = s + d; arch.media = s / arch.nsignificativi; - 1 -

Esercizio 2: funzione di ricerca binaria /* Ricerca binaria di uno studente universitario per numero di matricola e stampa dei dati associati allo studente trovato. */ Si scriva un programma che: 1. chiede all'utente quanti studenti universitari memorizzare Ogni studente ha un nome, un indirizzo e un numero di matricola. 2. memorizza i vari studenti in un array di studenti. Si suppone che l'utente sia disciplinato e inserisca gli studenti ordinati in modo crescente per numero di matricola. 3. chiede all'utente un numero di matricola per eseguire una ricerca sugli studenti precedentemente memorizzati. La ricerca è una funzione che riceve in ingresso l'array e un numero di matricola. La funzione restituisce la posizione dello studente (l'indice) nell'array. 4. Se lo studente ricercato per matricola esiste, si stampino i dati associati (nome e indirizzo). # define MAX_STUDENTI 5 // dimensione massima dell'array di studenti # define MAX_NUM_CHAR 30 // dimensione massima di una stringa /* dichiarazione del tipo globale String */ typedef char String[MAX_NUM_CHAR]; /* dichiarazione del tipo globale boolean */ typedef enumfalse, true boolean; /* dichiarazione globale del tipo Studente */ typedef struct String nome; String indirizzo; int matricola; Studente; /* dichiarazione del tipo globale ArrayStudenti */ typedef Studente ArrayStudenti[MAX_STUDENTI]; /* funzione che esegue una ricerca binaria fra gli studenti dell'array studenti per numero di matricola matr. Il parametro numstudenti indica il numero di studenti effettivamente memorizzati nell'array. Torna la posizione dello studente all'interno dell'array (l'indice del vettore) oppure -1 per indicare che lo studente - 2 -

*/ con il numero di matricola matr passato in ingresso non è stato trovato. int ricercabinariastudente(arraystudenti studenti, int numstudenti, int matr) int inizio, fine, trovato, posizione; Studente studente; void main() inizio = 0; fine = numstudenti; trovato = false; while (trovato == false && inizio < fine) if (trovato == false) return -1; else return posizione; posizione = (fine + inizio)/2; studente = studenti[posizione]; if (studente.matricola == matr) trovato = true; else if (matr > studente.matricola) // ricerco nella metà superiore dell'array inizio = posizione + 1; else fine = posizione; // ricerco nella metà inferiore dell'array int matricola; int risultatoricerca, i, numstudenti; ArrayStudenti array; printf("quanti studenti vuoi memorizzare nell'array? "); scanf("%d", &numstudenti); for (i=0; i<numstudenti; i++) printf("\nnome studente "); scanf("%s", &(array[i].nome)); printf("\nindirizzo studente "); scanf("%s", &(array[i].indirizzo)); printf("\nmatricola studente "); scanf("%d", &(array[i].matricola)); printf("inserisci un numero di matricola per eseguire la ricerca: "); scanf("%d", &matricola); risultatoricerca = ricercabinariastudente(array, numstudenti, matricola); if (risultatoricerca == -1) printf("studente con numero di matricola %d inesistente", matricola); else printf("\n\nstudente con numero di matricola %d in posizione %d", matricola, risultatoricerca); printf("\nstudente trovato %s %s ", array[risultatoricerca].nome, array[risultatoricerca].indirizzo); / - 3 -

Esercizio 3: funzione incrementa data Date le seguenti dichiarazioni di tipo e la seguente definizione del sottoprogramma bisestile: typedef struct int giorno; int mese; int anno; data; typedef enum falso, vero boolean; /* restituisce il valore vero se l'intero passato come parametro rappresenta un anno bisestile, falso altrimenti */ boolean bisestile (int anno) if((anno % 4 == 0 && anno % 100!= 0) (anno % 400 == 0)) return vero; else return falso; Si sviluppi una funzione che, data una data d passata come parametro, restituisce al chiamante una nuova data ottenuta incrementando d di un giorno. Per esempio, se la data d è 31 (valore del campo giorno) 12 (valore del campo mese) 2004 (valore del campo anno), il sottoprogramma restituisce un valore di tipo data i cui campi giorno, mese ed anno sono pari rispettivamente a: 1 Gennaio 2005. Si chiami il sottoprogramma bisestile per decidere, in base al valore dell anno, se il mese di Febbraio è costituito da 28 o 29 giorni. Si sviluppi un main che acquisisce da tastiera i valori di 10 date, li memorizza in un array di date e, per tutte le date presenti nell array che sono precedenti al 12/11/2005, richiama la funzione incrementa stampando a video il risultato della chiamata. #define MAXDATE 5 // definizione del tipo strutturato data typedef struct int giorno; int mese; int anno; data; // definizione del tipo boolean typedef enum falso, vero boolean; // definizione del tipo ArrayDate typedef data ArrayDate[MAXDATE]; /* funzione che restituisce il valore vero se l'intero passato come parametro rappresenta un anno bisestile, falso altrimenti */ boolean bisestile (int anno) if((anno % 4 == 0 && anno % 100!= 0) (anno % 400 == 0)) return vero; else return falso; // funzione che, fornita in ingresso una data, // fornisce in uscita la data successiva. data incrementa(data d) - 4 -

// SE il mese ha 31 giorni if (d.mese!=2 && d.mese!=4 && d.mese!=6 && d.mese!=9 && d.mese!=11) d.giorno = (d.giorno % 31) + 1; // aggiornamento giorno // SE il mese NON è febbraio => mese ha 30 giorni else if(d.mese!=2) d.giorno = (d.giorno % 30) + 1; // aggiornamento giorno // se il mese è febbraio e l'anno è bisestile else if(bisestile(d.anno) == vero) d.giorno = (d.giorno % 29) + 1; // aggiornamento giorno // altrimenti, se mese è febbraio ma anno NON bisestile else d.giorno = (d.giorno % 28) + 1; // aggiornamento giorno // se il nuovo valore di giorno è 1 if(d.giorno == 1) // aggiornamento mese d.mese = (d.mese % 12) + 1; // aggiornamento anno if(d.mese == 1) d.anno++; return d; // main void main() ArrayDate date; int contatore = 0; /* richiedo l'inserimento di MAXDATE */ for(contatore =0; contatore < MAXDATE; contatore++) printf("inserisci la data %d", contatore+1); printf("\n giorno :"); scanf("%d",&date[contatore].giorno); printf(" mese :"); scanf("%d",&date[contatore].mese); printf(" anno :"); scanf("%d",&date[contatore].anno); /* per ogni data precedente l'12/11/2005 richiamo la funzione incrementa */ for(contatore=0; contatore < MAXDATE; contatore++) if (date[contatore].anno < 2005) date[contatore] = incrementa(date[contatore]); else if(date[contatore].anno == 2005) if (date[contatore].mese < 11) date[contatore] = incrementa(date[contatore]); else if (date[contatore].mese == 11) if(date[contatore].giorno < 12) date[contatore] = incrementa(date[contatore]); /*visualizzo le date modificate */ for(contatore=0; contatore < MAXDATE; contatore++) printf("%d/%d/%d\n",date[contatore].giorno,date[contatore].mese,date[contatore].anno); - 5 -

/* Uso del ciclo DO WHILE Esercizio 4: uso do-while Si sviluppi un programma che acquisisce da tastiera 9 cifre binarie e converte il numero corrispondente, considerato come numero naturale, in base 10. */ /* SENZA DO WHILE */ #include <math.h> #define DIM 9 void main() int cifra, i, ris; ris = 0; for(i=0; i<dim; i++) /*TRASFORMAZIONE IN DO WHILE */ #include <math.h> #define DIM 9 void main() int cifra, i, ris; ris = 0; for(i=0; i<dim; i++) scanf("%d", &cifra); while(cifra!=0 && cifra!=1) scanf("%d", &cifra); ris = ris + cifra*pow(2, DIM-1-i); printf ("Il valore trovato e`: %d", ris); do scanf("%d", &cifra); while(cifra!=0 && cifra!=1); ris = ris + cifra*pow(2, DIM-1-i); printf ("Il valore trovato e`: %d", ris); Esercizio 5 Con riferimento al seguente frammento di codice tradurre in una frase del linguaggio italiano la condizione che governa l istruzione if, esprimendola come proprietà aritmetica del valore correntemente assegnato alla variabile i. int i; for ( i = 10; i < 30; i++ ) if ( ( i >= 18 ) && ( i < 24 ) ( i % 2 == 0) ) printf ( %d \n, i); R. Il valore della variabile i è compreso tra 18 incluso e 24 escluso oppure tale valore è pari Quali numeri vengono stampati quando il codice viene eseguito? R. 10, 12, 14, 16, 18, 19, 20, 21, 22, 23, 24, 26, 28. Si sviluppi la funzione che calcoli il fattoriale di un Numero. Si sviluppi un main che utilizza tale funzione per Esercizio 6: funzione fattoriale - 6 -

Calcolare il fattoriale di dieci valori acquisiti da tastiera // funzione fattoriale int fattoriale(int n) int ris; if(n<0) return -1; ris = 1; while(n>0) ris = ris * n; n = n-1; return ris; // main che richiama la funzione void main() int val; int f; int cont; for(cont = 0; cont < 10; cont++) scanf("%d", &val); // chiamata alla funzione f = fattoriale(val); printf("%d! = %d\n", val, f); - 7 -