Codice dei programmi nella directory:

///File: FunzioniBooleaneSoluzione.c
#include <stdio.h> /// funzioni booleane int pari(int n) ///ritorna vero se n e' pari { if (n % 2 == 0) return 1; else return 0; } int eprimo(int n) { int d; /// divisore for(d=2; d <= n/2; d++) { if (n%d ==0) /// non da resto diviso per d return 0; /// non primo } return 1; /// finito il ciclo, so che e' primo } int dispari(int n) { return !pari(n); /// ritorna NON pari(n) } double fattoriale(int n) { double fat =1.0; int i; for(i=2; i <= n; i++) fat=fat*i; return fat; } int efattoriale(int n) { int d; /// d e' un valore for(d=1; d < n/2; d++) { if (fattoriale(d)==n) /// d! e' uguale a n return d; /// se fattoriale(5) == 120 e n == 120 ritorna 5 } return 0; /// finito il ciclo, so che n non e' un fattoriale } int binario(int n) { while(n>0) { if (n % 10 >1) return 0; n/=10; } return 1; } main() { int num; int acapo=0; /// falso int f; do { printf("Dammi un numero->"); scanf("%d",&num); if (dispari(num)) printf("Dispari\n"); else printf("Pari\n"); if (eprimo(num)) printf("Primo\n"); else printf("Non primo\n"); f = efattoriale(num); if(f==0) printf("%d non e' un fattoriale", num); else printf("%d e' il fattoriale di %d\n",num,f); if (binario(num) printf("%d e' binario\n",num); else printf("%d non e' binario\n",num); else if (num == 0) break; }while(1); printf("Numeri primi <= 1000:\n"); for(num=0; num <=1000; num++) { /// stampane 10 per riga if (eprimo(num)) { printf("%4d ",num); acapo++; } if(acapo==10) { printf("\n"); acapo=0; } } return 0; }
///(Fine file: FunzioniBooleaneSoluzione.c)

///File: bindec.c
#include <stdio.h> int binario(int n) /// verifica se un numero e' binario: es 10010 si, 1010201 no { while(n>0) { if (n % 10 >1) return 0; n/=10; } return 1; } /** int bindec(int n) se n e' un numero binario ritorna il corrispondente decimale, se n e' decimale ritorna il corrispondente binario es: se n == 100 lo vede come binario e ritorna 4 (il corrispondente decimale) se n == 4 lo vede come decimale e ritorna 100 (il corrispondente binario)**/ int bindec(int n) { int valore=0; int p=1; if (binario(n)) while(n>0) /// converto da binario a decimale { valore+=p*(n%2); p*=2; n/=10; } else while(n>0) /// converto da decimale a binario { valore+=p*(n%2); p*=10; n/=2; } return valore; } int bindec2(int n) /// Versione 2 piu' compatta { int valore=0; int p=1; int b=binario(n); /// b == booleano, vero se n e' binario while(n>0) /// converto da binario a decimale o da decimale a binario { valore+=p*(n%2); if (b) p*=2, n/=10; else p*=10, n/=2; } return valore; } /// main un po' piu' sotto!!! int main() { int num; do { printf("Un numero (decimale o binario)->"); scanf("%d",&num); printf("Valore -->%d\n",bindec(num)); ///printf("Valore -->%d\n",bindec2(num)); /// piu' compatta }while(num!=0); }
///(Fine file: bindec.c)

///File: Funzioni-Booleane.c
int funzione
(parametri) --> se e' una funzione booleana fa un controllo e ritorna vero o falso (0 oppure 1) _______________________ funzioni da codificare: _______________________ 1) int pari(int n) ritorna vero se n e' pari 2) int dispari(int n) ritorna vero se n e' dispari 3) int eprimo(int n) --> verifica se n e' un numero primo 4) int efattoriale(int n) --> verifica se n e' un fattoriale e, se vero, ritorna il numero da cui si ottiene n. ritorna 0 se n non e' un numero fattoriale es: efattoriale(120) ritorna 5 (5! == 120) efattoriale(3) ritorna 0 (non esiste nessun numero il cui fattoriale e' 3) 5) int ebinario(int n) --> verifica se n e' composto solo da cifre 1 e 0 (es: n==10010 ritorna 1, 10012 ritorna 0) 6) int ebinario2(int n) --> ritorna -1 se n non e' binario, oppure il valore in binario (se n==0 ritorna 0, se 101 ritorna 5) 7) int cifrepari(int n) --> controlla se n e' composto solo da cifre pari 8) int cifredispari(n) --> controlla se n e' composto solo da cifre dispari 9) int ebase(int n, int b) --> controlla se il numero n puo' essere in base b (esempio se n == 101 e b == 2 ritorna 1) (se n == 123 e b == 4 oppure b==5 oppure b==10 ritorna 1 perchè 123 puo' essere un numero in base 4 ma anche in base 5 oppure 10) (se n == 12345 e b == 5 ritorna falso, perchè il numero 12345 puo' al minimo essere in base 6) 10) int divisore(int n, int d) ritorna vero se d è un divisore di n 11) int multiplo(int m, int n) ritorna vero se m e' un multiplo di n 12) int ordine(int n1, int n2, int n3) ritorna vero se i numeri n1, n2, n3 sono in ordine crescente 13) int cifrecrescenti(int n) ritorna vero se le cifre del numero sono crescenti, es se n==123345667 ritorna vero, se n=1232345 falso) 14) int cifredecrescenti(int n) ritorna vero se le cifre del numero sono decrescenti 15) int tabellina(int n, int t) ritorna vero se n fa parte della tabellina t (esempio se n == 15 e t==3 o t==5 ritorna vero) ______________________ Funzioni NON booleane: ______________________ 16) int bindec(int n) se n e' un numero binario ritorna il corrispondente decimale, se n e' decimale ritorna il corrispondente binario es: se n == 100 lo vede come binario e ritorna 4 (il corrispondente decimale) se n == 4 lo vede come decimale e ritorna 100 (il corrispondente binario) 17) double arrotonda(double n, int c) ritorna il numero n arrotondato a c cifre decimali. Es: se n==12.345 e c==2 ritorna 12.35 18) double tronca(double n) se n==1234.56789 ritorna 1234 19) double percentuale(int n, int percento) ritorna la percentuale di n: Esempio se n==120 e percento==50 ritorna 60 20) int epercentuale(int n, int p) se p e' una percentuale esatta di n ne ritorna il valore, altrimenti ritorna -1 Es. se n == 120 e p==60 ritorna 50 (60 e' il 50% di 120), se n==100 e p== 3 ritorna 3 se n==1000 e p==100 ritorna 10, se n==1000 e p==11 o p==-1 ritorna -1 21) int concatena(int n1, int n2) ritorna la concatenzazione di n1 ed n2, cioe' se n1==123 ed n2==456 ritorna il numero 123456 22) int TogliCifreDestra(int n, int cifre) se n == 12345 e cifre == 2 toglie le due cifre a destra di n (ritorna 123) 23) int TogliCifreSinistra(int n, int cifre) se n == 12345 e cifre == 3 toglie le tre cifre a sinistra di n (ritorna 45) NB: nelle due funzioni sopra, se n e' maggiore del numero di cifre o n e' negativo, ritornare 0 24) int anagramma(int n1, int n2) ritorna vero se n1 e' composto esattamente dalle cifre di n2 esempio: se n1==123 e n2 == 213 o n2== 312 ritorna vero 25) int cifreuniche(int n) ritorna vero se in n nessuna cifra e' ripetuta (fattibile con vettori). Es se n =132469 ritorna vero
///(Fine file: Funzioni-Booleane.c)