ESERCIZI DI PROGRAMMAZIONE

Esercizi sulla Sequenza

  1. Calcolare il perimetro di un rettangolo date le misure dell'area e della base.
  2. Calcolare l'area di un rettangolo date le misure del perimetro e dell'altezza.
  3. Calcolare l'area di un triangolo rettangolo sapendo che un cateto è 3/5 dell'altro.
  4. Calcolare il costo necessario a dipingere le pareti di una stanza con una porta e due finestre.
  5. Calcolare il costo necessario a pavimentare una stanza di forma rettangolare.
  6. Di un libro si conosce il prezzo comprensivo dell'IVA del 22%; determinare il prezzo netto.
  7. Di un oggetto si conosce il prezzo comprensivo dell'IVA; determinarne il prezzo netto.
  8. Un'automobile percorre 20 km con un litro di benzina. Calcolare la spesa necessaria a percorrere 100 km.
  9. Conoscendo il numero di km che un'automobile percorre con un litro di benzina, determinare la spesa necessaria a percorrere 100 km.
  10. Un dollaro vale 1540 lire e 2.80 marchi. Cambiare i marchi in lire.
  11. Calcolare il successivo del doppio del quadrato di un numero.
  12. Calcolare il quadrato del successivo del doppio di un numero.
  13. Calcolare la differenza tra il quadrato di un numero e il numero stesso.
  14. Calcolare l'area di un trapezio, conoscendo la base maggiore e sapendo che l'altezza è doppia della base minore, mentre la loro somma è uguale alla base maggiore.
  15. Una scultura è formata da un cubo, sormontato da altri due cubi di lato rispettivamente doppio e triplo. Determinare la superficie laterale della scultura.
  16. Una merce subisce un certo aumento in percentuale. Il negoziante però pratica ai clienti abituali uno sconto pari all'aumento. Calcolate la differenza tra il nuovo prezzo scontato e il vecchio prezzo [p€*((1+x%)*(1-x%)-1)=p€*(-x%²)].
  17. Un rappresentante di commercio guadagna un fisso mensile di 1000€ più 200€ per ogni enciclopedia venduta. Quanto guadagna al mese, sapendo che gli viene trattenuto il 18%?
  18. Sapendo che l'incasso del totocalcio viene ripartito in parti uguali tra erario, CONI, montepremi, stabilire le quote dei vincitori con 13 e 12 punti.
  19. Un rettangolo ha il perimetro di cm 10. Impostare un metodo per determinare quello di area massima (quello di area massima è un quadrato...).
  20. Un rettangolo ha l'area di cm² 16. Impostare un metodo per determinare quello di perimetro minimo (quello di perimetro minimo è un quadrato...).

Esercizi sulla Selezione

  1. Stabilire se due numeri interi sono uguali.
  2. Dati due numeri stampare il maggiore.
  3. Stabilire se una persona può votare alle elezioni.
  4. Dati due numeri A e B verificare se A è il quadrato di B.
  5. Stabilire se un numero è un quadrato perfetto.
  6. Dati due numeri stamparli in ordine crescente.
  7. Determinare se un numero naturale A è il precedente del numero naturale B.
  8. Dato un numero intero, trovare il suo valore assoluto.
  9. Dato un numero intero N, stabilire se è pari o dispari.
  10. Dato un numero intero N, stabilire se è divisibile per A. (Controllare il resto della divisione).
  11. Dato un numero qualunque, stabilire se esso è intero oppure no.
  12. Dato un numero stabilire se è naturale.
  13. Dato un numero razionale assoluto, calcolarne, se possibile, il reciproco.
  14. Calcolare, se possibile, la radice quadrata di un numero.
  15. Dati tre numeri stampare il maggiore.
  16. Dati due numeri A e B controllare se A è minore, uguale o maggiore di B.
  17. Dato un numero N verificare se è interno o esterno ad un intervallo [A..B].
  18. Dato un numero N razionale assoluto calcolare la differenza con il numero intero più vicino, esprimendola come grandezza positiva.
  19. Date le misure di tre angoli, stabilire se si tratta degli angoli di un triangolo.
  20. Date le misure dei lati di un triangolo, stabilire e il triangolo è equilatero, isoscele o scaleno.
  21. Date le misure degli angoli di un triangolo, stabilire se il triangolo è rettangolo.
  22. Date le misure di tre segmenti, stabilire se possono costituire i lati di un triangolo.
  23. Date le dimensioni di due rettangoli calcolarne l'area e determinare quale dei due ha superficie maggiore.
  24. Dati un quadrato di lato L ed una circonferenza di raggio R stabilire quale delle due figure ha perimetro maggiore e quale delle due ha area maggiore.
  25. Conoscendo l'ipotenusa e il cateto di un triangolo rettangolo e il lato di un quadrato verificare se le due figure sono equivalenti.
  26. Dato il cateto e l'ipotenusa di un triangolo rettangolo e il lato di un quadrato stabilire se le due figure sono isoperimetriche.
  27. Immessa da tastiera la base e l'altezza di un rettangolo ed il lato di un quadrato stabilire se i due poligoni sono isoperimetrici.
  28. Date le dimensioni di due rettangoli verificare se sono isoperimetrici.
  29. Verificare se un numero dato in input è divisibile sia per 3 sia per 5.
  30. Verificare se un numero dato in input è divisibile per 3 o per 7.
  31. Verificare se un numero dato in input è divisibile per 3 ma non per 5.
  32. Dati due numeri naturali A e B, con A diverso da B, sottrarre il più piccolo dal più grande.
  33. Dati due numeri naturali A e B, con A diverso da B, aggiungere al più grande la somma dei due numeri.
  34. Dati quattro numeri verificare se costituiscono una proporzione.
  35. Dati 3 numeri stampare il più piccolo, il più grande e la loro media aritmetica.
  36. Determinare se il prodotto di due numeri naturali A e B è maggiore di 0.
  37. Dati 2 numeri naturali A e B, con A diverso da B, aggiungere 10 al più grande.
  38. Dato un numero intero stabilire se è negativo, positivo oppure uguale a zero.
  39. Stabilire se un angolo è acuto, ottuso o retto.
  40. Stabilire se un angolo è retto, piatto, giro o qualsiasi.
  41. Determinare se un numero A ha la stessa parità di un numero B. (Due numeri hanno la stessa parità se sono entrambi pari o entrambi dispari).
  42. Dati A e B interi e diversi da 0, stabilire se A è divisibile per B.
  43. Determinare se il quoziente di due numeri naturali è uguale a 1 (senza effettuare l'operazione).
  44. Stabilire se il prodotto di due numeri naturali qualsiasi, diversi da zero, è pari o dispari.
  45. Stabilire se un numero naturale N, diverso da zero, è divisore di altri due numeri qualsiasi.
  46. Determinare, senza eseguire l'operazione, se il prodotto di due numeri naturali è uguale a zero.
  47. Immessi da tastiera due numeri relativi stabilire se sono: uguali, concordi o discordi, uno l'inverso dell'altro, opposti.
  48. Calcolare la differenza fra due numeri nel campo dei naturali.
  49. Dati in input una base a e un esponente n, determinare se la potenza a^n è un numero pari (senza effettuare l'operazione).
  50. Dati in input una base a e un esponente n, determinare se la potenza a^n è uguale a 1 (senza effettuare l'operazione).
  51. Dati in input una base a e un esponente n, determinare se la potenza a^n è uguale a zero (senza effettuare l'operazione).
  52. Stabilire se un numero naturale qualsiasi, diverso da zero, è divisore di 36.
  53. Dati due numeri naturali A e B, con A diverso da B, aggiungere al più piccolo la somma dei due numeri.
  54. Dati due numeri naturali A e B, con A diverso da B, sottrarre il più piccolo dal più grande.
  55. Dati in input i tre angoli di un triangolo, classificare il triangolo rispetto agli angoli.
  56. Risoluzione di una equazione di I grado. La risoluzione di una equazione di I grado a una incognita ammette tre casi:
    1. esiste una soluzione;
    2. esistono infinite soluzioni (eq. indeterminata);
    3. non esistono soluzioni (eq. impossibile).
  57. Dato il peso ed il volume di un oggetto calcolare il peso specifico e stabilire se può essere di vetro (ps=2,5).
  58. Stabilire se un numero è dispari controllando la cifra meno significativa.
  59. Date le misure A e B di un potenziale rettangolo si vuole sapere se si tratta in effetti di un rettangolo, di un segmento o di un punto (A e B possono essere nulle).
  60. Date le misure a, b, c di un parallelepipedo potenziale dire se si tratta o meno di un solido (ed in particolare di un cubo), di un rettangolo, di un segmento o di un punto.
  61. Stabilire se un intero n è multiplo di un intero m e, in caso affermativo, scrivere il corrispondente fattore moltiplicativo. Ad esempio se n=36 ed m=4 si deve dare in uscita: FATTORE = 9.
  62. Dato il numeratore e il denominatore di una frazione, stabilire se tale frazione è propria, impropria o apparente.
  63. Un viaggiatore di commercio percorre ogni giorno un certo numero di chilometri con la propria autovettura. Al ritorno può chiedere alla sua ditta un rimborso spese sotto una delle diverse forme: (Sapendo che la benzina costa 1.60€/l,) costruire un programma che, in base ai chilometri percorsi, determini quale forma di rimborso è più conveniente.
  64. In un negozio un cliente, avendo speso una certa cifra, paga con una banconota o una moneta tra le seguenti: 500, 200, 100, 50, 10, 5, 1, 0.50, 0.20, 0.10, 0.5, 0.02, 0.01. Scrivere un programma che calcoli l'ammontare e la composizione del resto in banconote e/o monete, in maniera tale che tale resto risulti composto dal minimo numero di pezzi.
  65. Dato un numero decimale euro 50 trasformarlo nella numerazione romana.
  66. Stabilire se un anno A è bisestile. Un anno è bisestile se è divisibile per 4. Fanno eccezione gli anni fine secolo che sono bisestili soltanto se sono divisibili per 400.
  67. Un garage fa pagare 3 euro per un'ora o frazione di un'ora, più 1 euro per ogni ora o frazione oltre la prima, fino ad un massimo, per 24 ore, di 15 euro. Scrivete un programma che calcoli il prezzo da pagare per un cliente del garage.
  68. Un'azienda elettrica ha stabilito le seguenti tariffe:
    KILOWATT ORA COSTO IN €
    0 - 500 20
    501 - 1000 20 + 0.08 per ogni kwh oltre 200
    1001 e oltre 25 + 0.05 per ogni kwh oltre 1000
    Scrivere un programma che dato il consumo mensile calcoli e stampi l'importo della bolletta.
  69. Supponendo che la multa per il superamento del limite di velocità sia basata sull'entità del superamento del limite stabilito e venga calcolata nel seguente modo:
    SUPERAMENTO DEI LIMITI (km/ora) MULTA (€)
    1 - 10 100
    11 - 20 150
    21 - 30 250
    31 - 40 300
    + 40 400
    Scrivete un programma che, al momento dell'esecuzione chieda il limite di velocità e la velocità e stampi l'importo della multa.
  70. Supponendo che la bolletta del telefono venga calcolata nel seguente modo: scrivete un programma che calcoli l'importo da pagare, avendo come input il numero di scatti.
  71. Il BONUS di un rappresentante per le vendite è: Calcolare il BONUS conoscendo il valore delle vendite.
  72. Una società immobiliare vende appartamenti al mare ai seguenti prezzi:
    DISTANZA DAL MARE € AL MQ.
    meno di 200 m 1.800
    da 201 m a 500 m 1.500
    oltre 500 m 1.000
    Data la misura della superficie dell'appartamento in mq. e la distanza dal mare, calcolare il prezzo.
  73. Calcola il consumo di gas e stampa la bolletta per N utenti; di ciascuno viene dato il nominativo, il consumo precedente, il consumo attuale e la data.
    Sui metri cubi consumati calcola l'importo secondo la seguente tabella:
    CONSUMO COSTO
    fino a 150 mc 3.00 €/mc
    da 151 mc a 200 mc 3.50 €/mc
    oltre 200 mc 4.10 €/mc
    Calcolare l'importo da pagare, aggiungendo l'IVA del 22%.
  74. Scrivere un programma che consenta la elaborazione di una ipotetica scheda di pedaggio autostradale. Il programma deve quindi prevedere: Al valore ottenuto dovrà essere aggiunto un supplemento di spese in ragione di 0.01€ al km per i primi 100 km e 0.05€ al km per il successivi km percorsi.
  75. Su una somma di denaro, viene applicata una trattenuta fiscale secondo il seguente schema: Data la somma, calcola l'ammontare della trattenuta.
  76. Un'automobile viene affittata a queste condizioni: Ponete come input i giorni di utilizzo, la distanza percorsa e calcolate l'affitto totale.
  77. Una ditta propone le seguenti forme di pagamento:
    1. ordinario a 30 gg;
    2. con sconto del 10% per pagamento immediato;
    3. con un aumento del 10% se a 60 giorni dalla consegna.
    Ponete come input la forma di pagamento e il prezzo; l'output è dato dalla somma da pagare.
  78. Supponete che la parità di scambio tra Euro e Dollaro sia la seguente: 1 € = 1,23 $. Il programma deve chiedere all'utente se intende cambiare:
    1. Dollari in Euro;
    2. Euro in Dollari.
    Data una somma di denaro calcolare il controvalore.
  79. Il D.P.R. 12/01/1991 stabilisce le tariffe del servizio di telefono SIP. Per un abbonamento singolo della categoria B (il normale abbonamento telefonico in abitazione privata) esso prevede che la bolletta bimestrale sia così calcolata: Inoltre, all'utente che effettui « un numero di scatti superiore a 140, il numero di scatti a € 0.05 è ridotto di uno ogni scatto oltre il 140, con conseguente addebito degli stessi a € 0.13. Ne consegue che al raggiungimento dei 240 scatti bimestrali tutto il traffico sarà tassato a € 0.13 » (tratto dall'elenco abbonati 1991/92, p.10). Scrivere un programma che, noto il numero degli scatti, determini l'importo dovuto. (A proposito, non dimenticare che tale importo è soggetto al pagamento dell'IVA al 22%).

Esercizi sulla Iterazione

  1. Stampare i primi N numeri interi.
  2. Stampare i numeri pari minori di N.
  3. Stampare i numeri pari minori di N in ordine decrescente.
  4. Stampare multipli di A minori di N.
  5. Stampare i primi N multipli di un numero.
  6. Stampare i dieci numeri pari successivi al numero N.
  7. Calcolare la somma dei primi N numeri naturali.
  8. Dati N numeri effettuarne la somma.
  9. Dati N numeri contare quanti sono i valori pari e quelli dispari.
  10. Dati N numeri contare quanti sono i multipli di 3.
  11. Dati N numeri contare quanti sono i multipli di A.
  12. Dati N numeri contare quanti sono positivi, negativi e uguali a zero.
  13. Determinare quanti numeri multipli di K sono compresi nell'intervallo [A..B] (estremi compresi).
  14. Dati N numeri stampare la somma di quelli pari e di quelli dispari.
  15. Determinare la somma dei numeri negativi e positivi di un insieme di N numeri relativi.
  16. Dati N numeri calcolare la media aritmetica.
  17. Dati N numeri calcolare la media aritmetica dei valori pari e quella dei valori dispari.
  18. Dati N numeri determinare il valore più piccolo tra quelli incontrati, indicandone il numero d'ordine.
  19. Dati N numeri determinare il valore maggiore e quante volte esso ricorre.
  20. Data una serie di N numeri determinare il valore più grande e quello immediatamente inferiore (il secondo).
  21. Date N misure x1, x2, x3, ..., xn calcolare la media geometrica.
  22. Determinare il fattoriale di un numero intero N; valgono le seguenti relazioni: N! = N (N-1) (N-2) ... 1, 0! = 1, 1! = 1.
  23. Date N terne di numeri calcolare di ciascuna la media aritmetica. Determinare anche di quanto la media si discosta da un numero prefissato, uguale per tutte le medie.
  24. Date N coppie di numeri contare e stampare quelle la cui somma è compresa in un intervallo [A..B] (estremi compresi
  25. Date N coppie di numeri contare e stampare quelle che hanno i valori l'uno l'opposto dell'altro.
  26. Date N coppie di numeri contare e stampare quelle che hanno i valori l'uno il reciproco dell'altro.
  27. Date N coppie di numeri determinare quante sono concordi e quante discordi.
  28. Date N coppie di numeri reali contare quelle che generano un prodotto pari, dispari o uguale a zero. (Anche senza eseguire l'operazione).
  29. Date N coppie di numeri reali contare quelle che generano un prodotto negativo, positivo o uguale a zero. (Anche senza eseguire l'operazione).
  30. Date n coppie di numeri reali contare quelle che generano una somma positiva o negativa. (Anche senza eseguire l'operazione).
  31. Trovare i divisori propri di un numero.
  32. Trovare il minor numero di banconote da 100000, 50000, 10000, 5000, 1000, necessarie per pagare una assegnata cifra C.
  33. Verificare se un numero è una potenza del 2 e se lo è determinare l'esponente.
  34. Date N assicurazioni di automobili: l'importo viene aumentato del 10% se vi è stato più di un incidente, altrimenti viene scontato del 6%. Calcola la somma degli importi e stampa il risultato.
  35. Lo stipendio di un dipendente è formato da 3 parti: A, B, C. Sulla parte A si applica la trattenuta del 19%, sulla parte B il 16%, sulla parte C il 2%. Sul totale A+B+C viene trattenuto lo 0.5%. Stampa il nome del dipendente, il totale delle trattenute e lo stipendio finale netto. Ripeti il procedimento per N dipendenti.
  36. Determinare il massimo con relativa molteplicità tra N numeri dati in input uno alla volta.
  37. Date in input una alla volta N frazioni riconoscere quelle irriducibili.
  38. Determinare l'ammontare dell'interesse composto avendo in input il capitale, la percentuale ed il numero di anni.
  39. Dato un elenco di N città con la loro distanza in km da Roma, stampa il tempo impiegato da un mezzo avente velocità media di 120 km/h per raggiungere Roma.
  40. Dato un elenco di N studenti (nome + comune di provenienza) conta quanti sono quelli che abitano a Torino e calcola la percentuale di questi sul totale degli studenti.
  41. Dati N numeri, sommali 4 a 4.
  42. Scrivi i dieci numeri pari successivi al numero N.
  43. Stampa i primi N numeri dispari successivi al numero A.
  44. Tra N codici di avviamento postale, scegli quelli che hanno le prime due cifre uguali a 20 e contali. Stampa il risultato.
  45. Trovare il primo termine della successione di Fibonacci che supera N (la successione di Fibonacci è una successione di numeri interi non negativi in cui ogni termine viene ottenuto sommando i due termini precedenti: 0 1 1 2 3 5 8 ...).
  46. Date N persone, di ciascuna sono dati il peso e l'altezza. Calcolare per ognuna l'indice di obesità = peso diviso l'altezza. Si conti man mano il numero di quelle che hanno obesità maggiore di un valore K prefissato.
  47. In un mese una società di assicurazioni ha stipulato N contratti di assicurazione su motociclette secondo la seguente formula: Quanto ha incassato la società alla fine del mese?
  48. In un quiz vengono poste a un concorrente un certo numero di domande facili e difficili. Se risponde giusto a una domanda facile guadagna 2 punti, a una domanda difficile 4 punti. Se risponde sbagliato a una domanda facile perde 4 punti, a una domanda difficile perde 2 punti?
  49. Conoscendo le vendite di copie di un quotidiano in un mese, calcolare la media giornaliera di copie vendute e trovare il giorno in cui si è registrata la vendita massima. (Controllare l'esattezza del numero di giorni del mese).
  50. Per N città vengono registrate le temperature minime e massime di una giornata. Stampare alla fine il nome della città più fredda e di quella più calda. È un problema di ricerca del minimo e del massimo. La città più fredda si intende quella con la temperatura più bassa. La più calda è quella con temperatura più alta.
  51. Dato un elenco di persone, con nome, città e data di nascita, stampare il nome del più giovane della città di Milano.
  52. Dati N numeri reali, determinare il massimo divisore di un numero K arbitrario.
  53. Dati N numeri determinare il massimo dei numeri pari e di quelli dispari.
  54. Dato un elenco di N numeri, scegli quelli che sono maggiori di 10 e minori di 100. Di questi calcola la somma e stampa il risultato.
  55. Dato un numero N calcolare il suo quadrato sommando i primi N numeri dispari. Esempio: N = 7 quadrato di 7 = 49 Ordine numeri dispari: 1 2 3 4 5 6 7 8 9 10 numero dispari: 1 3 5 7 9 11 13 15 17 19 Somma numeri dispari: 1 4 9 16 25 36 49 64 81 100.
  56. Progettate un algoritmo che legga un numero primo b < a e scriva quante volte a è divisibile per b. Per esempio se a=162 e b=3, a è divisibile 4 volte per b.
  57. Progettate un algoritmo che scriva tutte le coppie di numeri che danno per prodotto 60.
  58. Progettate un algoritmo che scriva tutte le coppie di numeri pari la cui somma è 20.
  59. Progettate un algoritmo che scriva tutte le coppie di numeri naturali la cui somma è 20.
  60. Costruite un algoritmo in grado di individuare quali, tra i numeri naturali di una lista, sono uguali a (o maggiori, o minori di) un assegnato numero k.
  61. Determinare i quadrati perfetti da 1 a 100.
  62. Calcolare il quoziente fra due numeri applicando il metodo delle sottrazioni ripetute.
  63. Calcolare il prodotto fra due numeri applicando il metodo delle addizioni ripetute.
  64. Calcolare la potenza applicando il metodo delle moltiplicazioni ripetute.
  65. Date le altezze di N persone, calcola e stampa la loro altezza media. Inoltre se la media è maggiore o uguale a 170 stampa il messaggio "GIGANTI" altrimenti il messaggio "BASSOTTI".
  66. Dati N voti calcolare e stampare la loro media. Inoltre se la media è >=6 stampare il messaggio "PROMOSSO" altrimenti il messaggio "RESPINTO".
  67. Dati N numeri visualizzare solo i pari.
  68. Dato un numero naturale N stamparne la tabellina.
  69. Determinare i numeri primi da 2 fino ad N.
  70. Determinare i divisori di un numero naturale N.
  71. Scomporre un numero in fattori primi.
  72. Stampare i numeri naturali da 0 a 100.
  73. Stampare i numeri dispari da 1 a 99.
  74. Stampare i numeri pari da 100 a 0.
  75. Scrivere un algoritmo che visualizzi sullo schermo i numeri naturali da 1 a 10, il loro quadrato, il loro cubo.
  76. Scrivere un programma che visualizzi i numeri da 100 a 5 ad intervalli di 5.
  77. Dati N quadrati, calcolarne il perimetro e l'area.
  78. È dato un elenco di N oggetti formato da: nome della sostanza, peso, volume. Di ciascun oggetto calcola il peso specifico e comunica il nome delle sostanze che hanno peso specifico maggiore di 1.
  79. Dati dieci numeri in ingresso, calcolare la somma di quelli di posto dispari (il 1º più il 3º più il 5º, ecc.) e la somma di quelli di posto pari (il 2º più il 4º più il 6º, ecc.). Calcolare poi la differenza tra le due somme e mandare in uscita, dei dieci numeri, solo quelli che non superano tale differenza.
  80. Dati N numeri interi determinare il minimo fra i valori dispari.
  81. Leggere due sequenze ordinate di interi e stabilire se vi sono degli elementi in comune.

Esercizi sui Cicli Indefiniti

  1. Leggere una sequenza di numeri; al primo zero incontrato, determinare quanti numeri sono stati letti e la loro somma.
  2. Leggere una sequenza di numeri. Terminare la lettura quando si incontra un numero dispari e stampare quanti numeri sono stati letti e quanti fra essi sono risultati diversi da zero.
  3. Leggere una sequenza di numeri interi. Terminare la lettura quando si incontra un valore pari a 9999. Determinare quanti sono stati i valori pari e i valori dispari.
  4. Leggere e sommare una quantità indefinita di numeri reali finché la loro somma diventa uguale a zero.
  5. Leggere una sequenza di numeri finché non viene superato il numero N. Determinare la somma dei multipli di un numero A.
  6. Leggere una sequenza di numeri reali; determinare quanti valori sono interi (senza la parte decimale) ed effettuarne la somma. Terminare la lettura quando si incontra un valore uguale a -999.
  7. Leggere da tastiera un numero imprecisato di coppie di numeri interi. Terminare la lettura quando il primo dei due termini risulta uguale a zero. Contare le coppie che hanno il prodotto multiplo di un numero intero K.
  8. Leggere una sequenza di numeri reali; determinare il numero di valori che sono vicini ad un numero K arbitrario meno di 0.5. Terminare la lettura quando si incontra un valore uguale a 999.
  9. Realizzare una operazione di 'input controllato' in modo che vengano accettati soltanto numeri il cui valore assoluto sia compreso tra 5 e 10.
  10. Alla fine dell'anno vengono esaminati i risultati studente per studente: si contino i bocciati e i promossi delle classi prime e si calcolino le percentuali di bocciati e promossi sul totale degli studenti contati. In questo caso supponiamo di non conoscere il numero esatto degli studenti da esaminare. Stabiliremo perciò che l'inserimento del carattere « 0 » (ad esempio) durante la richiesta della classe, abbia significato di 'fine inserimento dati' e quindi di chiusura dell'iterazione.
  11. Inserire da tastiera una sequenza di numeri, finché la loro somma non supera il valore 200, e contarli.
  12. « La mamma va al mercato e compra n1 kg di una merce avente costo unitario c1, n2 kg di una merce avente costo c2, ..., e così via. Si vuole sapere quanto ha speso in totale la mamma per ogni tipo di merce e quanto ha speso in totale ». Scrivere un programma che risolve questo problema facendo la convenzione che l'elenco si ritiene esaurito quando si legge una quantità di merce pari a 0.
  13. Leggere una sequenza di interi e fermarsi quando si sono letti tutti i numeri interi compresi fra k1 e k2. Segnalare l'eventuale presenza di numeri già inseriti. Dare ogni volta l'elenco di tutti i numeri forniti nel caso venga fornito un numero non compreso fra k1 e k2.

Esercizi sulla Ricorsione

  1. Descrivere una procedura ricorsiva che calcoli l'n-esimo elemento della successione di Fibonacci.
  2. Il M.C.D.(a, b) può essere calcolato con un procedimento ricorsivo basato sulle seguenti relazioni:

    1. se a>b

    2. allora M.C.D.(a, b)=M.C.D.(a-b, b);

    3. (a, b)=M.C.D.(b, a);

    4. (a, a)=a.

    Descrivere una procedura ricorsiva, basata sulle relazioni precedenti, che calcoli M.C.D.(a, b).
  3. L'algoritmo di ricerca binaria si presta anche ad una realizzazione come procedura ricorsiva. Infatti il processo di suddivisione della tabella può essere applicato ricorsivamente alle varie sottotabelle individuate fino a quando la sottotabella non si riduce ad un unico elemento. Scrivere una tale procedura tenendo conto delle seguenti convenzioni: la chiave da ricercare è K, l'insieme su cui operare è un vettore V di N elementi, i limiti inferiore e superiore della sottotabella individuata sono indicati da t e u rispettivamente.
  4. Scrivere un programma per il calcolo del fattoriale di un numero (con 0!=1 per definizione) in modo ricorsivo.
  5. Definizione ricorsiva dei coefficienti binomiali.
    Definiamo per n e k interi, \( \displaystyle \binom{n}{k} = \frac{n!}{k!(n-k)!} \), \( \displaystyle \binom{n}{k} \) si chiama coefficiente binomiale.
    Ad esempio \( \displaystyle \binom{5}{3} = \frac{5!}{2! 3!} \)
    Dare una definizione per ricorrenza di \( \displaystyle \binom{n}{k} \), con n fissato e scrivere un programma basato su tale definizione.
  6. Scrivere un programma che calcoli la somma di due interi x e y in modo ricorsivo come segue:
  7. Scrivere un programma che calcoli il prodotto di due interi x e y in modo ricorsivo come segue:
  8. Scrivere un programma che calcoli la potenza di un intero x elevato ad un altro intero y in modo ricorsivo come segue:
  9. La letteratura popolare riporta questa filastrocca:
    "C'era una volta un re, seduto su un sofà,
    che disse alla sua serva: "Raccontami una storia!"
    E la serva cominciò:
    "C'era una volta un re, seduto su un sofà,
    che disse alla sua serva: "Raccontami una storia!"
    E la serva cominciò:
    "C'era una volta un re, .....

    Si vuole una procedura ricorsiva per la stampa della filastrocca; poiché tale procedura non ha, evidentemente, condizioni di terminazione, prevedere l'introduzione di un parametro che permetta la conclusione del racconto.
  10. Scrivere una function ricorsiva che stabilisca se una data stringa è palindroma. Un stringa è palindroma quando risulta uguale al suo rovesciamento. Esempi: 'AMA', 'ESSE', ...
  11. Scrivere una function ricorsiva che effettui la ricerca binaria su una sequenza vettoriale ordinata A[INF..SUP].
  12. Scrivere una function ricorsiva che calcoli il prodotto di due numeri naturali tenendo presente che si dispone soltanto dell'operazione di somma, di moltiplicazione per 2 e di divisione per 2.

Esercizi: Operatori sugli Interi

  1. Dato un numero intero N, stabilire se è pari o dispari.
  2. Dato un numero intero N, stabilire se è divisibile per A. (Controllare il resto della divisione).
  3. Verificare se un numero dato in input è divisibile sia per 3 sia per 5.
  4. Verificare se un numero dato in input è divisibile per 3 o per 7.
  5. Verificare se un numero dato in input è divisibile per 3 ma non per 5.
  6. Determinare se un numero A ha la stessa parità di un numero B. (Due numeri hanno la stessa parità se sono entrambi pari o entrambi dispari).
  7. Stabilire se un numero naturale N, diverso da zero, è divisore di altri due numeri qualsiasi.
  8. Determinare se la potenza an è un numero pari (senza effettuare l'operazione).
  9. Dato il numeratore e il denominatore di una frazione, stabilire se tale frazione è propria, impropria o apparente.
  10. Dati due numeri interi, stabilire, senza effettuare il calcolo, se la loro somma è pari o dispari.
  11. Data la base e l'esponente intero di una potenza, stabilire senza effettuare il calcolo, il segno di tale potenza.
  12. Data la base intera e l'esponente intero di una potenza, stabilire senza effettuare il calcolo, se tale potenza risulta pari o dispari.
  13. Conoscendo la misura di un tempo espressa in minuti, convertirla in ore e minuti. Esempio: se il numero dei minuti è 100, si dovrà ottenere, in uscita dal programma, 1h 40m.
  14. Conoscendo la misura di un tempo espressa in secondi, convertirla in ore, minuti e secondi. Esempio: se il numero dei secondi è 1630, si dovrà ottenere, in uscita dal programma, 0h 27m 10s.
  15. Considerare due misure di tempo espresse in ore e minuti primi; scrivere un programma che calcoli la differenza fra la prima e la seconda misura esprimendola in ore e minuti primi.
  16. Considerare due misure di tempo espresse in ore e minuti primi; scrivere un programma che calcoli la somma fra la prima e la seconda misura esprimendola in ore e minuti primi.

Esercizi sulle Stringhe

  1. Data una stringa di caratteri di lunghezza assegnata determinare quante volte un certo carattere vi è contenuto.
  2. Date due stringhe, la prima di lunghezza m e la seconda di lunghezza n (m>n) riconoscere se la seconda stringa è contenuta nella prima.
  3. Data una stringa di lunghezza assegnata costruirne altre due una coi caratteri di posto dispari (della prima) e l'altra coi caratteri di posto pari. Determinare il numero di caratteri delle due stringhe costruite.
  4. Date due stringhe di uguale lunghezza costruire una terza stringa contenente tutti i caratteri delle precedenti posti alternativamente uno della prima e uno della seconda.
  5. Dato in cifre decimali un numero intero minore di 100 scriverlo in lettere. (Si faccia attenzione alla irregolarità dei nomi dei numeri da 1 a 20).
  6. Dato in cifre decimali un numero intero minore di 1000 scriverlo in lettere. (Si utilizzi la esperienza/acquisita risolvendo l'esercizio precedente).
  7. Data una stringa ricavare una stringa contenente solo lettere dell'alfabeto (maiuscole e minu­scole) lasciando al posto di altri caratteri degli spazi bianchi.
  8. Data una stringa di n caratteri trasformare la prima lettera in maiuscolo.
  9. Data una stringa di n caratteri stampare tutte le lettere in maiuscolo.
  10. Si debba risolvere il problema di tradurre un numero in lettere per la stampa di assegni bancari. Si scriva un sottoprogramma che, ricevendo il numero da tradurre, in forma opportuna, ed il nome dell'area che deve contenere la traduzione, provveda a fornire tale traduzione. Si supponga il numero intero, al massimo di 9 cifre.
  11. Trasformare una data nella forma gg/mm/aa nella forma in lettere.
    Esempio: 10/10/88 --> 10 ottobre 1988.
  12. Una somma di denaro viene versata il giorno G1 e viene ritirata il giorno G2. Calcolare la differenza in giorni fra le due date che sono digitate nella forma GG/MM/AA.
  13. Stabilire se un numero N è naturale oppure no senza la funzione INT.
  14. Immessa da tastiera una parola determinare da quante lettere è formata.
  15. Stabilire di quante cifre è composto un numero.
  16. Determinare se una parola inizia per vocale o consonante.
  17. Stabilire, senza la funzione INT, se un numero è divisibile per 100.
  18. Stabilire se un numero è divisibile per 4 applicando il relativo criterio di divisibilità.
  19. Dato un numero stabilire se è divisibile per 7 applicando il relativo criterio di divisibilità.
  20. Stabilire se un numero è divisibile per 3 applicando il relativo criterio di divisibilità.
  21. Stabilire se un numero è divisibile per 1000.
  22. Scrivere un programma che elimini gli spazi bianchi da una stringa S letta in ingresso.
  23. Scrivere il numero di vocali contenute in una stringa S.
  24. Immesso da tastiera un verbo, comunicarne la desinenza.
  25. Stabilire se un numero è dispari controllando la cifra meno significativa.
  26. Stampare una parola in ordine inverso a quello in cui è stata scritta.
  27. Dato un vettore contenente n caratteri verificare se al suo interno ci sono elementi posti in una sequenza data e quante volte vi è contenuta.
  28. Una "palindrome" è una parola che può essere letta nello stesso modo sia da destra verso sinistra che da sinistra verso destra, ad esempio: otto, Ada. Descrivere un algoritmo che, data una paro­la costituita da k lettere rappresentate come x1, x2, x3, ..., xk, stabilisce se la parola è una palindrome oppure no.
  29. Si scrivano le seguenti funzioni personali per la elaborazione di stringhe di caratteri, che realizzano le seguenti operazioni:
    1. concatenazione di due stringhe;
    2. ricerca di una stringa in una data;
    3. determinazione della lunghezza di una stringa;
    4. conversione di una stringa con caratteri numerici in un numero;
    5. conversione di un numero in una stringa di caratteri;
    6. confronto fra due stringhe;
  30. Eliminare, da una frase, gli spazi ripetuti lasciandone uno solo.
  31. Leggere un vettore di parole terminante la con parola fine. Restituire lo stesso vettore con le parole scritte al contrario.
    Esempio: PIPPO CASA .... FINE --> OPPIP ASAC .... FINE.
  32. Contare, su 70 caratteri dati da tastiera, quante volte c'è il carattere '$'.
  33. Data una stringa di caratteri determinare se vi è contenuta una sottostringa data S di K caratteri e quante volte ricorre.
  34. Costruire due frasi (lunghe max 300 caratteri l'una) contenenti parole (lunghe max 20 caratteri l'una) e risolvere i seguenti problemi:
    1. dire quale delle due frasi contiene più parole;
    2. dire in quale frase è presente la parola più lunga ed in quale quella più corta (stamparle);
    3. stampare le parole in comune tra le due frasi;
    4. stampare le parole presenti nella 1ª frase ma non nella seconda, e viceversa;
    5. costruire una terza frase con le parole del punto "C" e stamparla;
    6. ordinare in modo alfabetico le parole della frase costruita nel punto "E", creando quindi una 4ª frase e stamparla;
    7. dire se nella 1ª frase ci sono parole ripetute più volte (stamparle);
    8. fare lo stesso del punto "G" sulla 2ª frase.
  35. Data una sequenza di parole terminata dalla parola "FINE", si vuole sapere, per ogni parola, se è formata da più vocali o da più consonanti.
    1. descrivere un possibile algoritmo che risolva l'esercizio proposto;
    2. sviluppare il procedimento in Linguaggio di Progetto;
    3. realizzare il programma corrispondente in linguaggio C.
  36. Data una stringa dire se in essa risultano correttamente bilanciate le parentesi tonde, quadre e graffe.
  37. Realizzare in linguaggio C un programma che leggendo in ingresso una sequenza di parole ter­minata con "FINE", conti quante di esse hanno almeno una delle seguenti consonanti doppie: "p", "r", "s", "t".
  38. Determinare quante volte un elemento è ripetuto in una certa stringa di n elementi.

Esercizi sugli Array monodimensionali (Vettori)

  1. Costruire un vettore di N elementi con valori letti da tastiera.
  2. Costruire un vettore di N posizioni, inserendo in ogni elemento il valore del suo indice.
  3. Caricare un vettore di N posizioni, stampando la somma dei suoi elementi.
  4. Dato un vettore di N elementi, determinare se ciascun elemento è pari o dispari.
  5. Caricare da tastiera un vettore di N elementi. Scorrendo il vettore, al primo zero incontrato stampare la somma di tutti gli elementi considerati e il loro numero.
  6. Dato un vettore di N posizioni, stampare la somma dei numeri pari in esso contenuti e la somma dei numeri dispari.
  7. Dato un vettore numerico di N posizioni determinare la somma delle componenti positive e quella delle componenti negative.
  8. Dato un vettore numerico di N posizioni stampare la media aritmetica dei valori pari e dei valori dispari.
  9. Dato un vettore di N elementi stampare l'elemento maggiore e il suo indice.
  10. Dato un vettore numerico di N posizioni caricato in memoria determinare il valore più grande e quello immediatamente inferiore (il secondo), indicandone la posizione.
  11. Dato un vettore di N posizioni determinare l'elemento minimo, l'elemento massimo e le loro posizioni.
  12. Dato un vettore numerico di N posizioni al primo elemento dispari stampare quanti valori diversi da zero si sono incontrati, il numero dispari incontrato e la sua posizione nel vettore.
  13. Dato un vettore numerico di N posizioni caricato in memoria, ordinarlo in ordine crescente e stamparlo.
  14. Mettere il contenuto della prima posizione di un vettore nell'ultima e quello dell'ultima nella prima; il secondo nella penultima, ecc. (Vettore di dimensione N).
  15. Dato un elenco di nomi, controlla se un nome è compreso nell'elenco.
  16. Dati due array di numeri naturali A(N), B(M) e supponendo che essi siano stati ordinati in modo crescente, costruire un array F con N + M elementi ordinati nello stesso modo.
  17. Data una stringa di N caratteri alfabetici caricata in un vettore, calcolare la frequenza di una lettera data in input.
  18. Caricare in memoria un vettore numerico di N posizioni e calcolare la media degli elementi interni all'intervallo [A..B] (estremi compresi) e la media di quelli esterni; calcolare altresì la percentuale degli elementi esterni ed interni all'intervallo.
  19. Leggere N numeri reali e memorizzarli in un vettore NUM di N elementi. Calcolare i quadrati degli N numeri e memorizzarli ordinatamente in un vettore QUADR di N elementi. Stampare i numeri ed i loro quadrati in una tabella opportuna.
  20. Nei vettori A e B, ciascuno di N elementi, sono memorizzate due parole di N caratteri ciascuna, un carattere per ogni elemento di vettore. Verificare se le due parole sono uguali ed in caso contrario determinare quale delle due parole precede l'altra nell'ordine alfabetico.
  21. Si leggano dall'esterno N numeri reali e si memorizzino in un vettore. Verificare che il vettore sia ordinato nel seguente modo: Se il vettore non è ordinato metterlo in ordine. Il vettore deve essere stampato secondo un prospetto del tipo seguente:
    INDICE ELEM.VALOREINDICE ELEM.VALORE
    1350.5426.45
    3330.8548.12
    5317.19613.70
    ............
    ............
  22. Leggere dall'esterno N numeri aventi al massimo 3 cifre, interi positivi, e memorizzarli in un vettore VET di N elementi. Contare le frequenze con le quali i numeri si ripartiscono nelle decadi 0-9, 10-19, ...., 980-999 e memorizzare tali frequenze nel vettore DEC. Stampare i risultati.
  23. Dopo aver caricato un vettore numerico, confrontare la somma delle componenti di indice pari con la somma delle componenti pari e dire se la somma maggiore è divisibile per un assegnato valore K (K<>0).
  24. Dato un vettore di N elementi, contenente valori numerici, separare i valori positivi da quelli negativi, memorizzandoli in due vettori distinti. Segnalare la posizione occupata all'interno del vettore dagli elementi nulli e calcolarne il numero.
  25. In un vettore alfanumerico trovare la stringa (o le stringhe) di lunghezza maggiore, precisandone la posizione occupata all'interno del vettore.
  26. Ordinare un vettore alfanumerico in base alla lunghezza delle sue componenti (per prima la stringa di lunghezza minore, e così via fino all'ultima stringa che è quella di lunghezza maggiore).
  27. Gli elaboratori sono spesso usati per eliminare voci doppie da un elenco. Negli esempi si possono includere l'elaborazione di elenchi di firme per una petizione, elenchi e nomi di indirizzi, elenchi di numeri di identificazione (come il numero di codice fiscale). Dato quindi un elenco di voci ottenerne un altro senza le voci duplicate, e con le voci rimanenti sempre nello stesso ordine dell'elenco originale e stamparlo.
  28. Dato un vettore di N elementi costruire due vettori tali che contengano uno gli elementi dei posti pari e l'altro dei posti dispari.
  29. Memorizzata in un vettore una frase lunga N caratteri (un carattere per ogni posizione) trovare le parole formate da tre lettere.
  30. Dati 2 vettori V1 e V2 di dimensione N e M costruire il vettore V3 somma degli altri due prendendo in considerazione N = M oppure N * M.
  31. Stampare il calendario del 1990 sapendo che l'ultimo giorno del 1989 sarà domenica.
  32. Dato un vettore di dimensione N trovare il massimo, stamparne la posizione e sostituirlo con zero; trovare il successivo massimo stamparne la posizione e sostituirlo con zero, e così via fino a quando tutti gli elementi del vettore risulteranno nulli.
  33. Si vuole stampare un calendario per un anno compreso tra il 1975 ed il 1999. Si sa che il primo gennaio 1975 era mercoledì. Inoltre si sa che gli anni bisestili sono quelli divisibili per 4, ma non sono bisestili quegli anni che sono divisibili per 100 e non per 400. Il dato di ingresso è un numero compreso tra 1975 e 1999. Il calendario deve essere in forma tabellare così:
    GENNAIO FEBBRAIO
    D L M M G V S ......
    1 2 3 4 ......
    5 6 7 8 9 10 11 ......
    12 13 14 15 16 17 18 ......
    ... ... ... ... ... ... ... ......
    ... ... ... ... ... ... ... ......

  34. Supponiamo di avere, già registrate nella memoria del nostro calcolatore, due serie di numeri, costituite da 20 elementi ciascuna. Gli elementi sono numeri interi e sono in disordine. Si desidera:
  35. Dati 2 vettori numerici A e B, di dimensione N, trovare il minimo e il massimo e stabilire quale dei due vettori ha il massimo campo di variazione (elemento MAX - elemento MIN).
  36. Dato un vettore numerico di N posizioni calcolare la media aritmetica delle componenti in posizione dispari e la media aritmetica di quelle in posizione pari. Determinare quale è la media maggiore.
  37. Dato un vettore numerico di N posizioni, memorizzare in un vettore gli indici degli elementi uguali a K. Stampare il vettore V indicandone il numero di elementi.
  38. Dato un vettore numerico, di dimensione N, costruire due vettori A e B contenenti rispettivamente gli elementi pari e quelli dispari e stamparli.
  39. Dato un vettore numerico V, di dimensione N, costruire 2 vettori A e B contenenti rispettivamente gli elementi negativi e positivi (escludere gli elementi nulli). Costruire un vettore C contenente alternativamente un elemento dispari e uno pari. Se i vettori A e B hanno dimensioni diverse procedere alla costruzione di C fino a quando ci sono elementi sia di A che di B. Stampare il vettore C e quanti elementi sono rimasti inutilizzati del vettore più lungo.
  40. Dati 2 vettori numerici B e E, di dimensione N, contenenti rispettivamente base ed esponente, determinare qual è la potenza maggiore, la potenza minore e i loro indici.
  41. Dato un vettore numerico, di dimensione N, determinare il valore minore, quante volte questo ricorre e le posizioni all'interno della lista.
  42. Per N città vengono lette il nome la temperatura massima e minima registrate in una giornata. Stampare il una tabella le temperature e i nomi delle città. Alla fine stampare le città con la temperatura più fredda e quelle con la temperatura più calda.
  43. Le temperature minime registrate nei giorni di un mese sono organizzate in una tabella. Calcolare la media delle temperature rilevate nel mese e stampare la media. Si stampino poi i giorni del mese in cui le temperature sono state inferiori alla media mensile.
  44. Dato un elenco di studenti con la lingua straniera scelta, estrarre i nomi degli studenti che hanno scelto di studiare inglese e di questi fare l'elenco alfabetico.
  45. Dato un vettore numerico, di dimensione N, calcolare la media aritmetica e stampare gli elementi inferiori a tale valore.
  46. Dato un elenco di libri con autore, argomento e prezzo determinare il volume con il prezzo minimo, il volume con il prezzo massimo scegliendoli fra quelli che riguardano un argomento dato in input. Se non vi sono volumi corrispondenti all'argomento proposto stampare un appropriato messaggio.
  47. È dato un elenco di N studenti con nome, classe, voto finale. Stampare il voto più basso, quello più alto e il nome e la classe degli studenti ai quali appartengono. Calcolare la media aritmetica dei voti e verificare se è sufficiente o insufficiente. Stampare nome e classe degli studenti che hanno il voto finale inferiore alla media aritmetica dei voti. Contare il numero dei promossi e dei respinti e calcolarne le rispettive percentuali. Stampare l'elenco dei promossi cioé di coloro che hanno il voto finale sufficiente.
  48. Dato un vettore numerico, di dimensione N, trovare il più piccolo e il più grande divisore di K e la loro posizione all'interno del vettore.
  49. Si ha un elenco di articoli di magazzino formato da descrizione, giacenza, prezzo acquisto, prezzo vendita IVA esclusa. Determinare la valorizzazione di magazzino e stampare un listino alfabetico riportante descrizione, prezzo di vendita senza IVA e con IVA 22%.
  50. In un concorso pubblico ogni candidato ha affrontato due prove: una scritta e una orale. Eseguire la media aritmetica dei punteggi di ciascun candidato e memorizzarla in un apposito vettore. Stampare due elenchi, come sotto specificato: Gli elenchi devono riportare: nominativo, punteggio medio, IDONEO/NON IDONEO. Sono idonei i candidati che hanno ottenuto un punteggio medio sufficiente. Determinare infine la percentuale degli idonei e dei non idonei.
  51. In un concorso pubblico ogni candidato deve affrontare due prove, una scritta e una orale. Accedono alla prova orale i candidati che hanno ottenuto un punteggio sufficiente nella prova scritta. Caricare in un vettore i nominativi e i punteggi della prova scritta e stampare un elenco alfabetico riportandovi nominativo, punteggio, IDONEO/NON IDONEO. Caricare in un ulteriore vettore i punteggi della prova orale dei soli candidati idonei all'orale. Stilare la graduatoria definitiva per punteggio (media delle due prove), dal più alto al più basso. Determinare infine:
  52. Si ha un elenco di N studenti, formato da nome, classe, giudizio scritto, giudizio orale. Determinare:
  53. Si ha un elenco di studenti, formato da nome, classe, sesso. Stampare l'elenco alfabetico dei maschi e l'elenco alfabetico delle femmine.
  54. Si ha un elenco di studenti di scuola media formato da nome e classe. Stampare gli elenchi alfabetici della classe prima, seconda, terza.
  55. Dato un elenco di libri, formato da titolo, autore, argomento, stampare l'elenco alfabetico per autore dei volumi riguardanti un argomento dato in input.
  56. Si conoscono i movimenti effettuati su un C/C di una banca. Ogni movimento è definito da data, causale, somma. Conoscendo il saldo iniziale determinare il saldo finale in base ai movimenti effettuati, producendo un prospetto come sotto evidenziato:
    DATA DESCRIZ. DARE AVERE SALDO
    .......... .......... .......... .......... ..........
    .......... .......... .......... .......... ..........
    .......... .......... .......... .......... ..........
    Se la somma è positiva è in DARE, se negativa è in AVERE.
  57. Si hanno N schede di magazzino riportanti: codice, descrizione, giacenza, prezzo di acquisto, prezzo di vendita. Leggere i movimenti effettuati durante una giornata lavorativa aggiornare le schede del magazzino. I movimenti di magazzini sono descritti da codice articolo e quantità (se la quantità è positiva si tratta di un carico se invece è negativa di uno scarico). Se un articolo non è in magazzino, stampare il messaggio:
    "ARTICOLO ..... NON IN MAGAZZINO".
    Se la giacenza è zero, stampare il messaggio:
    "ARTICOLO ..... CON GIACENZA A ZERO". Se la quantità disponibile è inferiore a quella richiesta, stampare il messaggio:
    "ARTICOLO ..... Q/TA' ..... - quantità non sufficiente-", e richiedere nuovamente la quantità da scaricare.

    Stampare la situazione di magazzino dopo la movimentazione producendo un prospetto ordinato per codice. Stampare il valore della merce presa in carico e il valore della merce venduta.
  58. Dato un vettore numerico verificare se i suoi n elementi sono in ordine crescente.
  59. Riempire un vettore numerico di n elementi con valori compresi fra 0 e 10 e che abbiano parte decimale uguale a zero o 0.5.
  60. Dati 2 vettori verificare se contengono gli stessi elementi.
  61. Dato un vettore numerico di n elementi determinare qual è l'elemento (o gli elementi) che si ripete più volte e quante volte si ripete.
  62. Cercare un elemento X nella porzione di vettore delimitata da due indici (non negativi per ipotesi).
  63. Dato un vettore numerico di N posizioni, verificare se i suoi elementi sono in ordine crescente.
  64. Dato un vettore numerico di N elementi, verificare se un valore dato è presente fra i suoi componenti; se è compreso evidenziare il numero di volte che si ripete in caso contrario dare in uscita un opportuno messaggio.
  65. Dato un vettore di N elementi verificare se al suo interno ci sono elementi posti in una sequenza data e quante volte vi è contenuta.
  66. Dati due vettori, entrambi di N elementi, verificare se contengono gli stessi elementi.
  67. Dato un vettore numerico determinare qual è l'elemento (o gli elementi) che si ripete più volte e con quale frequenza.
  68. Leggere un vettore di interi positivi (max 50 numeri, ma possono essere anche di meno) e dire se questi hanno un divisore intero comune e dire quale.
    Esempio 1:
    se il vettore contiene:
    30 15 9 12 6 18 6 18 21
    il divisore comune esiste ed è 3
    Esempio 2:
    se il vettore contiene:
    5 9 18 15 31
    allora il divisore comune non esiste.
    
  69. Leggere tre vettori di float (max 50 numeri l'uno, e non necessariamente lunghi uguali) e dire se uno dei tre vettori contiene esattamente l'insieme dei valori che rappresenta l'intersezione degli insiemi di valori contenuti dagli altri due. Esempio:
    Vettore 1 --> 3 5 1 4 3 7 1 2
    Vettore 2 --> 5 1 4 2
    Vettore 3 --> 4 1 10 15 2 5 9
    il vettore 2 è l'intersezione dei vettori 1 e 3.
    
  70. Realizzare un programma in linguaggio C che, letto un vettore di 100 reali, dica quante volte avviene che, prendendo tre reali consecutivi del vettore R1, R2 e R3, sia verificata una delle seguenti condizioni:
    R1 + R2 = R3
    R1 - R2 = R3
    R1 * R2 = R.
    
  71. Leggere un vettore A[1..N] di interi e scrivere gli indici degli elementi di massimo o minimo relativo. Un elemento A[I] è di massimo (minimo) relativo quando il precedente A[I-1] e il successivo A[i+1] sono entrambi minori (maggiori) di A[I].
  72. Leggere e memorizzare in due vettori due insiemi A e B di interi compresi fra 1 e un certo Kmax. Costruire quindi un terzo vettore C costituito dall'unione degli altri due.
  73. Come il precedente per l'intersezione di A e B.
  74. Dato un vettore di numeri reali si vuole produrre in uscita la corrispondente sequenza normalizzata, cioé la sequenza dei numeri compresi tra -1 e 1 ottenuti dividendo ciascun numero per il massimo valore assoluto di tutta la sequenza.
  75. Dato un vettore di numeri interi (positivi e negativi) si vuole sapere qual è la porzione di sequenza che rende massima la somma dei suoi elementi. Ad esempio, dato il vettore:
    31 -41 59 26 -53 58 97 -93 -23 84
    (3) (7)
    si deve restituire 3 e 7 come indici delimitatori della porzione richiesta.

Esercizi sugli Array bidimensionali (matrici)

  1. Caricare da tastiera una matrice MAT di N righe per M colonne.
  2. Memorizzare in una matrice a dieci righe e dieci colonne i valori della tabellina pitagorica.
  3. Memorizzare in una matrice a 30 righe e 3 colonne, il cognome, il nome e la città di residenza di 30 ragazzi.
  4. Memorizzare in una matrice a N righe e 3 colonne, i primi N numeri interi, i loro quadrati, i loro cubi e stamparla.
  5. Caricare una matrice MAT di N righe per M colonne, inserendo in ogni elemento il prodotto fra i suoi indici.
  6. Caricare da tastiera una matrice MAT di N righe per M colonne e stampare la somma di tutti i suoi elementi.
  7. Supposto di aver caricata in memoria una matrice MAT di N righe per M colonne, ordinare ogni riga in ordine crescente.
  8. Ad una gara partecipano N concorrenti: di ogni partecipante si conosce il numero di iscrizione, il nome, il tempo impiegato. Stampare il numero e il tempo di quelli che hanno impiegato meno di 2 ore. Determinato poi il tempo del vincitore, stampare l'elenco dei distacchi degli altri concorrenti.
  9. Ad ogni persona che fa parte di un gruppo corrisponde un codice e un nome. Vengono introdotti in input N nomi con il codice. Scrivere poi il procedimento che consente di stampare il nome della persona corrispondente al codice richiesto.
  10. Confronta la colonna vincente del totocalcio con le N colonne giocate. Per ciascuna colonna fornisci il numero dei risultati esatti.
  11. Data una matrice quadrata di numeri reali cioé costituita da N righe ed N colonne, determinare la matrice trasposta della matrice data, cioé la matrice ottenuta da quella di partenza scambiando le righe con le colonne.
  12. Determinare il massimo ed il minimo elemento di un array bidimensionale A(M, N) fornendo anche la posizione, indice di riga e indice di colonna, all'interno dell'array.
  13. Determinare il valore della somma degli elementi delle colonne di un array bidimensionale A(M, N).
  14. Riempire un vettore con i nomi di N ragazzi. Riempire altresì una matrice numerica di dimensioni N x 5 con i voti di N studenti. I voti per ciascun ragazzo dovranno essere al massimo 5. Calcolare la media dei voti di ciascuno studente e memorizzarla in un vettore MEDIA di N posizioni. Calcolare anche la media globale degli N studenti. Infine stampare una tabella riportante i nomi degli studenti, la media e il relativo giudizio (sufficiente, buono, ...).
  15. Data una tabella contenente la classifica generale del campionato di calcio di serie A e una tabella contenente i risultati di una giornata di campionato, aggiornare la classifica generale.
  16. Controllare se in una tabella che rappresenta la classifica generale del campionato di calcio di serie A sono contenuti errori nelle colonne delle reti, delle partite, dei punti e della media (cioé controllare la consistenza dei dati: per esempio la somma di tutte le reti fatte da tutte le squadre deve essere uguale a quella di tutte le reti subite ....).
  17. Conoscendo la classifica generale al termine di una certa tappa del giro d'Italia e l'ordine di arrivo della tappa successiva con l'indicazione del tempo impiegato dal primo e dei distacchi di tutti gli altri, calcolare la nuova classifica generale. Si supponga che non ci siano stati ritiri e si ricordi che la classifica generale è una tabella ordinata per tempi crescenti.
  18. Nella tabella seguente sono presentate le vendite settimanali (in migliaia di €) di una catena di tre supermercati ognuno dei quali è diviso in quattro reparti:
    Supermercato 1 2 3 4
    1 21 8 22 41
    2 31 11 11 36
    3 15 19 23 29
    Scrivere un programma che accetti come input i dati di un array di ordine 3 x 4 dando come output le vendite complessive settimanali del singolo supermercato e della catena nel suo insieme.
  19. Scrivere un programma che legga dati, riga dopo riga, da una tabella simile a quella mostrata qui sotto. Dopo aver letto tutte le righe della tabella, il programma dovrebbe visualizzare il numero della riga in cui la somma dei valori risulti massima, il valore di tale somma, e il contenuto della linea trova in questo modo.
    Esempio:
    914655
    435983
    644745
    942591
    512496
    Il programma dovrebbe gestire un numero variabile di linee in ingresso. L'uscita dovrebbe avere approssimativamente il seguente formato:
    SOMMA MASSIMA: 210
    NELLA RIGA: 4
    CONTENUTO: 94 25 91.
  20. Leggete 6 valori interi da ognuna delle 12 righe immesse (72 valori in tutto). Mettete i dati in un vettore bidimensionale con 12 righe e 6 colonne: ogni riga corrisponde ai dati di una linea. Riordinate i dati in ogni colonna in modo che il valore più piccolo appaia nella prima riga, ed i valori successivamente più grandi nelle righe successive. Visualizzare infine tutti i valori del vettore ordinato. Generalizzare il problema.
  21. Data una matrice di ordine N costruire un vettore che contenga gli elementi dispari della matrice.
  22. Data una matrice di N righe e M colonne che contenga una sotto matrice con gli elementi uguale a 1, determinare il numero di righe e di colonne di questa sotto matrice.
    x x x x x x x x
    x 1 1 1 x x x x
    x 1 1 1 x x x x
    x 1 1 1 x x x x
    x 1 1 1 x x x x
    x x x x x x x x
  23. Data una matrice N x M trasferire la somma di tutti i numeri della prima riga nel primo elemento del vettore, la somma di tutti i numeri della seconda riga nel secondo elemento del vettore e così via.
  24. Data una matrice 3 x 3 determinare il determinante di Sarrus.
  25. Data una lista di alberghi, scegli quello più costoso e calcola il prezzo di pernottamento per una settimana.
  26. Vengono introdotti N vocaboli con la loro traduzione in lingua straniera. Introdotto poi un testo formato da vocaboli compresi nell'elenco, tradurre il testo vocabolo per vocabolo.
  27. Data una matrice quadrata caricare la sua diagonale principale in un vettore e trovarne il massimo.
  28. Scrivere un programma che, lette due matrici dello stesso tipo, stampi la matrice somma.
  29. Scrivere un programma che, lette due matrici conformabili, stampi la matrice prodotto.
  30. Scrivere un programma che letta una matrice A e una costante k, stampi la matrice ottenuta moltiplicando per k tutti gli elementi di A; la nuova matrice è indicata con k x A.
  31. Scrivere un programma che letta una matrice A, stampi la matrice -A i cui elementi sono gli opposti dei corrispondenti elementi di A.
  32. Data una matrice A scrivere il vettore V i cui elementi sono la somma degli elementi delle corrispondenti righe di A.
  33. Data una matrice A scrivere il vettore V i cui elementi sono la somma degli elementi delle corrispondenti colonne di A.
  34. Scrivere un programma che letta una matrice A calcoli e stampi la somma dei valori assoluti dei suoi elementi.
  35. Scrivere un programma che, letta una matrice A, calcoli e stampi la somma (senza valore assoluto) degli elementi.
  36. Scrivere un programma che, letta una matrice, stampi l'elemento di valore assoluto massimo e quello di valore assoluto minimo.
  37. Scrivere un programma che, letta una matrice A, calcoli e stampi la "C" norma di A ovvero la maggiore tra le somme dei valori assoluti degli elementi di ogni colonna della matrice. (Stampare oltre alla C-norma anche il numero della colonna alla quale corrisponde).
  38. Scrivere un programma che, letta una matrice A, calcoli e stampi la "R" norma di A ovvero la maggiore tra le somme dei valori assoluti degli elementi di ogni riga della matrice. (Stampare oltre alla R-norma anche il numero della riga alla quale corrisponde).
  39. Scrivere un programma che, letta una matrice A, calcoli la norma euclidea di A ovvero la radice quadrata della somma dei quadrati degli elementi di A.
  40. Sia data una matrice contenente in ciascuna delle sue n righe la data e la colonna vincente del totocalcio. Letta poi una matrice dello stesso tipo di m righe calcolare per ciascuna colonna i punti realizzati (inoltre se si tratta di un dodici o di un tredici). Controllare che la schedina abbia la data inclusa fra quelle della matrice risultati.
  41. Un viandante si trova ad attraversare un ruscello nel quale affiorano dei sassi. Il problema è quello di trovare un percorso che gli permetta di arrivare dall'altra parte senza percorrere giri viziosi. Si supponga di rappresentare il ruscello come una matrice a valori booleani, nella quale il valore di verità true rappresenta un sasso, mentre il valore false rappresenta assenza di sasso. Si suppone altresì che il viandante si trovi nella posizione 1,1 della matrice e che debba arrivare nella posizione n,n. I vincoli posti riguardano i movimenti i quali debbono consentire il passaggio da un sasso ad un altro a condizione che questi siano contigui tra di loro o per linee orizzontali o per linee verticali o per diagonale.
  42. Si numerino le 64 casella di una scacchiera come illustrato in figura. Una casella è così individuata da due numeri. Scrivere un algoritmo che, date due coppie di numeri che individuano due caselle, stabilisca se le due caselle sono dello stesso colore oppure no.
    1 2 3 4 5 6 7 8
    1 X X X X
    2 X X X X
    3 X X X X
    4 X X X X
    5 X X X X
    6 X X X X
    7 X X X X
    8 X X X X
  43. Ordinare una matrice sia per righe che per colonne.
  44. Data una matrice numerica di ordine N x M determinare qual è la riga con il massimo campo di variazione (diff. fra max e min).
  45. Data una matrice quadrata di ordine N determinare la somma degli elementi sopra e sotto la diagonale principale.
  46. Data una matrice quadrata di ordine N determinare la somma degli elementi sopra e sotto la diagonale secondaria.
  47. Data una matrice quadrata di ordine N determinare la somma dei suoi elementi, esclusi quelli delle due diagonali.
  48. Data una matrice di ordine N x M calcolare la somma degli elementi della corona esterna.
  49. Siano dati i primi n numeri naturali: 1, 2, ...., n. Si dice quadrato latino di ordine n una matrice quadrata di n righe e di n colonne avente in ogni riga e colonna una delle n! permutazioni dei numeri dati, con la condizione che in ogni riga e colonna non vi siano due numeri uguali. Ecco, ad esempio, un quadrato latino di ordine 4:
    1 2 3 4
    3 1 4 2
    2 4 1 3
    4 3 2 1
  50. Un quadrato latino si dice normalizzato quando la 1ª riga e la 1ª colonna sono formate dalla permutazione fondamentale 1, 2, 3, ..., n. È stato dimostrato che i quadrati latini normalizzati di ordine 2, 3, 4, 5, 6, 7 sono rispettivamente in numero di 1, 1, 4, 56, 9408, 16942080. Trovare tutti i quadrati latini normalizzati di ordine 2, 3, 4, 5 e alcuni di ordine 6, 7, 8.
  51. Scrivere un programma che, letta una matrice, stampi l'elemento di valore massimo e quello di valore minimo.
  52. Modificare il programma dell'es. precedente, stampando l'elemento di valore assoluto massimo e quello di valore assoluto minimo.
  53. Modificare il programma dell'es. 51, stampando oltre all'elemento di valore massimo e minimo anche il numero di riga e di colonna dove si trovano.
  54. Modificare il programma dell'es. 52 onde stampare anche il numero della riga e della colonna nelle quali si trovano gli elementi di valore assoluto massimo e minimo.
  55. Sia data una matrice in cui gli indici di riga rappresentano il tipo di vestito e gli indici delle colonne rappresentano la taglia. In ciascuna posizione della matrice sono memorizzati i mq di stoffa necessari per la confezione di ciascun vestito. Si supponga poi di avere un'altra matrice di N righe per 3 colonne; ogni colonna contiene rispettivamente il tipo del vestito da confezionare, il numero di taglia e la quantità di vestiti. Si vuole sapere, dopo aver creato tutti i vestiti se è avanzata della stoffa e quanta ne è avanzata.

Esercizi sui file

  1. Si deve organizzare un file che, per ogni elemento, contenga informazioni del tipo:

    identificatore elemento - proprietà
    Nel file si vogliono elementi in ordine crescente sul campo "identificatore", inoltre si vuole un'organizzazione che permetta di trovare velocemente tutti gli identificatori degli elementi che hanno lo stesso valore nel campo proprietà. Dare un'ipotesi di struttura per gli elementi del file che permetta di evadere le richieste. Scrivere una procedura che, ricevendo come parametro un valore per il campo "Proprietà" produca un elenco di tutti gli "identificatori" degli elementi che hanno quel valore come proprietà". (Fare tutte le ipotesi aggiuntive che si ritengono necessarie). Scrivere la parte di programma per creare la prima delle liste che concatenano gli elementi con lo stesso valore nel campo proprietà. Procedimento consigliato: il valore del campo proprietà su cui fare il concatenamento è quello del primo elemento del file. Per concatenare gli elementi, conservare la posizione dell'elemento in cui va inserito il puntatore, scorrere sequenzialmente il file fino al prossimo elemento da concatenare (se c'è), quando si trova, inserire la sua posizione, ottenuta contando le letture, nel campo puntatore dell'elemento conservato prima e quindi proseguire per tutto il file.
  2. Una compagnia di assicurazioni tiene in un file i dati relativi ai clienti (nome, cognome, indirizzo, targa auto assicurata); in un altro file i dati relativi ai contratti di assicurazione (numero polizza, targa auto assicurata, ammontare della rata annuale, dati di scadenza, un campo per indicare se la rata è stata pagata oppure no). Scrivere un programma che permetta di:
    1. inviare, quotidianamente, una lettera di invito al pagamento ai clienti la cui rata sia in scadenza "oggi";
    2. comunicare ai clienti che chiedono informazioni sulla cifra da pagare, ma che non ricordano né targa né numero di polizza, la cifra richiesta e, qualora il cliente, ricevuta l'informazione paghi, aggiornare il campo rata pagata o no.
  3. Un file di nome ACQUARIO, contiene le temperature dell'acqua, rilevate ogni ora, durante un giorno, in un acquario. Si vuole sapere qual è la temperatura più bassa che è stata registrata, quante volte ed in quali ore del giorno è stata registrata.
  4. Una mostra di scultura è aperta dall'1 al 20 di aprile. Il numero di visitatori di ogni giorno è registrato in un file di nome MOSTRA. Si vuole sapere quanto è stato il massimo numero di visitatori in un giorno, quante volte ed in quali giorni del mese è stato registrato tale numero.
  5. In un ospedale viene registrato, per ogni giorno dell'anno (da 1 a 365), il numero di nascite avvenute in quel giorno. Questi numeri sono memorizzati in un file di nome NATI. Si vuole sapere, a fine anno, quanto è stato il maggior numero di nascite in un giorno, quante volte ed in quali giorni è stato registrato tale numero.
  6. Durante un esperimento di laboratorio viene rilevata, ogni secondo, per 100 secondi, la velocità di un oggetto in movimento. I valori rilevati sono memorizzati in un file di nome MOTO. Si vuole sapere quanto è la minima velocità registrata, quante volte ed in quali secondi è stata registrata.
  7. Un ente pubblico finanzia dei progetti di ricerca, e vuole registrare le informazioni necessarie per poter sapere, dato il nome di un progetto, il denaro stanziato per tale progetto, inoltre vuole poter avere l'elenco dei progetti per cui è stata stanziata una somma in denaro inferiore o superiore ad un valore assegnato.
    1. scrivere un programma per creare il file (o i file) con i nomi dei progetti ed il denaro stanziato per ognuno;
    2. scrivere un programma che dato il nome di un progetto visualizzi il valore dello stanziamento;
    3. scrivere un programma che dato un valore di stanziamento scriva l'elenco dei progetti con uno stanziamento minore o uguale al valore dato;
    4. scrivere un programma che dato un valore di stanziamento scriva l'elen-co dei progetti con uno stanziamento superiore al valore dato;
    5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere la risposta corrispondente.
  8. Una pizzeria vuole organizzare in modo automatico la raccolta delle ordinazioni ai tavoli e lo smaltimento delle richieste nelle cucine. Ogni tavolo è fornito di un piccolo terminale attraverso il quale può fare le proprie ordinazioni. Sul video compare l'elenco dei diversi tipi di pizza e delle diverse bevande. Dal tavolo viene trasmessa l'ordinazione attraverso la tastiera con l'indicazione di tipo e quantità di pizze e bevande. La cucina riceve ordinazioni in sequenza e prepara quanto richiesto. Ogni volta che un'ordinazione è esaudita deve essere eliminata dalle richieste delle cucina.
    1. Dire come possono essere organizzate le informazioni per quanto concerne la singola ordinazione fatta dal tavolo e l'insieme delle ordinazioni ricevute in cucina.
    2. Descrivere un possibile procedimento di eliminazione di un'ordinazione già esaudita e scrivere la procedura corrispondente, specificando le eventuali condizioni a "monte" di tale procedura.
  9. Una associazione sportiva dispone di molte palestre, in ognuna di queste sono organizzati più corsi di attività sportive diverse. È possibile iscriversi a più corsi in più palestre. Si vogliono organizzare archivi relativi alle palestre, ai corsi ed agli iscritti. Descrivere una possibile organizzazione di tali archivi, che renda agevoli le seguenti ricerche:
    1. elenco degli iscritti ad ogni palestra;
    2. elenco dei corsi attivati in ogni palestra;
    3. elenco degli iscritti ad ogni corso.
    Individuare altre eventuali ricerche possibili sulla organizzazione proposta.
  10. Un giovane intraprendente organizza una "società di facili guadagni" nel modo seguente: Spedisce a due conoscenti una lettera chiedendo ad ognuno di inviargli una certa quantità di denaro subito, ed una percentuale fissa per ogni quantità di denaro che essi riceveranno in seguito; chiede inoltre che ognuno dei due spedisca una richiesta analoga ad altre due persone. Si domanda:
    1. come può essere rappresentata questa organizzazione per poter:
    1. quali informazioni vanno inserite in tale rappresentazione per rispondere alle tre richieste a, b, c;
    2. la descrizione del procedimento per inserire un nuovo "associato" nella rappresentazione;
    3. la codifica di una procedura per l'inserimento relativo al punto 3.
  11. Si vuole creare un sistema informativo per una catena alberghiera. Nella catena esistono alberghi di prima, seconda e terza categoria, in località turistiche di mare, montagna o lago. Ogni albergo dispone di stanze a uno, due o tre letti, con o senza bagno. Si chiede di definire l'organizzazione dei dati per rispondere a richieste di prenotazione o di disponibilità; si chiede inoltre di descrivere sinteticamente una procedura di ricerca per una delle due richieste previste.
  12. Si vuole usare una tabella hash per ottenere, da un numero telefonico, il nome e l'indirizzo dell'abbonato corrispondente. Si supponga di dover affrontare il problema per un comune di circa 300 abbonati.
    1. Dire quale può essere una formula per la codifica delle chiavi (numeri telefonici), e, senza entrare nei dettagli della programmazione, scrivere l'intestazione della procedura che effettui tale codifica.
    2. Scrivere quindi una procedura per la ricerca in tabella di un abbonato, che utilizzi la formula sopra esposta.
  13. Si vogliono memorizzare in una tabella di tipo hash i numeri di targa degli autotreni della provincia di Livorno, ed i numeri di telaio dei veicoli corrispondenti. Si supponga che il numero degli autotreni sia circa 200.
    1. Dire quale può essere la formula per la codifica delle chiavi (numeri di targa), e, senza entrare nei dettagli della programmazione, scrivere l'intestazione della procedura che effettui tale codifica.
    2. Scrivere quindi una procedura per l'inserimento in tabella di un nuovo veicolo che utilizzi la formula sopra indicata.
  14. In un archivio vanno memorizzate le seguenti informazioni: relative ad una serie di rilevazioni. Poiché i dati vengono inseriti da tastiera, si richiede di controllare la correttezza prima della registrazione. Fare un'analisi delle procedure di acquisizione e controllo dei dati nei tre casi e svilupparne una in modo completo.
  15. Un provveditorato agli studi vuole avere una registrazione di tutte le scuole della provincia e del numero di alunni di ogni scuola, in modo da poter ottenere, dato il nome di una scuola, il numero dei suoi alunni, oppure l'elenco delle scuole con un numero di alunni inferiore o superiore ad un valore assegnato.
    1. scrivere un programma per creare il file (o i file) con i nomi delle scuole ed il numero di alunni corrispondenti;
    2. scrivere un programma che dato il nome di una scuola visualizzi il numero dei suoi alunni;
    3. scrivere un programma che dato il numero di alunni, scriva l'elenco delle scuole con un numero di alunni inferiore al valore dato;
    4. scrivere un programma che dato il numero di alunni, scriva l'elenco delle scuole con un numero di alunni maggiore o uguale al valore dato;
    5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere il risultato corrispondente.
  16. Si vogliono avere registrate le seguenti informazioni sugli alberghi di una località balneare: nome dell'albergo, numero di posti disponibili. Questo per poter ricercare, da un albergo, il numero di posti disponibili, oppure per avere un elenco degli alberghi con ricettività maggiore o minore di un valore dato.
    1. scrivere un programma per creare il file (o i file) con i nomi degli alberghi ed il corrispondente numero di posti disponibili;
    2. scrivere un programma che dato il nome di un albergo visualizzi il numero di posti disponibili nell'albergo;
    3. scrivere un programma che, dato il numero di posti, scriva l'elenco degli alberghi con un numero di posti maggiore del numero dato;
    4. scrivere un programma che, dato il numero di posti, scriva l'elenco degli alberghi con numero di posti minore o uguale al numero dato;
    5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere il risultato corrispondente.
  17. Si vuole avere la registrazione dei comuni di una regione e del numero di abitanti di ogni comune, in modo da poter sapere, dato un comune, quanti abitanti ha, oppure quali comuni hanno un numero di abitanti maggiore o minore di un valore assegnato.
    1. scrivere un programma per creare il file (o i file) con i nomi dei comuni ed il corrispondente numero di abitanti;
    2. scrivere un programma che, dato il nome di un comune visualizzi il numero di abitanti di quel comune;
    3. scrivere un programma che, dato un valore numerico scriva l'elenco dei comuni con numero di abitanti maggiore o uguale al valore dato;
    4. scrivere un programma che, dato un valore numerico scriva l'elenco dei comuni con numero di abitanti minore del valore dato;
    5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere la risposta corrispondente.
  18. Una biblioteca gestisce i prestiti in modo automatico. Per ogni libro in prestito vengono registrati: il codice del libro (10 caratteri), il numero di tessera di chi chiede il libro (8 caratteri), la data del prestito. Il bibliotecario registra i prestiti e le restituzioni dei libri utilizzando un programma che viene mandato in esecuzione all'apertura della biblioteca e resta in esecuzione fino alla chiusura della biblioteca. Descrivere l'organizzazione dei dati e realizzare il programma.
  19. Un'azienda ha alle dipendenze poco meno di cento addetti. Nel suo centro di calcolo è presente un archivio su disco che per un ben determinato mese contiene gli istanti di entrata e di uscita dei propri dipendenti. Il file è stato ottenuto attraverso il rilevamento automatico di presenze che prevede che il dipendente al momento dell'entrata si "annunci" facendo passare la sua "targhetta" nell'apposito rilevatore, e faccia altrettanto all'uscita. Ma questo a noi non interessa. Il record del file mensile contiene: la matricola del dipendente, l'anno, il mese, il giorno di entrata, l'ora di entrata, il minuto di entrata, il giorno di uscita, l'ora di uscita, il minuto di uscita. Esistono periodo lavorativi che sono a cavallo di due giorni: esempio il dipendente che entra alle ore 22 di stasera ed esce alle ore 6 di domani. Per ogni lavoratore vi sono più record inerenti a tutti i periodi lavorati nel mese e sono fisicamente e logicamente contigui nel file: sono i record che hanno la stessa matricola. È garantito che l'archivio contenga dati validi nel senso che essi si riferiscono ad un ben preciso mese di un anno esistente che è uguale per tutti i record. Ancora, è garantito che l'istante di entrata preceda quello di uscita. Lo studente deve elaborare questo archivio al fine di stabilire quante ore e quanti minuti ciascun dipendente ha lavorato nel mese. Successivamente arrotondare i minuti alla mezza ora con le seguenti regole: Le ore si considerino da 00 a 23. Esiste un secondo archivio anagrafico che contiene tra l'altro le generalità di ciascun dipendente. La chiave di questo archivio è la matricola. Esso contiene anche altri tre campi: anno, mese ed ore lavorate (di tipo float: esempio 120.5 significa 120 ore e 30 minuti). Lo studente, sulla base delle ore che scaturiscono dalla prima elaborazione, deve aggiornare il secondo archivio nei tre campi appena citati. Infine, lo studente deve produrre una stampa su carta dell'anagrafico evidenziando il cognome, il nome, la matricola e le ore. Lo studente deve, altresì, fare ipotesi aggiuntive che non sono state previste da questo testo, ma che sono necessarie per rendere la soluzione più valida e rispondente ai quesiti proposti. In particolare deve:
  20. In un settore di un ufficio, gli impiegati sono sistemati in stanze occupate da una o più persone, con un telefono per stanza. Una rubrica di numeri di telefono, interni al settore, è disponibile su un file, ciascun record del quale contiene il nome di un impiegato (di 16 caratteri) ed il suo numero di telefono. Il file è in ordine alfabetico in base al nome degli impiegati. Scrivere un programma che legge la rubrica, e stampa un elenco degli impiegati di ogni stanza (con il relativo numero di telefono). Gli elenchi vanno stampati in ordine crescente di numero telefonico, ed i nomi degli impiegati di ogni stanza in ordine alfabetico.
  21. Una società di vendita per corrispondenza memorizza in un file su disco gli ordini giunti in sede. Dopo aver strutturato opportunamente il tipo base del file, realizzare un algoritmo che ordini in un altro file le richieste per località di destinazione, in modo tale, cioè, che gli ordini provenienti da una stessa città risultino consecutivi nel file destinazione.
  22. Solo per gioco, si consideri che le 9 materie del corso di informatica siano solamente "orali". Sono abolite le prove scritte, pratiche e grafiche. Le materie sono codificate con i primi numeri naturali, cioè: 01 = italiano, 02 = storia, ecc.. (si può partire anche da 00). Si consideri un primo file "movimenti" di tipo sequenziale che contiene le seguenti informazioni: codice studente, data del voto o dell'assenza, codice materia, tipo di movimento, quantità, flag. Sui primi campi non vi sono dubbi. Il tipo di movimento può essere 'A' oppure 'V' col significato di assenza o di voto. La quantità rappresenta il voto oppure le ore di assenza. Il flag ha valore '0' od '1' per significare rispettivamente se il record deve essere ancora trasferito o se è già stato trasferito. Alla fine di ogni quadrimestre il file movimenti viene elaborato al fine di aggiornare un secondo file anagrafico che contiene i voti e le assenze di ciascun studente, in particolare: il codice studente, il cognome e il nome, un vettore di 9 campi per i voti, un vettore di 9 campi per le assenze. Tutti i campi partono da zero, e si considerano già inizializzati. I voti vengono accumulati e contati, nel senso che se uno studente prende in date diverse, sei, sette, sei in una stessa materia, avrà 19 nel campo voti e 3 nel conteggio voti per quella materia. Il file anagrafico di tipo hash, una volta aggiornato sulla base dell'archivio movimenti, rappresenta il "tabellone" quadrimestrale da esporre nell'atrio. Si limiti l'archivio alla sola informatica e si supponga che i "movimenti" si riferiscano ad un solo quadrimestre. Si elabori l'archivio movimenti e si produca la stampa del tabellone. Una intestazione, ed una riga per studente con i voti interi arrotondati con la regola dello 0.75 e con le ore di assenza disciplina per disciplina. Si aggiungano tutte le ipotesi che si ritengono necessarie, ancorché limitative. I voti di partenza possono essere interi o float, quelli di arrivo interi.
  23. Una casa editrice pubblica una rivista con le seguenti caratteristiche:
    1. è inviata solo agli abbonati;
    2. la cadenza è mensile;
    3. l'abbonamento è valido per 12 oppure 6 mesi;
    4. la decorrenza dell'abbonamento avviene dal mese di pagamento.
    Attualmente la gestione degli abbonamenti è manuale ed è effettuata per mezzo di cartoncini che recano scritti i seguenti elementi:
    1. cognome e nome dell'abbonato;
    2. indirizzo dell'abbonato;
    3. comune e relativo CAP;
    4. mese di scadenza dell'abbonamento.
    Al momento dell'invio della rivista viene consultato lo schedario che contiene questi cartoncini; per coloro che sono in regola con l'abbonamento viene scritta una fascetta con sopra l'indirizzo, vengono eliminati i cartoncini relativi ad abbonamenti scaduti e vengono inseriti quelli relativi a nuovi abbonamenti. Progettare una procedura che automatizzi il procedimento sopra descritto; tale progetto deve prevedere sia la fase di inizializzazione che quella di mantenimento. Si richiedono inoltre le specifiche dei vari programmi che compongono la procedura (dati di input, output, trattamento subito dagli stessi dati, relativi tracciati), le interrelazioni tra gli stessi e lo sviluppo particolareggiato, sia a livello di diagrammi che di minutazione, di uno dei programmi che compongono la procedura.
  24. In un file di nome PARTECIPANTI e di tipo base PARTECIPANTE:
    	typedef struct
    		char N0[30], C0[30];
    		int PUNTI;
    		int NUMERO;
    	} PARTECIPANTE;
    
    sono stati raccolti i nomi e cognomi e il numero di iscrizione dei partecipanti ad una gara di tiro al piattello, con tutti i campi PUNTI messi al valore zero. A fine gara, si vuole costruire un file CLASSIFICA nel quale i record dei partecipanti devono comparire in ordine di punteggio, e con il campo PUNTI opportunamente riempito. Alla fine della costruzione della classifica si vogliono ottenere, a menù, le seguenti informazioni:
    1. stampa della classifica;
    2. dato un partecipante, stampa del punteggio, del posto che occupa in classifica e dello "stacco" di punteggio dal 1º classificato.

Esercizi sulle basi di dati

  1. Si progetti un sistema informativo per una società che gestisce appartamenti in multiproprietà.
    Il sistema deve gestire il patrimonio immobiliare della società, la vendita dei pacchetti di multiproprietà ai clienti e le richieste di scambi fra proprietari.
    Il patrimonio immobiliare consta di insiemi di appartamenti raggruppati in insediamenti turistici. Ogni appartamento è caratterizzato da un identificatore univoco, all'interno dell'insediamento, da un livello di qualità (lusso, medio, spartano) e dal numero di posti letto. Un insediamento turistico è caratterizzato dalla località, l'indirizzo, il numero di appartamenti, il periodo di apertura (tutto l'anno, oppure stagioni particolari) e una breve descrizione delle attrazioni - naturali e non - offerte.
    La società offre ai clienti l'acquisto di settimane (una o più) di soggiorno presso un appartamento di una determinata località. Ogni settimana di soggiorno ha un prezzo proporzionale alla località ed al periodo scelto: l'alta stagione costa di più rispetto agli altri periodi dell'anno. Al fine di concludere un contratto d'acquisto, si deve verificare la disponibilità di un appartamento nell'insediamento turistico richiesto e nella settimana desiderata. Al contrario, quando un cliente decide di vendere la propria settimana di soggiorno, la società deve prendere atto della volontà di vendere e del prezzo chiesto, e deve aggiungere la settimana in vendita fra quelle da vendere, al prezzo richiesto e non a quello della società.
    Un cliente, una volta acquisito il diritto di soggiorno in un appartamento per una determinata settimana, può inoltrare una richiesta per permutare la sua settimana con quella di un altro cliente, specificando l'insieme di località e di settimane di gradimento. Nel caso non si dovesse trovare nessuna "nuova settimana" in grado di soddisfare le richieste, l'offerta di scambio resta valida fino a trenta giorni prima dall'inizio del soggiorno effettivamente acquistato.
    Un cliente può, anche, decidere di affittare la propria settimana, inoltrando richiesta e canone d'affitto. La società deve compilare una lista di settimane "affittabili" e renderla disponibile alla clientela.
    È richiesto il diagramma di contesto, un numero adeguato di diagrammi di flusso dei dati, per rappresentare il problema ad un livello d'astrazione adeguato, le viste e lo schema entità-relazione integrato.
  2. Si progetti un sistema informativo per una società di autonoleggio.
    Il sistema deve gestire le auto in possesso della società, e quindi affittabili dai clienti, la possibilità di fare prenotazioni telefoniche e la possibilità di "noleggi diretti", cioé clienti che si presentano direttamente nei terminali della società e richiedono il noleggio di un'auto.
    Il patrimonio "auto" consta di un insieme di autoveicoli, caratterizzati dal numero di targa, il nome della vettura, la classe di appartenenza e gli optional disponibili (ad esempio, aria condizionata). Ogni macchina deve essere localizzabile in un particolare terminale della società. Questo per poter assegnare ad ogni cliente la macchina più vicina che soddisfa le richieste fatte.
    I clienti possono prenotare l'auto telefonicamente, specificando il modello o la classe di vettura, gli optional richiesti e il periodo di noleggio. Si tenga conto del fatto che il periodo richiesto potrebbe variare rispetto a quello reale. Un cliente potrebbe presentarsi in ritardo o tenere la macchina per qualche giorno in più. Il numero effettivo di giorni di noleggio è l'informazione necessaria per poter emettere la fattura, una volta che la macchina è stata restituita.
    Se, invece, un cliente si presenta direttamente ad un punto di noleggio, è costretto a scegliere fra le macchine a disposizione, senza poter fare richieste particolari. Anche in questo caso, il periodo di noleggio dichiarato potrebbe differire rispetto al periodo reale.
    Il sistema deve, anche, periodicamente controllare le macchine noleggiate e inviare un messaggio di sollecito a tutti i clienti che sono in ritardo di più di una settimana nella riconsegna della macchina.
    È richiesto lo use case diagram, il class diagram e un insieme di iteraction diagram per spiegare le interazioni fra oggetti più complesse.
  3. Si progetti un sistema informativo per gestire gli obiettori di coscienza in servizio presso un ente convenzionato con il Ministero della Difesa.
    Il sistema deve gestire l'anagrafica degli obiettori (nome, cognome, data di nascita e indirizzo), il loro titolo di studio, le esperienze lavorative pregresse e la loro posizione: domanda presentata, domanda accettata, in attesa di servizio, in servizio e servizio completato.
    Il sistema gestisce anche le diverse attività svolte dall'ente. Combinando le attività "scoperte" con le capacità degli obiettori in servizio, ci si propone di ottimizzare l'assegnazione degli obiettori alle diverse mansioni e, quindi, di migliorare la qualità dei servizi offerti.
    L'ente in questione mette a disposizione degli appartamenti per fornire vitto e alloggio durante l'obiezione. Il sistema, quindi, deve tenere traccia degli appartamenti disponibili, della disposizione deglio obiettori nei diversi appartamenti e di eventuali posti liberi.
    Per gli obiettori in servizio, il sistema deve gestire anche le licenze (supponiamo per un totale di 20 giorni) e i permessi (al massimo 10).
    Ogni mese, il sistema deve: Il sistema deve anche fornire la lista degli obiettori in servizio e la lista degli obiettori in attesa (sia tutti quelli in attesa, che solamente quelli che hanno fatto domanda in un mese preciso).
    Lo studente rappresenti il sistema con le notazioni che ritiene più opportune e, in base alla notazione scelta, fornisca un numero di modelli sufficienti per definire le diverse attività.
  4. Si progetti un sistema informativo per la gestione di un supermercato.
    Il sistema deve gestire il magazzino. Questo significa tenere traccia della merce effettivamente in magazzino e di quella sugli scaffali. Quando il quantitativo di un determinato prodotto diventa minore di una certa soglia, si deve prevedere un meccanismo di approvvigionamento semiautomatico. Il sistema deve segnalare i prodotti che sono in via di esaurimento e suggerire, secondo politiche predefinite, la quantità da acquistare.
    Il sistema deve gestire anche le casse. Attraverso lettori di codici a barre, deve riconoscere la merce in uscita. Questa ovviamente è una condizione necessaria per poter completare il passo precedente. Il sistema deve registrare tutti gli acquisti effettuati, al fine di riconoscere profili utente specifici, ed essere in grado di fare promozioni mirate alle diverse classi d'utenti. Tutte le promozioni devono essere registrate dal sistema.
    Oltre al normale scontrino, il supermercato emette anche tessere a punti. Un punto corrisponde a 5,16€ di spesa. Il sistema deve gestire e registrare tutte le tessere emesse. Quando un cliente si presenta alla cassa e presenta la tessera, il sistema deve aggiornare la situazione e registrarla sia sulla tessera del cliente, che nel sistema centrale. Il sistema deve, anche, avvisare il cliente che si presenta alla cassa se i punti totalizzati fino a quel momento gli danno diritto a premi o sconti particolari.
    Il candidato modelli il sistema con la notazione che ritiene più opportuna (analisi strutturata e schemi entità relazione, oppure UML). Scelta la notazione, il candidato fornisca un numero di diagrammi che ritiene sufficiente per descrivere il problema.
  5. Si progetti un sistema informativo per la gestione di un "negozio virtuale" di libri.
    Il sistema deve gestire i clienti. Attenzione che le informazioni richieste riguardano solamente i clienti che richiedono l'acquisto di un libro, non si deve gestire l'anagrafica di qualsiasi persona che acceda al sito del negozio solamente per consultazione. Oltre ai dati anagrafici veri e propri, si devono richiedere le modalità di pagamento.
    Ovviamente deve essere noto il magazzino libri, cioé tutti i titoli a disposizione, le diverse edizioni (ad esempio, copertina rigida o molle), il prezzo, lo sconto e la disponibilità, sia in termini di numero di copie, che di giorni richiesti per la consegna al cliente.
    Il sistema deve gestire le transazioni degli utenti. Queste possono essere suddivise in due categorie: ricerche e/o acquisti. La ricerca di un libro deve essere facilitata fornendo i soli ausili alla ricerca: ricerca per parole singole e parziali, ricerca per parole simili, ecc. La procedura d'acquisto deve offrire un "carrello della spesa" virtuale e gestirlo in maniera opportuna. Se l'utente decide di acquistare la merce nel carrello, il sistema deve provvedere alla compilazione sia delle fattura (ricevuta) per il cliente, che del modulo da inoltrare al magazzino per la consegna dell'ordine.
    Il candidato modelli il sistema con la notazione che ritiene più opportuna (analisi strutturata e schemi entità relazione, oppure UML). Scelta la notazione, il candidato fornisca un numero di diagrammi che ritiene sufficiente per descrivere il problema.
  6. Si progetti un sistema informativo per la gestione di una agenzia di viaggi.
    L'agenzia fornisce sia servizi tradizionali, che servizi innovativi. Tradizionalmente, un'agenzia deve vendere: Per i servizi innovativi, l'agenzia deve offrire la possibilità di: L'agenzia deve tener traccia anche del fatturato accumulato da ogni cliente e del volume d'affari con ogni catalogo trattato. Nel primo caso, le informazioni raccolte potrebbero essere utilizzate per definire offerte o sconti particolari. Nel secondo caso, le informazioni potrebbero servire per spuntare prezzi d'acquisto (per l'agenzia) migliori.
    Il candidato modelli il sistema utilizzando UML. Si definiscano, almeno, uno use case diagram, un class diagram e due diagrammi, scelti fra interaction diagram, activity diagram o statecharts diagram, per formalizzare due attività particolari.
  7. Si progetti un sistema informativo per la gestione e la consultazione della programmazione delle sale cinematografiche della provincia (regione).
    L'applicazione deve gestire le informazioni relative ai film in programmazione nei diversi cinema della regione. Nel caso di cinema multisala, si deve poter consultare la programmazione relativa ad ogni singola sala. In particolare si è interessati a conoscere l'ubicazione (indirizzo) del cinema, gli orari e il costo del biglietto. La disponibilità di tariffe agevolate in giorni particolari della settimana, oppure per categorie specifiche (anziani, militari, ecc.), deve essere opportunamente segnalata. Per quanto riguarda le pellicole in programmazione, deve essere disponibile il titolo del film, l'anno e la nazione di provenienza, il genere, il regista, la casa di produzione, gli attori principali, la trama e eventuali giudizi critici. Per ogni attore (attrice), deve essere disponibile la scheda anagrafica e la filmografia, cioé l'insieme dei film in cui ha recitato.
    L'applicazione in questione prevede due possibili figure di utenti: il gestore ed il cliente. Il gestore deve essere in grado di modificare ed aggiungere informazioni. Il cliente, invece, può solamente consultare le informazioni disponibili.
    Devono essere possibili ricerche per città (ad esempio, i film in programmazione a Cremona), sala cinematografica ( ad esempio, i(l) film in programmazione al cinema Odeon), genere (ad esempio, tutti i film comici in programmazione), attore (ad esempio, tutti film in programmazione in cui recita Sandra Bullock) o regista (ad esempio, tutti i film in programmazione il cui regista è Woody Allen) diversamente combinate fra loro.
    Il candidato modelli il sistema con la notazione che ritiene più opportuna (analisi strutturata e schemi entità relazione, oppure UML). Scelta la notazione, il candidato fornisca un numero di diagrammi che ritiene sufficiente per descrivere il problema.
  8. Si progetti un sistema informativo per la gestione della manutenzione delle strade del vostro comune.
    Il comune "identifica" un insieme di interventi che, per semplicità, possono essere: asfaltatura, messa in opera di nuove tubature e/o cavi, oppure semplice manutenzione ordinaria. Per la manutenzione straordinaria (asfaltatura e messa in opera), il comune indice una gara d'appalto, identificando la tipologia dell'intervento, i vincoli temporali e il tetto massimo di spesa. Chi partecipa alla gara deve presentare la propria offerta, specificando il periodo proposto e il preventivo di spesa. Il comune deve essere in grado di selezionare l'offerta migliore sia in termini temporali (la data proposta per l'inizio dei lavori è la più vicina a quella richiesta), che in termini economici (il preventivo di spesa più basso, oppure inferiore di una certa percentuale rispetto alla spesa massima). Per la manutenzione ordinaria, invece, il comune si rivolge sempre e solo a ditte convenzionate.
    Appena prima che comincino i lavori, il comune deve essere in grado di identificare le strade coinvolte. Questo significa identificare anche gli incroci, che richiedono personale per il controllo del traffico (banalmente, gli incroci collegati dalle strade coinvolte), e le strade che diventerebbero inutilizzabili a fronte delle vie chiuse per lavori e dei sensi unici esistenti. Per semplicità, il nome di una via identifica una strada che connette esattamente due incroci. Un incrocio puo' connettere un numero illimitato di strade.
    Si progetti il diagramma delle classi usando UML e si esemplifichi il funzionamento del sistema definendo almeno due sequence diagram (interaction diagram oppure cooperation diagram) che rappresentano gli scenari seguenti:
  9. Si progetti un sistema informativo per la gestione "evoluta" di una farmacia.
    La farmacia deve conoscere tutti i medicinali prescrivibili. Per ogni prodotto, deve tener traccia del prezzo di vendita, dei vincoli imposti per legge alla vendita (ad esempio, solo su presentazione di ricetta medica) e di eventuali effetti collaterali. Il farmacista dovrebbe essere in grado di consigliare oppure sconsigliare il cliente se il prodotto richiesto dovesse presentare effetti collaterali "troppo" nocivi, oppure fosse sconsigliato in presenza di patologie o disturbi particolari. Ovviamente, ogni farmaco ha una casa produttrice che deve essere contatta nel momento in cui le scorte del prodotto dovessero andare sotto il livello di guardia. La farmacia registra anche ogni cliente, sia per fornire un servizio migliore, cioé per tener traccia di allergie, patologie, oppure problemi che potrebbero sconsigliare l'assunzione di un particolare prodotto, sia per produrre statistiche d'uso dei diversi farmaci per l'ASL. A questo proposito la farmacia registra anche i medici che hanno proposto le diverse prescrizioni. Ancora la finalità è duplice: instaurare un rapporto di collaborazione con il medico e produrre le statistiche per l'ASL. A richiesta la farmacia deve anche saper ricostruire lo storico (l'ultimo anno, ad esempio) del singolo cliente, oppure del singolo medico.
    Si progetti il sistema utilizzando UML, oppure DFD e schemi ER. Si esemplifichi anche il comportamento de sistema nei due casi seguenti:
  10. Si progetti un sistema informativo per la classificazione dei ristoranti italiani.
    I ristoranti devono essere organizzabili sia in ordine alfabetico che per città. Ogni ristorante può segnalarsi per le sue specialità, il prezzo e la citazione in una o più guide gastronomiche (Michelin, Veronelli, Gambero Rosso, ecc.). Se un ristorante viene citato in una particolare guida, oltre al nome della guida, deve essere disponibile l'intera valutazione (voto, note di merito e di demerito). Si consideri che l'utente potrebbe essere interessato anche a consultare la lista di ristoranti in base alla guida di suo gradimento. Ad esempio, si potrebbe essere interessati ai primi cinque ristoranti della guida Michelin 2000. Inoltre, si potrebbe voler definire una graduatoria comparata dei migliori ristoranti interpolando i risultati delle diverse guide.
    Si progetti il sistema iniziando con uno use-case UML, oppure con un DFD di primo livello (non di contesto) . Si definisca il class diagram UML per gli oggetti (elementi) necessari. Si esemplifichi poi il comportamento del sistema nei due casi seguenti (interaction diagram):
  11. Si progetti un sistema informativo per la gestione di un’impresa edile.
    Il sistema deve gestire i cantieri, i dipendenti e il magazzino centrale.
    Ogni cantiere, oltre alla propria posizione, descrizione, data di inizio lavori e data di fine prevista, deve conoscere i dipendenti (muratori, carpentieri, autisti, geometri, ecc.) assegnati. Si noti che un dipendente potrebbe lavorare in più cantieri. Per ogni dipendente, oltre ai dati anagrafici, si deve conoscere la qualifica, la fascia di stipendio e eventuali richieste e/o capacità particolari.
    L'impresa ha un magazzino centrale e un "piccolo magazzino" per ogni cantiere aperto. Ogni magazzino registra i prodotti per costruzione (mattoni, tegole, cemento, ecc.), gli strumenti e i mezzi disponibili in ogni magazzino. Il magazzino centrale deve essere in grado di assegnare il materiale (strumento o mezzo) richiesto ad ogni cantiere cercando di minimizzare i tempi e le distanze. Ad esempio, deve essere possibile localizzare il carico di mattoni più vicino al cantiere che l'ha richiesto e deve essere possible "spostarlo" da un magazzino ad un altro.
    A richiesta il cantiere deve anche saper calcolare il costo "corrente" di un cantiere. Deve anche saper ricostruire lo storico (l'ultimo anno, ad esempio) del singolo cantiere, del singolo dipendente, oppure del singolo mezzo.
    Si progetti il sistema utilizzando UML, oppure DFD e schemi ER. Si esemplifichi anche il comportamento del sistema in due casi che si ritengono significativi.
  12. Si progetti un sistema informativo per la gestione della coppa del mondo di sci.
    Il sistema deve gestire l'archivio storico delle diverse edizioni della coppa del mondo. Ogni anno, la coppa viene assegnata considerando i risultati ottenuti in un certo numero di gare. Ad ogni gara (slalom speciale, slalom gigante, super gigante e discesa libera) partecipano un certo numero di atleti. Ogni gara "produce" una classifica; ogni atleta è caratterizzato dalla nazione di nascita, dalla nazione per la quale gareggia, dai risultati ottenuti in cariera e dai materiali che usa. Ogni atleta deve usare almeno un paio di sci, un paio di scarponi e un paio di attacchi. Il sistema deve gestire anche le ditte produttrici dei diversi materiali, a prescindere dal fatto che vengano effettivamente usati dai diversi atleti. Il sistema deve però controllare che non ci siano ditte che non forniscono atleti da più di due anni; in caso contrario il sistema dovrebbe informare le diverse aziende e invitarle a sponsorizzare alcuni atleti partecipanti alla coppa.
    Il sistema deve anche occuparsi di gestire i contratti pubblicitari che di riferiscono alla coppa del mondo. Sono ammessi quanti contratti si vuole, ma le aziende interessate devono appartenere a settori merceologici diversi.
    Dopo aver modellato il sistema usando UML, oppure l'analisi strutturata e gli schemi ER, si semplifichi il comportamento del sistema nei due casi seguenti:
  13. Si progetti un sistema informativo per la gestione di una società di autobus.
    Il sistema deve gestire le linee servite dalla società. Ogni linea ha una stazione di testa e una stazione di coda e gli autobus la possono percorrere nelle due direzioni (dalla testa alla coda, oppure viceversa). Si noti che le fermate nelle due direzioni protrebbero essere diverse (ad esempio, una strada potrebbe essere a senso unico). Ogni linea è coperta da un certo numero di corse giornaliere: si supponga che la cadenza e l'orario di inizio e di fine delle corse dipendano dal giorno della settimana e/o da particolari giorni di festa (giorni lavorativi, sabato, domenica e festività). Una corsa però non deve necessariamente coprire l'intera tratta, ma potrebbe anche essere limitata ad un sottoinsieme delle fermate previste dalla linea.
    Il sistema deve stampare anche l'orario stagionale e deve gestire gli autisti e gli autobus. Solitamente un mezzo è assegnato a una particolare linea (corsa) e un autista è assegnato a un particolare mezzo. Il sistema deve controllare che ogni autista non lavori mai per più di 7 ore al giorno, quindi il numero di corse effettuabili da ogni autista e il numero di autisti necessari per coprire una singola linea devono essere calcolati in base ai tempi di percorrenza.
    Dopo aver modellato il sistema usando UML, oppure l'analisi strutturata e gli schemi ER, si esemplifichi il comportamento del sistema nei due casi seguenti:
  14. Si progetti il sistema informativo (semplificato) della motorizzazione civile.
    Il sistema deve gestire sia le immatricolazioni dei mezzi di trasporto, sia l'emissione delle patenti. I mezzi di trasporto sono suddivisi in motociclette, automobili, pullman e camion.
    La motorizzazione vuole tenere traccia sia dei modelli, che dei singoli autoveicoli. I modelli possono essere modelli standard (identificati da nome del modello, codice e data di omologazione), oppure prototipi (identificati da nome del prototipo, codice, data di immatricolazione e persona che ha presentato la richiesta di immatricolazione).
    Ogni mezzo di trasporto è identificato da numero di telaio, modello, data di immatricolazione, targa e proprietario. I proprietari possono essere persone fisiche, oppure società. Ad ogni persona fisica può essere associata una patente; non è ovviamente possibile associare patenti a società. Le persone e le società sono identificate attraverso i soliti attributi, Le patenti devono avere un proprietario, una data di rilascio, eventuali note specifiche e eventuali rinnovi.
    Si modelli il sistema utilizzando le notazioni che si ritengono più opportune. Si descriva anche, il comportamento del sistema nei seguenti casi:
  15. Si progetti un sistema informativo per la gestione del programma fedeltà della compagnia aerea MyAir.
    La premessa, magari non nota a tutti, è che chi si iscrive al programma, ogni volta in cui vola con MyAir, accumula punti (miglia) che danno diritto a premi. Ad esempio, bisogna volare per almeno 25.000 miglia per avere diritto a un volo gratuito in Europa; ci vogliono 65.000 miglia per un volo negli Stati Uniti; bastano 5.000 per un buono acquisto in un negozio convenzionato.
    Il sistema deve gestire i clienti della compagnia che partecipano al programma. I partecipanti sono organizzati in tre fasce di merito in funzione delle miglia volate durante un anno solare: tutti appartengono al primo livello. Se si volano 35.000 miglia si passa al secondo livello; si accede al terzo livello con 100.000 miglia volate in un anno. I tre livelli danno diritto a facilitazioni e premi differenziati.
    Oltre ai clienti, il sistema deve gestire i premi, ovvero la tipologia di premio (volo gratuito, soggiorno gratuito, buono sconto), il numero di miglia richieste per ogni premio particolare (un volo gratuito a New York richiede più miglia di un volo per Roma) e lo storico dei clienti: quanti voli ha effettuato ogni cliente, quante miglia ha guadagnato, quali premi ha già riscosso e quante miglia gli restano da "spendere". Si fa notare che le miglia scadono dopo 5 anni dal momento in cui sono state acquisite, cioé dalla data del volo.
    Il sistema deve essere in grado di aggiornare la posizione di ogni cliente in funzione di ogni volo effettuato e di ogni premi richiesto. Deve anche gestire l'effettiva disponibilità dei premi. Ad esempio, un volo gratuito potrebbe non essere soddisfacibile se il volo richiesto fosse già pieno.
    Si progetti il sistema definendo il diagramma delle classi UML e si esemplifichi il comportamento del sistema nei due casi seguenti:
  16. Si progetti un sistema informativo per la gestione di un oratorio.
    Il sistema deve gestire tutte le attività svolte in oratorio (catechismo, corsi di informatica, corsi di ballo, vacanze estive, ecc.). Ogni attività ha un responsabile, un insieme di persone di riferimento, che coadiuva il responsabile, e gruppo di ragazzi (persone) che seguono (svolgono) l'attività in questione. Il catechismo è rivolto solamente a ragazzi in età scolare, mentre ad esempio i corsi sono rivolti a tutti. Le attività non sono fisse e predefinite, ma possono cambiare nel corso dell'anno. Le attività con un numero elevato di partecipanti sono organizzate in classi. Ogni attività ha anche un bilancio: le entrate sono le sovvenzioni del comune, della parrocchia, di qualche ente benefico, oppure le quote di iscrizione richieste ai partecipanti; le uscite sono ovviamente le spese vive più qualche compenso proforma ai responsabili. L'obiettivo è di mantenere ogni attività in attivo o in pareggio. Eventuali "utili" servirebbero per finanziare altre attività.
    Il sistema deve essere in grado di elaborare anche il bilancio complessivo dell'oratorio sia mese per mese, che alla fine di ogni anno.
    Si progetti il sistema definendo il diagramma delle classi UML e si esemplifichi il suo comportamento nei due casi seguenti:
  17. Si progetti un sistema informativo per la gestione di un'azienda dolciaria.
    Il sistema deve classificare e gestire tutti i prodotti dell'azienda. Ogni prodotto richiede una ricetta e un certo numero di materie prime. Il sistema deve poter controllare la ricetta scelta e decidere se esistono scorte sufficienti per preparare il prodotto nella quantità stabilita. Se non ci fossero materie prime sufficienti, il sistema dovrebbe provvedere all'espletamento delle pratiche per il riordino: la modalità può essere sia automatica, che manuale. Nel primo caso, è il sistema che fa tutto; nel secondo caso, il sistema segnala solamente le materie prime mancanti e lascia la decisione finale all'operatore.
    L'azienda dispone, anche, di un proprio sito Internet con il quale presenta e vende i prodotti. La presentazione è attraverso particolari "tour per golosi"; la vendita è una classica vendita via Inter-net: i clienti scelgono cosa comprare e decidono modalità di spedizione e tempi di consegna. Chiaramente tempi di consegna e modalità diverse hanno prezzi diversi.
    Gli utenti del sistema possono caratterizzare i loro profili, specificando i gusti (ad esempio, prodotti alla panna, oppure torte con la glassa) e richieste (ad esempio, consegna sempre tramite fattorino). Le preferenze devono essere usate dal sistema per organizzare i "tour per golosi", privilegiando quelli che corrispondono ai gusti dichiarati. Ad esempio, i fanatici del cioccolato dovranno avere tutti i tour con prodotti al cioccolato, come prima scelta, e poi via via gli altri. I tour devono anche presentare l'equivalente calorico di ogni prodotto, giusto per infierire sul cliente.
    Si progetti il sistema definendo il diagramma delle classi UML e si esemplifichi il suo comporta-mento (interaction o activity diagram) nei due casi seguenti:
  18. Si vuole realizzare una base di dati per la comunità scientifica di ricerca paleontologica. Si devono memorizzare i dati riguardanti i reperti fossili di vertebrati custoditi dai musei. I reperti sono caratterizzati dal luogo e dall'anno di ritrovamento, dal ricercatore responsabile della scoperta, dal museo e dalla sala in cui è custodito.
    Ogni reperto può essere attribuito a diverse specie, con diverso grado di probabilità. Ad ogni specie possono essere associati più nomi, qualora diversi ricercatori abbiano fornito lo stesso nome a specie diverse: in tal caso il nome ufficiale è il nome più vecchio. I musei sono caratterizzati dalle sale, dai loro ricercatori, dal loro direttore (che può essere un paleontologo o un ricercatore di altra materia).
    Definire lo schema ER e lo Schema Logico relativo alla base di dati. Tradurre inoltre lo Schema Logico nel linguaggio SQL.
    Si ricorda che lo schema concettuale deve comprendere l'indicazione delle cardinalità di relazioni ed attributi, degli identificatori di tutte le entità, e dei vincoli d'integrità non esprimibili attraverso lo schema.
  19. Progettare una base di dati per una scuola che contenga informazioni relative sia agli studenti sia al personale (docente e non docente). Di ogni persona vengono conservate le usuali informazioni anagrafiche. La base dati deve tenere traccia delle storie scolastiche degli studenti, archiviando le classi a cui lo studente è appartenuto e i risultati finali di ogni anno per ogni materia. Il personale docente può essere di ruolo o supplente ed è caratterizzato dall'insieme di corsi che può impartire. Il sistema deve inoltre gestire le informazioni relative ai locali della scuola: vi sono aule (associate alle classi), laboratori (associati alle materie) e uffici (associati in vario modo al personale).
    Definire lo schema ER e lo Schema Logico relativo alla base di dati. Tradurre inoltre lo Schema Logico nel linguaggio SQL.
    Si ricorda che lo schema concettuale deve comprendere l'indicazione delle cardinalità di relazioni ed attributi, degli identificatori di tutte le entità, e dei vincoli d'integrità non esprimibili attraverso lo schema.
  20. Progettare una base di dati relativa alla gestione delle prenotazioni dei posti di un laboratorio didattico di una università. Ogni studente è caratterizzato dalla propria matricola, nome, cognome, data e luogo di nascita, residenza, recapito telefonico. Gli studenti frequentano alcuni laboratori didattici. I laboratori didattici contengono un insieme di posti di lavoro ed un insieme di risorse. Ad ogni posto di lavoro sono assegnate alcune risorse (unità di calcolo, stampanti, applicazioni). Alcune delle risorse sono rese disponibili a tutti gli studenti senza controlli, altre vengono assegnate agli studenti che frequentano determinati laboratori, previa autorizzazione. Lo studente può utilizzare un posto di lavoro solo se effettua una prenotazione. Si deve tenere traccia di tutte le prenotazioni e di tutte le volte che lo studente utilizza un posto di lavoro. Ogni laboratorio ha un solo responsabile, il quale si può occupare di un solo laboratorio.
    Definire lo schema ER e lo Schema Logico relativo alla base di dati. Tradurre inoltre lo Schema Logico nel linguaggio SQL.
    Si ricorda che lo schema concettuale deve comprendere l'indicazione delle cardinalità di relazioni ed attributi, degli identificatori di tutte le entità, e dei vincoli d'integrità non esprimibili attraverso lo schema.
  21. Si considerino le seguenti specifiche relative ad una società di pronto intervento automobilistico denominata HELP.
    La HELP ha diversi centri di intervento dislocati su tutto il territorio nazionale. Per ogni centro interessano la città, l'indirizzo e il numero di telefono. Ogni centro ha un responsabile, vari impiegati (appartenenti a varie categorie) e alcuni operatori che intervengono in caso di richiesta (per i quali è importante il telefono cellulare); per tutti, si registrano i dati anagrafici e la retribuzione.
    La HELP ha un certo numero di soci per i quali si registra un numero di tessera, il nome, il cognome, l'indirizzo, la data di nascita, la targa della macchina e il suo modello.
    Ad un centralino della società arrivano richieste di soccorso. Per ogni richiesta, se l'utente è un socio, si registra il suo numero di tessera e il luogo del guasto; altrimenti, vengono registrati nome e cognome del richiedente, targa dell'automobile e tipo di guasto. Comunque, si registra il nome dell'operatore che ha ricevuto la chiamata.
    A seguito di una richiesta di soccorso, si avvia un intervento per il quale si registra un codice, un orario di inizio, un orario di fine, il centro di intervento che opererà il soccorso e il numero di chilometri richiesti per effettuare l'intervento. Il centro di intervento assegna poi l'operatore che effettua l'intervento.
    Se l'intervento è stato richiesto da un socio, si produce una ricevuta nella quale si registra il numero di tessera, la data e il tempo che è stato necessario per completare l'intervento.
    Se l'intervento non è stato richiesto da un socio, si produce una fattura che contiene la data, i dati del cliente e un costo che viene calcolato in base ad un tariffario; tale tariffario associa un costo ad un intervallo di chilometri (per esempio, 100 € per distanze tra i 10 e i 20 chilometri).
    Si richiede lo svolgimento delle seguenti attività:
    Risoluzione delle eventuali ambiguità presenti nelle specifiche e libera integrazione ove risultino incomplete.
    Progettazione concettuale della base di dati con la produzione di uno schema Entity-Relationship (ER), che modelli la realtà di interesse. È necessario documentare:
    o Lo schema ER finale in forma completa, cioé con: o Un glossario dei concetti espressi nello schema concettuale, che contenga: o Gli eventuali vincoli dell'applicazione non esprimibili dal modello ER.
  22. Si desidera informatizzare l'archivio di una associazione di volontariato che raccoglie fondi per progetti di sostegno a distanza. Devono essere
    gestite le seguenti informazioni:
    1. Informazioni anagrafiche sui benefattori. Per benefattore si può intendere una persona fisica o un gruppo di persone che partecipano insieme ad un progetto o una società. I benefattori possono appartenere alle seguenti tipologie: Socio fondatore, sostenitore, ordinario, juniores (pagano una quota associativa ed hanno diritto di voto) non necessariamente partecipano ai progetti;
    Socio onorario (non paga una quota associativa e non necessariamente partecipa ai progetti); Donatore: chi partecipa ad un progetto pur non essendo soci.
    2. Informazioni sui progetti. Tutti i progetti vengono realizzati grazie alla collaborazione di Istituti locali dai quali riceviamo gli aggiornamenti trimestrali e tutta la corrispondenza, ed ai quali trasmettiamo le donazioni con scadenza trimestrale Si possono avere le seguenti tipologie:
    (a) Progetti a lunga scadenza con donazioni mensili fisse (questo significa che il benefattore si impegna a versare un importo trimestrale fisso e riceve informazioni sul progetto stesso). Tali progetti sono distinguibili in Adozione a distanza: oggetto principale del progetto è l'Istituto. L'importo annuale del progetto viene stabilito in base al budget di spesa che ci viene trasmesso. Tale importo annuale viene ridotto a quota trimestrale e quindi diviso per la quota mensile versata dal donatore al netto delle spese di segreteria (quota mensile 25,00 - 10Sostegno a distanza: oggetto principale del progetto µe una persona specifica. Il rapporto è uno ad uno.
    Le quote mensili sono fisse e dipendono dal tipo di sostegno riconosciuto alla persona. (Es. sostegno agli studenti per le spese scolastiche, sostegno agli anziani per spese di sussistenza, sostegno ai malati per le spese di cura).
    (b) Progetti specifici che vengono finanziati con donazioni liberali una tantum. Altre osservazioni: Un benefattore può partecipare ad uno o più progetti, a nessun progetto. nello specifico (pur versando una donazione) o non partecipare pur restando soci. Tutti i progetti vengono appoggiati agli istituti:
    può pertanto verificarsi il caso in cui un Istituto Y gestisca un progetto di Adozione a distanza, uno di Sostegno a distanza, un progetto speciale (tipo acquisto terreno o costruzione edificio o acquisto materiale fisioterapico).
    Si potrebbe anche verificare il caso in cui l'Istituto gestore del progetto sia l'associazione stessa (ad esempio si pagherà il 50 che andrà come volontario).
    I soggetti principali dei progetti a lunga scadenza (sostegno ed adozione a distanza) possono cambiare: un bambino ad esempio può lasciare l'istituto e quindi abbandonare il progetto oppure un benefattore potrebbe abbandonare il progetto. Di queste variazioni bisognerebbe lasciare traccia. Un progetto a lunga scadenza prevede l'obbligo per l'istituto di produrre una serie di documentazione a scadenza fissa (messaggio di benvenuto, fotografia annuale, lettera annuale, auguri etc.) serve un controllo sulla regolare produzione dei documenti.
    3. Movimenti contabili. L'associazione dispone di una cassa, di un conto corrente bancario e di un conto corrente postale
    (a) Entrate: Versamenti dei benefattori a favore dei progetti (il 10 Quota associative; Interessi attivi.
    (b) Uscite: Versamenti donazioni (al netto delle spese di segreteria) agli istituti; Spese di segreteria (spedizioni, telefono, cancelleria); Spese bancarie.
    A chiusura del bilancio le quote a disposizione dell'associazione (date dalla rimanenza di cassa tra quote di iscrizione, quote trattenute per spese di gestione e spese sostenute) vengono utilizzate parzialmente per il finanziamento di progetti speciali.
    4. Comunicazioni ai soci:
    (a) Comunicazioni Istituzionali: si utilizzerà una mailing che va ad attingere i dati anagrafici e va a gestire l'eventuale spedizione via e-mail.
    (b) Comunicazioni sui progetti: possono essere comunicazioni generiche (sull'avanzamento lavori ad esempio) da trattate alla stregua di una mailing normale con selezione dei benefattori che partecipano al progetto, o comunicazioni individuali ovvero quelle che portano gli aggiornamenti relativi ad un bambino al benefattore ad esso collegato. Gli aggiornamenti vengono aggiunti alla scheda personale.
  23. Si desidera automatizzare la gestione di un ospedale. Le specifiche del sistema sono le seguenti. La base di dati dovrà memorizzare informazioni relative ai pazienti, al ricovero dei pazienti nei reparti ospedalieri, ai trattamenti cui sono sottoposti i pazienti e alla loro dimissione. Di ogni paziente, vengono registrati il nome, l'indirizzo, il sesso, il numero di carta di identità, il numero della tessera sanitaria, il reparto ove è ricoverato e il letto occupato (reparto e letto possono cambiare durante il periodo di degenza). Di ogni reparto, vengono memorizzati il nome, la localizzazione, il nome del primario responsabile, il nome degli (eventuali) altri medici presenti, il numero delle stanze, il numero di letti presenti per stanza e il numero di letti occupati per stanza. Si vuole inoltre tener traccia delle date di ricovero, di (eventuale) trasferimento da un reparto all'altro e di dimissione dei pazienti. Ogni paziente può essere sottoposto a piµu trattamenti durante il periodo di degenza ospedaliera. Di ogni trattamento, vengono conservate informazioni relative al nome, alla durata e alle possibili reazioni del paziente.
  24. Si desidera automatizzare la gestione di una catena di officine. Il sistema dovrà gestire almeno le seguenti informazioni.
    1. Le officine, con nome, ragione sociale, indirizzo e telefono.
    2. Le automobili, con targa, modello e proprietario.
    3. I clienti (proprietari di automobili), con codice fiscale, cognome, nome e telefono. Ogni cliente può essere proprietario di più automobili.
    4. Gli interventi di manutenzione, ognuno effettuato presso un'officina, date di inizio e di fine, pezzi di ricambio utilizzati (con le rispettive quantità) e numero di ore di manodopera.
    5. I pezzi di ricambio, con codice, nome e costo unitario.
    6. I fornitori dei pezzi di ricambio.
  25. Si vuole progettare una base di dati di supporto alla gestione delle informazioni di interesse per un amministratore di condomini, in grado di gestire (almeno) le informazioni sotto specificate.
    1. Di un condominio interessano l'indirizzo e il numero del conto corrente dove vengono fatti i versamenti delle spese sostenute. Un condominio si compone di un certo numero di appartamenti dei quali interessano il numero dell'interno, il numero dei vani, la superficie, lo stato (libero od occupato).
    2. Gli appartamenti possono essere locati; in tal caso, dell'inquilino interessano il nome, il codice fiscale, il telefono e il saldo, cioé la somma che l'inquilino deve all'amministratore condominiale per le spese sostenute. Alcuni appartamenti locati possono essere stati disdetti; in tal caso, interessa la data della disdetta.
    3. Un appartamento può avere piµu proprietari e un proprietario può possedere piµu appartamenti. Di ogni proprietario interessano il nome, il codice scale, l'indirizzo, il telefono e il saldo, ossia la somma che il proprietario deve all'amministratore condominiale per le spese sostenute.
    4. Le spese riguardano i condomini e di esse interessano il codice di identificazione, la natura (luce, pulizia, ascensore, ecc.), la data e l'importo. Fra le spese si distinguono quelle straordinarie, a carico dei proprietari, e quelle ordinarie, a carico degli inquilini. Le spese ordinarie vengono pagate in un'unica rata, mentre le spese straordinarie possono essere pagate in più rate e di ognuna di esse occorre ricordare la data e l'importo.
  26. Si progetti una base di dati per la gestione di un registro automobilistico, facente parte del sistema informativo di ufficio di motorizzazione, contenente (almeno) le seguenti informazioni:
    1. di ciascun veicolo interessa registrare la targa, la cilindrata, i cavalli fiscali, la velocità, il numero di posti e la data di immatricolazione;
    2. i veicoli sono classificati in categorie (automobili, ciclomotori, camion, rimorchi, ecc.);
    3. ciascun veicolo appartiene ad uno specifico modello;
    4. tra i dati relativi ai veicoli, vi µe la codifica del tipo di combustibile utilizzato;
    5. di ciascun modello di veicolo µe registrata la fabbrica di produzione e il numero delle versioni prodotte;
    6. ciascun veicolo può avere uno o piµu proprietari, che si succedono nel corso della vita" del veicolo; di ciascun proprietario interessa registrare cognome, nome e indirizzo di residenza.
  27. Si progetti una base di dati per la gestione informatica delle partite di un campionato di calcio, a partire dalle seguenti specifiche. Per ogni partita, descrivere il girone (andata o ritorno) e la giornata in cui si µe svolta (prima giornata del campionato, seconda giornata, ecc.), il numero progressivo nella giornata (es. prima partita della giornata, seconda partita, ecc.), la data, con giorno, mese e anno, le squadre coinvolte nella partita, con nome, città della squadra e allenatore, e, infine, per ciascuna squadra, se ha giocato in casa. Si vogliono conoscere i giocatori che giocano in ogni squadra, con i loro nomi e cognomi, la loro data di nascita e il loro ruolo principale. Si vuole conoscere, per ogni giornata, quanti punti ha ogni squadra. Si vogliono anche conoscere, per ogni partita, i giocatori che hanno giocato, i ruoli di ogni giocatore (i ruoli dei giocatori possono cambiare di partita in partita) e nome, cognome, città e regione di nascita dell'arbitro della partita. Distinguere le partite giocate regolarmente dalle partite rinviate. Per quelle rinviate, rappresentare la data in cui si sono effettivamente svolte. Distinguere anche le partite giocate in una città diversa da quella della squadra ospitante; per queste si vuole rappresentare la città in cui si sono svolte, nonché il motivo della variazione di sede. Dei giocatori interessa anche la data di nascita.
  28. Si vuole progettare una base di dati per la gestione di un reparto ospedaliero, contenente le seguenti informazioni:
    1. I pazienti, con codice fiscale, nome, cognome e data di nascita.
    2. I ricoveri dei pazienti, ognuno con data di inizio (identificante nell'ambito dei ricoveri di ciascun paziente) e medico curante; inoltre, per i ricoveri conclusi, la data di conclusione e la motivazione (dimissione, trasferimento, ...) e, per i ricoveri in corso, il recapito di un parente.
    3. I medici, con un numero di matricola, cognome, nome e data di laurea.
    4. Le visite, con la data, l'ora, i medici visitanti, le medicine prescritte (con le relative quantità) e le malattie diagnosticate; ogni visita è identificata dal paziente, dalla data e dall'ora.
    5. Per ogni medicina sono rilevanti un codice identificativo, un nome e un costo.
    6. Per ogni malattia sono rilevanti un codice identificativo e un nome.
  29. Si vuole progettare una base di dati per la gestione di un supermercato, contenente le seguenti informazioni:
    1. per ogni dipendente, il codice identificativo, il nome e il cognome, le eventuali persone a carico, l'indirizzo e il reparto di appartenenza;
    2. per ogni reparto, il nome, i dipendenti, il responsabile del reparto e gli articoli
      in vendita;
    3. per ogni articolo in vendita, il nome, il fornitore, il prezzo di vendita e due codici identificativi (uno assegnatogli dal fornitore, che identifica univocamente l'articolo nell'insieme degli articoli da lui forniti, l'altro dal supermercato, che identifica univocamente l'articolo all'interno del reparto cui è stato assegnato);
    4. per ogni fornitore, il nome, l'indirizzo e gli articoli che esso fornisce al supermercato (con i relativi prezzi). Si assuma che, in ogni istante, ogni articolo venga fornito da un solo fornitore e che tale fornitore possa variare nel tempo.
  30. Spettacoli di Broadway
    Si vuole realizzare un sistema informativo per gestire la vendita di biglietti per gli spettacoli di Broadway. Ogni spettacolo ha un codice univoco, una durata, un titolo, un autore, un regista e una lista di attori principali. Le rappresentazioni di uno spettacolo si svolgono tutte nello stesso teatro, in più periodi di tempo disgiunti; ciascuno spettacolo viene rappresentato a orari fissati nei giorni di rappresentazione, per un massimo di due spettacoli al giorno (gli orari possono variare nei diversi giorni della settimana o per i giorni festivi). Ciascun teatro, identificato da un nome, ha un indirizzo, un numero di telefono e una pianta della sede in forma di insieme di settori, ognuno dei quali ha associata una matrice che rappresenta i posti del settore. Ad ogni settore è associato un costo (dipendente dallo spettacolo) e ogni posto (elemento della matrice associata al settore) può essere libero, prenotato o venduto. Per ogni rappresentazione è possibile prenotare un posto libero e, successivamente, acquistare i relativi biglietti. Il sistema deve mantenere uno storico di tutti gli spettacoli, le rappresentazioni e le vendite dei biglietti. Non è necessario mantenere un archivio dei clienti, che non vengono registrati per l'acquisto dei biglietti, ma lasciano semplicemente il nome per prenotare.
  31. Libreria 1001 pagina
    L'attività imprenditoriale dell'azienda "1000 e 1 pagina" è legata alla vendita dei libri a una serie di negozi. Nell'archivio dell'azienda devono essere memorizzate le informazioni relative ai libri a catalogo (titolo, editore, data di pubblicazione, autori e prezzo) oltre alle informazioni relative alle case editrici da cui provengono i libri (nome dell'editore, indirizzo, città e nazione) e degli autori stessi (nome, cognome, indirizzo e città). Inoltre la "1000 e 1 pagina" tiene traccia delle vendite memorizzando il numero di copie di ciascun libro vendute in una certa data ai diversi negozi (di cui sono mantenuti nome, indirizzo e città). La gestione dell'archivio consiste essenzialmente nell'inserimento dei dati riguardanti i nuovi libri a catalogo e alle vendite, inoltre annualmente il prezzo di copertina dei libri è aumentato del 3%. La "1000 e 1 pagina" utilizza l'archivio per analizzare l'andamento delle vendite dei libri e stilare la classifica di vendita settimanale. Per migliorare i rapporti con la propria clientela, la "1000 e 1 pagina" invia ai suoi clienti più assidui alcuni gadget in omaggio durante le festività natalizie: per determinare i clienti più assidui vengono selezionate le librerie che hanno acquistato almeno 1000 copie nel corso dell'ultimo anno.
  32. Torneo di calcetto
    A un torneo di calcetto partecipano 16 squadre, ognuna composta da 8 giocatori. Ogni squadra ha un allenatore che può anche essere uno degli 8 giocatori. Durante una partita, l'allenatore può sostituire a piacere i propri giocatori (senza limiti sul numero di sostituzioni) ma facendo sì che in campo siano presenti sempre 5 giocatori. Per ogni partita si vuole tenere traccia, di tutte le sostituzioni, e in particolare di tutti gli intervalli di tempo in cui ciascun giocatore è stato in campo. Si vogliono inoltre memorizzare tutti i goal, indicando per ciascuno di essi: il giocatore che lo ha realizzato; il minuto e il secondo in cui stato realizzato e il tipo (normale, di testa, punizione, rigore).
  33. Facoltà universitaria
    Si vuole automatizzare la gestione dei corsi in una facoltà universitaria. La facoltà prevede diversi corsi, caratterizzati da un codice e da un nome. Ciascun corso è tenuto da un solo docente, di cui si vogliono memorizzare il codice, il nome, il cognome, il codice fiscale, l'indirizzo (opzionale) e fino a 5 recapiti telefonici. Di ciascun corso si vuole memorizzare l'orario settimanale (2 o 3 lezioni in ore e aule diverse). La gestione degli esami prevede un'iscrizione agli appelli (per un massimo di 50 studenti per appello) e in caso di superamento, la memorizzazione di data e voto.
    L'iscrizione a un esame è vincolata al superamento di determinati esami che per un corso sono considerati propedeutici. Gli studenti iscritti sono identificati da un numero di matricola e caratterizzati da nome, cognome, codice fiscale, indirizzo (opzionale) e fino a 5 recapiti telefonici.
  34. Gelateria
    La gelateria "ArtiGel" vende gelato artigianale e torte gelato all'ingrosso. Il sistema informativo deve mantenere i dati relativi ai fornitori e ai rivenditori (bar, ristoranti, …). I fornitori sono identificati dalla partita IVA, e hanno un nome, una ragione sociale, un indirizzo, un telefono. A
    ciascun fornitore è associata una o più categorie di prodotti (materie prime). I prodotti forniti dalla gelateria sono identificati da un codice, da una descrizione (es. "torta al cioccolato"), da un prezzo e da una lista di ingredienti con relative quantità. Essendo deperibili i prodotti vengono prodotti solo per evadere un ordine (non c'è magazzino). Gli ingredienti (ovvero le materie prime) hanno un nome, una categoria e un solo fornitore; le giacenze a magazzino degli ingredienti devono essere monitorate, così come i livelli di riordino. I rivenditori (clienti) sono caratterizzati da P.IVA, nome, indirizzo. Il sistema deve gestire gli ordini verso i fornitori e da parte dei clienti.
  35. Fumetti
    Una rivista periodica di fumetti vuole memorizzare informazioni relative a tutte le storie che ha pubblicato nel passato, ed ai relativi personaggi. Di una storia interessa il titolo, che la identifica, ed interessano informazioni relative alle puntate in cui è stata divisa: per ogni puntata interessa il numero di pagine, il numero d'ordine all'interno della storia (prima, seconda…) ed il numero della rivista su cui è stata pubblicata. I personaggi si dividono in principali e secondari. Per tutti i personaggi interessa il nome, che li identifica. Per i personaggi secondari interessa ricordare le storie in cui sono apparsi, mentre per quelli principali si vogliono memorizzare precisamente le
    puntate di apparizione. Se due personaggi sono parenti, se ne memorizza la relazione di parentela (ovvero, il fatto che sono parenti ed anche il grado di parentela).
  36. Il vivaio SempreVerde
    Il vivaio SempreVerde vuole realizzare un sistema informativo per la gestione delle piante.
    Le piante disponibili nel vivaio, caratterizzate da un codice e da una descrizione, appartengono a una specie che a sua volta fa parte di una determinata categoria (es. specie "mela renetta", categoria "alberi da frutta").
    All'interno del vivaio sono presenti diverse serre identificate da un codice, ciascuna delle quali è divisa in settori, caratterizzati da un numero univoco all'interno della serra. Ciascuna serra ospita una sola categoria di piante; al suo interno, in ogni settore può ospitare una sola specie.
    Si vuole gestire inoltre il personale che lavora nel vivaio, memorizzando per ciascun dipendente codice fiscale, cognome, nome, indirizzo e numero di telefono. Ogni settore è affidato a un dipendente che deve innaffiare le piante presenti nei settori di sua competenza nel rispetto di un calendario settimanale prefissato (giorni della settimana e rispettivi orari per ciascun settore).
    In alcuni periodi dell'anno il vivaio propone delle vendite promozionali, delle quali si memorizzano un codice identificativo, un nome, la data di inizio e quella di fine. In ciascuna promozione vengono offerti degli sconti su alcune specie di piante. La percentuale di sconto all'interno di una determinata promozione dipende dalla specie di pianta e dalla quantità acquistata.
  37. Laboratorio fotografico
    Il laboratorio fotografico "PhotoOnLine" vende online ristampe in vari formati, fotocalendari, fotoalbum, stampe fotografiche su magliette e altri prodotti fotografici. Relativamente a prodotti forniti sono mantenuti un codice, il nome, un tipo, un'immagine, una descrizione e un listino
    composto "prodotto, quantità, prezzo" (es. "foto 10x15"; "fino a 10"; "0,19 €"). Per effettuare acquisti i clienti si registrano fornendo l'indirizzo di e-mail, una login e una password: al momento della conferma dell'ordine sono inoltre richiesti i dati anagrafici completi e l'indirizzo postale. Gli ordini sono caratterizzato da un numero d'ordine, da una data e sono associati a un solo cliente; viene inoltre memorizzato il totale dell'ordine, le eventuali spese di spedizione, il tipo di pagamento e l'indirizzo di spedizione o il negozio affiliato preso cui ritirare la stampa. Di ciascuna stampa associata ad un ordine si memorizza il prezzo, la quantità e l'elenco dei file che devono essere stampati: i clienti effettuano l'upload delle immagini da stampare. Relativamente ai negozi affiliati si memorizza la partita IVA, il nome, l'indirizzo, il telefono e il nominativo del proprietario.
  38. Si considerino i seguenti fatti di interesse di una scuola media.
    Insegnanti: un insegnante è identificato dal codice fiscale; di ogni insegnante interessa il cognome, il nome, le materie d'insegnamento, le classi in cui insegna (supponiamo che un insegnante possa insegnare materie diverse in classi diverse, ad es. Italiano in una classe e Storia e Geografia in un'altra classe).
    Studenti: uno studente è identificato da cognome, nome, di ogni studente interessa inoltre il luogo di nascita, la data di nascita, la classe che frequenta.
    Classi: una classe è identificata da un numero (1, 2 o 3) e dalla sezione; di ogni classe interessa inoltre il numero di studenti che la frequentano, gli insegnanti che vi insegnano e gli studenti che la frequentano.
    a) Modellare i fatti sopra descritti nel modello concettuale
    b) Tradurre lo schema concettuale in uno schema relazionale in SQL
    c) Definire un'interrogazione in SQL che restituisca il numero di studenti della classe frequentata da Paoli Piero
  39. Si considerino i seguenti fatti di interesse di un'agenzia immobiliare.
    Immobili in vendita: di un immobile, identificato da un codice, interessa il tipo (appartamento, villa, …), la superficie, il numero di vani, eventuali annessi (garage, cantina, giardino, …), il prezzo richiesto, il proprietario.
    Proprietari: un proprietario è identificato dal codice fiscale; di ogni proprietario interessa il cognome, il nome, il num. Telefonico, gli immobili in vendita di cui è proprietario.
    a) Modellare i fatti sopra descritti nel modello concettuale
    b) Tradurre lo schema concettuale in uno schema relazionale in SQL
    c) Definire una interrogazione in SQL che restituisca codice fiscale, cognome e nome dei proprietari di appartamenti di 5 vani per i quali è richiesta una cifra inferiore a 300 milioni
  40. Si consideri un'anagrafe contenente informazioni riguardanti persone:
    Codice fiscale (che identifica una persona), cognome, nome, sesso, età, comune di residenza, se la persona lavora oppure no.
    Se una persona lavora è specificata la sua attività ed il comune in cui questa si svolge, se invece non lavora è specificato se è disoccupata od in attesa di primo impiego.
    I comuni sono identificati dal nome, di essi viene inoltre specificata la provincia, la regione ed il numero di abitanti
    a) Modellare i fatti sopra descritti nel modello concettuale
    b) Tradurre lo schema concettuale in uno schema relazionale in SQL
    c) Definire in SQL un'interrogazione che restituisca cognome e nome delle persone che lavorano in provincia di Pisa.
    d) Con riferimento allo schema del punto b) scrivere un'espressione dell'algebra relazionale che restituisca nome, cognome e sesso di una persona che lavora nel comune di Lucca
  41. Si considerino le seguenti informazioni di interesse di una ditta di autotrasporti.
    Le informazioni che interessano riguardano:
    Gli automezzi: targa, marca, tipo, portata;
    gli autisti: codice fiscale, cognome, nome, età, indirizzo;
    i viaggi compiuti e quelli in corso: codice viaggio, automezzo utilizzato, l'autista (o gli autisti), una descrizione del carico trasportato, città di partenza, data e ora di partenza, città di destinazione, data e ora di arrivo (se il viaggio è terminato).
    a) Definire lo schema concettuale dei dati nel modello E-R e
    b) tradurlo nel modello relazionale
    c) Definire la base dati in SQL
    d) Definire in SQL una tabella virtuale AutistiInViaggio contenente il codice fiscale, cognome, nome, destinazione di tutti gli autisti impegnati in viaggi non ancora conclusi.
  42. Si considerino i seguenti fatti relativi ad un istituto di ricerca.
    L'istituto è composto di sezioni; una sezione è identificata da un codice; di una sezione interessa il nome, il responsabile, i ricercatori che vi afferiscono.
    Un ricercatore è identificato da un codice; di un ricercatore interessa il nome, la sezione di appartenenza, i progetti a cui partecipa.
    Un progetto è identificato da un codice; di un progetto interessa l'obiettivo, il responsabile, i ricercatori che vi partecipano
    d) Modellare i fatti sopra descritti nel modello concettuale
    e) Tradurre lo schema concettuale in uno schema relazionale in SQL
  43. Si prendano in esame i seguenti fatti, riguardanti il crimine organizzato:
    I criminali sono organizzati in bande; di ciascuno di essi, identificato da un codice, interessano i dati anagrafici, la banda cui è affiliato, gli eventuali crimini addebitategli con l'anno in cui gli investigatori hanno formulato l'incriminazione.
    Di ogni banda, identificata da un codice, interessa il nome, il capo e gli altri affiliati, le altre bande con cui eventualmente collabora. Una banda è costituita da almeno tre affiliati, compreso il capo.
    Di ogni crimine, identificato da un codice, interessa il luogo e la data, le persone colpite, gli eventuali responsabili.
    a) Modellare i fatti sopra descritti nel modello concettuale
    b) Tradurre lo schema concettuale in uno schema relazionale in SQL
    c) Definire una interrogazione in SQL che data una banda, restituisca tutti i crimini addebitati ai suoi affiliati
  44. Si considerino le seguenti informazioni di interesse di una ditta di autotrasporti.
    Le informazioni che interessano riguardano:
    Gli automezzi: caratterizzati da targa, marca, portata;
    Gli autisti: codice fiscale, cognome, nome;
    I viaggi compiuti: codice viaggio, automezzo utilizzato, gli autisti del mezzo (possono essere più di uno), una descrizione del carico trasportato, città di destinazione.
    1. Definire lo schema concettuale dei dati nel modello E-R
    2. Tradurre lo schema E-R in uno schema relazionale
    3. Query SQL:
  45. Gestione di un negozio di dischi
    Descrizione del progetto
    Si vuole realizzare una base di dati per automatizzare la gestione di un negozio di dischi.
    Si richiede che ogni album presente nel catalogo venga identificato in base ad un codice. Le informazioni riguardanti un album di cui si vuole tenere traccia sono: il titolo, l'anno di uscita, la case editrice, il genere (classica, jazz, pop, new age, rock, ...) ed il supporto di registrazione (CD, minidisk, cassetta). Per semplicità, se uno stesso album viene memorizzato su, ad esempio, due supporti differenti, i dati relativi a quell'album devono essere registrati separatamente.
    Di ciascun album si vogliono registrare le seguenti informazioni sui brani in esso contenuti: titolo e durata totale (espressa in secondi). Nulla vieta che uno stesso brano faccia parte di più di un album (ad es. le raccolte contengono brani appartenenti, in genere, ad album già pubblicati).

    IVA PAESE
    20% Italia
    25% America
    15% Altro

    Di ogni artista si vuole sapere, oltre all'indicazione del nome, se nel corso della sua attività artistica ha lavorato in differenti gruppi musicali tenendo traccia, per ogni gruppo nei quali ha lavorato, del nome del gruppo, dell'anno di affiliazione ed eventualmente di abbandono.
    Di ogni album ovviamente possono essere presenti più copie e per ciascuna di essa si vuole memorizzare il prezzo al netto di IVA ed un codice identificativo necessario alla corretta allocazione del bene nel magazzino. Le differenti tipologie di Iva applicabili alle copie degli album, in base al paese di importazione, sono presentate nella tabella a lato.
    Si vuole inoltre tenere traccia dei clienti che effettuano acquisti nel negozio, ai fini di effettuare delle statistiche di vendita. In particolare, di ogni cliente si vuole conoscere il nome, il cognome ed il codice della tessera identificativa personale.
    Ogni copia presente può essere venduta ad un cliente il quale può acquistare, se lo desidera, anche più copie dello stesso album; si vuole inoltre tenere traccia della data in cui una copia è stata venduta.
    Si richiede di:
    1) Definire lo schema E-R;
    2) Tradurre lo schema E-R in uno schema relazionale;
    3) Definire le relazioni trovate al punto 1 in Access, stabilendo domini opportuni per gli attributi ed implementando ogni vincolo di integrità che si ritenga opportuno (giustificando le scelte effettuate);
    4) Popolare la base di dati creata in modo tale che vi sia un data-set coerente con le informazioni necessarie per svolgere il punto 5.
    5) Effettuare sulla base di dati così definita le seguenti operazioni:
    a) Realizzazione di una maschera per la visualizzazione di tutte le copie degli album presenti in negozio, con l'indicazione del prezzo al netto di IVA e del prezzo comprensivo di IVA;
    b) Individuazione mediante maschera di tutti i gruppi musicali memorizzati nel DB con relativa sottomaschera per la visualizzazione dei rispettivi componenti;
    c) Definizione di una maschere per l'immissione di nuove "associazioni" tra Album e Brani in esso contenuti (utilizzando delle combo-box per visualizzare sia gli album che i brani).

    Realizzare le seguenti query:
    1) Scrivere una query che restituisca i titoli degli album dei "883";
    2) Scrivere una query che restituisca tutti i titoli delle canzoni di "U2" appartenenti ad album pubblicati prima del 2000;
    3) Dato un gruppo individuare tutti gli artisti che ne hanno fatto parte, e durante quale intervallo di tempo;
    4) Dato un titolo di una canzone individuare tutti gli album in cui è contenuta;
    5) Dato un artista ed una data, selezionare tutti i titoli degli album venduti per quell'artista in quella data;
    6) Dati come parametri un artista e un gruppo, scrivere una query che restituisca l'elenco delle canzoni realizzate dal questo gruppo quando l'artista ne faceva parte;
    7) Dati come parametri: anno di pubblicazione e nome casa editrice, selezionare tutti gli album editi dalla casa editrice nell'anno specificato;
    8) Dato un artista restituire il numero totale di canzoni da lui eseguite;
    9) Dato un gruppo, contare per ogni album, le copie vendute;
    10) Calcolare per ogni genere musicale quanti album sono inseriti in catalogo;
    11) Dato come parametro il nome della casa editrice, una data inizio ed una data fine, contare il numero delle copie di album vendute in quel periodo per quella casa editrice;
    12) Per ogni copia venduta calcolare il prezzo ivato guadagno;
    13) Calcolare il totale dell'entrate per ogni anno (prezzo + IVA);
    14) Creare un tabella riassuntiva che metta in risalto per ogni gruppo il numero di album venduti in ogni anno;
    15) Dato un giorno X, calcolare il ricavato complessivo;
    16) Dato un cliente X, calcolare il numero di copie comprate da tale cliente nell'anno 2002 e la media mensile riferita all'anno 2002;
    17) Dato un album X, calcolare la durata complessiva di tale album in ore, minuti e secondi;
    18) Calcolare la disponibilità (copie non vendute) di un album dato come parametro.

Esercizi sulle strutture dati dinamiche (liste)

  1. xxx

Esercizi sulle strutture dati dinamiche (alberi)

  1. Scrivere una procedura che, dato un albero binario di interi restituisca TRUE se tutte le foglie sono allo stesso livello, FALSE altrimenti.
  2. Scrivere una procedura che, dato un albero, ricerchi un elemento dato X e restituisca tutti i suoi ascendenti (antenati) oltre a se stesso.
  3. Scrivere una procedura che, dato un albero binario di interi, restituisca TRUE se esiste almeno un nodo tale che "il nodo ha due figli e questi figli sono uguali".
  4. Scrivere una procedura che, dato un albero binario di interi distinti fra loro e dato un intero X, elimini gli eventuali sottoalberi di X se X occorre nell'albero.
  5. Scrivere una procedura che, dato un albero binario di interi ne generi un secondo identico al primo.
  6. Scrivere una procedura che, dato un albero binario di interi, ne generi un secondo simile al primo, ma con ogni nodo avente come valore il numero di ascendenti del nodo stesso.
  7. Scrivere una procedura che, dato un albero binario di interi, restituisca la lunghezza del cammino medio dell'albero.
  8. Dato un insieme di numeri interi, si vogliono distribuire tali numeri in un albero binario secondo il seguente metodo: il primo numero letto costituisce la radice dell'albero. Per ogni altro numero si percorre l'albero confrontando tale numero con i nodi successivi che si incontrano (a partire dalla radice) e proseguendo sul ramo destro se il numero dato è maggiore del nodo, sul sinistro in caso contrario, finché non si trova una foglia. A questo punto si inserisce il nuovo numero, a destra o a sinistra della foglia (che ora diviene nodo), a seconda che sia maggiore o no del numero.
  9. Scrivere una procedura che visualizza solo le foglie di un albero binario.
  10. Scrivere una procedura che, dato un elemento di un albero binario, visualizza il sottoalbero che ha tale elemento come radice.
  11. Si vuole realizzare una funzione che verifichi se un albero binario avente informazioni dei nodi di tipo carattere, presenta tali nodi ordinati in modo binario, ovvero in modo tale che, considerato un qualsiasi nodo N, tutte le informazioni dei nodi presenti nel sotto albero sinistro di N siano minori dell'informazione di N e tutte quelle dei nodi del sotto albero destro siano maggiori o uguali della stessa informazione presente in N.
  12. Si richiede una funzione che prendendo in ingresso il puntatore ad un albero binario con campo informazione dei nodi di tipo intero, verifichi se si tratta di un albero binario di ricerca, ovvero se le informazioni dei nodi sono ordinate in modo binario, e in caso contrario, ne crei uno avente stessa radice e che sia ordinato secondo quanto detto.
  13. Realizzare in linguaggio C una funzione che, presa una foresta di alberi radicati aventi campo informazione di tipo intero, li ordini in modo crescente rispetto alla somma delle informazioni di ogni albero.
  14. Dato un albero binario di numeri interi, si vuole una funzione per contare gli elementi di tale albero che hanno valore minore di un valore assegnato.
    Dopo aver detto come si possono utilizzare procedure già note per risolvere il problema, scrivere la funzione richiesta in linguaggio C:

Esercizi sulla OOP

  1. Scrivi una classe D (data) i cui oggetti possano essere inizializzati come: d(22, 08, 01); implementare il costruttore, il metodo out() per la stampa a video, il metodo mod(gg, mm, aa) per consentirne la modifica e un metodo val() per consentire la validazione della data.
  2. Definire una classe convertitore, comprensiva di costruttore e distruttore, al fine di realizzare un convertitore di valute, ad esempio lire/euro. Per il programma si richiede la scrittura di almeno una funzione membro di calcolo, una di output e la definizione di uno o più campi privati ove memorizzare i dati, nonché la scrittura del main.
  3. Creare la Classe OROLOGIO con le ore, minuti e secondi.I metodi della classe consentono di azzerare l'orario, correggere l'ora, leggere l'orario completo con ORE, MINUTI, SECONDI.
  4. Creare una classe Rettangolo e scrivere i seguenti metodi: void dimensiona(float b, float h), float area(), float perimetro(), float diagonale().
  5. Creare una classe Intero e scrivere i seguenti metodi: void assegna(int v), void incrementa(), void decrementa(), void val_ass(), void stampa(), void somma(Intero i).
  6. Definizione di una classe punto e suo utilizzo per definire a sua volta una classe Triangolo. Classe punto: Classe Triangolo:
  7. Creare una classe ContoCorrente e scrivere i seguenti metodi:
  8. Scrivere una Frazione che implementa alcune operazioni sulle frazioni:
  9. Si vuole simulare il funzionamento di un ascensore al quale possono essere trasmessi alcuni semplici comandi del tipo “Sali di un piano”, “scendi di un piano”, “apri le porte”, “chiudi le porte”. L’ascensore si trova in un palazzo di N piani e non è possibile né salire né scendere se le porte sono aperte.
  10. Creare una classe Squadra che rappresenta una squadra di calcio e ha come attributi il numero di partite vinte, il numero di partite perse e il numero di partite pareggiate. Ha opportuni metodi per impostare i parametri e farli visualizzare, inoltre ha il metodo punti() che restituisce quanti punti ha in campionato (ogni partita vinta vale 3 punti, ogni partita pareggiata 1, quelle perse 0) e un metodo inizioanno() che resetta il numero di partite vinte, pareggiate e perse portandole a zero.Creare un main per provare la classe creando due istanze Juventus e Milan e si provino ad utilizzare facendo inserire all’utente per entrambe le squadre il numero di partite vinte, perse e pareggiate e poi confrontando quale delle due ha più punti in campionato. NB: si sviluppi usando il paradigma della programmazione ad oggetti ed in particolare rispettando l’information hiding: parametri privati, metodi pubblici.
  11. Creare una classe Portamonete in cui memorizzare quante monete da 50 cent 1 euro o 2 euro si hanno. creare il metodo inserisci(double valore) che riceve il valore di una moneta e se è un valore ammissibile aumenta il numero di monete di quel tipo, creare un altro metodo inserisci(double valore, int n) che permette di inserire più monete di uno stesso tipo (n) in una volta sola. creare un metoto denaro() che restituisce quanto denaro in totale si ha nel portamonete creare un metodo denaropertipo() che scrive per a schermo quante monete di ogni taglio sono presenti. creare un costruttore standard che porta tutte le monete a zero, creare un altro costruttore che riceve il numero i monete da 50 cent 1 euro o 2 euro.
  12. Creare una classe Portafoglio che estende la classe Portamonete dell’esercizio precedente eche permette di memorizzare anche banconote da 5, 10 e 20 euro.
  13. La classe ha gli stessi metodi della classe Portamonete opportunamente rivisti: permettono di inserire anche banconote e le conteggiano tra il denaro memorizzato. Inoltre ha un metodo banconote() che dice il valore delle banconote inserite.
  14. Si definisca una classe C++ che rappresenti un conto corrente bancario. La classe ContoCorrente deve possedere i seguenti campi (PROTETTI dall'esterno): Nel vettore dei movimenti vengono registrati gli importi di prelievo e versamento (1000, -500, 800, ...). Il contatore dei movimenti conta il numero dei movimenti registrati nel vettore. Metodi che deve possedere la classe: Si definisca una classe Java che contenga il metodo main e che crei un vettore di 3 istanze della classe ContoCorrente e realizzi su di esse una serie di operazioni.
  15. Si definisca una classe C++ che rappresenta una persona. La classe Persona deve possedere i seguenti campi (PROTETTI dall'esterno): Inoltre, mette a disposizione un metodo info per ritornare una stringa che riporta il nome e il cognome. Si definiscano poi due classi che rappresentano rispettivamente studenti elavoratori. La classe Studente estende la classe Persona e aggiunge i seguenti campi: e ridefinisce il metodo info per riportare anche la matricola e il corso di laurea. La classe Lavoratore estende la classe Persona e aggiunge i seguenti campi: e ridefinisce il metodo info per riportare anche il codice e l’azienda in cui lavora.Infine si definisca un main che crea diversi oggetti di classe persona, Studente e Lavoratore, e ne mantiene i riferimenti in un array. Dopo, chiede le informazioni di ogni elemento dell’array e le stampa a video. Definire la classe ContoCorrente e la classe che contiene il metodo main in due file distinti.
  16. Creare una classe Contatto che contenga, sotto forma di attributi, i dati relativi ad un generico contatto (prevedere almeno cognome, nome, indirizzo, città, telefono fisso e cellulare) e che abbia i seguenti metodi:
  17. creare la classe RubricaTelefonica che presenti come attributi almeno i seguenti: un vettore rubrica[] di N elementi di classe Contatto e la costante N. Tra i metodi della classe RubricaTelefonica, oltre a quelli di default, devono comparire almeno i seguenti: Il main della classe RubricaTelefonica deve creare un oggetto rt di classe RubricaTelefonica e presentare a video un menu operativo contenente le operazioni suddette, oltre a quella per terminare regolarmente l’esecuzione.
  18. Si vuole effettuare un’indagine statistica relativa ai clienti di una banca. Dichiarare una classe Element, caratterizzata da dati membro: nome-cognome cliente Nome, tipo rapporto Tipo (1-Conto corrente, 2-Carta di credito); costruttori, metodi di accesso e stampa dei dati. Dichiarare una classe Conto derivata pubblica da Element, caratterizzata da dati membro: numero di conto NConto, saldo del conto Saldo, cifra totale degli addebiti TotA, cifra totale dei prelievi TotP; da costruttori, metodi di accesso e stampa. Dichiarare una classe carta di credito Carta derivata pubblica da Element, caratterizzata da dati membro: numero carta di credito Cod, cifra totale delle spese fatte TotS, cifra totale TotM delle spese fatte nell'ultimo mese, cifra totale TotA delle spese fatte nell'anno in corso; da costruttori, metodi di accesso e stampaSviluppare anche i metodi delle classi Element, Conto, CartaCredito.Sviluppare un main in cui vi sia la struttura dati Arch degli elementi trattati, contenente l'archivio dei clienti che hanno un conto corrente o una carta di credito. Scegliere la struttura dati piu' opportuna. Si organizzi un loop che consenta le seguenti operazioni: a.Lettura dei dati iniziali di un elemento (Conto o Carta) e relativa inserzione nell'archivio Arch, prevedendo separatamente anche l'inserimento dei dati che subiscono aggiornamenti successivi a seguito di operazioni sul conto corrente o sulla carta di credito. b.Analizzare l'archivio Arch per fare un’indagine statistica per gli elementi Conto: verificare il numero di clienti che ha un saldo compreso tra 30 e 60 milioni, e calcolare per questi clienti sia la media del valore degli addebiti che la media del valore dei prelievi. Stampare il numero di clienti con queste caratteristiche e le medie calcolate.Per semplicità e facilità di correzione sviluppare l'esercizio in un unico file (contenente tutte le classi necessarie per le strutture dati che si vogliono utilizzare).
  19. Si vuole effettuare una elaborazione che consenta di svolgere alcune indagini su strutture ospedaliere relative ad un anno di attività. Dichiarare una classe Element che contiene dati su strutture ospedaliere, caratterizzata da dati membro: identificatore ospedale CodEle, numero reparti Nrep (al massimo vi sono 30 reparti per ospedale), numero laboratori NLab; costruttori, metodi di accesso e stampa dei dati. Dichiarare una classe reparto Rep derivata pubblica da Element, caratterizzata da dati membro: nome reparto CodRep, Nr Posti Letto, Nr Degenti, i giorni di degenza media (gli ultimi due dati vanno calcolati successivamente a partire dall’archivio Degenze); da costruttori, metodi di accesso e stampa. Dichiarare una classe laboratorio di analisi Lab derivata pubblica da Element, caratterizzata da dati membro: nome laboratorio CodLab, Nr Esami, Spese, Introiti; da costruttori, metodi di accesso e stampa.Sviluppare anche tutti i metodi delle classi Element, Rep, Lab.Sviluppare un main in cui vi sia la struttura dati Arch degli elementi ospedale, contenente sia reparti che laboratori, con le relative informazioni. Scegliere la struttura dati piu' opportuna. Si organizzi un loop che consenta le seguenti operazioni:
  20. Si realizzi una classe Tavolo, per la gestione del tavolo di un ristorante Variabili di istanza della classe (private): Costruttori: Metodi (pubblici)della classe: Predisporre un programma per testare la classe realizzata. Tale programma dovrà: Prova 2
  21. Si realizzi una classe Taxi, per la gestione di un’auto adibita a taxi. Variabili di istanza della classe (private): Costruttori: Metodo privato della classe: Metodi (pubblici)della classe: Calcolo del costo del servizio Costo = costoOrario x n.ore + costoKm x n.km + scatto di partenza Scatto alla partenza: Predisporre un programma per testare la classe realizzata. Tale programma dovrà:

Esercizi sui giochi

  1. Gioco Mastermind.
    Si gioca in due. Il primo giocatore pensa un numero formato da 4 cifre fra loro differenti. Il secondo giocatore deve indovinare il numero. Ad ogni tentativo del secondo giocatore, il primo deve rispondere con una E per ogni cifra esatta e posizionata correttamente e con una A per ogni cifra esatta ma non correttamente posizionata. Ad esempio: sia da indovinare 1 2 3 4 e il secondo giocatore dica 1 3 4 7. La risposta è E A A (E per la cifra "1" e A A per le cifre "3" e "4"). Scrivere un programma nel quale l'elaboratore simuli il 1º giocatore. [N = TRUNC(RANDOM*10) in PASCAL è l'istruzione che genera numeri compresi fra 0 e 9 (le cifre del numero); si controlli che le cifre siano fra loro differenti]
  2. Gioco dei cerini.
    Posti 15 cerini su un tavolo, due giocatori, a turno, devono togliere 1, 2 o 3 cerini. Perde chi toglie l'ultimo cerino.
  3. Gioco dei cerini. (variante)
    Vi sono due giocatori e 25 cerini in tavola. Ogni giocatore a turno può togliere da 1 a 4 cerini; vince chi, alla fine, avrà raccolto un numero pari di cerini. Provate il gioco con un vostro compagno e cercate di delineare una strategia vincente.
  4. Gioco della "conta".
    Vi sono N ragazzi disposti in cerchio. Iniziando da una posizione definita e fissata in modo pseudo-casuale un intero M (1 < M < 100) si inizia a fare la "conta" contando in cerchio. Ogni M-simo ragazzo viene escluso dal gioco e il cerchio si restringe. Vince l'ultimo ragazzo rimasto. Scrivere un programma che realizzi la situazione descritta e stampi l'elenco degli esclusi.
  5. Un gioco a carte.
    Si gioca con un normale mazzo di 52 carte, con le seguenti regole:
    1. si affrontano 2 giocatori;
    2. vengono date 5 carte;
    3. le combinazioni vincenti sono: poker, tris, coppia (asso=minimo - re=massimo);
    4. i giocatori puntano 1000 lire ogni mano e in caso di parità il piatto rimane in tavola.
    Scrivere un programma che simuli in modo pseudo casuale 10 mani di una partita, stampi le carte di ogni giocatore e gestisca il montepremi.
  6. Slot-machine.
    Si deve simulare il funzionamento di una "slot-machine". La macchina ha 4 simboli a disposizione: $, !, *, ? Questi simboli compaiono a gruppi di 3 in modo casuale con possibilità di ripetizione. Si hanno vincite: Le vincite sono di valore decrescente nell'ordine che segue: 3$, 3!, 3*, 3?, 2$ e x, 2! e x. Le vincite partono da 10 dollari e sono nell'ordine: 10, 8, 6, 6, 5, 5. Per ogni gioco non riuscito si perdono 2 dollari. Partendo da un capitale iniziale di 100 dollari eseguire ripetutamente il gioco per un numero massimo di puntate (100 puntate) o fino alla perdita del capitale iniziale. Stampare le singole uscite, la vincita o la perdita ad ogni gioco, il capitale attuale, il numero di giochi eseguiti fino a quel momento.
  7. Gioco degli 11 fiammiferi.
    Il gioco comincia con 11 fiammiferi disposti sul tavolo. Due giocatori, alternativamente, possono raccogliere 1, 2 o 3 fiammiferi. Vince il giocatore che costringe l'avversario a raccogliere l'ultimo fiammifero. Determinare la strategia di gioco che permette al giocatore che apre il gioco di vincere sicuramente e realizzare un programma che simuli una partita tra il calcolatore e l'operatore e che permetta al calcolatore di ottenere delle vincite. Si generalizzi quindi il gioco, e quindi il programma, in modo tale che il numero dei fiammiferi sia variabile e possa essere deciso al momento in cui si gioca.
  8. Fare un programma che mi permetta di giocare nel seguente modo: io penso un numero naturale compreso tra due limiti fissati, e il computer deve indovinare tale numero nel minor numero di tentativi: mi possono essere fatte delle domande alle quali posso rispondere solo con un sì o un no. Il programma dovrà anche controllare che l'utente non fornisca risposte contraddittorie.
  9. Un numero casuale compreso tra 1 e 1000 viene generato dall'elaboratore. L'utente dovrà indovinarlo, sulla base di risposte del tipo TROPPO ALTO o TROPPO BASSO. Indovinato il numero, o dopo un massimo di 15 tentativi, dovrà apparire la richiesta di ripetizione.
  10. Inventare due giochi e scrivere i relativi programmi basati sulla generazione pseudo-casuale dei numeri.
  11. Lo Yathzee
    Lo Yathzee è un antico gioco cinese con i dadi: si gioca con 5 dadi da parte di 2 o più giocatori. Ogni giocatore dispone di una tabella formata di 13 caselle:
    1. somma degli 1
    2. somma dei due
    3. somma dei 3
    4. somma dei 4
    5. somma dei 5
    6. somma dei 6
    7. tre di un tipo
    8. quattro di un tipo
    9. full (3 + 2)
    10. quattro in scala
    11. cinque in scala
    12. cinque uguali (yathzee)
    13. totale punti
    Lo scopo del gioco è quello di riempire al meglio le 13 caselle. Ogni giocatore a turno lancia 5 dadi e può rilanciarne 1 sola volta da 1 a 5, a questo punto è costretto a riempire una delle tredici caselle a sua disposizione. I punteggi per i), l), m), n), sono fissi: 25, 30, 40, 50 punti, rispettivamente, mentre per le altre caselle i punteggi mutano.
    Si abbia per esempio: si ha a) 0, b) 6, c) 0, d) 0, e) 5, f) 6, g) 6, h) 0, o) 17
     
    2   2   2   5   6

    Se invece si avesse
    5   5   5   5   3
    a) 0, b) 0, c) 3, d) 0, e) 20, f) 0, g) 15, h) 20, o) 23.


    Ad ogni turno di lanci ogni giocatore deve riempire una casella della propria tabella (eventualmente mettendo zero), diversa da quelle già utilizzate. Si effettuano 13 turni di lanci e vince il giocatore che raggiunge la somma più elevata di punti delle tredici caselle. i] predisporre una tabella per il gioco; ii] giocate con dadi veri con i vostri compagni alcune partite; iii] scrivete un programma per la simulazione del lancio del dado in modo che sia il computer a effettuare il lancio di 5 dadi e rilanci una seconda volta i dadi richiesti. Scrivere l'intero programma yathzee

    i] predisporre la tabella secondo il numero dei giocatori; ii] lancia i dadi, rilancia i dadi richiesti; iii] richiede che tipo di scelta si intende operare (a)....o)); iv] controlla e assegna il punteggio; v] calcola i totali e proclama il vincitore.
  12. Misuratore di riflessi
    Simulare con un programma un misuratore di riflessi così concepito: generare n segnali acustici ad intervalli irregolari compresi fra un certo tempo minimo e massimo. Dopo ogni segnale acustico l'utente ha 0.3 secondi di tempo per battere un tasto. Alla fine dare la percentuale di errori commessi.
  13. Misuratore di riflessi
    Realizzare un misuratore di riflessi così concepito: sullo schermo appaiono di continuo lettere ad intervalli casuali che bisogna ribattere sulla tastiera entro 0.5 secondi pena il conteggio di un errore. In qualche angolo dello schermo si deve vedere continuamente il numero degli errori e la percentuale degli errori.
  14. Un segnale acustico avverte che è iniziato un conteggio temporale interno; quando si riterranno passati 30 secondi, dovrà essere premuto un tasto che causerà la cessazione del conteggio. Dovranno venir visualizzati sia il tempo effettivo che il tempo presunto, e le differenze tra i itempi con l'indicazione se in eccesso o in difetto.
  15. Ruba mazzetto
    Simulare il gioco di carte «ruba mazzetto» in cui la macchina svolge alternativamente il ruolo di un giocatore A e del suo avversario B. Le regole del gioco sono le seguenti: «dopo aver mescolato il mazzo e distribuito metà carte a testa, i giocatori scoprono a turno una carta (estraendola dalla testa del proprio mazzo) su una pila (inizialmente vuota) fino a quando un giocatore X scopre una carta avente valore x = 1, 2 o 3 di un seme qualsiasi. Il giocatore avversario Y deve allora versare x carte sulla pila estraendole dalla testa del proprio mazzo. Se nessuna di queste ha un valore pari a 1, 2, 3 allora tutta la pila viene rovesciata e messa in coda al mazzo del giocatore X. Se invece, durante questa fase, Y scopre una carta con valore 1, 2, 3 allora Y passa la mano ad X che deve rispondere allo stesso modo e così via fino a quando non vengono estratte delle carte prive dei valori 1, 2, 3. Perde chi resta senza carte».
  16. Filetto
    Preparare un programma che consenta a due giocatori di utilizzare lo schermo per una partita a tris (filetto).
      X O
      X O
    X O  
    Nel gioco del filetto vince chi completa per primo una riga, colonna o una diagonale principale di una matrice 3 x 3 con il proprio simbolo ('O' o 'X').
  17. Gioco dell'impiccato
    Il gioco dell'impiccato consiste nell'indovinare una parola segreta pensata da un altro giocatore lettera dopo lettera. Se la lettera annunciata compare nella parola, va evidenziato il posto che occupa, altrimenti si inizia a disegnare la figura di un impiccato, composta da faccia, braccia, gambe e piedi. Se l'impiccato viene completamente disegnato, chi doveva disegnare ha perso. Automatizzare questo popolare giochetto.
  18. Tombola
    Simulare a video il tabellone del gioco della tombola. Ad ogni estrazione i numeri (da 1 a 90), dovranno essere visualizzati nella giusta posizione. Controllare che un numero non sia già uscito.
  19. Battaglia navale
    Realizzare una macchina che consenta di condurre il gioco della battaglia navale tra la macchina stessa e l'utente. Stabilire casualmente chi inizia il gioco.

Fonte1: Pietro Paolo Dore (https://www.alphabeto.it/)
Fonte2: Paolo Latella (https://paololatella.blogspot.com/)