Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //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.
- }
Advertisement
Add Comment
Please, Sign In to add comment