rambo189619

P07

May 2nd, 2012
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.82 KB | None | 0 0
  1. //practica 07 de Programación.GºIngInform.UBu
  2. #define AUTHOR "Alberto Barriuso Gallo y David Cuesta Arnaiz"
  3. #define DATE "17/abr/12" //94978944858
  4. #include<stdio.h>
  5. #include<math.h>
  6. #include "numero.h"
  7.  
  8.  
  9. int main(){                            //Funcion principal del programa.
  10.   int resultado,ok;    
  11.   resultado=getInt();                  //Pasamos el valor devuelto de la función a la variable resultado.
  12.   printf("\n ");
  13.   printfArabigo(resultado);            //Llamada a la función printfArabigo.
  14.   printf("\n ");
  15.   ok = printf("%d",resultado);         // Contamos el numero de caracteres impresos.
  16.   printf("  He escrito %d \n \n",ok);
  17.  
  18.  
  19. return 0;                              //Retornamos 0 y fin de la funcion principal.
  20. }
  21.  
  22. int getInt(){                          //Iniciamos la funcion.
  23.   char c;
  24.   int ok,num,resultado;                //Declaracion de variables tipo int.
  25.  
  26.   ok=scanf("%d",&num);                 //Si lo primero que lee es un numero, lo guarda en la variable resultado.
  27.   resultado=num;
  28.  
  29.   while (ok==0){                       //Si lo que ha leido no es un numero lo guarda como caracter en la variable c.
  30.     scanf("%c",&c);
  31.     ok=scanf("%d",&num);              
  32.     resultado=num;
  33.   }
  34. return resultado;                      //Devuelve el resultado.
  35. }
  36.  
  37.  
  38. int printfArabigo(int num){                           //Iniciamos la funcion.
  39. int i,dig,ciclo,potencia,potencia2,punto=0,vueltas2;  //Declaracion de variables tipo int.
  40. char resultado;                                       //Declaracion variable tipo char.
  41.   ciclo=num;
  42.  
  43.   for (i=1; num != 0; i++){                           //Bucle que lee los digitos.
  44.       num = num/10;
  45.       dig = i;
  46.       vueltas2= i;
  47.       }
  48.                                                       //Algoritmo que se encarga de mostrar el numero y anadir puntos cada 3 digitos.
  49.                                                       //El algoritmo se compone de hallar el numero con reglas de resto en divisiones y de anadir puntos.
  50.  for( ;dig>0;dig--){                                  
  51.                                                       //Hallamos el numero.
  52.       potencia=pow(10,dig);                           //Primero halla la potencia de base 10 segun los digitos que tenga el numero.
  53.       potencia2=potencia/10;                          
  54.       resultado=(((ciclo%potencia)/potencia2)+48);    /*Realizamos el resto del numero y lo vamos separando en partes de un caracter entero
  55.                                                        y le sumamos 48 para saber su equivalencia en la tabla ASCII*/
  56.       putchar(resultado);                             //Imprimimos como caracter ese digito de la parte entera.
  57.       punto++;                                        //Saber cuantas vueltas da el bucle.
  58.       if(vueltas2%3==0){                              //Si hay 3 o multiplo de 3 digitos.
  59.         if(punto%3==0 && dig !=1){                    //Si llevamos 3 vueltas en el bucle y no es el ultimo digito.
  60.           putchar('.');                               //Imprime el caracter '.'
  61.         }
  62.       }else{                                          //Si no es 3 o multiplo de 3 hay dos opciones que sea de 4 ó 5 cifras. Los restantes son derivados de estos.
  63.      
  64.           if(vueltas2 == 5  || vueltas2==8 || vueltas2==11){
  65.             if((punto==2 || punto==5 ||punto ==8) && dig !=1){
  66.               putchar('.');                           //Imprime caracter '.'
  67.             }
  68.           }
  69.           if(vueltas2== 4 || vueltas2==7 || vueltas2==10){
  70.             if((punto==1 || punto==4 || punto==7) && dig !=1 ){
  71.               putchar('.');                           //Imprime caracter '.'
  72.             }  
  73.           }
  74.      
  75.          }
  76.                
  77.   }
  78.  
  79. return 0;                                             //Retorna 0 y fin de la funcion printfArabigo.
  80. }
Advertisement
Add Comment
Please, Sign In to add comment