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)