• Non ci sono risultati.

Matricola ____________________________ Nome ____________________________ Cognome ____________________________ Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) _____

N/A
N/A
Protected

Academic year: 2021

Condividi "Matricola ____________________________ Nome ____________________________ Cognome ____________________________ Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) _____"

Copied!
3
0
0

Testo completo

(1)

Università degli Studi di Udine

Corsi di laurea in Ing. Elettronica / Gestionale Fondamenti di programmazione / Inform. 1 22 novembre 2013 - Prova intermedia

Matricola ____________________________

Nome ____________________________

Cognome ____________________________

Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) _____

Esercizio 1 (4 punti)

La seguente funzione modifica una stringa compattando gli spazi tra le parole (se tra due parole ci sono due o più spazi, essi vengono ridotti a uno solo). Esempio:

"testo di prova" → "testo di prova"

La si completi.

void elimina_doppi_spazi (char t[]) {

int i, j = 0;

int trovato_spazio = 0;

for ( __________________________) {

if (t[i] == ' ') {

if (trovato_spazio == 0) {

_____________________

_____________________

j++;

} } else {

_____________________

_____________________

j++;

} }

t[j] = _________;

return;

}

void elimina_doppi_spazi (char t[]) {

int i, j = 0;

int trovato_spazio = 0;

for ( i = 0; t[i] != '\0'; i++) {

if (t[i] == ' ') {

if (trovato_spazio == 0) {

t[j] = t[i];

trovato_spazio = 1;

j++;

} } else {

trovato_spazio = 0;

t[j] = t[i];

j++;

} }

t[j] = '\0';

return;

}

Esercizio 2 (3 punti)

Cosa stampa la seguente funzione ricorsiva se chiamata con argomento n = 3?

void f (int n) {

printf ("%d ", n);

if (n > 0) f (n-1);

printf ("%d ", n);

return;

}

3 2 1 0 0 1 2 3

Esercizio 3 (3 punti)

La funzione leggi_persona legge da tastiera i dati di una persona nel formato deducibile dal seguente esempio:

Pier Paolo

Fante Della Polvere 1 7 2001

M

Quale o quali delle versioni della funzione è corretta?

(Indicarla/le con una croce nei riquadri a sinistra)

(2)

void leggi_persona

(char nome[], char cognome[],

int *p_g_nascita, int *p_m_nascita, int *p_a_nascita, char *p_sesso)

{

scanf ("%s %s", nome, cognome);

scanf ("%d %d %d %c",

p_g_nascita, p_m_nascita, p_a_nascita, p_sesso);

return;

}

{

gets (nome);

gets (cognome);

scanf ("%d %d %d",

&p_g_nascita, &p_m_nascita, &p_a_nascita);

while (getchar() != '\n');

scanf ("%c", &p_sesso);

return;

}

{

gets (nome);

gets (cognome);

scanf ("%d %d %d",

p_g_nascita, p_m_nascita, p_a_nascita);

while (getchar() != '\n');

*p_sesso = getchar();

return;

}

Esercizio 4 (5 punti)

La funzione righe_uguali_in_matrice restituisce 1 se la matrice passata come argomento contiene almeno due righe uguali e -1 altrimenti. La si completi.

int righe_uguali_in_matrice (int m[5][7]) {

int i, j;

/* per ogni riga della matrice */

for (_________________________) {

/* per ogni riga successiva a quella in esame */

for (____________________________)

/* se le due righe sono uguali */

if (confronta_vettori

(________________________))

return 1;

}

/* se nessuna riga era uguale a un'altra */

return -1;

}

int confronta_vettori

(int v1[], int v2[], int dim) {

int i;

for (_______________________) {

if (_____________________) return 0;

}

return 1;

}

int righe_uguali_in_matrice (int m[5][7]) {

int i, j;

/* per ogni riga della matrice */

for (i = 0; i < 5; i++) {

/* per ogni riga successiva a quella in esame */

for (j = i + 1; j < 5; j++)

/* se le due righe sono uguali */

if (confronta_vettori (m[i], m[j], 7)) return 1;

}

/* se nessuna riga era uguale a un'altra */

return -1;

}

(3)

int confronta_vettori

(int v1[], int v2[], int dim) {

int i;

for (i = 0; i < dim; i++) {

if (v1[i] != v2[i]) return 0;

}

return 1;

}

Esercizio 5 (6 punti)

Si scriva la funzione

void somma_uno_bin (char nb[])

che incrementa di uno il numero binario rappresentato, con codici ASCII '0' e '1', dalla stringa passata come argomento. Il numero di bit rappresentati dalla stringa è fisso (l’eventuale riporto a sinistra della prima cifra va ignorato).

Esempi: "11111111" → "00000000"

"00001" → "00010"

"1101011" → "1101100"

void somma_uno_bin (char nb[]) {

int i, somma, riporto;

riporto = 1;

i = strlen (nb) - 1;

while (i >= 0) {

somma = riporto + nb[i] - '0';

nb[i] = somma % 2 +'0';

riporto = somma / 2;

i--;

}

return;

}

Esercizio 6 (2 punti)

Cosa stampa il seguente frammento di programma?

int y = 15 / 2;

double z = 15 /2;

printf ("%d %1.0lf\n", y, z);

7 7

Esercizio 7 (3 punti)

Cosa stampa il seguente programma?

int g (int *q, int z) {

z += ++(*q);

return z;

}

int main() {

int a = 9, b;

b = g (&a, a);

printf ("%d %d\n", a, b);

return EXIT_SUCCESS;

}

10 19

Esercizio 8 (2 punti)

Prendendo come riferimento un elaboratore a 32 bit, scrivere le dimensioni in byte delle seguenti variabili e costanti:

7 ____________________

double v[4]; ____________________

char ch; ____________________

"vacanza" ____________________

7 4 double v[4]; 32 char ch; 1

"vacanza" 8

Esercizio 9 (2 punti)

Quale/i dei seguenti frammenti di codice stampa(no) il codice ASCII della lettera 'H' (maiuscola)?

[X] char ch = 'h';

printf ("%d", ch + 'A' – 'a');

[ ] char ch = 'H';

printf ("%c", char (ch));

[ ] char ch = 'H';

printf ("%d", ch – '0');

[X] char ch = toupper ('h');

printf ("%d", ch);

[X] char ch = 'H';

printf ("%d", ch – '\0');

Riferimenti

Documenti correlati

Per ciascun posto è rappresentato, per ciascuna delle proiezioni, l’informazione “libero”, “prenotato” o “venduto” mediante le lettere ‘L’, ‘P’ e ‘V’,

Il numero di bit rappresentati dalla stringa è fisso (l’eventuale riporto a sinistra della prima cifra va

La funzione righe_uguali_in_matrice restituisce 1 se la matrice passata come argomento contiene almeno due righe uguali e -1 altrimenti. La

Il numero di bit rappresentati dalla stringa è fisso (l’eventuale riporto a sinistra della prima cifra va ignorato).. La

Il numero di bit rappresentati dalla stringa è fisso (l’eventuale riporto a sinistra della prima cifra va

Ogni quadrato può essere rappresentato dalle coordinate della cella in alto a sinistra (la più vicina a quella con coordinate 0, 0) e dalla lunghezza del lato. La seguente

Ogni quadrato può essere rappresentato dalle coordinate della cella in alto a sinistra (la più vicina a quella con coordinate 0, 0) e dalla lunghezza del lato.. La seguente

Ogni quadrato può essere rappresentato dalle coordinate della cella in alto a sinistra (la più vicina a quella con coordinate 0, 0) e dalla lunghezza del lato. La seguente