rambo189619 icon

P07

rambo189619 | PRO | 05/02/12 04:55:56 PM UTC | 0 ⭐ | 204 👁️ | Never ⏰ | []
C |

3.82 KB

|

None

|

0 👍

/

0 👎

//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