<-- Torna alla lista delle soluzioni
Esercitazione 4
Esercizio 1
/* Scrivere una funzione int ordinato(int a[ ], int dim) che verifichi se un array di interi è ordinato in senso decrescente. La funzione deve restituire 0 se l’array non è ordinato e 1 se l’array è ordinato. */
int ordinato(int a[], int dim) {
int i;
for(i = 0; i < dim - 1; i++) {
if(a[i] < a[i+1])
return 0;
}
return 1;
}
Esercizio 2
/* Scrivere un programma che, inizializzati con valori inseriti dall’utente due array di interi a e b della stessa lunghezza n, calcoli la somma incrociata degli elementi: a[0]+b[n-1], a[1]+b[n-2], ... e la memorizzi in un terzo array c. */
#include <stdio.h>
#define MAXDIM 100
void inizializza(int a[], int dim) {
int i;
for(i = 0; i < dim; i++) {
scanf(" %d", &a[i]);
}
return;
}
void somma_incrociata(int a[], int b[], int c[], int dim) {
int i;
for(i = 0; i < dim; i++) {
c[i] = a[i] + b[dim - i - 1];
}
return;
}
void stampa(int a[], int dim) {
int i;
for(i = 0; i < dim; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
int main() {
int n;
int a[MAXDIM], b[MAXDIM], c[MAXDIM];
printf("Inseire la dimensione dei vettori (<= %d): ", MAXDIM);
scanf(" %d", &n);
printf("Inserire gli %d valori di a: ", n);
inizializza(a, n);
printf("Inserire i %d valori di b: ", n);
inizializza(b, n);
somma_incrociata(a, b, c, n);
printf("La somma incrociata di a[] e b[] e': ");
stampa(c, n);
return 0;
}
Esercizio 3
/* Scrivere un programma che gestisca le scommesse sul gioco ‘craps’ visto a lezione. Impacchettate in una funzione la porzione di programma che esegue un singolo gioco ai dadi. Inizializzate una variabile saldo a 1000 dollari. Usate un ciclo while per chiedere al giocatore di immettere una puntata, controllando che non sia superiore a saldo. Dopo che sarà stata inserita una puntata valida, eseguite un gioco ai dadi. Nel caso in cui il giocatore vinca, incrementate saldo di puntata e visualizzate il nuovo saldo. Nel caso in cui il giocatore perda, decrementate saldo di puntata e visualizzate il nuovo saldo. Il programma dovrà permettere al giocatore di fare scommesse successive fino a quando il giocatore è stanco oppure il suo saldo è arrivato a zero. */
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/* Esegue una giocata e ritorna il risultato: 1=vinto 2=perso */
int craps(void);
int main() {
int saldo = 1000;
int puntata;
int stato_gioco;
char ripeti = 'y';
do{
do{
printf("Ti restano %d dollari\n", saldo);
printf("Fai la tua puntata ");
scanf(" %d", &puntata);
} while(puntata > saldo);
stato_gioco = craps(); // eseguiamo il gioco
if(stato_gioco == 1) {
printf("E\' andata bene!!\n");
saldo += puntata;
} else {
printf("E\' andata male!!\n");
saldo -= puntata;
}
printf("\n Ora hai %d dollari\n", saldo);
printf("Vuoi rischiare ancora? (y/n) ");
scanf(" %c", &ripeti);
} while(ripeti == 'y' && saldo > 0);
printf("Alla prossima\n");
return 0;
}
int tira_dadi() {
int dado1, dado2, somma;
dado1 = 1 + rand() % 6;
dado2 = 1 + rand() % 6;
somma = dado1 + dado2;
printf("\nIl giocatore ha tirato %d + %d = %d", dado1, dado2, somma);
return somma;
}
void stampa_risultati(int finale) {
if(finale == 1)
printf("\nHai vinto!\n");
else
printf("\nHai perso \n");
return;
}
int craps() {
int stato_gioco, somma_dadi, punteggio;
somma_dadi = tira_dadi();
switch(somma_dadi) {
case 7:
case 11: stato_gioco = 1;
break;
case 2:
case 12: stato_gioco = 2;
break;
default: stato_gioco = 0;
punteggio = somma_dadi;
}
while(stato_gioco == 0) {
somma_dadi = tira_dadi();
if(somma_dadi == punteggio)
stato_gioco = 1;
else if(somma_dadi==7)
stato_gioco=2;
}
stampa_risultati(stato_gioco);
return stato_gioco;
}
