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
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