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)