26.10.2015 Views

ESERCIZI DI INFORMATICA 3D INF. Gli alunni che ... - Bianca Petretti

ESERCIZI DI INFORMATICA 3D INF. Gli alunni che ... - Bianca Petretti

ESERCIZI DI INFORMATICA 3D INF. Gli alunni che ... - Bianca Petretti

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>ESERCIZI</strong> <strong>DI</strong> <strong><strong>INF</strong>ORMATICA</strong> <strong>3D</strong> <strong>INF</strong>.<br />

<strong>Gli</strong> <strong>alunni</strong> <strong>che</strong> non hanno il debito di Informatica devono svolgere almeno il 50% degli<br />

esercizi (gli esercizi scritti in rosso non sono da svolgere perché contengono argomenti<br />

<strong>che</strong> non sono stati svolti)<br />

Chi vuole può cimentarsi an<strong>che</strong> nello svolgimento della parte dei progetti più<br />

complessi per arrivare a settembre allenati con la mente!<br />

Alla prima lezione di Informatica ad inizio anno scolastico la docente ritirerà tutti i lavori e li<br />

valuterà.<br />

PRIMI PROGRAMMI IN LINGUAGGIO C<br />

1) Calcolo di aree<br />

Si scriva un programma in linguaggio C <strong>che</strong>, dato un numero reale D immesso da tastiera, calcoli e stampi:<br />

l’area del quadrato di lato D<br />

l’area del cerchio di diametro D<br />

l’area del triangolo equilatero di lato D<br />

(utilizzare un menu di scelta)<br />

2) Semplice calcolatrice<br />

Si scriva un programma in linguaggio C capace di compiere le 4 operazioni (somma, sottrazione,<br />

moltiplicazione e divisione) tra due numeri reali inseriti da tastiera. Dopo <strong>che</strong> sono stati inseriti i due<br />

numeri, detti A e B, il programma dovrà visualizzare a scelta i quattro valori A+B, A-B, A*B, A/B.<br />

Si gestisca il caso in cui il divisore inserito sia nullo!<br />

(utilizzare un menu di scelta)<br />

3) Cartellino del prezzo<br />

Scrivere un programma <strong>che</strong> richieda all’utente il prezzo di un oggetto, e la percentuale di sconto ad esso<br />

applicata, e <strong>che</strong> stampi a video il cartellino con il prezzo (originale e scontato).<br />

Esempio:<br />

Inserisci i dati:<br />

Prezzo: 25<br />

Sconto: 10<br />

Cartellino:<br />

Prezzo: 25.00 euro<br />

Sconto applicato 10%<br />

Prezzo finale: 22.50 euro<br />

SELEZIONE<br />

4) Determinare <strong>che</strong> cosa fa il seguente frammento di programma in linguaggio C:<br />

int a, b, c;<br />

scanf("%d", &a);<br />

scanf("%d", &b);<br />

if( a>b )<br />

{<br />

c = a ;<br />

a = b ;<br />

b = c ;<br />

}<br />

printf("%d\n", b) ;<br />

5) Valore assoluto<br />

Si realizzi un programma in linguaggio C <strong>che</strong> acquisisca da tastiera un numero e stampi il<br />

valore assoluto di tale numero senza ricorrere ad alcuna funzione di libreria.


6) Confronto fra numeri<br />

Richiedere due interi all'utente e controllare se sono uguali. In caso affermativo stampare un messaggio<br />

del tipo " 7 uguale a 7”. In caso contrario calcolare il valore assoluto della loro differenza e stamparlo a<br />

s<strong>che</strong>rmo. (Non è consentito usare la funzione per il calcolo del valore assoluto della libreria math.h).<br />

COSTRUTTI CICLICI<br />

7)<br />

Realizzare un programma <strong>che</strong>, ricevuto N da tastiera, stampi a video:<br />

- i primi N numeri pari<br />

- i primi N numeri primi<br />

- la tabellina del numero N (fino a 10N)<br />

(utilizzare un menu di scelta)<br />

8) Sequenza di numeri<br />

Realizzare una procedura <strong>che</strong> riceve in input da tastiera una sequenza di numeri interi.<br />

La fine della sequenza viene riconosciuta dal programma inserendo da tastiera ad esempio il numero 0<br />

(zero). Alla fine della sequenza il programma dovrà stampare a video il maggiore e il minore fra tutti gli interi<br />

inseriti.<br />

9) Tabelline<br />

Realizzare un programma per stampare le tabelline dei numeri da 1 ad N, dove N è richiesto all’utente<br />

Esempio:<br />

se N=14<br />

1 2 3 4 .. 10<br />

2 4 6 8 .. 20<br />

3 6 9 12 .. 30<br />

4 8 12 16 .. 40<br />

.. .. .. .. .. ..<br />

14 28 … 140<br />

10) La radice quadrata intera di un numero<br />

Scrivere un programma per calcolare la radice quadrata intera di n, con n inserito da input.<br />

Tenere presente <strong>che</strong> la radice intera di n è il numero intero più grande il cui quadrato approssima n per<br />

difetto<br />

Per esempio<br />

se n = 63 la radice intera = 7 (perché 7^2 = 49, ma 8^2 = 64)<br />

NB!! Assicurarsi di procedere al calcolo della radice solo quando il numero inserito è positivo<br />

11) Successioni<br />

Si consideri la successione di numeri così definita:<br />

x 0 =A+1; (primo termine)<br />

…<br />

x i =x i-1 +1 (termini successivi)<br />

Cioè se A = 3<br />

x 0 =4<br />

x 1 = x 0 + 1 = 4 + 1= 5;<br />

x 2 = x 1 + 1 = 5 + 1 = 6; e così via….<br />

Scrivere un programma <strong>che</strong>, dato in input due numeri interi positivi A e B (controllo input !), determini<br />

quanti termini x i della successione occorre sommare progressivamente (partendo dal primo), per superare<br />

strettamente il valore B.<br />

12) Polinomi


Dato un polinomio pol= a 4 x 4 +a 3 x 3 +a 2 x 2 +ax+a o , i cui coefficienti sono inseriti da input, scrivere un<br />

programma <strong>che</strong>, per un dato valore di x anch’esso inserito da input, calcoli il valore del polinomio.<br />

13) Elenco studenti<br />

L’elenco degli studenti di una scuola riporta la classe frequentata dallo studente, il suo cognome ed il suo<br />

nome. L’elenco è ordinato per classi. Conta gli studenti per ogni classe.<br />

Per classe intendere per semplicità un numero da 1 a 5 tralasciando la sezione. Non è noto a priori quanti<br />

<strong>alunni</strong> siano presenti nella scuola.<br />

Scrivere un programma <strong>che</strong> permetta l’inserimento successivo degli <strong>alunni</strong> (classe, cognome e nome) finchè<br />

lo si desidera (escogitare il modo più opportuno per interrompere l’inserimento!) e stampare a video alla fine<br />

il numero di <strong>alunni</strong> per ogni classe.<br />

Ad es:<br />

Classe 1’ : 13 <strong>alunni</strong><br />

Classe 2’ : 22 <strong>alunni</strong><br />

Classe 3’ : 15 <strong>alunni</strong><br />

Classe 4’ : nessuno alunno<br />

Classe 5’ : 23 <strong>alunni</strong><br />

FUNZIONI, VETTORI E MATRICI<br />

14) Cancellazione di elementi<br />

Scrivere un programma <strong>che</strong> caricato da input un vettore di N elementi, con N


19) Media dei voti universitari<br />

Si scriva un programma <strong>che</strong> conoscendo quanti esami (minimo 3 e massimo 50) siano stati sostenuti da uno<br />

studente nonché i voti conseguiti in ciascun esame, ne calcoli la media, il voto massimo, il voto minimo, la<br />

varianza ed il voto di base per la laurea espresso in 110mi. (Utilizzare un menu di scelta)<br />

Si consulti wikipedia per il calcolo della varianza.<br />

Per il calcolo del voto base di laurea in 110mi:<br />

- si considera la media dei voti escludendo voto massimo e voto minimo<br />

- si moltiplica per 110 e poi si divide per 30<br />

- si approssima per difetto o eccesso all’intero più vicino<br />

20)<br />

La funzione controlla Matrice prende in ingresso A, una matrice rettangolare di interi di dimensioni<br />

effettive r e c e restituisce opportunamente un vettore di interi res.<br />

La funzione analizza separatamente ogni riga della matrice A e controlla <strong>che</strong> ogni riga soddisfi il seguente<br />

criterio:<br />

“Sia a il primo elemento della riga, b il secondo elemento della riga e k sia un qualsiasi elemento su<br />

ccessivo (dalla posizione 3 in poi). Ogni elemento k deve soddisfare:<br />

k>a e (k-a) è multiplo di b”<br />

Il vettore di interi res restituito al programma main ha lunghezza r ed è cosi' costituito:<br />

• res alla posizione i-sima vale 0 se la riga i-sima soddisfa la condizione sopra citata.<br />

• res alla posizione i-sima vale n se l'elemento n-simo della riga i-sima è il primo a non soddisfare la<br />

condizione.<br />

Si scriva<br />

<br />

<br />

<br />

il prototipo della funzione controllaMatrice<br />

la funzione controllaMatrice<br />

Il main in cui si chiama la funzione controlla Matrice e si stampa a video l'output (si assuma <strong>che</strong> la<br />

matrice A e le dimensioni r e c siano già definiti e popolati dal programmatore)<br />

Per Esempio:<br />

res=<br />

FUNZIONI e STRINGHE<br />

21) Si scriva un programma <strong>che</strong> letta da tastiera una stringa di al più mille caratteri, ne conti e stampi a<br />

video:<br />

- il numero di vocali<br />

- il numero di caratteri numerici<br />

- il numero di caratteri non alfanumerici<br />

Definire per fare ciò tre opportune funzioni contaVocali, contaNumerici, contaNonAlfaNum e richiamarle<br />

opportunamente nel main.<br />

22) Si scriva un programma <strong>che</strong> letta da tastiera una stringa di al più mille caratteri, la stampi a video<br />

ponendo ciascuna parola su una riga diversa.<br />

23) Si scriva un programma <strong>che</strong> letta da tastiera una stringa di al più mille caratteri, la stampi al contrario.<br />

24) Si scriva un programma <strong>che</strong> letta da tastiera una stringa contenente una singola parola di al massimo<br />

20 caratteri, stabilisca se è palindroma


25) Si scriva un programma <strong>che</strong> letta da tastiera una stringa di al più mille caratteri ed un singolo carattere,<br />

conti le occorrenze di quel carattere nella stringa.<br />

26) Si scriva un programma <strong>che</strong> letta da tastiera una stringa di al più mille caratteri e due caratteri c1 e c2,<br />

effettui la sostituzione nella stringa di tutte le occorrenze del carattere c1 col carattere c2.<br />

27) Si scriva un programma simile a quello precedente, ma <strong>che</strong> operi una sostituzione fra sottostringhe.<br />

Per esempio:<br />

se la stringa di partenza è: “ciao mamma, vuoi mangiare una crostata alla marmellata?”<br />

la stringa da cercare è “ma”<br />

la stringa con cui rimpiazzarla è “xyz”<br />

deve stampare a video “ciao xyzmxyz, vuoi xyzngiare una crostata alla xyzrmellata”<br />

FUNZIONI, PUNTATORI, STRUTTURE e FILE<br />

28) Scrivere un programma <strong>che</strong> richiede all'utente un nome di file di testo.<br />

Definire le seguenti funzioni:<br />

contaPaole: <strong>che</strong> restituisce il numero di parole nel file <strong>che</strong> viene passato come parametro<br />

contaRighe: <strong>che</strong> restituisce il numero di righe nel file <strong>che</strong> viene passato come parametro<br />

copia: <strong>che</strong> copia tutte le parole (del file passato come parametro) <strong>che</strong> iniziano con un certo carattere<br />

passato come parametro, in un secondo file (anch'esso passato come parametro)<br />

Proporre nel main un menu <strong>che</strong> permetta di scegliere la funzionalità desiderata e richiamare via via le<br />

funzioni create per visualizzare in output l’esito dell’elaborazione da esse svolta.<br />

29) Punti colorati<br />

Vengono letti due punti colorati e viene calcolato il punto medio; il colore del punto medio e' quello dei due<br />

punti dati in input (se sono dello stesso colore) oppure nero.<br />

Usare una struttura chiamata s_punto <strong>che</strong> contiene le due coordinate ascissa e ordinata del punto nel piano<br />

cartesiano ed una stringa contenente il colore.<br />

30) Scrivere un programma <strong>che</strong> richiede all'utente un numero intero positivo N ed il nome di un file di<br />

testo .txt contenente dei numeri interi, ciascuna su una riga diversa.<br />

Definire una funzione <strong>che</strong> conta quanti dei numeri contenuti nel file sono maggiori di N.<br />

Per esempio se il file numeri.txt contiene<br />

2<br />

3<br />

51<br />

24 ed N = 4 deve essere visualizzato il messaggio “ci sono 2 numeri maggiori di 4”<br />

31)<br />

Scvivere un programma <strong>che</strong> calcola le radici di un'equazione di secondo grado ax^2 +bx +c = 0 dati i<br />

coefficienti a,b,c<br />

Il programma deve possedere:<br />

il main <strong>che</strong> acquisisce a,b,c da tastiera e stampa il risultato<br />

una funzione calcolaRadici <strong>che</strong> riceve a,b,c, "restituisce" opportunamente n, x1, x2 dove n è il<br />

numero di radici reali (la funzione deve poter lavorare an<strong>che</strong> con radici complesse!!!)<br />

una funzione delta <strong>che</strong> riceve a,b,c, e restituisce il valore del discriminante.<br />

PROGETTI PIU’ COMPLESSI<br />

32) Parentesi<br />

Creare un programma <strong>che</strong> legge da un file una sequenza di parentesi tonde aperte o chiuse<br />

E stampa a video se la sequenza di parentesi è corretta oppure no, ovvero se le parentesi nella sequenza<br />

con cui si presentano vengono chiuse correttamente considerando an<strong>che</strong> gli eventuali annidamenti.<br />

Per esempio:


(()())((()(()))()) è una sequenza corretta<br />

(()))()() non è una sequenza corretta<br />

)()()(()()) non è una sequenza corretta<br />

33) Distanze fra città<br />

Si consideri una matrice simmetrica atta a rappresentare la tabella delle distanze tra le città (come quella<br />

rappresentata in seguito).<br />

A) Si scriva un programma per gestire una tabella di distanze tra 4 città. Non è necessario definire alcun<br />

nome per le città ma basta fare riferimento all’ordine di riga (i.e. città 0, città 1, città 2, città 3).<br />

B) Scrivere una funzione InserisciTabella <strong>che</strong> richiede all’utente di inserire la distanza tra le varie città, salva<br />

i dati in una matrice <strong>che</strong> restituisce al programma chiamante. E’ necessario controllare <strong>che</strong> ogni distanza<br />

inserita sia un numero positivo, nel caso in cui il valore fosse negativo, richiedere l’inserimento finchè non<br />

viene inserito un valore valido. La funzione InserisciTabella non deve chiedere informazioni inutili quali:<br />

<br />

<br />

la distanza tra la città i-sima e la città i-sima<br />

la distanza tra la città i-sima e la città j-sima se si è già richiesto l’inserimento della distanza tra la<br />

città j-sima e la città i-sima.<br />

C) Scrivere quindi il main del programma in cui vengono dichiarate tutte le variabili necessarie e <strong>che</strong> chiama<br />

la funzione InserisciTabella .<br />

D) Scrivere la funzione StampaTabella <strong>che</strong> prende in ingresso una matrice definita dalla funzione<br />

InserisciTabella. La matrice deve essere stampata su 4 righe e 4 colonne, e deve presentare il carattere 0<br />

sulle diagonali e deve visualizzare il carattere spazio nella parte triangolare alta. Prima di ogni riga<br />

aggiungere l’indice della città. Scrivere nel main una chiamata alla funzione StampaTabella sulla matrice<br />

precedentemente inserita.<br />

E) Scrivere una funzione CittàIsolate <strong>che</strong> prende in ingresso una matrice tabella delle distanze e per ogni<br />

città calcola la distanza da tutte le restanti. La funzione restituisce al programma chiamante la città più<br />

isolata (quella <strong>che</strong> ha la maggior distanza media dalle altre città) e la meno isolata (quella <strong>che</strong> ha la minor<br />

distanza media dalle altre città). Scrivere nel main la chiamata alla funzione CittàIsolate e quindi stampare a<br />

s<strong>che</strong>rmo l’indice della città più isolata e l’indice della città meno isolata.<br />

F) Scrivere la funzione ScambiaCittà <strong>che</strong> prende in ingresso due matrici rappresentanti tabelle delle distanze<br />

A,B. La funzione sovrascrive alla città più isolata di A le distanze corrispondenti alla città sulla stessa riga di<br />

B. Scrivere nel main le variabili necessarie e le chiamate alle funzioni InserisciTabella e StampaTabella per la<br />

seconda matrice. Stampare quindi la matrice modificata mediante StampaTabella.


34) Immagini digitali<br />

Si considerino immagini binarie in bianco e nero, rappresentate come una matrice 4x4 di pixel <strong>che</strong> può<br />

assumere due valori 0 (nero) oppure 1 (bianco).<br />

A) Scrivere una funzione AcquisiciImmagine <strong>che</strong> richiede all'utente di inserire una matrice atta a<br />

rappresentare un'immagine. La funzione richiede all'utente di inserire i valori di ogni pixel e controlla <strong>che</strong><br />

ogni valore inserito sia ammissibile ( 0 o 1), altrimenti manda un messaggio di errore e ne richiede<br />

l'inserimento. Scrivere quindi il main del programma <strong>che</strong> dichiara tutte le variabili necessarie e <strong>che</strong> chiama la<br />

funzione AcquisiciImmagine .<br />

B) Scrivere una funzione StampaImmagine <strong>che</strong> prende in ingresso una matrice e la stampa a s<strong>che</strong>rmo. La<br />

matrice deve essere stampata su 4 righe e 4 colonne, e deve presentare il carattere spazio in corrispondenza<br />

degli 0 ed il carattere X in corrispondenza degli 1. Scrivere nel main la chiamata alla funzione<br />

StampaImmagine sull'immagine precedentemente inserita .<br />

C) Scrivere la funzione TrovaRighe <strong>che</strong> prende in ingresso un immagine e restituisce al programma<br />

chiamante la riga più chiara e la riga più scura (la riga più chiara è quella <strong>che</strong> contiene più valori 1 e quella<br />

più scura è quella <strong>che</strong> contiene più 0). Nel caso ci fossero più righe "più chiare" o "più scure" restiturne una<br />

qualsiasi. Scrivere nel main una chiamata alla funzione TrovaRighe e a seguito stampare a s<strong>che</strong>rmo un<br />

messaggio .<br />

D) Scrivere la funzione CopiaRighe <strong>che</strong> prende in ingresso due immagini A e B. La funzione identifica la riga<br />

più chiara di A e la sovrascrive alla riga più scura di B. La funzione CopiaRighe può richiamare la funzione<br />

TrovaRighe. Scrivere nel main una seconda chiamata alle funzione AcquisiciImmagine per caricare una<br />

seconda matrice (modificare le dichiarazioni del main di conseguenza). Stampare la nuova immagine<br />

acquisita mediante StampaImmagine e quindi chiamare la funzione CopiaRighe .<br />

35) Attraversamento della palude<br />

Sia data una matrice P di dimensioni m ed n contenente valori 0 e 1, con m ed n noti.<br />

Tale matrice rappresenta una zona paludosa in cui gli 1 rappresentano aree di terraferma e gli 0<br />

sabbie mobili (non transitabili). Una sequenza di aree di terraferma adiacenti <strong>che</strong> attraversano la<br />

palude da sinistra (indice di colonna pari a 0) a destra (indice di colonna pari ad n-1)<br />

costituiscono un passaggio. I passaggi a cui siamo interessati sono di lunghezza n, cioè in un<br />

passaggio da un'area in colonna j si va ad un'area in colonna j+1. L'area in posizione si<br />

considera quindi adiacente alle aree in posizione , ed . Si richiede di<br />

verificare l'esistenza di almeno un passaggio e restituirlo se esiste (se ne esiste più di uno è<br />

sufficiente restituire il primo trovato).<br />

Esempio 1: una palude senza passaggi<br />

1 0 0 1 0 0<br />

0 1 0 0 0 0<br />

0 0 1 1 0 0<br />

1 1 0 0 0 0<br />

1 1 1 0 1 1<br />

Esempio 2: una palude con un passaggio (evidenziato dagli asterischi)<br />

1 0 0 1 0 0<br />

1*0 0 0 0 0<br />

0 1* 0 0 0 1*<br />

0 0 1* 1* 1* 0<br />

0 1 0 0 0 0<br />

36) Barcode<br />

Un barcode è la sequenza di 8 caratteri alfanumerici.<br />

A) Scrivere nel main del programma l'inserimento controllato di un barcode. Al termine<br />

dell'inserimento occorre verificare le seguenti condizioni perché il barcode sia valido.<br />

- la lunghezza del barcode deve essere 8<br />

- il barcode non deve contenere la sequenza 'XX' al proprio interno


Qualora queste condizioni non fossero verificate, chiedere di ripetere l'inserimento.<br />

B) Modificare il programma nel seguente modo. Scrivere una funzione inserisciCodici per<br />

inserire diversi codici a barre (i parametri e l'eventuale valore ritornato sono da stabilire). Ogni<br />

codice viene salvato in una riga di una matrice C di 100 righe e di 8 colonne.<br />

L'inserimento termina quando un codice a barre è non soddisfa le condizioni sopra descritte o<br />

quando si è riempita la matrice C.<br />

C) Scrivere nel main la chiamata alla funzione inserisciCodici ed inoltre richiedere all'utente le<br />

iniziali di u\n<br />

codice e salvarle in un array daCercare<br />

D) Scrivere la funzione ricercaCodice <strong>che</strong> prende in ingresso la matrice C, il vettore daCercare<br />

(più eventuali variabili aggiuntive <strong>che</strong> si ritengono utili/indispensabili) e restituisce l'indice della<br />

prima riga contenente un codice a barre <strong>che</strong> coincide con daCercare nei caratteri contenuti in<br />

daCercare.<br />

Es.<br />

890A234X<br />

890A244X<br />

800A244X<br />

800A245X<br />

8e0A24XX<br />

inserire codice da ricercare : 800<br />

il primo codice <strong>che</strong> inizia con 800 è 800A244X alla riga 3.<br />

E) Scrivere la funzione ricercaCodici per far si <strong>che</strong> vengano restituiti tutti i codici a barre<br />

presenti in C, la cui parte<br />

iniziale coincide con daCercare (restituire sia gli indici di riga <strong>che</strong> i codici completi).<br />

Es.<br />

nel caso precedente restituisce<br />

i codici <strong>che</strong> iniziano per 800 sono<br />

800A244X alla riga 3<br />

800A245X alla riga 4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!