3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il secondo con il penultimo, ecc. Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa. Scrivere una funzione che, data una stringa, verifica se è palindroma Scrivere una funzione che, data una stringa, conta il numero di parole contenute in essa Realizzare un programma che permette di generare una password: prese due stringhe rappresentanti nome e cognome di un utente, restituisce una password generata automaticamente. Tale stringa è ottenuta concatenando i primi tre caratteri del cognome e gli ultimi tre del nome. ESERCIZIO 6 Scrivere un programma che conta le occorrenze di una stringa x dentro ad un altra t; Ad esempio: x = buona t = una buona, buona, buonissima ed ancora buona giornata a tutti Risultato: 3 MATRICI Scrivere una funzione che, data una matrice di dimensioni scelte dall'utente, assegna ad ogni suo elemento 1 se la somma degli indici dell'elemento è dispari o 0 se la somma degli indici dell'elemento è pari. Verificare se gli elementi di una matrice quadrata di interi di ordine n x n sono tutti uguali tra loro. Verificare se una matrice quadrata di ordine n x n è unitaria. Una matrice è unitaria se gli elementi sulla diagonale principale sono tutti 1 e i restanti sono uguali a 0. Verificare se gli elementi di due matrice di interi entrambe n x n sono tutti uguali. Compiti delle vacanze Pagina 1 di 6
RICORSIONE Scrivere un programma che calcoli il prodotto tra due numeri interi mediante somme successive utilizzando la formula ricorsiva a*b = a*(b-1)+a; Scrivere un programma che calcoli la somma dei primi n numeri interi positivi utilizzando la ricorsione Scrivere un programma che calcoli il corrispondente in base 2 di un numero decimale inserito utilizzando la ricorsione Determina l'elemento massimo di un vettore usando una funzione ricorsiva Scrivere una funzione ricorsiva int somma (int n, int m) che restituisce la somma degli interi tra n a m (n e m compresi). ESERCIZIO 6 Scrivere una funzione ricorsiva che moltiplica per due tutti i valori di un array di interi. Modificarla perchè moltiplichi per due solo i valori dispari. ESERCIZIO 7 Scrivere una funzione ricorsiva che, data una base e un esponente, calcoli l elevamento a potenza di un numero. Esempio: base = 2, esponente = 3, valore di ritorno = 2 3 = 8. ESERCIZIO 8 Si scriva una funzione ricorsiva int prod(int x) che, ricevuto come parametro un numero intero positivo (pari o dispari), calcoli ricorsivamente il prodotto di tutti i numeri dispari compresi tra 1 e quel numero (compreso). ESERCIZIO 9 Si scriva una funzione ricorsiva double f(double c, int m); che calcoli il seguente valore: 0 Si scriva una funzione ricorsiva int s (int n) che calcoli il seguente valore: essendo int pow (int base, int esponente) la funzione potenza che si suppone già disponibile. Compiti delle vacanze Pagina 2 di 6
RECORD DI ATTIVAZIONE Si consideri la seguente funzione F: int G(double x){ if (x>0) { x-=2; return G(x)/2; } else return 1; } Si scriva il risultato della funzione quando invocata come G(6) e si disegnino i corrispondenti record di attivazione. Si consideri la seguente funzione F: double F(int x){ if (x<0) { x++; return 3*F(x/2); } else return -1; } Si scriva il risultato della funzione quando invocata come F(-7) e si disegnino i corrispondenti record di attivazione. Si consideri la seguente funzione g(): int g(int a, int b) { if ((a/b) <2 ) return (b-1); else return 1 + g(a-2, b); } Si scriva il risultato della funzione quando invocata come g(9, 2) e si mostrino i record di attivazione. STRUCT E FILE Svolgere i seguenti esercizi creando le opportune strutture e memorizzando in modo permanente le informazioni su file. Per ogni esercizio fornire almeno le funzionalità di inserimento, ricerca, ordinamento e modifica. Scrivere un programma che gestisca le misurazioni delle precipitazioni dato giorno, ora e valore della misurazione utilizzando le struct. Creare una struttura per la gestione delle informazioni di una città: nome, numero di abitanti, numero abitanti dello scorso anno... Scrivere una funzione per individuare la città con il maggior incremento di abitanti. Compiti delle vacanze Pagina 3 di 6
Le trasmissioni in prima serata di un canale televisivo nei diversi giorni di un mese sono organizzate in una tabella con giorno, titolo, regista, durate. L elenco viene successivamente ordinato. L utente può ottenere, fornendo da tastiera il giorno, il titolo della trasmissione, il nome del regista e la durata. Dato il file testo.txt copiare le linee pari nel file pari.txt e quelle dispari nel file dispari.txt Contare il numero di volte che una parola ricevuta dall utente compare nel file testo.txt PUNTATORI Scrivere una funzione con prototipo void somma(double *sum, double x, double y); che assegna la somma fra il secondo e il terzo argomento (passati per valore) al primo argomento (passato per riferimento) Si consideri il seguente programma: main () { float **A; float *B; float C; B = &C; A = &B; **A = 12.5; *B = 1.3; printf( il valore finale di **A è %d \n, **A); } Si dica, spiegandone brevemente le ragioni, quale sarà l output del programma. Si consideri il seguente programma: main () { int **P; int *Q; int x; x = 27; Q = malloc(sizeof(int)); P = malloc(sizeof(int *)); *P = Q; **P = 4; Q = &x; P = &Q; *Q = 5; printf( il valore finale di **P è %d e quello di x è %d \n, **P, x); } Si dica, spiegandone brevemente le ragioni, quale sarà l output del programma. Scrivere una funzione che restituisca il puntatore alla prima occorrenza del numero x in un array di interi int * cerca(int a[], int x, int size) Compiti delle vacanze Pagina 4 di 6
Data una funzione calcola: int calcola( int *a, int b, int *c) { *a = *a * 2; b = b * 2; *c = *c - 2; return *a + b + *c; } Qual è l'output del seguente frammento di programma? int z,x,*y; y = &x; z = 1; *y = 2; x = 3; z = calcola(&z,x,y); printf("%d, %d",z,x); ESERCIZIO 6 Simulare l'esecuzione di ciascuna delle 4 chiamate a sottoprogrammi, limitandosi alla descrizione dei valori stampati tramite le "printf". int X = 60; int p1(int par) { par = par - 10; return (par); } int p2(int *par) { X = *par; *par = *par - 5; return (X); } int p3(int par) { int X = par + 1; printf("\n3) X = %d", ); return (X); } main() { /* situazione iniziale */ int Y = 0, Z = 30; printf ("\n0) X = %d, Y = %d, Z = %d ", X, Y, Z); /* passo 1 */ X = p1(z); printf ("\n1) X = %d, Y = %d, Z = %d ", X, Y, Z); /* passo 2 */ Y = p2(&z); printf ("\n2) X = %d, Y = %d, Z = %d ", X, Y, Z); /* passo 3 */ Y = p3(z); printf ("\n4) X = %d, Y = %d, Z = %d ", X, Y, Z); /* passo 4 */ Y = p2(&y); printf ("\n5) X = %d, Y = %d, Z = %d ", X, Y, Z); } Compiti delle vacanze Pagina 5 di 6
LISTE Scrivere una funzione che restituisca l elemento in coda ad una lista Scrivere una funzione che faccia la copia di una lista in ingresso Letta in input una sequenza di numeri interi positivi memorizzarla in una lista. Costruire una seconda lista contenente soltanto gli elementi pari della prima lista. Stampare la seconda lista. Lette in input due liste di numeri interi ognuna delle quali ordinata, costruire una terza lista di numeri interi ordinata, mediante la fusione delle prime due. Stampare la lista. Letta in input una lista, costruire una seconda lista con gli elementi disposti al contrario rispetto alla lista originale (es.: se la lista letta in input è 1 8 4 viene costruita la lista 4 8 1). Stampare la seconda lista. Compiti delle vacanze Pagina 6 di 6