Sei sulla pagina 1di 5

#include <stdio.

h>
/* applicazione per la gestione di operazioni matematiche */

/** PROTOTIPI DELLE FUNZIONI DI SUPPORTO **/


int maggiore(int x, int y);
int massimo(int x, int y);
int quoziente(int x, int y);
int resto(int x, int y);
int isPari(int x);
int isQuadrato(int x);
int radice(int x);
int isSommaQuadrati(int x);

/** funzione principale **/


int main() {
int scelta; // che cosa vuole fare l'utente
int x, y; // numeri

/* continua fino a che l'utente non introduce -1 */


do {
/* leggi la prossima scelta dell'utente */
printf("Ciao che cosa vuoi fare?\n");
printf("Introduci -1 per terminare il programma.\n");
printf("Introduci 0 per calcolare il massimo fra due numeri interi.\n");
printf("Introduci 1 per calcolare quoziente e resto della divisione intera fra due
numeri interi.\n");
printf("Introduci 2 per verificare se un numero intero e' pari.\n");
printf("Introduci 3 per verificare se un numero e' il quadrato di un numero intero.
\n");
printf("Introduci 4 per per calcolare la radice quadrata di un numero intero.\n");
printf("Introduci 5 per verificare se un numero e' la somma di quadrati di numeri
interi.\n");
scanf("%d", &scelta);

/* sbagliato */
if(scelta<-1 || scelta>5)
printf("Cosa hai digitato? Prova di nuovo!\n\n");

/* termine programma */
if(scelta==-1)
printf("ADIOS!\n");

/* massimo */
if(scelta==0) {
printf("Introduci i due numeri dei quali vuoi calcolare il massimo.\n");
scanf("%d", &x);
scanf("%d", &y);
printf("Il massimo fra %d e %d e' %d!\n\n", x, y, massimo(x,y));
}

/* quoziente e resto */
if(scelta==1) {
printf("Introduci i due numeri dei quali vuoi calcolare quoziente e resto
della divisione intera.\n");
scanf("%d", &x);
scanf("%d", &y);
printf("Il quoziente della divisione intera fra %d e %d e' %d!\n", x, y,
quoziente(x,y));
printf("Il resto della divisione intera fra %d e %d e' %d!\n\n", x, y,
resto(x,y));
}

/* verifica se un numero e' pari */


if(scelta==2) {
printf("Di quale numero vuoi verificare la parita'?\n");
scanf("%d", &x);
if(isPari(x))
printf("Pari!\n\n");
else
printf("Dispari!\n\n");
}

/* verifica se un numero e' un quadrato perfetto */


if(scelta==3) {
printf("Di quale numero vuoi verificare se e' un quadrato perfetto?\n");
scanf("%d", &x);
if(isQuadrato(x))
printf("Quadrato perfetto! Il numero %d e' il quadrato di %d!\n\n",
x , radice(x));
else
printf("Non e' un quadrato perfetto!\n\n");
}

/* radice */
if(scelta==4) {
printf("Introduci il numero del quale vuoi calcolare la radice intera.\n");
scanf("%d", &x);
printf("La radice intera di %d e' %d!\n\n", x, radice(x));
}

/* verifica se un numero e' una somma di due quadrati */


if(scelta==5) {
printf("Di quale numero vuoi verificare se e' una somma di due quadrati?
\n");
scanf("%d", &x);
if(isSommaQuadrati(x))
printf("E' una somma di quadrati!\n\n");
else
printf("Non e'una somma di quadrati!\n\n");
}
}
while(scelta!=-1);
}

/**************** FUNZIONI DI SUPPORTO ***********************************/

/* funzione che restituisce 1 se il primo numero e' maggiore del secondo */


int maggiore(int x, int y) {
int risultato; // valore da restituire

/* calcola e restituisci il minimo */


if(x>y)
risultato = 1;
else
risultato = 0;

return risultato;
}

/* funzione che calcola il massimo fra due numeri interi utilizzando la funzione
* maggiore invece degli operatori >, >=, <, <= */
int massimo(int x, int y) {
int massimo; // valore da restituire

/* calcola e restituisci il massimo */


if(maggiore(x,y))
massimo = x;
else
massimo = y;

return massimo;
}

/* funzione che calcola il quoziente della divisione intera fra due numeri
* senza usare l'operatore ``/'' */
int quoziente(int x, int y) {
int risultato; // valore da restituire

/* quante volte y sta dentro ad x */


risultato = 0; // inzialmente 0
/* sottrai ripetutamente y da x, fintanto che ``ci sta'' */
while(x>=y) {
risultato++;
x -= y;
}
/* restituisci il risultato */
return risultato;
}

/* funzione che calcola il resto della divisione intera fra due numeri
* senza usare l'operatore ``%'' */
int resto(int x, int y) {

/* sottrai ripetutamente y da x, fintanto che ``ci sta'' */


while(x>=y)
x -= y;

/* quello che rimane e' il resto */


return x;
}
/* funzione che calcola la potenza di due numeri interi,
* senza usare la funzione pow */
int potenza(int base, int esponente) {
int potenza; // il valore da calcolare
int i; // contatore

/* inizializza potenza */
potenza = 1;

/* moltiplica potenza per base esponente volte */


for(i=1; i<=esponente; i++)
potenza *= base;

return potenza;
}

/* funzione che verifica se un numero e' pari */


int isPari(int x) {
return x%2==0;
}

/* funzione che verifica se un numero e' un quadrato */


int isQuadrato(int x) {
int risultato; // valore da restituire
int i; // contatore

/* inizializzazione */
i =1;

/* verifica se i al quadrato fa almeno x, altrimenti incrementalo */


while(i*i<x)
i++;

/* ora i al quadrato fa almeno x */


if(i*i==x)
risultato = 1;
else
risultato = 0;

/* restituisci il risultato */
return risultato;
}

/* funzione che restituisce la radice quadrata intera di un numero intero */


int radice(int x) {
int i; // contatore

/* inizializzazione */
i =0;

/* verifica se i al quadrato fa almeno x, altrimenti incrementalo */


while((i+1)*(i+1)<=x)
i++;
return i;
}

/* funzione che verifica se un numero e' una somma di due quadrati */


int isSommaQuadrati(int x) {
int risultato; // valore da restituire
int i, j; // contatori

/* inizializzazione */
risultato = 0;

/* fai assumere alla i tutti i valori fra 1 ed x */


for(i=0; i<=x; i++)
/* fai assumere alla j tutti i valori fra i ed x */
for(j=i; j<=x; j++)
/* la coppia (i,j) va bene */
if(i*i+j*j==x)
risultato = 1;
/* restituisci il risultato */
return risultato;
}

Potrebbero piacerti anche