ESERCIZIO 1. Si considerino le seguenti definizioni:

Documenti analoghi
a.a Codice corso: 21012

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)

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

Strutture Dati Dinamiche

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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

Fondamenti di Informatica T-1 Modulo 2. Obiettivo di questa esercitazione. Files Allocazione dinamica della memoria

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

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

Uso avanzato dei puntatori Allocazione dinamica della memoria

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

STRINGHE: ARRAY DI CARATTERI! a p e \0

Lezione 8 Struct e qsort

Esercitazione 12. Esercizi di Ricapitolazione

Il linguaggio C. Puntatori e dintorni

Esercizi. Stringhe. Stringhe Ricerca binaria

Caratteri e stringhe

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Fondamenti di Informatica T-1 Modulo 2

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

Passare argomenti al programma

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Lezione 9 Esercizi d esame

s r t i r n i g n. g h s r t c r p c y s r t c r a c t s r t c r m c p s r t c r h c r s r t s r t s r

char* titolo= Libreria sulle stringhe Esempi: (strcpy) (strstr)... Laboratorio di Informatica L-A 1

LABORATORIO di INFORMATICA

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

ARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C

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

a.a Codice corso: 21012, 22010

Esempio di Prova Scritta

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

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

string.h strcpy strc strcat strcmp strcmp strchr strstr strstr i t r ; s r \0 int strlen(char* str) char pippo[]={ p, i, p, p, o, \0 \ };

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Input/Output di numeri

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

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti

Fondamenti di Informatica T-1

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

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 17/2/2009

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

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

1. Esercizio tipo per prova pratica

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

Allocazione dinamica della memoria

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

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

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Programmazione I - Laboratorio

Dati aggregati. Violetta Lonati

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

Scrittura formattata - printf

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Corso di Fondamenti di Informatica

Esercizio 1. Esercizio 2

Linguaggi di programmazione + laboratorio a.a. 2012/2013

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

Esercizio 1 (15 punti)

CALCOLATRICI, APPUNTI, LIBRI E QUADERNI,

Laboratorio di Programmazione Laurea in Bioinformatica

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

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

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

Problema. Vettori e matrici. Vettori. Vettori

L Allocazione Dinamica della Memoria

Lab 10 Passaggio per riferimento

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

Allocazione dinamica

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Stringhe e allocazione dinamica della memoria

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Laboratorio di Programmazione 1 [Java]

Stringhe e tipi di dati strutturati

Esercitazione 11. Liste semplici

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

Introduzione ai puntatori in C Definizione

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998

PROVA SCRITTA 23 MARZO 2010

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T. Linguaggio C: i puntatori

Obiettivi di questa esercitazione

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

Definizione di metodi in Java

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

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

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

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Lezione 5 Sottoarray di somma massima

Fondamenti di Informatica T-1 Modulo 2

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

FUNZIONI che operano su LISTE

Funzioni, Stack e Visibilità delle Variabili in C

Laboratorio di Algoritmi e Strutture Dati

Transcript:

ESERCIZIO 1 Si considerino le seguenti definizioni: #define N 4 struct Casella{ unsigned int r, c; ; typedef Casella TappetoElastico[N][N]; Pare che tra le discipline degli ottocenteschi circhi delle pulci non ci fosse il tappeto elastico. Ma avrebbe potuto funzionare così: la pulce salta su una casella Casella (in posizione i,j) del tappeto elastico (che è quadrato), atterrandovi, vi trova le coordinate (cioé i valori degli attributi r e c, rispettivamente riga e colonna,) della prossima cella su cui dovrà saltare, e da lì continuerà a saltare, ogni volta leggendo nella nuova casella le coordinate della casella successiva verso cui saltare. Se/quando le coordinate trovate indicano un punto esterno al tappeto (r o c negative o maggiori di N), la pulce scende dal tappeto (applausi). Si implementino le seguenti funzioni: int contasalti( Casella t[][n], int i, int j ) che riceve come parametri un tappeto elastico e le coordinate di una casella del tappeto, e misura e restituisce il numero di salti che una pulce che parta dalla Casella di coordinate i,j compie prima di scendere, oppure restituisce -1 se il tappeto è di "tipo ciclico" e la pulce resta intrappolata nel tappeto saltando indefinitamente. int dicoppia( TappetoElastico t ) che verifica se un tappeto è adatto all esibizione di coppia: una prima pulce salta sulla casella (0,0) e una seconda pulce inizia a saltare dalla casella (N-1,N-1) contemporaneamente alla prima pulce, ed esse continuano a saltare e atterrare in sincronia, senza mai scontrarsi e fino a uscire insieme dal tappeto cioè le pulci escono dal tappeto dopo aver compiuto lo stesso numero di salti e senza mai trovarsi ad atterrare contemporaneamente sulla stessa casella. Per testare il programma completo, si considerino ad esempio i tre tappeti definiti di seguito. (Immaginando che la pulce inizi a saltare dalla casella 0,0): noc non è ciclico, cic è ciclico, dic è adatto all'esibizione di coppia. Pagina 1 di 7

// qui l inclusione delle librerie, // la definizione dei tipi di dato e // i prototipi dei sottoprogrammi richiesti int main() { TappetoElastico noc = { {{1,1, {0,2, {0,6, {1,0, {{0,1, {0,2, {7,7, {2,3, {{2,2, {4,7, {3,3, {1,3, {{2,0, {2,0, {6,1, {1,2 ; TappetoElastico cic = { {{2,2, {4,1, {0,0, {5,5, {{3,0, {3,0, {8,8, {0,0, {{1,1, {0,2, {1,1, {3,2, {{0,2, {3,0, {2,3, {1,0 ; TappetoElastico dic = { {{0,1, {0,2, {0,3, {1,0, {{1,1, {1,2, {1,3, {9,9, {{2,1, {2,2, {2,3, {3,0, {{3,1, {3,2, {8,8, {2,0 ; // qui il codice del programma principale... return 0; Pagina 2 di 7

ESERCIZIO 2 Si scriva una funzione che, ricevendo come parametri una stringa str ed un carattere car, restituisca UNA NUOVA stringa di lunghezza minima (allocata dinamicamente) uguale a str ma priva di tutte le occorrenze del carattere car. Esempio: dati "esercizio semplice" e s la funzione dovrà allocare e restituire la stringa "eercizio emplice" Attenzione: La funzione non conosce a priori la lunghezza della stringa str. Si richiede esplicitamente di restituire una nuova stringa di lunghezza minima, cioè che occupi la minima quantità di memoria: occorre calcolare tale quantità prima della new Pagina 3 di 7

ESERCIZIO 3 Scrivere una funzione conc_pars( ) che riceva come parametri due stringhe, e restituisca come risultato una nuova stringa, ottenuta dalla concatenazione delle stringhe ricevute, facendo in modo che la nuova stringa occupi la quantità minima di memoria. La funzione non deve modificare le stringhe ricevute, ma restituisce un puntatore alla nuova stringa, che deve essere allocata dinamicamente (o non potrebbe essere utilmente restituita dalla funzione). Esempio: s1 = Prima s2 = "Seconda" -> restituisce = PrimaSeconda Si scriva poi una funzione strmul( ) che, dati una stringa str (che dev essere stata allocata dinamicamente) e un numero intero n, modifichi la stringa str, riallocandola e assegnandole il risultato della concatenazione di str con se stessa per n volte. Si noti che str deve essere stata allocata dinamicamente (o la funzione non potrebbe deallocarla e sostituirla con una più lunga!) str deve essere opportunamente riallocata in modo da contenere esattamente il risultato della moltiplicazione (dimensione minima) per essere modificata dalla funzione, la stringa str (che nell'ambiente del programma chiamante è un puntatore a carattere) deve essere passata per reference oppure per indirizzo. Esempio: s = abc -> moltiplicazione per 3 -> s = abcabcabc Suggerimento: si possono usare le funzioni strcat() e/o conc_pars()? Pagina 4 di 7

ESERCIZIO 4 Si consideri un vettore che rappresenta un elenco di N stringhe definito come segue. #define N 4 typedef char parola[20+1]; typedef parola elenco[n]; Data una variabile: elenco x; acquisire dallo standard input N stringhe e riportarle poi a video in ordine alfabetico. Memento: la funzione int strcmp(char s1[], char s2[]) confronta alfabeticamente s1 e s2. Pagina 5 di 7

ESERCIZIO 5 Ci ispiriamo alla funzione strcmp(... ). Si codifichi una funzione datecmp(... ) che stabilisce se due date, passate come parametri, sono uguali (nel qual caso restituisce 0), oppure in ordine cronologico (e allora restituisce un numero negativo), oppure in ordine cronologico inverso (restituendo un numero positivo). Si codifichi inoltre una funzione che stampa una data nel formato aaaa/mm/gg Si scriva anche un piccolo programma (main) per verificare che le funzioni siano state realizzate correttamente. Si utilizzino le seguenti definizioni: struct Data { int giorno; int mese; int anno; ; int datecmp( Data d1, Data d2 ) { /*... */ void stampa( Data d ) { /*... */ void stampaconlettere( Data d ) { /* stampa le date in formato 15 Mar 44 a.c. 13 Ott 2013 d.c. */ Pagina 6 di 7

ESERCIZIO 6 Si definisce il tipo di dato NumeroCodificato come segue: struct NumeroCodificato { int base; char cifre[20]; ; nel quale la base è un intero compreso tra 2 e 10 e cifre è una stringa (terminata da '\0') contenente i caratteri corrispondenti alle cifre ('0', '1', ) della codifica del numero in base base. Si definiscano, codifichino e testino le funzioni: int convertiint(numerocodificato n) che calcola il valore del numero n e lo restituisce espresso come intero void stampadec(numerocodificato n) che stampa a video il numero n in notazione decimale NumeroCodificato codifica(int n, int b) che codifica l'intero n in un NumeroCodificato di base b e lo restituisce al chiamante NumeroCodificato converti(numerocodificato n,int b2) che converte il numero n in un altro, codificato in base b2, e lo restituisce al chiamante Pagina 7 di 7