Esercizio sintesi (1) Esercizio sintesi (1)

Documenti analoghi
Ricerca binaria ricorsiva!

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche. ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) P = {

Esercizio 1. Esercizio - 1

Lab 9 Strutture e programmi su più file

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

Esercizio 1. Esercizio - 1

Lab 13 Strutture e programmi su più file

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1

Lab 13 Strutture e programmi su più file "

Lab 9 Strutture e programmi su più file

Lab 09 Strutture e programmi su più file

Esercizio 1 - Soluzione

Fondamenti di Informatica T-1 a.a. 2009/2010

Fondamenti di Informatica T-1. a.a. 2009/2010

Lab 12 Stringhe e strutture

Lab 12 Stringhe e strutture

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

ESERCIZIO 1 ESERCIZIO 2

Lab 12 Stringhe e strutture"

Lab 08 Stringhe e strutture

Il compito del 11 novembre 2004

Lab 08 Stringhe e strutture

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1 Esercitazione 1. Grammatiche Complemento a 2 Analisi Record di attivazione

Esercizi di Preparazione alla Prima Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) ESERCIZI DI ANALISI

Lab 16 Gestione file binari"

Obiettivi di questa esercitazione

Esercizio 1. Esercizio 1

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2

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

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

Esercizio 1. Esercizio 1 - Soluzione

Fondamenti di Informatica T-1 Modulo 2

Lab 11 Gestione file binari

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

Lab 16 Gestione file binari

- matrici - stringhe - file (lettura/scrittura, di testo/binari) - strutture, puntatori - allocazione dinamica della memoria (malloc)

ESERCIZIO 1 (stringhe)

Fondamenti di Informatica T-1

Primo Blocco di Esercizi di Preparazione alla Prova Scritta Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista) ESERCIZI DI ANALISI

Lab 09 Gestione file di testo

Opinione calcolamedia( ) Opinione inverti( )

1. realizzare una funzione int estraimulte(file *fmutui, FILE *fpagamenti, Mutuo *dest, int dim)

Fondamenti di Informatica T-1 Modulo 2

Esercizio 1 - Soluzione

Lab 10 Passaggio per riferimento

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 12 Dicembre 2008 Compito A

Lab 16 Gestione file binari"

Esercizio 1. Esercizio 1 Soluzione

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 1A di Giovedì 14 Gennaio 2016 tempo a disposizione 2h

1. Realizzare una funzione: int trovaritardatari(file *fprestiti, FILE *frate, Prestito *dest, int dim)

Lab 12 Allocazione dinamica della memoria

Esercizio 1 Domanda di teoria (13 punti)

Esercizio 1: funzione con valore di ritorno di tipo puntatore

PROVA PRATICA DI FONDAMENTI DI INFORMATICA L-A Prof. MICHELA MILANO 25 NOVEMBRE 2004 COMPITO A

STRUCT - ESERCIZIO 1

Fondamenti di Informatica T1. Lab 04 Array. Lab06 1

/* Esempio di contenuto del file di testo: */ PaoloBellavista marzo.dat PaolaMello aprile.dat FedericoChesani marzo.dat CarloGiannelli marzo.

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 3A di Venerdì 12 Febbraio 2016 tempo a disposizione 2h

Lab 04 Istruzioni, cicli e array"

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A

Esercizio 1 - Soluzione (array)

Es. 1. interi, li stampi a video ponendo prima i numeri pari e poi i numeri dispari. Es. 1. int readlength(file *f, int *even, int *odd)

Lab 7 Passaggio per riferimento

ESERCIZIO: SHIFT ARRAY (1)

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

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

1. Realizzare una funzione int trovaevasori(file * fcatasto, FILE * ftasse, Lotto * dest, int dim)

Esercizio 1 Soluzione

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 3A di Mercoledì 16 Febbraio 2011 tempo a disposizione 2h

ESERCIZIO allochi staticamente un vettore V1 di 10 float e allochi dinamicamente un vettore V2 di 10 double;

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

ALGHERO 5 16 VARIABILE ANCONA 7 9 NUVOLOSO AOSTA 0 4 NEVE BARI VARIABILE BOLOGNA 7 9 PIOGGIA...

Lab 17 Allocazione dinamica della memoria

Fondamenti di Informatica T 1, 2009/2010 Modulo 2 Prova d Esame 3a di Giovedì 11 Febbraio 2010 tempo a disposizione 2h30'

Programmazione I (Classe 1)

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 1A di Giovedì 9 Gennaio 2014 tempo a disposizione 2h

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

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1B di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

SIMULAZIONE Fondamenti di Informatica T-1 Prova di Laboratorio - 14 Dicembre 2009 Compito B

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 2A di Giovedì 26 Gennaio 2017 tempo a disposizione 2h

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

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

Transcript:

Esercizio sintesi (1) Una compagnia di autobus che effettua servizio su lunghe distanze vuole realizzare un programma di controllo delle prenotazioni dei posti. A tal scopo rappresenta ogni prenotazione tramite una struttura booking contenente nome del cliente (al massimo 1023 caratteri, senza spazi) e numero del posto prenotato (un intero). Le prenotazioni effettuate vengono registrate tramite un array (di dimensione prefissata DIM) di strutture booking, di dimensione logica iniziale pari a 0. Esercizio sintesi (1) a) Si realizzi una funzione: int assegna( booking list[], int * lengthlist, char * name, int pref) La funzione riceve in ingresso l array di prenotazioni e la sua dimensione logica, e poi il nome del cliente ed il posto da lui indicato. La funzione deve controllare che il posto indicato non sia già stato assegnato, ed in caso contrario deve restituire il valore 1.

Esercizio sintesi (1) Qualora invece il posto sia ancora libero, la funzione deve assegnare tale posto al cliente copiando i dati della prenotazione nell ultima posizione libera nell array, e deve provvedere ad aggiornare correttamente la dimensione logica dell array. In questo secondo caso la funzione deve invece restituire come valore uno 0, indicante il successo nella prenotazione. Al fine di copiare il nome del cliente, si utilizzi la funzine di libreria char * strcpy(char * s, char * ct) che copia ct in s (terminatore compreso). Esercizio sintesi (1) b) Si realizzi un programma main che chieda all operatore il nome di un utente, e di seguito il posto prescelto. Il programma deve cercare di registrare la prenotazione tramite la funzione assegna; qualora l operazione di prenotazione fallisca (perché il posto risulta essere già assegnato), il programma provveda a chiedere all operatore un nuovo posto, finché non si riesca ad effettuare la prenotazione.

Esercizio sintesi (1) Qualora l operatore inserisca il nome fine, il programma deve terminare; qualora invece venga inserita la stringa stampa, il programma deve stampare a video le prenotazioni già effettuate. A tal scopo si usi la funzione di libreria: int strcmp(char * ct, char * cs) che restituisce 0 se e solo se le due stringhe sono identiche (lessicograficamente). Esercizio sintesi (1) #include <stdio.h> #include <string.h> #define MAX 1024 #define DIM 10 typedef struct { char name[max]; int seat; booking;...

Esercizio sintesi (1) int assegna( booking list[], int * lengthlist, char * name, int pref) { int i=0; int trovato = 0; while (( i < *lengthlist) &&!trovato) { if (list[i].seat == pref) trovato = 1; i++;... Esercizio sintesi (1)... if (!trovato) { list[*lengthlist].seat = pref; strcpy(list[*lengthlist].name, name); (*lengthlist)++; return 0; else return 1;

Esercizio sintesi (1) int stampabooking(booking list[], int lengthlist) { int i=0; for (i=0; i<lengthlist; i++) printf("%s: %d\n", list[i].name, list[i].seat); return 0; Esercizio sintesi (1) int main() { booking list[dim]; int alengthlist = 0; char nome[max]; int seat = 0;... printf("inserire Nome Passeggero: "); scanf("%s", nome);

Esercizio sintesi (1) while (strcmp(nome, "fine")) { if (strcmp(nome, "stampa")) { printf("posto preferito: "); scanf("%d%*c", &seat); while(assegna(list, &alengthlist, nome, seat)) { printf("spiacenti ma il posto scelto e' gia' occupato.\n"); printf("per favore specificare un altro posto: "); scanf("%d%*c", &seat); else stampabooking(list, alengthlist); Esercizio sintesi (1)... printf("inserire Nome Passeggero: "); scanf("%s", nome); return 0;

Esercizio sintesi (2) Si vuole implementare un programma per il calcolo dell inflazione su determinati prodotti commerciali. A tal scopo ogni prodotto è rappresentato tramite una struttura item, definita da una stringa name con il nome del prodotto, e da due float old_price e new_price rappresentanti i prezzi. Esercizio sintesi (2) a) Si scriva una funzione lettura() che riceva come parametri di ingresso un vettore prezzi di strutture item, la dimensione fisica max del vettore prezzi, e un puntatore a intero num che rappresenta la dimensione logica del vettore. La funzione deve leggere da standard input il nome del prodotto ed i due prezzi, e deve copiare tale informazione nella prima posizione libera nel vettore prezzi.

Esercizio sintesi (2) La funzione deve terminare se l utente inserisce come nome del prodotto il termine fine, oppure se viene raggiunta la dimensione fisica del vettore. La dimensione logica del vettore prezzi così riempito deve essere restituita tramite il parametro num (passato appunto per riferimento). Al termine della lettura dei dati la funzione deve restituire il valore 0. Esercizio sintesi (2) b) Si scriva un programma main che, dopo aver definito un vettore di strutture item (di dimensione massima MAX_ITEM), invochi la funzione lettura() per riempire tale vettore. Il programma stampi poi a video nome e tasso d inflazione per ogni prodotto, utilizzando la formula: infl i new_ price = old _ pricei i 1 *100

Esercizio sintesi (2) #include <stdio.h> #include <string.h> #define DIM 21 #define MAX_ITEM 100 typedef struct { char name[dim]; float old_price; float new_price; item;... Esercizio sintesi (2) int lettura (item prezzi[], int max, int * num) { char name[dim]; *num = 0; printf("inserire nome prodotto: "); scanf("%s", name); while ((strcmp(name, "fine")) && (*num < max)) { strcpy(prezzi[*num].name, name); printf("inserire old price: "); scanf("%f", &prezzi[*num].old_price); printf("inserire new price: "); scanf("%f%*c", &prezzi[*num].new_price); (*num)++; printf("inserire nome prodotto: "); scanf("%s", name); return 0;

int main() { item V[MAX_ITEM]; int num, i, result; float infl; Esercizio sintesi (2) result = lettura(v, MAX_ITEM, &num); if (result!=0) { printf("problemi durante la lettura...\n"); exit(-1);... for (i=0; i < num; i++) { infl = (V[i].new_price/V[i].old_price -1)*100; printf("inflazione del prodotto %s: %6.2f%%\n", V[i].name, infl); return 0; Esercizio sintesi (3) Scrivere una funzione ricorsiva: int ric(int x) che calcoli, ricorsivamente, la somma di tutti i numeri compresi tra 0 ed x. int ric(int x) { if (x == 0) return 0; else return x + ric(x-1);

Esercizio sintesi (4) Scrivere una procedura ricorsiva: void print(int list[], int length) che stampi, ricorsivamente, tutti i numeri contenuti nell array list. void print (int list[], int length) { if (length == 0) return; else { printf("%d\n", * list); print(++list, --length); Esercizio sintesi (4bis) Scrivere una procedura ricorsiva: void print(int list[], int length) che stampi, ricorsivamente, tutti i numeri contenuti nell array list. void print (int list[], int length) { if (length == 0) return; else { print(list, length-1); printf("%d\n", list[length-1]);

Esercizio sintesi (5) Scrivere una procedura ricorsiva: void printchar(char stringa[]) che stampi, ricorsivamente, tutti i caratteri contenuti in stringa, un carattere per linea, assumendo che stringa sia ben formata. void printchar (char stringa[]) { if (*stringa == '\0') return; else { printf("%c\n", * stringa); printchar(stringa+1); Esercizio sintesi (6) Scrivere una procedura ricorsiva che, ricevuto in ingresso un array di interi, esegua la somma degli interi in posizione con indice dispari. int sumodd2(int list[], int length, int pos) { if (pos >=length) return 0; else return list[pos] + sumodd2(list, length, pos+2); int sumodd(int list[], int length) { return sumodd2(list, length, 1);

Esercizio sintesi (7) Si scrivano le versioni ricorsiva ed iterativa (utilizzo di while) di una funzione: double f(double a, int n); che calcoli il seguente valore: n i= 1 a i a Esercizio sintesi (7) double f(double a, int n) { if (n==1) return a 1/a; else return a n/a + f(a, n-1); double f(double a, int n) { int i=1; double sum=0; while(i<=n) {sum = sum + a i/a; i++; return sum;

void F(int v[], int pos) { int N=4; Esercizio analisi (8) N--; *(v+pos+1) = *(v+pos+1) + *(v+pos); return; int main () { int N=4, v[5], i; { ++N; for (i=0; i<n; i++) v[i]=2*i+1; for (i=0; i<n-1; i++) if (v[i]) F(v, i); printf("adesso N vale: %d\n", N); for (i=1; i++ < (i?n:0); ) printf("%d\n", v[i-1]); return 0; Esercizio analisi (9) #include <stdio.h> #include <stdlib.h> #define DIM 9 int Funz(char y[], int *N, int *M) { int i; (*N)++; for (i=(*n)-1; i<*n; i++) y[i] = y[*m]; return *N; int main () { char s[] = "Paperone"; char ss[dim]; int i=3, N = 2; N = (++N)-2; N = Funz(s, &N, &i); printf("n vale adesso: %d\n",n); { for (i=0; i<dim; ++i) { *(ss+i) = s[i]; printf("%c", *(ss+i)); return 0;