Esercitazione #3



Esercizi su puntatori e passaggio di parametri

  • [20] Scrivere una funzione int sumVect (int s[ ], int n) che riceva in ingresso un array e la sua lunghezza, e restituisca la somma degli elementi dell'array. Aggiungere un semplice programma per testarla.

  • Soluzione: sumVect.c.


  • [21] Scrivere una funzione void sostituisci(char a[ ], int n, char c, char d) che riceva come parametri una stringa, la sua lunghezza, un carattere c da sostituire ed il carattere d con cui rimpiazzarlo e sostituisca tutte le occorrenze del primo carattere nella stringa con il secondo carattere. Aggiungere un semplice programma per testarla.


  • [22] Scrivere una funzione int binToInt(char a[ ], int n) che riceva come parametri una stringa che rappresenta un numero in notazione binaria, la lunghezza della stringa n, e restituisca il corrispondente valore intero decimale associato alla stringa. Se la stringa passata come argomento contiene caratteri diversi da '0' e '1' la funzione deve restituire il valore -1 per segnalare un errore. Aggiungere un semplice programma per testarla.

    Esempio: l'invocazione binToInt("101011", 6) deve restituire il valore 43 ottenuto come:

    1*25 + 0*24 + 1*23 + 0*22 + 1*21 + 1*20 = 
    1*32 + 0*16 + 1*8 + 0*4 + 1*2 + 1*1 =
    32 + 8 + 2 + 1 =
    43 
    

    Soluzione: binToInt.c.


  • [23] Scrivere una funzione void ordina(int a[ ], int n) che riceva come parametri un array di interi e la sua lunghezza, e sfrutti un algoritmo di ordinamento efficiente per ordinare gli elementi del vettore in ordine decrescente (alla fine il massimo deve trovarsi in posizione 0, il minimo in posizione n-1). Aggiungere un semplice programma per testarla.


  • [24] Sono corrette le seguenti dichiarazioni di variabili e comandi? E che valore assume tmp alla fine di ogni comando?

    
    int a[4] = {9, 8, 7, 6}, *p = a, tmp;
    tmp = *(a + 2);                       
    tmp = p[3];                           
    tmp = (--)p[3];                       
    for (tmp = 0, p = a; p < a + 4; p++) {
         tmp += *p;
    }
    

  • [25] Una carta è definita da un valore e da un seme. Definire un tipo derivato opportuno per rappresentare un mazzo di 40 carte. Definire una funzione mescola (con opportuni argomenti e tipo) che simula il mescolamento di un mazzo di carte sfruttando il generatore di numeri pseudocasuali. Completare l'esercizio scrivendo un programma che crea un mazzo di carte, lo mescola e stampa tutte le carte nell'ordine risultante dal mescolamento.


  • [26] Alcuni programmi che abbiamo realizzato richiedevano l'input di valori positivi, che abbiamo risolto mediante l'uso di un opportuno ciclo per assicurarci che il valore letto fosse positivo (e ripetere la lettura in caso contrario). Scrivere una funzione void scanpos(int *) che effettua la lettura di un valore positivo e lo memorizza nella variabile intera il cui indirizzo è stato passato come parametro. Aggiungere un semplice programma per testarla.