Codice dei programmi nella directory:
///File: compito-roulette.txt
Implementare in C un programma che simuli il piu'
possibile il gioco della roulette con un solo giocatore.
Vedi sito: https://codeboard.io/projects/553922 (FUNZIONAMENTO)
Consegna il tuo programma al sito : https://codeboard.io/projects/568348
///(Fine file: compito-roulette.txt)
///File: Compito-termometro.txt
0) Scrivi i due programmi mantieni-temperatura.c
e fra-due-temperature.c
-------------------------------------------------
1) Scrivi il programma che, leggendo una sequenza di
input come qua sotto, si fermi alla lettura di 0 0.
Il primo valore indica la temperatura del forno.
Il secondo valore indica per quanti secondi va
mantenuta. Quindi la sequenza qui sotto significa:
porta il forno a 80 gradi e mantienilo 10 secondi
lascia raffreddare fino a 70 e mantieni poi
i 70 gradi per 5 secondi, ... etc.
80 10
70 5
20 10
100 5
0 0
PS: la sequenza potrebbe cambiare
-----------------------------------------------
2) Lancia il programma da file usando la redirezione
dell'input da un file di testo contenente le
sequenze come sopra.
///(Fine file: Compito-termometro.txt)
///File: MonteCarlo.c
/*** Calcolo pigreco con metodo di Montecarlo ***/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main()
{
srand(time(NULL)); /// inizializzo il generatore di numeri pseudocasuali rand()
int interni,i,punti;
double x,y; // Coordinate punto
printf("Quanti punti genero->");
scanf("%d",&punti);
for(i=0, interni=0; i<punti; i++)
{
x=(double)rand()/RAND_MAX; /// Genero un numero fra 0 e 1
y=(double) rand()/RAND_MAX;
if(sqrt(x*x+y*y)<1) /// Teorema di pitagora se l'ipotenusa e' < 1 il punto e' all'interno del quarto di cerchio
interni++;
}
printf("Pigreco Reale = %lf, Pigreco calcolato = %lf\n",M_PI,(float)interni/(punti)*4); /// M_PI e' in math.h
}
///(Fine file: MonteCarlo.c)
///File: mybyted.h
/*** MyByteD.h --> mybyte X Dispositivi Virtuali 28 Nov 2016 F. Sacco*/
/** Usa INPU/OUTPUT anziche IN/OUT */
#include <stdio.h>
#include <stdlib.h> // per atoi()
#include <string.h> // per strlen()
#include <time.h>
#define BYTE unsigned char // un carattere senza segno equivale ad un BYTE
#define LEN 128
void RANDOMIZE() // per compatibilità Borland C
{
time_t t;
srand((unsigned) time(&t));
}
int random(int n)
{
return rand() % n;
}
void leggistr(char str[]) // legge una stringa
{
fgets(str,LEN,stdin);
str[strlen(str)-1] = '\0'; // metto il \0 anzichè il \n
}
BYTE binario(char str[]) // trasforma un stringa contenente un numero in binario in decimale
{
int somma = 0;
int pot=1;
int i;
char c;
for(i=strlen(str)-1; i>=0; i--)
{
c = str[i];
if (c == '0' || c == '1')
{
somma+= pot*(str[i]-'0');
pot*=2;
}
else
{
printf("\nfunzione binario() - il valore [%s] NON e' in binario\n",str);
exit(0);
}
}
return somma;
}
void scrivibyte(BYTE b) // scrive un byte in binario / ricorsiva
{
int i;
printf(" ");
for (i=0; i < 8; i++)
{
printf("%d",b % 2);
b/=2;
printf("\b\b"); // torno indietro di 2 caratteri
}
}
BYTE leggibyte(char modo) // legge un byte in 'D' -> decimale, 'B' -> binario
{
char stringa[LEN+2];
printf("digita un valore in ");
if (modo == 'D') printf(" decimale ->");
else if (modo == 'B') printf(" binario ->");
else
{
printf("Errore chiamata funzione leggibyte()");
exit(0);
};
leggistr(stringa);
if (modo == 'D') return atoi(stringa);
else return binario(stringa);
}
/*** segue: Funzioni di emulazione porte virtuali - tratto da emu8086 ***/
const char sIO_FILE[] = "C:\\emu8086.io";
unsigned char INPUT(int porta) /// Legge da porta virtuale
{
unsigned char tb;
unsigned int ch;
FILE *fp;
fp = fopen(sIO_FILE,"r+");
// Read byte from port:
fseek(fp, porta, SEEK_SET);
ch = fgetc(fp);
fclose(fp);
tb = ch;
return tb;
}
void OUTPUT(int porta, unsigned char uValue) /// Scrive su porta virtuale
{
unsigned int ch;
FILE *fp;
fp = fopen(sIO_FILE,"r+");
ch = uValue;
// Write byte to port:
fseek(fp, porta, SEEK_SET);
fputc(ch, fp);
fclose(fp);
}
void debugport(int porta)
{
char buf[256];
BYTE b=INPUT(porta);
printf("\nPorta [%d] valore-> %3d, Binario-> ",porta,b);
scrivibyte(b);
}
void delay(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
void ora_sistema(int v[])
/// ritorna l'ora di sistema (ore,min,sec)
{
time_t tempo;
struct tm *t;
time (&tempo);
t = localtime(&tempo);
v[0]=t->tm_hour;
v[1]=t->tm_min;
v[2]=t->tm_sec;
}
///(Fine file: mybyted.h)
///File: ValoriBooleaniNumerici-break-continue.c
/** Interruzione cicli : usare break ***/
/** Forzare il ciclo al passo successivo: continue **/
/** Valori logici vero / falso **/
/** Tutti i numeri sono veri, tranne lo zero che e' falso ***/
int main()
{
int i=1;
int n=10;
do
{
getchar(); // Attende fino alla pressione del tasto invio
if (i==3)
{
printf("A%d\n",i);
break;
}
if ( i == 5)
continue;
printf("B%d\n",i);
i++;
}
while(1);
printf("The end\n");
return 0;
}
///(Fine file: ValoriBooleaniNumerici-break-continue.c)
///File: BinarioDecimale.c
/****Immetti un numero in binario e convertilo in decimale*/
#include <stdio.h>
int main() {
int binario;
int decimale = 0, base = 1, resto;
printf("Inserisci un numero binario: ");
scanf("%d", &binario);
while (binario > 0) {
resto = binario % 10;
decimale += resto * base;
binario /= 10;
base *= 2;
}
printf("Il numero decimale equivalente e': %d\n", decimale);
return 0;
}
///(Fine file: BinarioDecimale.c)
///File: RuotaDX.c
/**
* Rotazione a destra di un numero
es. se inserisco 134 --> 413
se inserisco 5755 --> 5575
*/
#include <stdio.h>
int main()
{
int num, primacifradx,dep, pot=1;
printf("Immetti un numero intero ->");
scanf("%d",&num);
dep=num; // deposito il numerp
primacifradx=num%10; // prima cifra a destra di num
while((dep/=10) > 0)
pot*=10; // se num==5273 pot == 1000
//printf("pot=%d\n",pot);
primacifradx *=pot; // se num == 5273 prima cifra a destra == 3000
num/=10; // se num== 5273 ora num == 527
num=primacifradx+num; // se num == 527 ora e' 3000 + 527 == 3527
printf("Numero ruotato a destra= %d\n",num);
return 0;
}
///(Fine file: RuotaDX.c)
///File: EserciziDaPubblicare.txt
Da Pubblicare al 10-1-2026
------------------------------
Controllo Temperatura Forno
Rotazione a destra di un numero: pubblicato --> RuotaDx.c
Roulette (vedi codeboard dsacco)
Cifre di un numero --> esercizi preparazione verifica
- manca solo il 7): Immetti un numero e verifica se le cifre sono crescenti
Cifre di un Libro (codeboard dsacco)
Quadrato con codici ASCII (codeboard dsacco)
Nonno Carletto (codeboard dsacco)
Radice Quadrata N volte (codeboard dsacco)
Numero Triangolare (codeboard dsacco)
///(Fine file: EserciziDaPubblicare.txt)
///File: roulette.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
// Random(X) ritorna un numero fra 1 e X
int Random(int N)
{
static int primavolta = 1; // BOOLEANO
if (primavolta)
{
srand(time(NULL)); /* inizializzo il seme */
primavolta = 0;
}
return (rand() % N) + 1;
}
int main()
{
int money = 100, puntata, scommessa, roulette;
printf("-- Gioco della roulette --\n\n");
do
{
printf("Inizi questo gioco con 100 soldi\n");
do
{
printf("Quanto vuoi puntare? (0 = interrompi gioco) --> ");
scanf("%d", &puntata);
if (puntata == 0)
{
printf("Fine gioco!");
return 0;
}
if (puntata < 0 || puntata > 2147483647 || puntata > money)
{
printf("Errore: parametri non corretti\n");
}
} while (puntata < 0 || puntata > 2147483647 || puntata > money);
printf("Hai deciso di scommettere %d soldi\n\n", puntata);
printf("-- Su cosa vuoi scomettere? --\n");
printf("Se vuoi scommettere su un numero da 0 a 36, immettilo\n");
printf("Se vuoi scommettere su un numero pari, immetti \"-1\", per un numero dispari, immetti \"-2\"\n");
printf("Se invece vuoi scommettere su una terzina (ovvero su una serie di numeri):\n- immetti \"100\" per scommettere sulla prima terzina (da 1 a 12), \n- immetti \"200\" per scommettere sulla senconda terzina (da 13 a 24)\n- immetti \"300\" se vuoi scommettere sulla terza terzina (da 25 a 36).");
do
{
printf("\nInserisci la tua scommessa --> ");
scanf("%d", &scommessa);
if ((scommessa > 36 || scommessa < -2) && scommessa != 100 && scommessa != 200 && scommessa != 300)
{
printf("Errore: parametri non corretti");
}
} while ((scommessa > 36 || scommessa < -2) && scommessa != 100 && scommessa != 200 && scommessa != 300);
printf("\n-- Estrazione della roulette --\n");
roulette = Random(37) - 1;
getchar();
printf("Premi invio per estrarre...");
getchar();
int tim = 20000;
double rallenta = 1.2;
for (int i = 0; i < 18; i++)
{
printf("Estrazione del numero: %2d\r", Random(37) - 1);
fflush(stdout);
usleep(tim);
tim = (int)(tim * rallenta);
}
printf("Estrazione del numero: %d \r", roulette);
fflush(stdout);
printf("\nE' uscito il numero %d\n", roulette);
if (roulette == scommessa)
{
printf("Congratulazioni hai indovinato il numero, hai vinto!\n");
money += puntata;
}
else if (scommessa == -1)
{
if (roulette % 2 == 0)
{
printf("Il numero uscito e' pari, hai vinto!\n");
money += puntata;
}
else
{
printf("Il numero uscito e' dispari, hai perso!\n");
money -= puntata;
}
}
else if (scommessa == -2)
{
if (roulette % 2 == 1)
{
printf("Il numero uscito e' dispari, hai vinto!\n");
money += puntata;
}
else
{
printf("Il numero uscito e' pari, hai perso!\n");
money -= puntata;
}
}
else if (scommessa == 100)
{
if (roulette <= 12)
{
printf("Hai indovinato la terzina, hai vinto!\n");
money += puntata;
}
else
{
printf("Non hai indovinato la terzina, hai perso!\n");
money -= puntata;
}
}
else if (scommessa == 200)
{
if (roulette >= 13 && roulette <= 24)
{
printf("Hai indovinato la terzina, hai vinto!\n");
money += puntata;
}
else
{
printf("Non hai indovinato la terzina, hai perso!\n");
money -= puntata;
}
}
else if (scommessa == 300)
{
if (roulette >= 25)
{
printf("Hai indovinato la terzina, hai vinto!\n");
money += puntata;
}
else
{
printf("Non hai indovinato la terzina, hai perso!\n");
money -= puntata;
}
}
else
{
printf("Non hai indovinato il numero, Hai perso!\n");
money -= puntata;
}
printf("\n");
printf("Premi invio per continuare...");
getchar();
system("cls");
printf("Ora hai %d soldi in tasca\n", money);
if (money <= 0)
{
printf("Hai finito i soldi! Fine gioco!\n");
return 0;
}
} while (1);
}
///(Fine file: roulette.c)