Ho appena finito di svolgere un esercizio di programmazione in C che ho trovato in un libro. I risultati che si ottengono sono giusti, però vorrei chiedere lo stesso se il programma che ho scritto è fatto bene oppure no. Esistono altri metodi (anche in maniera ricorsiva) per risolvere tale problema?
Esercizio:
Esercizio:
C:
/* Esercizio 5.21
Scrivete dei segmenti di programma che eseguano ognuno dei seguenti compiti:
a) Calcolate la parte intera del quoziente ottenuto dalla divisione degli interi a e b.
b) Calcolate il resto intero ottenuto dalla divisione degli interi a e b.
c) Utilizzate i pezzi di programma sviluppati in a) e b) per scrivere una funzione che
prenda in input un intero, compreso tra 1 e 32767, e lo visualizzi come una serie di
cifre, separando ogni coppia di esse con due spazi. Per esempio, l'intero 4562 dovrà
essere stampato come:
4 5 6 2
*/
#include <stdio.h>
/* Prototipi funzione */
int ParteIntera(int a, int b);
int Resto(int a, int b);
void SeparaCifre(int numero);
int main()
{
int input;
printf("%d / %d = %d\n", 8, 3, ParteIntera(8, 3));
printf("%d resto %d = %d\n", 8, 3, Resto(8, 3));
while(1)
{
printf("Inserisci un numero intero compreso tra 1 e 32767: ");
scanf("%d", &input);
if(input >= 1 && input <= 32767)
break;
}
SeparaCifre(input);
return 0;
}
int ParteIntera(int a, int b)
{
return a / b;
}
int Resto(int a, int b)
{
return a % b;
}
void SeparaCifre(int numero)
{
//Determinare il numero di cifre del numero
int cifre, copia = numero;
for(cifre = 1; copia / 10 != 0; cifre++)
copia /= 10;
//Impostare il divisore a 10^(cifre-1)
int counter, divisore = 10;
for(counter = 1; counter < cifre - 1; counter++)
divisore *= 10;
//Separare le cifre
while(divisore != 0)
{
if(ParteIntera(numero, divisore) != 0)
printf("%d ", ParteIntera(numero, divisore));
numero = Resto(numero, divisore);
divisore /= 10;
}
}