50
1 A.A. 2013/2014 Docente: A. Saetti Fondamenti di Programmazione Fondamenti di Programmazione - Università degli Studi di Brescia Ingegneria dellAutomazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: {alessandro.saetti,marco.sechi,andrea.bonisoli}@unibs.it) Università degli Studi di Brescia A.A. 2013/2014

Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

  • Upload
    lemien

  • View
    261

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

1A.A. 2013/2014Docente: A. Saetti

Fondamenti di Programmazione

Fondamenti di Programmazione - Università degli Studi di Brescia

Ingegneria dell’Automazione IndustrialeIngegneria Elettronica e delle Comunicazioni

Alessandro SaettiMarco Sechi e Andrea Bonisoli

(email: {alessandro.saetti,marco.sechi,andrea.bonisoli}@unibs.it)

Università degli Studi di Brescia

A.A. 2013/2014

Page 2: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

2A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Scrivere una funzione C che restituisca 1 se un dato numero intero èprimo e 0 altrimenti. Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi un vettore v di 10 variabili intere con dati pseudo-casualicompresi tra 2 e 100.

• Visualizzi i numeri primi contenuti nel vettore v in ordine contrario rispetto all’ordine con cui sono memorizzati in v. [Suggerimento: Si utilizzi un secondo vettore per memorizzare i numeri primi contenuti in v.]

Page 3: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

3A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Scrivere una funzione C che restituisca due numeri primi la cui somma è pari

ad un dato intero. [Suggerimento: void primi(int n, int *p1, int *p2);] Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti :

• Inizializzi una matrice M di 10 righe e 2 colonne con i numeri primi la cui somma è uguale ai numeri pari specificati tramite la linea di comando del programma. (Ad esempio, se la linea di comando specifica il numero 12 il programma visualizza 5 e 7).

• Visualizzi la matrice M. [Suggerimento: int main(int argc, char *argv[]);]

Page 4: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

4A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Scrivere una funzione C che calcoli e restituisca il massimo comune divisori di due dati interi. Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi la prima colonna di una matrice di 10 righe con dati pseudo-casuali interi compresi tra 10 e 100 e la seconda colonna con dati pseudo-casuali compresi tra la prima colonna e 100.

• Interpretando i numeri presenti nella prima colonna della matrice come numeratori e quelli presenti nella seconda colonna come denominatori, visualizzi le frazioni ridotte ai minimi termini.

Page 5: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

5A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Scrivere una funzione C che restituisca 1 se un dato numero intero èprimo e 0 altrimenti. Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi un vettore v di 10 variabili intere con dati pseudo-casualicompresi tra 2 e 100.

• Visualizzi i numeri primi contenuti nel vettore v in ordine contrario rispetto all’ordine con cui sono memorizzati in v. [Suggerimento: Si utilizzi un secondo vettore per memorizzare i numeri primi contenuti in v.]

Page 6: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

6A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Esercizi su Funzioni – 1°parte

#include <stdio.h>#include <stdlib.h>/*

* Nome: main* Scopo: Inizializza un vettore di DIM variabili in tere con dati interi* pseudo-casuali compresi tra 2 e 100. Visual izza i dati interi primi* contenuti nel vettore in ordine contrario.* Input: --* Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Scrivere una funzione C che restituisca 1 se un dato numero intero è primo e 0 altrimenti.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi un vettore v di 10 variabili intere con dati pseudo-casuali compresi tra 2 e 100.

• Visualizzi i numeri primi contenuti nel vettore v in ordine contrario rispetto all’ordine con cui sono memorizzati in v.

[Suggerimento: Si utilizzi un secondo vettore per memorizzare i numeri primi contenuti in v.]

Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti

Page 7: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

7A.A. 2013/2014

#include <stdio.h>#include <stdlib.h>

/** Nome: main* Scopo: Inizializza un vettore di DIM variabili in tere con dati interi* pseudo-casuali compresi tra 2 e 100. Visual izza i dati interi primi* contenuti nel vettore in ordine contrario.* Input: --* Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Esercizi su Funzioni – 1°parte

Scrivere una funzione C che restituisca 1 se un dato numero intero è primo e 0 altrimenti.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi un vettore v di 10 variabili intere con dati pseudo-casuali compresi tra 2 e 100.

• Visualizzi i numeri primi contenuti nel vettore v in ordine contrario rispetto all’ordine con cui sono memorizzati in v.

[Suggerimento: Si utilizzi un secondo vettore per memorizzare i numeri primi contenuti in v.]

Implementiamo la funzione primo() che stabilisce se

il suo argomento n è primo oppure no

Un numero n è primo quando è divisibile solo

per 1 o per se stesso. Pertanto se n è primo

non risulterà divisibile per nessun intero i

compreso tra 2 e n-1 (ovvero la condizione

(n % i ==0)

risulterà sempre falsa per ogni i da 2 a n-1).

Funzione primo()

/** Nome: primo* Scopo: Determina se un dato intero e' primo* Input: int n: l'intero che di intende esaminare* Output: 1 se n e' primo e 0 altrimenti*/

int primo(int n) {

int i;for (i = 2; i < n; i++) {

if (n % i == 0) return 0; }return 1;

}

Inseriamo la funzione subito dopo le

include degli header file.

Possiamo verificare la correttezza sintattica e

semantica della nostra funzione primo() scrivendo il

seguente main() di test:int main(){

printf("23: %d\n",primo(23));printf("111: %d\n",primo(111));system("pause");return 0;

}

Page 8: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

8A.A. 2013/2014

#define DIM 10

int v[DIM], i;

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

v[i] = rand() % 99 + 2;printf("%d ", v[i]);

}

int primi[DIM], n = 0;

// codice per valutare e memorizzare// in un array i numeri primi

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Esercizi su Funzioni – 1°parte

I numeri primi che vengono

generati vengono memorizzati

nell’array primi[].

Ricordiamoci di dichiarare le variabili utilizzate

Memorizziamo i valori generati in un array v[]

con dimensione DIM. I valori generati vengono

immediatamente stampati per controllo.

if (primo(v[i]) != 0){

primi[n] = v[i];n++;

}

Parametrizziamo le dimensioni dei vettori con

un’opportuna #define.

Aggiungiamo la dichiarazione delle variabili

necessarie alla memorizzazione dei numeri

primi generati.

Scrivere una funzione C che restituisca 1 se un dato numero intero è primo e 0 altrimenti.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi un vettore v di 10 variabili intere con dati pseudo-casuali compresi tra 2 e 100.

• Visualizzi i numeri primi contenuti nel vettore v in ordine contrario rispetto all’ordine con cui sono memorizzati in v.

[Suggerimento: Si utilizzi un secondo vettore per memorizzare i numeri primi contenuti in v.]

Page 9: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

9A.A. 2013/2014

printf("\nPrimi: ");for (i = n - 1; i >= 0; i--)

printf("%d ", primi[i]); printf("\n");

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Esercizi su Funzioni – 1°parte

Scrivere una funzione C che restituisca 1 se un dato numero intero è primo e 0 altrimenti.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi un vettore v di 10 variabili intere con dati pseudo-casuali compresi tra 2 e 100.

• Visualizzi i numeri primi contenuti nel vettore v in ordine contrario rispetto all’ordine con cui sono memorizzati in v.

[Suggerimento: Si utilizzi un secondo vettore per memorizzare i numeri primi contenuti in v.]

Stampo in ordine inverso semplicemente partendo

dall’ultimo numero (posizione n-1) fino

al primo (posizione 0) del vettore primi[].

/************************************************** ************************* Nome: lab1-primi.c ** Autore: Alessandro Saetti ** Data: 30/3/11 **************************************************** ***********************/

#include <stdio.h>#include <stdlib.h>#define DIM 10

/* * Nome: primo* Scopo: Determina se un dato intero e' primo* Input: int n: l'intero che di intende esaminare* Output: 1 se n e' primo e 0 altrimenti*/

int primo(int n) {int i;for (i = 2; i < n; i++)

if (n % i == 0) return 0; return 1;

}

Soluzione

completa …

FUNZIONE primo(int)

Page 10: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

10A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 1Esercizi su Funzioni – 1°parte

. . . soluzione completa:

/* Nome: main* Scopo: Inizializza un vettore di DIM variabili in tere con dati interi pseudo-casuali* compresi tra 2 e 100. Visualizza i dati interi pr imi contenuti nel vettore in ordine * contrario.* Input: --* Output: 0 se il programma termina correttamente*/

int main() {

int v[DIM], primi[DIM], n = 0, i;

for (i = 0; i < DIM; i++) {v[i] = rand() % 99 + 2;printf("%d ", v[i]);if (primo(v[i]) != 0) {

primi[n] = v[i];n++;

}}

printf("\nPrimi: ");for (i = n - 1; i >= 0; i--)

printf("%d ", primi[i]); printf("\n");system("pause");return 0;

}

Page 11: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

11A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Scrivere una funzione C che restituisca due numeri primi la cui somma è pari

ad un dato intero. [Suggerimento: void primi(int n, int *p1, int *p2);] Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti :

• Inizializzi una matrice M di 10 righe e 2 colonne con i numeri primi la cui somma è uguale ai numeri pari specificati tramite la linea di comando del programma. (Ad esempio, se la linea di comando specifica il numero 12 il programma visualizza 5 e 7).

• Visualizzi la matrice M. [Suggerimento: int main(int argc, char *argv[]);]

Page 12: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

12A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Esercizi su Funzioni – 1°parte

#include <stdio.h>#include <stdlib.h>/*

* Nome: main* Scopo: Inizializza una matrice di DIM righe e 2 c olonne con i numeri primi* la cui somma e' pari ai numeri pari specif icati tramite la linea di* comando* Input: int argc: il numero di numeri specificati d alla linea di comando + 1* char *argv: le stringhe corrispondenti ai n umeri specificati * Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Scrivere una funzione C che restituisca due numeri primi la cui somma è pari ad un dato intero. [Suggerimento: void primi(int n, int *p1,

int *p2);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti :

• Inizializzi una matrice M di 10 righe e 2 colonne con i numeri primi la cui somma è uguale ai numeri pari specificati tramite la

linea di comando del programma. (Ad esempio, se la linea di comando specifica il numero 12 il programma visualizza 5 e 7).

• Visualizzi la matrice M. [Suggerimento: int main(int argc, char *argv[]);]

L'esercizio prende spunto dalla congettura di Goldbach che è uno dei più vecchi problemi

irrisolti nella teoria dei numeri. Essa afferma che qualsiasi numero pari maggiore di 2 può

essere scritto come somma di due numeri primi (che possono essere anche uguali).

Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti

Page 13: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

13A.A. 2013/2014

/** Nome: primi* Scopo: Calcola una coppia di numeri primi la cui somma e' pari * ad un dato intero* Input: int n: l'intero che di intende esaminare* int *p1: un puntatore al primo numero primo calcolato* int *p2: un puntatore al secondo numero pri mo calcolato* Output: --*/

void primi(int n, int *p1, int *p2) {int i, j;

for (i = 2; i < n; i++) {if (primo(i) == 1 && primo(n-i) == 1) {

*p1 = i;*p2 = n - i;return;

}}

}

Funzione primo()

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Esercizi su Funzioni – 1°parte

Scrivere una funzione C che restituisca due numeri primi la cui somma è pari ad un dato intero. [Suggerimento: void primi(int n, int

*p1, int *p2);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti :

• Inizializzi una matrice M di 10 righe e 2 colonne con i numeri primi la cui somma è uguale ai numeri pari specificati tramite la

linea di comando del programma. (Ad esempio, se la linea di comando specifica il numero 12 il programma visualizza 5 e 7).

• Visualizzi la matrice M. [Suggerimento: int main(int argc, char *argv[]);]

Riutilizzo la stessa funzione primo()

implementata nell’esercizio precedente

int primo(int n) {

int i;for (i = 2; i < n; i++) {

if (n % i == 0) return 0; }return 1;

}

Termino senza restituire

alcun valore (void)

Per determinare la

scomposizione in addendi primi

posso procedere in questo

modo:

Scorro tutte le possibili coppie

di interi (n-i, i) (i varia da 2 a

n—1) la cui somma è

evidentemente n.

Se i numeri n-i e i sono

entrambi primi allora li registro

nelle aree di memoria

indirizzate dai puntatori *p1 e

*p2 e termino l’esecuzione

della funzione.

Page 14: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

14A.A. 2013/2014

for (i = 1; i < argc; i++) {if (atoi(argv[i]) % 2 == 0) {

primi(atoi(argv[i]), &m[n][0], &m[n][1]); n++;

}}

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Esercizi su Funzioni – 1°parte

Ricordiamoci di dichiarare le variabili utilizzate

#define DIM 10

int i, m[DIM][2], n = 0;

Parametrizziamo il numero di righe della

matrice M con la seguente #define.

I parametri di linea (che devono essere dei numeri pari!) possono

essere passati al nostro programma utilizzando i menu in figura

Per ogni parametro di linea di comando

argv[i] (con i che varia da 1 a argc-1)

determino la sua scomposizione additiva

in numeri primi. Poiché argv[i] è una

stringa devo prima convertirlo in numero

intero mediante la funzione atoi().

Passo gli indirizzi dell’n-esima

coppia di elementi della matrice M

Scrivere una funzione C che restituisca due numeri primi la cui somma è pari ad un dato intero. [Suggerimento: void primi(int n, int *p1,

int *p2);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti :

• Inizializzi una matrice M di 10 righe e 2 colonne con i numeri primi la cui somma è uguale ai numeri pari specificati

tramite la linea di comando del programma. (Ad esempio, se la linea di comando specifica il numero 12 il programma

visualizza 5 e 7).

• Visualizzi la matrice M. [Suggerimento: int main(int argc, char *argv[]);]

Page 15: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

15A.A. 2013/2014

for (i = 0; i < n; i++)printf("%s=%d+%d\n", argv[i+1], m[i][0], m[i][1]);

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Esercizi su Funzioni – 1°parte

Stampo la scomposizione additiva in numeri primi di ogni

parametro argv[i+1] (con i che varia da 0 a argc-1):

Scrivere una funzione C che restituisca due numeri primi la cui somma è pari ad un dato intero. [Suggerimento: void primi(int n, int *p1,

int *p2);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti :

• Inizializzi una matrice M di 10 righe e 2 colonne con i numeri primi la cui somma è uguale ai numeri pari specificati tramite la

linea di comando del programma. (Ad esempio, se la linea di comando specifica il numero 12 il programma visualizza 5 e 7).

• Visualizzi la matrice M. [Suggerimento: int main(int argc, char *argv[]);]

Soluzione completa …

/************************************************** ************************* Nome: lab2-goldbach.c ** Autore: Alessandro Saetti ** Data: 30/3/11 **************************************************** ***********************/

#include <stdio.h>#include <stdlib.h>#define DIM 10/* Nome: primo

* Scopo: Determina se un dato intero e' primo* Input: int n: l'intero che di intende esaminare* Output: 1 se n e' primo e 0 altrimenti*/

int primo(int n) {int i;for (i = 2; i < n; i++) {

if (n % i == 0) return 0; }return 1;

}

FUNZIONE primo(int)

Page 16: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

16A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 2Esercizi su Funzioni – 1°parte

. . . soluzione

completa:

/* Nome: primi* Scopo: Calcola una coppia di numeri primi la cui somma e' pari ad un dato intero* Input: int n: l'intero che di intende esaminare* int *p1: un puntatore al primo numero primo calcolato* int *p2: un puntatore al secondo numero pri mo calcolato* Output: --*/

void primi(int n, int *p1, int *p2) {int i, j;for (i = 2; i < n; i++) {

if (primo(i) == 1 && primo(n-i) == 1) {*p1 = i;*p2 = n - i;return;

}}

}/* Nome: main

* Scopo: Inizializza una matrice di DIM righe e 2 c olonne con i numeri primi la cui somma * e' pari ai numeri pari specificati tramite la linea di comando* Input: int argc: il numero di numeri specificati d alla linea di comando + 1* char *argv: le stringhe corrispondenti ai n umeri specificati * Output: 0 se il programma termina correttamente*/

int main(int argc, char *argv[]) {int i, m[DIM][2], n = 0;for (i = 1; i < argc; i++) {

if (atoi(argv[i]) % 2 == 0) {primi(atoi(argv[i]), &m[n][0], &m[n][1]); n++;

}} for (i = 0; i < n; i++)

printf("%s=%d+%d\n", argv[i+1], m[i][0], m[i][1]);system("pause");return 0;

}

FUNZIONE primi(int, int *, int *)

Page 17: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

17A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Scrivere una funzione C che calcoli e restituisca il massimo comune divisori di due dati interi. Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi la prima colonna di una matrice di 10 righe con dati pseudo-casuali interi compresi tra 10 e 100 e la seconda colonna con dati pseudo-casuali compresi tra la prima colonna e 100.

• Interpretando i numeri presenti nella prima colonna della matrice come numeratori e quelli presenti nella seconda colonna come denominatori, visualizzi le frazioni ridotte ai minimi termini.

Page 18: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

18A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Esercizi su Funzioni – 1°parte

#include <stdio.h>#include <stdlib.h>/*

* Nome: main* Scopo: Inizializza la prima colonna di una matric e di DIM righe con dati* pseudo-casuali interi compresi tra 10 e 100 e la seconda colonna* con dati pseudo-casuali compresi tra la pri ma colonna e 100.* Supponendo che le colonne della matrice ra ppresentino il numeratore* ed il denominatore di frazioni, stampa a v ideo le frazioni ridotte* ai minimi termini* Input: -* Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti

Scrivere una funzione C che calcoli e restituisca il massimo comune divisori di due dati interi.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi la prima colonna di una matrice di 10 righe con dati pseudo-casuali interi compresi tra 10 e 100 e la seconda

colonna con dati pseudo-casuali compresi tra la prima colonna e 100.

• Interpretando i numeri presenti nella prima colonna della matrice come numeratori e quelli presenti nella seconda

colonna come denominatori, visualizzi le frazioni ridotte ai minimi termini.

Page 19: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

19A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Esercizi sui cicli – 1°parte

Quindi aggiungo le variabili locali necessarie

int mcd(int n1, int n2){

for (i = 1; i <= min ; i++)if ( n1 % i == 0 && n2 %i == 0)

mcd = i;

Per determinare il MCD tra due interi ripetiamo gli stessi passaggi

visti nell’esercizio 1.3

Memorizzo nella variabile min il valore più

basso tra i due parametri n1 e n2.

if (n1 < n2)min = n1;

elsemin = n2;

Partendo da 1 fino a min estraggo tutti i divisori di

entrambi i numeri n1 e n2. L’ultimo divisore

trovato è il MCD.

Scrivere una funzione C che calcoli e restituisca il massimo comune divisori di due dati interi.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi la prima colonna di una matrice di 10 righe con dati pseudo-casuali interi compresi tra 10 e 100 e la seconda

colonna con dati pseudo-casuali compresi tra la prima colonna e 100.

• Interpretando i numeri presenti nella prima colonna della matrice come numeratori e quelli presenti nella seconda

colonna come denominatori, visualizzi le frazioni ridotte ai minimi termini.

return mcd;}

int min, mcd, i;

Al termine restituisco il MCD

Scrivere una funzione C che calcoli e restituisca il massimo comune divisori di due dati interi.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi la prima colonna di una matrice di 10 righe con dati pseudo-casuali interi compresi tra 10 e 100 e la

seconda colonna con dati pseudo-casuali compresi tra la prima colonna e 100.

• Interpretando i numeri presenti nella prima colonna della matrice come numeratori e quelli presenti nella seconda

colonna come denominatori, visualizzi le frazioni ridotte ai minimi termini.

Page 20: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

20A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Esercizi su Funzioni – 1°parte

Inseriamo nel main() il codice relativo al primo punto della consegna

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

m[i][0] = rand() % 91 + 10;m[i][1] = rand() % (100 - m[i][0] + 1) + m[i][0];

}

int m[DIM][2], i;

Genero DIM coppie di numeri interi

dove il primo elemento m[i][0] è

compreso tra 10 e 100 (estremi

inclusi) mentre il secondo m[i][1]

tra m[i][0] e 100 (estremi inclusi) .

Ricordiamoci di dichiarare le variabili

utilizzate

Memorizziamo i valori generati in una matrice DIMx2

#define DIM 10Parametrizziamo il numero di righe della

matrice m con la seguente #define.

Inseriamo nel main() il codice relativo al secondo punto della consegna

Scrivere una funzione C che calcoli e restituisca il massimo comune divisori di due dati interi.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzi la prima colonna di una matrice di 10 righe con dati pseudo-casuali interi compresi tra 10 e 100 e la seconda

colonna con dati pseudo-casuali compresi tra la prima colonna e 100.

• Interpretando i numeri presenti nella prima colonna della matrice come numeratori e quelli presenti nella seconda

colonna come denominatori, visualizzi le frazioni ridotte ai minimi termini.

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

printf("Frazione ridotta di %d/%d: %d/%d\n", m[i][0], m[i][1],m[i][0]/mcd(m[i][0],m[i][1]), m[i][1]/mcd(m[i][0],m[i][1]));

}

Per ridurre ai minimi termini

una frazione basta dividere

numeratore e denominatore

per loro massimo comune

divisore

Page 21: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

21A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Esercizi su Funzioni – 1°parte

Soluzione

completa …

/************************************************** ************************* Nome: lab3-mcd.c ** Autore: Alessandro Saetti ** Data: 30/3/11 **************************************************** ***********************/

#include <stdio.h>#include <stdlib.h>#define DIM 10/* Nome: mcd

* Scopo: Calcola il massimo comune divisore di 2 da ti interi* Input: int n1, n2: i due interi di cui si intende calcolare il MCD* Output: il mcd calcolato*/

int mcd(int n1, int n2) {int i, min, mcd;if (n1 < n2) min = n1;else min = n2;for (i = 1; i <= min; i++) {

if (n1 % i == 0 && n2 % i == 0) mcd = i;} return mcd;

}/*

* Nome: main* Scopo: Inizializza la prima colonna di una matric e di DIM righe con dati* pseudo-casuali interi compresi tra 10 e 100 e la seconda colonna* con dati pseudo-casuali compresi tra la pri ma colonna e 100.* Supponendo che le colonne della matrice ra ppresentino il numeratore* ed il denominatore di frazioni, stampa a v ideo le frazioni ridotte* ai minimi termini* Input: -* Output: 0 se il programma termina correttamente*/

FUNZIONE mcd(int, int)

Page 22: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

22A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 3Esercizi su Funzioni – 1°parte

. . . soluzione completa …

int main(){

int m[DIM][2], i;

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

m[i][0] = rand() % 91 + 10;m[i][1] = rand() % (100 - m[i][0] + 1) + m[i][0];

} for (i = 0; i < DIM; i++) {

printf("Frazione ridotta di %d/%d: %d/%d\n", m[i][0 ], m[i][1],m[i][0]/mcd(m[i][0],m[i][1]),m[i][1]/mcd(m[i][0],m[i][1]));

}system("pause");return 0;

}

Page 23: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

23A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Scrivere tre funzioni C che svolgano i seguenti compiti:a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un

dato valore massimo. [Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n. [Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice.

Esercizio 4

Page 24: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

24A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni e Array – 2°parte

#include <stdio.h>#include <stdlib.h>/*

* Nome: main* Scopo: Stampa le somme dei numeri pari sulle righ e di una matrice* Input: --* Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti

Scrivere tre funzioni C che svolgano i seguenti compiti:

a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un dato valore

massimo.

[Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n.

[Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.

[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice.

Page 25: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

25A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni e Array – 2°parte

/** Nome: stampa* Scopo: Stampa un vettore di n interi * Input: int v[]: vettore* int n: dimensione del vettore* Output: -*/

void stampa(const int v[], int n) {

int i;for (i = 0; i < n; i++)

printf("%d ", v[i]);}

Definiamo come parametri della funzione

stampa() l’ array di numeri interi v[]

(potevo anche scrivere *v) da stampare e il

numero di elementi n di v[]. Il non

dimensionamento del vettore v[] consente

l’uso della funzione con array di lunghezza

differente. Il void iniziale indica che la

funzione non restituisce alcun valore.

Scrivere tre funzioni C che svolgano i seguenti compiti:

a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un dato valore

massimo.

[Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n.

[Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.

[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice.

Dichiarare le variabili locali utilizzate

Il const applicato al

parametro v[] evidenzia

che si tratta di un

argomento a sola lettura.

In caso di errata modifica

(esempio v[0]=12 ) il

compilatore evidenzia un

errore

Page 26: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

26A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni e Array – 2°parte

/** Nome: somma_pari* Scopo: Somma i numeri pari presenti in un vettore v di lunghezza n* Input: const int v[]: vettore* int n: dimensione del vettore* Output: somma dei numeri pari presenti in v*/

int somma_pari(const int v[], int n) {int i, somma = 0;

for (i = 0; i < n; i++) {if (v[i] %2 == 0) somma += v[i];

}return somma;

}

Definiamo come parametri per la funzione somma_pari() :

- l’ array dei numeri interi v[] da esaminare,

- il numero di elementi n di v[].

La funzione restituisce un valore int pari alla somma dei numeri pari di v[].

Scrivere tre funzioni C che svolgano i seguenti compiti:

a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un dato valore

massimo.

[Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n.

[Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.

[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice.

Ricordiamoci di dichiarare ed

inizializzare le variabili locali utilizzate

Il const applicato al parametro v[] evidenzia

che si tratta di un argomento a sola lettura

Restituisco la somma dei numeri pari

Page 27: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

27A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni e Array – 2°parte

/** Nome: inizializza* Scopo: Inizializza un vettore di n interi con num eri casuali compresi tra 1 e 9* Input: int v[]: vettore* int n: dimensione del vettore* int min: il minimo numero pseudo-casuale gen erabile* int min: il massimo numero pseudo-casuale ge nerabile* Output: -*/

void inizializza(int v[], int n, int min, int max){

int i;for (i = 0; i < n; i++)

v[i] = rand() % (max - min + 1) + min;}

Per la funzione inizializza() definiamo i seguenti parametri:

- l’ array dei numeri interi v[] da inizializzare,

- il numero di elementi n di v[],

- il valore minimo min e massimo max generabile.

Il void iniziale nella dichiarazione della funzione indica che questa non restituisce alcun valore.

Scrivere tre funzioni C che svolgano i seguenti compiti:

a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un dato valore

massimo.

[Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n.

[Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.

[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice.

Ricordiamoci di dichiarare le variabili locali utilizzate

Page 28: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

28A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni e Array – 2°parte

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

inizializza(m[i],DIM2, 1, 9);stampa(m[i],DIM2);printf("\n");

}

Nel main() inserisco le righe di codice relative al primo punto della consegna

Scrivere tre funzioni C che svolgano i seguenti compiti:

a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un dato valore

massimo.

[Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n.

[Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.

[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice.

#define DIM1 10#define DIM2 5

int m[DIM1][DIM2], i; Ricordiamoci di dichiarare le variabili utilizzate

Parametrizziamo il numero di righe DIM1 e di colonne

DIM2 della matrice m con le seguenti #define.

Inizializzo ogni i-esima riga m[i] (con DIM2

elementi) della matrice m con valori

casuali compresi tra 1 e 9 e poi la stampo

Page 29: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

29A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni e Array – 2°parte

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

v[i] = somma_pari(m[i],DIM2);printf("%d ", v[i]);

}printf("\n");

Aggiungo successivamente nel main() le righe di codice relative al secondo punto della consegna

Scrivere tre funzioni C che svolgano i seguenti compiti:

a. Inizializzare un vettore di interi di lunghezza n con numeri casuali compresi tra un dato valore minimo ed un dato valore

massimo.

[Suggerimento: void inizializza(int v[], int n, int min, int max);]

b. Stampare a video un vettore di interi di lunghezza n.

[Suggerimento: void stampa(const int v[], int n);]

c. Restituire la somma dei numeri pari in un vettore di interi di lunghezza n.

[Suggerimento: int somma_pari(const int v[], int n);]

Scrivere un programma C che, sfruttando le funzioni precedenti, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 5 colonne con numeri pseudo-casuali compresi tra 1 e 9.

• Inizializzi e stampi a video un vettore di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della

matrice.

int v[DIM1]; Ricordiamoci di dichiarare le variabili utilizzate

Per ogni i-esima riga m[i] (di DIM2

elementi) calcolo la somma dei pari e la

memorizzo nell’elemento v[i] e che poi

stampo

Page 30: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

30A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni – 2°parte

Soluzione

completa …

/************************************************** ************************* Nome: lab1-somma_pari.c ** Autore: Alessandro Saetti ** Data: 23/3/10 **************************************************** ***********************/

#include <stdio.h>#include <stdlib.h>#define DIM1 10#define DIM2 5/* Nome: inizializza

* Scopo: Inizializza un vettore di n interi con num eri casuali compresi tra 1 e 9* Input: int v[]: vettore* int n: dimensione del vettore* int min: il minimo numero pseudo-casuale gen erabile* int min: il massimo numero pseudo-casuale ge nerabile* Output: -*/

void inizializza(int v[], int n, int min, int max) {

int i;for (i = 0; i < n; i++) v[i] = rand() % (max - min + 1 ) + min;

}/* Nome: stampa

* Scopo: Stampa un vettore di n interi * Input: int v[]: vettore* int n: dimensione del vettore* Output: -*/

void stampa(const int v[], int n) {int i;for (i = 0; i < n; i++) printf("%d ", v[i]);

}

FUNZIONE inizializza (int [], int, int, int)

FUNZIONE stampa (int [], int)

Page 31: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

31A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 4Esercizi su Funzioni – 2°parte

… soluzione

completa.

/* Nome: somma_pari* Scopo: Somma i numeri pari presenti in un vettore v di lunghezza n* Input: const int v[]: vettore* int n: dimensione del vettore* Output: somma dei numeri pari presenti in v*/

int somma_pari(const int v[], int n) {int i, somma = 0;for (i = 0; i < n; i++) {

if (v[i] %2 == 0) somma += v[i];}return somma;

}/* Nome: main

* Scopo: Stampa le somme dei numeri pari sulle righ e di una matrice* Input: --* Output: 0 se il programma termina correttamente*/

int main() {int m[DIM1][DIM2], v[DIM1], i;for (i = 0; i < DIM1 ; i++) {

inizializza(m[i],DIM2, 1, 9);stampa(m[i],DIM2);printf("\n");

}for (i=0; i < DIM1; i++) {

v[i] = somma_pari(m[i],DIM2);printf("%d ", v[i]);

}printf("\n");system("pause");return 0;

}

FUNZIONE somma_pari (int [], int)

Page 32: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

32A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Scrivere una funzione C che svolga il seguente compito:• Restituisca la somma dei numeri pari e la somma dei numeri dispari in un vettore di interi di lunghezza

n. [Suggerimento: void somme(const int v[], int n, int *somma_pari, int* somma_dispari);]

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 4 per la stampa e l’inizializzazione del vettore, svolga i seguenti compiti:• Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri pseudo-casuali compresi tra

10 e 99.• Inizializzi un vettore v1 di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della

matrice ed un vettore v2 di 10 elementi con la somma dei numeri dispari.

Esercizio 5

Page 33: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

33A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 5Esercizi su Funzioni e Array – 2°parte

#include <stdio.h>#include <stdlib.h>/*

* Nome: main* Scopo: Stampa le somme dei numeri pari e dispari * sulle righe di una matrice* Input: --* Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti

Scrivere una funzione C che svolga il seguente compito:

• Restituisca la somma dei numeri pari e la somma dei numeri dispari in un vettore di interi di lunghezza n.

[Suggerimento: void somme(const int v[], int n, int *somma_pari, int* somma_dispari);]

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 4 per la stampa e

l’inizializzazione del vettore, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri pseudo-casuali compresi tra 10 e 99.

• Inizializzi un vettore v1 di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice ed un

vettore v2 di 10 elementi con la somma dei numeri dispari.

// funzione di stampa()

// funzione inizializza()

void stampa(const int v[], int n) {

int i;for (i = 0; i < n; i++)

printf("%d ", v[i]);}

void inizializza(int v[], int n, int min, intmax){

int i;for (i = 0; i < n; i++)

v[i] = rand() % (max - min + 1) + min;}

Riutilizzo le funzioni

precedentemente

sviluppate

Page 34: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

34A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 5Esercizi su Funzioni e Array – 2°parte

/** Nome : somme* Scopo: Calcola la somma dei numeri pari e dispari presenti in un * vettore v di lunghezza n* Input: const int v[]: vettore* int n: dimensione del vettore* int *somma_pari: puntatore alla variabile i n cui memorizzo * la somma dei numeri pari* int *somma_dispari: puntatore alla variabil e in cui memorizzo* la somma dei numeri di spari* Output: -*/

void somme(const int v[], int n, int *somma_pari, int *so mma_dispari) {

int i;

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

if (v[i] %2 == 0) *somma_pari += v[i];

else *somma_dispari += v[i];

}}

Scrivere una funzione C che svolga il seguente compito:

• Restituisca la somma dei numeri pari e la somma dei numeri dispari in un vettore di interi di lunghezza n.

[Suggerimento: void somme(const int v[], int n, int *somma_pari, int* somma_dispari);]

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 4 per la stampa e

l’inizializzazione del vettore, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri pseudo-casuali compresi tra 10 e 99.

• Inizializzi un vettore v1 di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice ed un

vettore v2 di 10 elementi con la somma dei numeri dispari.

Definiamo come

parametri della funzione

somme():

- l’ array di numeri interi

v[] da esaminare,

- il numero di elementi n

di v[]

- i puntatori alle variabili

che dovranno contenere la

somma dei numeri pari e

dispari.Dichiarazione ed inizializzazione delle variabili locali

Il const applicato al parametro v[] evidenzia

che si tratta di un argomento a sola lettura

Page 35: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

35A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 5Esercizi su Funzioni e Array – 2°parte

Scrivere una funzione C che svolga il seguente compito:

• Restituisca la somma dei numeri pari e la somma dei numeri dispari in un vettore di interi di lunghezza n.

[Suggerimento: void somme(const int v[], int n, int *somma_pari, int* somma_dispari);]

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 4 per la stampa e

l’inizializzazione del vettore, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri pseudo-casuali compresi tra 10 e 99.

• Inizializzi un vettore v1 di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice ed un

vettore v2 di 10 elementi con la somma dei numeri dispari.

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

inizializza(m[i],DIM2, 10, 99);stampa(m[i],DIM2);printf("\n");

}

Nel main() inserisco le righe di codice relative al primo punto della consegna

#define DIM1 10#define DIM2 10

int m[DIM1][DIM2], i; Ricordiamoci di dichiarare le variabili utilizzate

Parametrizziamo il numero di righe DIM1 e di colonne

DIM2 della matrice m con le seguenti #define.

Inizializzo ogni i-esima riga m[i] (di DIM2

elementi) della matrice m con valori casuali

compresi tra 10 e 99 e poi la stampo

Page 36: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

36A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 5Esercizi su Funzioni e Array – 2°parte

printf("\nv1\tv2\n");for (i=0; i < DIM1; i++) {

somme(m[i],DIM2, &v1[i], &v2[i]);printf("%d\t%d\n", v1[i], v2[i]);

}

Aggiungo successivamente nel main() le righe di codice relative al secondo punto della consegna

int v1[DIM1]={0}, v2[DIM1]={0}, i;

Ricordiamoci di dichiarare e inizializzare le variabili

utilizzate. La scrittura ={0} indica che tutti gli elementi

del vettore saranno inizializzati a zero.

Per ogni i-esima riga m[i] (di DIM2 elementi)

della matrice m calcolo la somma dei pari e dei

dispari e le memorizzo rispettivamente

nell’elemento i-esimo dei vettori v1 e v2 e che

poi stampo

Scrivere una funzione C che svolga il seguente compito:

• Restituisca la somma dei numeri pari e la somma dei numeri dispari in un vettore di interi di lunghezza n.

[Suggerimento: void somme(const int v[], int n, int *somma_pari, int* somma_dispari);]

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 4 per la stampa e

l’inizializzazione del vettore, svolga i seguenti compiti:

• Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri pseudo-casuali compresi tra 10 e 99.

• Inizializzi un vettore v1 di 10 elementi con la somma dei numeri pari presenti su ciascuna riga della matrice ed

un vettore v2 di 10 elementi con la somma dei numeri dispari.

Page 37: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

37A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 5Esercizi su Funzioni – 2°parte

Soluzione

completa …

/************************************************** ************************* Nome: lab2-sommapari_dispari.c ** Autore: Alessandro Saetti ** Data: 23/3/10 **************************************************** ***********************/

#include <stdio.h>#include <stdlib.h>#define DIM1 10#define DIM2 10/*

* Nome: somme* Scopo: Calcola la somma dei numeri pari e dispari presenti in un vettore v di lunghezza n* Input: const int v[]: vettore* int n: dimensione del vettore* int *somma_pari: puntatore alla variabile i n cui memorizzo la somma dei numeri pari* int *somma_dispari: puntatore alla variabil e in cui memorizzo la somma * dei numeri dispari* Output: -*/

void somme(const int v[], int n, int *somma_pari, int *so mma_dispari) {int i;for (i = 0; i < n; i++) {

if (v[i] %2 == 0) *somma_pari += v[i];else *somma_dispari += v[i];

}}/* Nome: inizializza

* Scopo: Inizializza un vettore di n interi con num eri casuali compresi tra min e max

* Input: int v[]: vettore* int n: dimensione del vettore* int min: il minimo numero pseudo-casuale gen erabile* int min: il massimo numero pseudo-casuale ge nerabile* Output: -*/

void inizializza(int v[], int n, int min, int max) {int i;

for (i = 0; i < n; i++) v[i] = rand() % (max - min + 1 ) + min;}

FUNZIONE somme (int [], int, int *, int *)

FUNZIONE inizializza (int [], int, int, int)

Page 38: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

38A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 5Esercizi su Funzioni – 2°parte

… soluzione

completa. /** Nome: stampa* Scopo: Stampa un vettore di n interi * Input: int v[]: vettore* int n: dimensione del vettore* Output: -*/

void stampa(const int v[], int n) {int i;for (i = 0; i < n; i++) printf("%d ", v[i]);

}

/** Nome: main* Scopo: Stampa le somme dei numeri pari e dispari sulle righe di una matrice* Input: --* Output: 0 se il programma termina correttamente*/

int main() {int m[DIM1][DIM2], v1[DIM1]={0}, v2[DIM1]={0}, i, j;

for (i = 0; i < DIM1 ; i++) {inizializza(m[i],DIM2, 10, 99);stampa(m[i],DIM2);printf("\n");

}

printf("\nv1\tv2\n");for (i=0; i < DIM1; i++) {

somme(m[i],DIM2, &v1[i], &v2[i]);printf("%d\t%d\n", v1[i], v2[i]);

}

system("pause");return 0;

}

FUNZIONE stampa (int [], int)

Page 39: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

39A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 6Scrivere una funzione C che svolga il seguente compito:

• Restituisca 1 se la parola in un dato vettore è palindroma e 0 altrimenti. [Suggerimento: intpalindroma(char *parola);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole acquisite da tastiera (interrompere l’acquisizione delle parole qualora venissero immesse 50 parole o la stringa “0”)..

• Stampare a video tutte le parole palindrome contenute nella matrice.

Page 40: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

40A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 6Esercizi su Funzioni e Array – 2°parte

#include <stdio.h>#include <stdlib.h>/*

* Nome: main* Scopo: Trova le parole palindrome in un gruppo di parola acquisite da tastiera* Input: -* Output: 0 se il programma termina correttamente*/

int main(){

. . .system("pause");return(0);

}

Impostiamo la struttura iniziale del nostro programma C inserendo eventuali commenti

Scrivere una funzione C che svolga il seguente compito:

• Restituisca 1 se la parola in un dato vettore è palindroma e 0 altrimenti. [Suggerimento: int palindroma(char *parola);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole acquisite da tastiera

(interrompere l’acquisizione delle parole qualora venissero immesse 50 parole o la stringa “0”)..

• Stampare a video tutte le parole palindrome contenute nella matrice.

Page 41: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

41A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 6Esercizi su Funzioni e Array – 2°parte

/** Nome: palindroma* Scopo: Determina se una parola e' palindroma* Input: char *parola: la parola da verificare* Output: 1 se la parola e' palindroma; 0 altriment i*/

int palindroma (char *parola){

int i, j;

for (i = 0, j = strlen(parola) - 1; i < strlen(parola )/2 ; i++, j--) if (parola[i] != parola[j])

return 0;return 1;

}

Una parola è palindroma quando, letta al rovescio, resta la stessa. Per

verificare che lo sia basta confrontare in sequenza: il primo carattere

con l’ultimo, il secondo con il penultimo e così via. Se i caratteri

confrontati risultano sempre uguali allora la parola è palindroma. Non

occorre confrontare fino all’ultimo carattere ma basta fermarsi quando

si raggiunge il centro della stringa.

Dichiarare le variabili locali utilizzate

Scrivere una funzione C che svolga il seguente compito:

• Restituisca 1 se la parola in un dato vettore è palindroma e 0 altrimenti. [Suggerimento: int palindroma(char *parola);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole acquisite da tastiera (interrompere

l’acquisizione delle parole qualora venissero immesse 50 parole o la stringa “0”)..

• Stampare a video tutte le parole palindrome contenute nella matrice.

strlen() conta il numero di caratteri della

stringa passata come argomento

Page 42: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

42A.A. 2013/2014

#include <string.h>#define DIM 50int main() {

char m[DIM][DIM], n;n = acquisisci(m);. . .

Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 6Esercizi su Funzioni e Array – 2°parte

/* Nome: acquisisci* Scopo: Acquisisce parole da tastiera* Input: char (*m)[DIM]: la matrice nella quale salv are le parole* Output: il numero di parole acquisite*/

// int acquisisci (char m[][DIM])int acquisisci (char (*m)[DIM]) {int n = 0;

printf("Inserisci delle parole (0 per terminare):\n ");do {

printf("==> "); scanf("%50s", m[n]);n++;

} while(n < DIM && strcmp(m[n-1], "0") != 0 );if (strcmp(m[n-1], "0") == 0) n--;return n;

}

Implementiamo la funzione che legge la

sequenza di parole. Termino quando ne ho

lette 50 oppure digito “0”;

Scrivere una funzione C che svolga il seguente compito:

• Restituisca 1 se la parola in un dato vettore è palindroma e 0 altrimenti. [Suggerimento: int

palindroma(char *parola);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole

acquisite da tastiera (interrompere l’acquisizione delle parole qualora venissero

immesse 50 parole o la stringa “0”).

• Stampare a video tutte le parole palindrome contenute nella matrice.

La maschera di formato "%50s" nella scanf permette

di leggere una sequenza di caratteri fino

all'inserimento di un simbolo di separazione (esempio

spazio, tab, newline etc. - vedi funzione isspace())

oppure quando sono arrivato al 50-esimo carattere.

Quando passo ad una procedura una matrice posso

omettere la 1^ dimensione per cui posso scrivere:

M[][100] oppure (*M)[100]. Le dimensioni successive

alla prima sono però obbligatorie.

Inseriamo nel main() il

richiamo alla funzione

acquisisci()

Restituisco il nr di parole lette

La funzione strcmp(s1,s2) ritorna un intero <, == o > di zero a seconda che s1 sia rispettivamente <, == o > di s2.

Includere <string.h> anche se il C (non il C++) permette la chiamata ad una funzione di libreria senza aver definito prima il suo prototype(presente nell'header file).Infatti il C genera un prototype implicito del tipo int NomeFunct()che però potrebbe non coincidere con quello richiesto dalla funzione che devo utilizzare.

Dichiarare le variabili

necessarie

Page 43: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

43A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 6Esercizi su Funzioni e Array – 2°parte

for (i = 0; i < n; i++)if (palindroma(m[i]))

printf("\n%s", m[i]); printf("\n");

Scrivere una funzione C che svolga il seguente compito:

• Restituisca 1 se la parola in un dato vettore è palindroma e 0 altrimenti. [Suggerimento: int palindroma(char *parola);]

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

• Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole acquisite da tastiera

(interrompere l’acquisizione delle parole qualora venissero immesse 50 parole o la stringa “0”).

• Stampare a video tutte le parole palindrome contenute nella matrice.

int i;

Inseriamo nel main() il codice relativo all’ultimo punto della consegna

Dichiaro le variabili necessarie

Stampo le parole

palindrome

Soluzione

completa …

/************************************************** ************************* Nome: lab4-palindroma.c ** Autore: Alessandro Saetti ** Data: 23/3/10 **************************************************** ***********************/

#include <stdio.h>#include <stdlib.h>#define DIM 50/* Nome: palindroma

* Scopo: Determina se una parola e' palindroma* Input: char *parola: la parola da verificare* Output: 1 se la parola e' palindroma; 0 altriment i*/

int palindroma (char *parola) {int i, j;for (i = 0, j = strlen(parola) - 1; i < strlen(parola )/2 ; i++, j--)

if (parola[i] != parola[j]) return 0;return 1;

}

FUNZIONE palindroma (char *)

Page 44: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

44A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizio 6Esercizi su Funzioni – 2°parte

Soluzione

completa …

/* Nome: acquisisci* Scopo: Acquisisce parole da tastiera* Input: char (*m)[DIM]: la matrice nella quale salv are le parole* Output: il numero di parole acquisite*/

int acquisisci (char (*m)[DIM]) {//int acquisisci (char m[][DIM]) {

int n = 0;printf("Inserisci delle parole (0 per terminare):\n ");do {

printf("==> "); scanf("%50s", m[n]);n++;

} while(n < DIM && strcmp(m[n-1], "0") != 0 );if (strcmp(m[n], "0") == 0) n--;return n;

}/* Nome: main

* Scopo: Trova le parole palindrome in un gruppo di parola acquisite da tastiera* Input: -* Output: 0 se il programma termina correttamente*/

int main() {char m[DIM][DIM];int i, n = 0;n = acquisisci(m);for (i = 0; i < n; i++) {

if (palindroma(m[i])) printf("\n%s", m[i]); }printf("\n");system("pause");return 0;

}

FUNZIONE acquisisci (char [][DIM])

Page 45: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

45A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizi su funzioni e vettori(per casa)

1. Scrivere una funzione C che visualizzi i divisori di un dato intero.

Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

– Inizializzi un vettore di 10 variabili intere con dati pseudo-casuali comprese tra 10 e 100.

– Visualizzi i divisori dei numeri contenuti nel vettore.

Page 46: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

46A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizi su funzioni e vettori(per casa)

2. Scrivere una funzione C che svolga il seguente compito:– Restituisca il minimo comune multiplo tra i numeri in un vettore di

interi di lunghezza n.

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 1. per la stampa e l’inizializzazione del vettore, svolga i seguenti compiti:

– Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri pseudo-casuali compresi tra 1 e 9.

– Inizializzi e stampi a video un vettore v1 di 5 elementi con i minimi comuni multipli dei numeri presenti sulla prima metàdi ciascuna riga della matrice ed un vettore v2 di 5 elementi con i mimimicomuni multipli dei numeri presenti sulla seconda metà.

Page 47: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

47A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizi su funzioni e vettori (per casa)

3. Scrivere una funzione C che svolga il seguente compito:

– Restituisca la quantità di numeri primi presenti in un dato vettore di interi di lunghezza n.

Scrivere un programma C che, sfruttando la funzione precedente e le funzioni sviluppate nell’esercizio 1. per la stampa e l’inizializzazione del vettore, svolga i seguenti compiti:

– Inizializzi e stampi a video una matrice di 10 righe e 10 colonne con numeri casuali compresi tra 10 e 99

– Stampi a video la riga della matrice con più numeri primi

Page 48: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

48A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizi su funzioni e vettori(per casa)

4. Scrivere una funzione C che svolga il seguente compito:– Dato un vettore di caratteri v di lunghezza n ed un numero intero

positivo (negativo) num, restituisca una frase ottenuta sostituendo a ciascun carattere di v un nuovo carattere posto numposizioni avanti (indietro) nell’alfabeto.

• Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti:

– Acquisisca dalla linea di comando una frase ed un numero positivo.

– Stampi a video la frase cifrata.

• Ad esempio: – cifra.exe “cogito ergo sum ” 5

Frase cifrata: htlnyt jwlt xzr

cifra.exe “htlnyt jwlt xzr ” -5Frase decifrata: cogito ergo sum

Page 49: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

49A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizi sul funzioni e vettori(per casa)

5. Scrivere tre funzioni C che svolgano i seguenti compiti– Restituire 1 se il carattere è una vocale e 0 altrimenti.

[Suggerimento: int vocale(char c);]– Restituire 1 se il carattere è una lettera e 0 altrimenti.

[Suggerimento: int lettera(char c);]– Restituire il numero di vocali ed il numero di consonanti in un vettore di

caratteri di lunghezza n. [Suggerimento: voidconta_vocali_consonanti(char *vet, int n, int *voc, int *cons)]

Scrivere un programma C che, sfruttando l’ultima funzione richiesta in precedenza, svolga i seguenti compiti

– Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole acquisite da tastiera (interrompere l’acquisizione delle parole qualora venissero immesse 50 parole o la stringa “0”).

– Stampare a video le due parole nella matrice con il maggior numero di vocali e consonanti.

Page 50: Fondamenti di Programmazione - Appunti di INFORMATICA · Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia Esercizi su Funzioni – 1 °parte Esercizio

50A.A. 2013/2014Docente: A. Saetti Fondamenti di Programmazione - Università degli Studi di Brescia

Esercizi su funzioni e vettori(per casa)

6. Scrivere una funzione C che svolga i seguenti compiti– Dati due vettori di caratteri v1 e v2 di lunghezza n determini se la parola

in v1 è un anagramma della parola in v2. [Suggerimento: Utilizzare due vettori di 26 interi, ciascuno dei quali inizializzato con il numero di volte per cui ciascuna lettera dell’alfabeto compare in v1/v2 e verificare se i due vettori di interi contengono gli stessi numeri.]

• Scrivere un programma C che, sfruttando la funzione precedente, svolga i seguenti compiti

– Inizializzare le righe di una matrice di caratteri di 50 righe e 50 colonne con parole acquisite da tastiera (interrompere l’acquisizione delle parole qualora venissero immesse 50 parole o la stringa “0”).

– Stampare a video tutte le coppie di parole contenute nella matrice per le quali una parola è l’anagramma dell’altra.