//practica 07 de Programación.GºIngInform.UBu #define AUTHOR "Alberto Barriuso Gallo y David Cuesta Arnaiz" #define DATE "17/abr/12" //94978944858 #include #include #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. }