Programmazione ed
Esercitazioni di Programmazione


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


<-- Torna alla lista delle soluzioni