Programmazione per TWM: Esercitazione di laboratorio #7 (11/02)

L'obiettivo di questa esercitazione è familiarizzare con gli array, illustrati nel capitolo 4 del libro. Gli esercizi sono piuttosto semplici, quindi dovreste essere in grado di risolverli tutti o quasi.

Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Come vedrete, per poter lavorare sugli array è indispensabile conoscere le strutture di controllo della programmazione strutturata, viste nelle lezioni ed esercitazioni precedenti. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.

Esercizio 1

Obiettivo: Introduzione agli array unidimensionali.

Attività:

  1. Scrivete un programma che legge in input 10 valori di tipo double, li memorizza in un array e li visualizza. Usate il ciclo for e il ".length".
  2. Rifatelo, usando il while invece del for.
  3. Scrivete un programma che legge in input 10 valori di tipo double, li memorizza in un array e li visualizza in ordine invertito (dall'ultimo al primo).
  4. Scrivete un programma che ha lo stesso effetto del precedente, ma i valori vanno memorizzati nell'array a partire dall'ultima posizione (e visualizzati sempre in ordine invertito dall'ultimo letto al primo).
  5. Rivedete l'esercizio 1.4 dell'esercitazione #4...
  6. Scrivete un programma che verifica se due array di char contengono gli stessi valori. La lunghezza dei due array va letta in input durante l'esecuzione.
  7. Scrivete un programma che verifica se due array di boolean contengono gli stessi valori.
  8. Scrivete un programma che verifica se due array di double contengono gli stessi valori. Suggerimento Non confrontate i numeri reali con l'uguaglianza: nella rappresentazione in virgola mobile le cifre meno significative vengono perse. Quindi per verificare l'uguaglianza di due numeri reali (double o float) bisogna verificare che siano uguali con una certa approssimazione.

Esercizio 2

Obiettivo: Introduzione agli array multimensionali.

Attività:

  1. Scrivete un programma che azzera tutti gli elementi di una matrice bidimensionale di n * m posizioni, con n e m letti in input durante l'esecuzione. Fatevi visualizzare la matrice per controllare.
  2. Aggiungete al programma precedente le istruzioni per assegnare 1 alla riga i-esima, con i letto in input durante l'esecuzione. Fatevi visualizzare la matrice per controllare.
  3. Aggiungete anche le istruzioni per assegnare 2 alla colonna j-esima, con j letto in input durante l'esecuzione. Fatevi visualizzare la matrice per controllare.
  4. Aggiungete anche le istruzioni per assegnare agli elementi della colonna j-esima il valore dell'indice di riga corrispondente (ossia: 0 ad a[0][j], 1 ad a[1][j], e così via), sempre con j letto in input durante l'esecuzione. Fatevi visualizzare la matrice per controllare.
  5. Fate ora in modo che la matrice sia quadrata (n * n). Aggiungete poi le istruzioni per assegnare 1 alla diagonale inversa (quella che va da in alto a destra a in basso a sinistra). Usate un unico ciclo. Fatevi visualizzare la matrice per controllare. Suggerimento Scrivete le coppie di indici degli elementi sulla diagonale inversa, ed esprimete quei valori in funzione della variabile di controllo del ciclo.
  6. Aggiungete anche le istruzioni per assegnare 1 agli elementi immediatamente inferiori a quelli sulla diagonale, ossia:
    0 0 0 0 0
    1 0 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    
  7. Aggiungete anche le istruzioni per assegnare 1 agli elementi immediatamente superiori a quelli sulla diagonale inversa, ossia:
    0 0 0 1 0
    0 0 1 0 0
    0 1 0 0 0
    1 0 0 0 0
    0 0 0 0 0
    
  8. Scrivete un programma che assegna alle posizioni di una matrice di boolean i valori true e false in modo alternato, come su una scacchiera:
    true  false true  false ...
    false true  false true  ...
    true  false true  false ...
    false true  false true  ...
    ...
    
    Suggerimento Che proprietà ha la somma degli indici di riga e colonna delle celle con valore true? Oppure: che funzione booleana usare per passare da un valore al "successivo"?

Esercizio 3

Obiettivo: Altri esercizi su array.

Attività:

  1. Scrivete un programma che trova i primi n numeri primi (con n letto in input durante l'esecuzione) e li visualizza in ordine invertito (dal più grande al più piccolo). Suggerimento Memorizzate i numeri primi in un array di n posizioni.
  2. (*)Scrivete un programma che memorizza in un array bidimensionale i fattori primi di un numero n letto in input durante l'esecuzione (nella prima colonna dell'array) e i loro esponenti (seconda colonna). Visualizzate l'array in modo opportuno.
  3. Scrivete un programma che dichiara matriciona, una matrice quadridimensionale 32 * 13 * 25 * 61 di double. Azzeratene tutti gli elementi. Questa matrice è in grado di memorizzare tutti i valori delle temperature per ogni minuto di ogni giorno dell'anno corrente: matriciona[12][1][14][55] rappresenta la temperatura alle 14:55 del 12 gennaio. Assegnate alcuni valori di prova, poi visualizzate la matriciona in modo adeguato senza visualizzare i valori che non corrispondono a nessun giorno reale, come ad esempio il 30 febbraio (assumete l'anno non bisestile e usate un array di interi in cui memorizzare il numero di giorni di ciascun mese).
  4. Cambiate l'identificatore "matriciona" con uno più adeguato.
  5. Scrivete un programma che dichiara un array di int, ne legge in input i valori e visualizza tutti gli elementi con indice pari.
  6. Scrivete un programma che dichiara un array di int, ne legge in input i valori e visualizza tutti gli elementi con valore pari.
  7. Scrivete un programma che calcola la somma di due vettori e memorizza il risultato in un terzo vettore.
  8. Scrivete un programma che calcola il prodotto scalare di due vettori e visualizza il risultato.
  9. Scrivete un programma che calcola la somma due matrici bidimensionali (aventi le stesse dimensioni). Il risultato va memorizzato in una nuova matrice e visualizzato opportunamente.
  10. (*)Scrivete un programma che calcola il prodotto di due matrici bidimensionali. Il risultato va memorizzato in una nuova matrice e visualizzato opportunamente.

Valid XHTML 1.1! Stefano Mizzaro Last modified: Sat Jul 10 11:31:53 ora legale Europa occidentale 2004