//practica 07 de Programación.GºIngInform.UBu
#define AUTHOR "Alberto Barriuso Gallo y David Cuesta Arnaiz"
#define DATE "17/abr/12" //94978944858
#include<stdio.h>
#include<math.h>
#include "numero.h"
int main(){ //Funcion principal del programa.
int resultado,ok;
resultado=getInt(); //Pasamos el valor devuelto de la función a la variable resultado.
printf("\n ");
printfArabigo(resultado); //Llamada a la función printfArabigo.
printf("\n ");
ok = printf("%d",resultado); // Contamos el numero de caracteres impresos.
printf(" He escrito %d \n \n",ok);
return 0; //Retornamos 0 y fin de la funcion principal.
}
int getInt(){ //Iniciamos la funcion.
char c;
int ok,num,resultado; //Declaracion de variables tipo int.
ok=scanf("%d",&num); //Si lo primero que lee es un numero, lo guarda en la variable resultado.
resultado=num;
while (ok==0){ //Si lo que ha leido no es un numero lo guarda como caracter en la variable c.
scanf("%c",&c);
ok=scanf("%d",&num);
resultado=num;
}
return resultado; //Devuelve el resultado.
}
int printfArabigo(int num){ //Iniciamos la funcion.
int i,dig,ciclo,potencia,potencia2,punto=0,vueltas2; //Declaracion de variables tipo int.
char resultado; //Declaracion variable tipo char.
ciclo=num;
for (i=1; num != 0; i++){ //Bucle que lee los digitos.
num = num/10;
dig = i;
vueltas2= i;
}
//Algoritmo que se encarga de mostrar el numero y anadir puntos cada 3 digitos.
//El algoritmo se compone de hallar el numero con reglas de resto en divisiones y de anadir puntos.
for( ;dig>0;dig--){
//Hallamos el numero.
potencia=pow(10,dig); //Primero halla la potencia de base 10 segun los digitos que tenga el numero.
potencia2=potencia/10;
resultado=(((ciclo%potencia)/potencia2)+48); /*Realizamos el resto del numero y lo vamos separando en partes de un caracter entero
y le sumamos 48 para saber su equivalencia en la tabla ASCII*/
putchar(resultado); //Imprimimos como caracter ese digito de la parte entera.
punto++; //Saber cuantas vueltas da el bucle.
if(vueltas2%3==0){ //Si hay 3 o multiplo de 3 digitos.
if(punto%3==0 && dig !=1){ //Si llevamos 3 vueltas en el bucle y no es el ultimo digito.
putchar('.'); //Imprime el caracter '.'
}
}else{ //Si no es 3 o multiplo de 3 hay dos opciones que sea de 4 ó 5 cifras. Los restantes son derivados de estos.
if(vueltas2 == 5 || vueltas2==8 || vueltas2==11){
if((punto==2 || punto==5 ||punto ==8) && dig !=1){
putchar('.'); //Imprime caracter '.'
}
}
if(vueltas2== 4 || vueltas2==7 || vueltas2==10){
if((punto==1 || punto==4 || punto==7) && dig !=1 ){
putchar('.'); //Imprime caracter '.'
}
}
}
}
return 0; //Retorna 0 y fin de la funcion printfArabigo.
}
Comments