[C con Clase] Hijo, comprueba tu división con esto.

marcelinux marcelinator en gmail.com
Sab Sep 27 13:03:29 CEST 2014


Bueno. Empezaré con un toque de vergüenza.
He cambiado la división por iteración para evitar scanf. No sea que al niño le de por escribir letras.
Esta es la versión 2:

/* Hacer una división sin dividir ;-)
 * :-O
 * :-D Haz restas mientras se pueda.
 * ¡Eh! Sólo debes escribir números, que te veo.
 */
#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAX_DIGITOS 9
/* En principio, para divisiones de número enteros */
#undef verbose
/* Ya, un sistema de log es mejor, pero, cada cosa a su tiempo ;) */

unsigned long int GetNumero()
{
	/* fflush(stdin); */
	__fpurge(stdin);
	unsigned long int numero;
	char ch;
	char str[MAX_DIGITOS];
	int i = 0;
	while( ((ch = fgetc(stdin)) != EOF) && (ch != '\n') && (i < MAX_DIGITOS) )
	{
		#ifdef verbose
			printf("\nCaracter %c", ch);
		#endif
		if(isdigit(ch))
		{
			#ifdef verbose
				printf("\nAgregado a la cadena en la posición %i", i);
			#endif
			str[i] = ch;
			i++;
		}else{
			#ifdef verbose
				printf("\nElimino el caracter incorrecto y los siguientes.");
			#endif
			/* fflush(stdin); */
			__fpurge(stdin);
			break; /* Bueno, no es la mejor manera de salir, pero ... */
		}
	}
	str[MAX_DIGITOS] = 0;
	#ifdef verbose
		printf("\nLa cadena completa es:%s", str);
	#endif
	numero = atoi(str);
	#ifdef verbose
		printf("\nEl número obtenido es:%ld\n", numero);
	#endif
	return(numero);
}

int main(void)
{
	printf("Dame el numerador (0=fin)\n");
	unsigned long int numerador = GetNumero();
	while(numerador)
	{
		printf("\nDame el denominador\n");
		unsigned long int denominador = GetNumero();
		printf("\nDividendo: %ld\n", numerador);
		printf("Divisor..: %ld\n", denominador);
		unsigned long int cociente = 0;
		while(numerador >= denominador)
		{
			numerador -= denominador;
			cociente++;
		}
		printf("Cociente.: %ld\n", cociente);
		printf("Resto....: %ld\n", numerador);

		printf("\nDame otro numerador (0=fin)\n");
		numerador = GetNumero();
	}
	return(0);
}

Continuará ...

__________________________________________________________________
Programador, ávido de conocimiento y algo testarudo.
Gracias a todos los que comparten. Espero poder devolver el favor.


Más información sobre la lista de distribución Cconclase