• 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!
4
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 (3 punti)

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

void f (int n) {

printf ("%d ", n);

if (n < 3) f (n+1);

printf ("%d ", n);

return;

}

1 2 3 3 2 1

Esercizio 2 (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 compatta_spazi (char s[]) {

int i, j = 0;

unsigned char dopo_spazio = 0;

for ( __________________________) {

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

if (!dopo_spazio) {

_________________

_________________

j++;

} } else {

_________________

_________________

j++;

} }

s[j] = _________;

return;

}

void compatta_spazi (char s[]) {

int i, j = 0;

unsigned char dopo_spazio = 0;

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

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

if (!dopo_spazio) {

s[j] = s[i];

dopo_spazio = 1;

j++;

} } else {

dopo_spazio = 0;

s[j] = s[i];

j++;

} }

s[j] = '\0';

return;

}

Esercizio 3 (3 punti)

Cosa stampa il seguente programma?

int g (int *p, int m) {

m += ++(*p);

return m;

}

int main() {

int a = 6, b;

b = g (&a, a);

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

return EXIT_SUCCESS;

}

7 13

(2)

Esercizio 4 (2 punti)

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

[ ] char ch = 'L';

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

[X] char ch = 'l';

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

[ ] char ch = 'L';

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

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

printf ("%d", ch);

[X] char ch = 'L';

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

Esercizio 5 (3 punti)

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

Gian Luigi De Bianchi 22 11 2013 M

Quale o quali delle versioni della funzione è corretta?

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

void leggi_persona

(char nome[], char cognome[],

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

{

gets (nome);

gets (cognome);

scanf ("%d %d %d",

p_g_nascita, p_m_nascita, p_a_nascita);

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

*p_sesso = getchar();

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;

}

{

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

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

p_g_nascita, p_m_nascita, p_a_nascita, p_sesso);

return;

}

(3)

Esercizio 6 (2 punti)

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

"prova" ____________________

3 ____________________

char ch; ____________________

double v[4]; ____________________

"prova" 6 3 4 char ch; 1 double v[4]; 32

Esercizio 7 (5 punti)

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

int righe_uguali_in_matrice (int m[4][6]) {

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

}

int confronta_vettori

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

int i;

for (_______________________) {

if (_____________________) return 0;

}

return 1;

}

int righe_uguali_in_matrice (int m[4][6]) {

int i, j;

/* per ogni riga della matrice */

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

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

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

/* se le due righe sono uguali */

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

}

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

return 0;

}

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;

}

(4)

Esercizio 8 (2 punti)

Cosa stampa il seguente frammento di programma?

int y = 11 / 2;

double z = 11 /2;

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

5 5

Esercizio 9 (6 punti)

Si scriva la funzione void incr_bin (char num[]) 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"

"1110101" → "1110110"

void incr_bin (char num[]) {

int i, somma, riporto;

riporto = 1;

i = strlen (num) - 1;

while (i >= 0) {

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

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

riporto = somma / 2;

i--;

}

return;

}

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