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

Documenti analoghi
Esercitazione 6. Array

Informatica 1. Prova di recupero 21 Settembre 2001

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

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

Esercitazione 11. Liste semplici

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

Esercizi. La funzione swapint() primo tentativo

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

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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

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

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Esercizi. Stringhe. Stringhe Ricerca binaria

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

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Il linguaggio C. Notate che...

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

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 21 Luglio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

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

C: panoramica. Violetta Lonati

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Lezione 8 Struct e qsort

Capitolo 10 - Strutture

Esercitazione 12. Esercizi di Ricapitolazione

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef char Griglia [3][3];

int ninv; /* numero di inventario */

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Appello di Informatica B

Esercizi C sui tipi definiti dall utente

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste

Il linguaggio C. Puntatori e dintorni

Laboratorio di Algoritmi e Strutture Dati

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

Si vuole realizzare un programma in grado di verificare se una griglia assegnata rispetta le regole del gioco.

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Esercitazione 8. Array multidimensionali

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

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

Operazioni su file di caratteri

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

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Caratteri e stringhe

Dati aggregati. Violetta Lonati

Stringhe e allocazione dinamica della memoria

Scrittura formattata - printf

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

Esercizio 1: calcolo insieme intersezione

Introduzione al linguaggio C Puntatori

IEIM Esercitazione XI Ricorsione e Ripasso. Alessandro A. Nacci -

ALGORITMI E STRUTTURE DATI

Esercizi C su array e matrici

Perché il linguaggio C?

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

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

in più stringhe,... ADT un tipo è caratterizzato dalle operazioni consentite su di esso: un numero è qualcosa che si può moltiplicare, sommare,...

Liste a puntatori: un esercizio passo passo

Esercizio 1: Puntatori impiegati che sono manager

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

Esercizio 1. Esercizio - 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.

Programmazione ad oggetti

ESERCIZIO: Lettura/Scrittura Array

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

Linguaggio C: PUNTATORI

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Calcolare x n = x x x (n volte)

(*lista == NULL (*lista)->info >= elem) accede al campo next di *lista solo se *lista non e' NULL. */ #include <stdio.h> #include <stdlib.

Fondamenti di Informatica II

File e puntatori a file

Struct, enum, Puntatori e Array dinamici

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

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

$QDOLVLGHOSURJUDPPDTXDGUDWR

La struttura dati CODA

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Metodi statici. Dichiarazione e chiamata di metodi statici

Lezione 6 Selection/Insertion Sort su interi e stringhe

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Funzionalità. Il preprocessore C. Inclusione di file. Inclusione di file

Tutorato Programmazione 1 Modulo 2

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Esercizio 1. Tavola ordinata in memoria centrale

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

Programmazione I - Laboratorio

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Algoritmi di Ricerca. Esempi di programmi Java

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

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)

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Stringhe e tipi di dati strutturati

Transcript:

Appello 12.09.2007-1- punti 15 (4+6+5) a) ctunes è un programma per la gestione di archivi musicali; serve per raccogliere informazioni riguardanti tutti i file musicali presenti su un computer e per creare playlist in base alle preferenze degli utenti. Di ogni brano musicale si vogliono memorizzare titolo, album, artista, durata, genere e tipo di file. Titolo, album e artista sono stringhe di massimo 255 caratteri. La durata è espressa in millisecondi. I generi musicali sono solo rock, classical e jazz. Il tipo di file può essere uno tra mp3, aac, wma, wav. - Definire i tipi di dato TipoGenere e TipoFile. - Definire il tipo di dato TipoBrano, utilizzando anche i due tipi definiti sopra. #define STR_LEN 256 #define MAX_BRANI 100 typedef enum {rock, classical, jazz TipoGenere; typedef enum {mp3, aac, wma, wav TipoFile; typedef struct { char titolo[str_len]; char album[str_len]; char artista[str_len]; TipoGenere genere; TipoFile file; long int durata; TipoBrano; b) Siano date le seguenti variabili globali: - TipoBrano archivio[100]; //lista dei brani - int nbrani = 0; //numero di brani presenti in archivio Si implementi la funzione creaplaylist, il cui prototipo è il seguente: int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t); La funzione inserisce nell array playlist i primi n brani di genere g e tipo t trovati in archivio. In caso non ci siano sufficienti brani di genere dato, la playlist viene riempita con brani di altro genere. Invece, se non esistono abbastanza brani di tipo t, la procedura termina. Il valore intero restituito dalla funzione equivale al numero di brani effettivamente inseriti in playlist (quindi di solito vale n, se ci sono almeno n file del tipo voluto in archivio). Si supponga che playlist sia un array già inizializzato con almeno n celle e che n < nbrani (quindi, in altri termini, queste condizioni non devono essere controllate).

int creaplaylist(tipobrano playlist[], int n, TipoGenere g, TipoFile t) { int i = 0; /*indice della playlist (incrementato ogni volta che aggiungiamo un brano)*/ int j = 0; /*indice di scorrimento nell'archivio (incrementato ogni volta che analizziamo un brano)*/ TipoBrano brano; //brano sotto osservazione //cerchiamo brani di genere e tipofile dato: while (i < n && j < nbrani) { brano = archivio[j]; if (brano.genere == g && brano.file == t) { //abbiamo un brano playlist[i++] = brano; //che ci piace! j++; //analizziamo il prossimo if (i < n) { //siamo usciti dal ciclo ma non abbiamo riempito la //playlist: non ci sono abbastanza brani di genere g //e tipo t in archivio j = 0; while (i < n && j < nbrani) { brano = archivio[j]; //cerchiamo brani di tipo t ma di genere diverso da g //(altrimenti, inseriremmo due volte gli stessi brani if (brano.genere!= g && brano.file == t) { //abbiamo un brano che ci //piace "abbastanza" playlist[i++] = brano; j++; /* Siamo usciti dal ciclo: o abbiamo inserito n brani, o abbiam analizzato due volte tutto l'archivio. In entrambi i casi, abbiamo finite. */ return i; c) Si implementi la procedura di prototipo void inseriscibrano(tipobrano b); La procedura inserisce il brano b nell archivio (si noti che il brano è già stato creato all esterno della procedura), solo dopo aver controllato che non ne sia presente una sua copia. Due brani sono uguali se tutti i loro campi corrispondenti sono uguali. Per il confronto tra stringhe (titolo, album, artista) si utilizzi la funzione di libreria strcmp(char s1[ ], char s2[ ]), che restituisce 0 se due stringhe sono uguali tra loro. Si faccia attenzione a non eccedere la capacità massima dell archivio.

void inseriscibrano (TipoBrano b) { int i; TipoBrano b1; if (nbrani >= MAX_BRANI) return; for (i = 0; i < nbrani; i++) { b1 = archivio[i]; if (b.genere == b1.genere && b.file == b1.file) /* && tutti gli altri campi */ return; //se arriviamo qui abbiamo spazio e non ci sono duplicati archivio[nbrani] = b; nbrani++; Effettuare il tracing delle variabili per il seguente programma C. Indicare il contenuto delle variabili al termine dell esecuzione del programma #include <stdio.h> int main(){ int x, y, i; x=1; y=3; printf("i x y\n"); for(i=3;i<7;i++){ if (i%2==0) x=x+ ++y +i; if (i%3==0) y=x-1; else y=y-1; printf("%d %d %d\n", i, x,y); Output delle printf: i x y 3 1 0 4 6 0 5 6-1

6 12 11 Appello 28.06.2010-3- punti 3 Si deve realizzare un programma che consenta di giocare al gioco del 15. Il gioco è un rompicapo classico inventato da Samuel Loyd nel 1878. Il gioco consiste di una tabellina di forma quadrata divisa in quattro righe e quattro colonne (quindi 16 posizioni), su cui sono posizionate 15 tessere quadrate, numerate progressivamente a partire da 1. Le tessere possono scorrere in orizzontale o verticale, ma il loro spostamento è ovviamente limitato dall'esistenza di un singolo spazio vuoto. Lo scopo del gioco è riordinare le tessere dopo averle "mescolate" in modo casuale (la posizione da raggiungere è quella con il numero 1 in alto a sinistra e gli altri numeri a seguire da sinistra a destra e dall'alto in basso, fino al 15 seguito dalla casella vuota). La figura sottostante riporta il gioco del quindici risolto. Definire le strutture dati necessarie per scrivere il programma. #define Size 4 typedef int gioco15[size][size]; gioco15 f; -4- punti 2 In base alle strutture dati definite al punto precedente si definisca il prototipo di una funzione int gioco15risolto(...) che deve fornire 1 se il gioco del 15 è stato risolto e 0 altrimenti. int gioco15risolto(gioco15 g);

-5- punti 4 Si fornisca l implementazione della funzione definita al punto precedente. int gioco15risolto(gioco15 g){ int cont=1; for( int i=0; i<size; i++) for(int j=0; j<size; j++) if(g[i][j]==cont) cont++; else { if (cont==16) return 1 //sono arrivato sulla cella //vuota else return 0; // esiste un element fuori sequenza