Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.cpp
- * Author: Juanjose Tenorio
- *
- * Created on 30 de agosto de 2014, 10:22 AM
- */
- #include <cstdlib>
- #include <cstdio>
- using namespace std;
- int cont=0;int cp=0;int cc=0;
- typedef struct tfecha{
- int dd;
- int mm;
- int aa;
- }fecha;
- typedef struct thora{
- int h;
- int m;
- int s;
- }hora;
- void Obtener_Nombre(){
- char digit='-';
- while(digit!=' '){
- digit=getchar();
- if(digit!=' ' && digit!='\n') printf("%c",digit);
- }
- printf(" ");
- while(digit==' '){
- digit=getchar();
- }
- while(digit!=' '){
- if(digit!=' ' && digit!='\n') printf("%c",digit);
- digit=getchar();
- }
- printf(" ");
- while(digit==' '){
- digit=getchar();
- }
- while(digit!=' '){
- if(digit!=' ' && digit!='\n') printf("%c",digit);
- digit=getchar();
- }
- printf(" ");
- while(!(digit<='9' && digit>='0')){
- digit=getchar();
- if(digit!=' ' && !(digit<='9' && digit>='0') && digit!='\n' ) printf("%c",digit);
- }
- printf(" Telefono: ");
- // printf(" ");
- //consigo el codigo del pais y ciudad
- int t=1;int num=0;int k=1;
- //saco codigo del pais
- cp=(digit-'0')*10;printf("%c",digit);digit=getchar();
- cp+=(digit-'0');printf("%c",digit);
- //saco codigo de ciudad
- digit=getchar(); cc+=(digit-'0');
- digit=getchar();
- if(digit!='-') cc=(cc*10) + (digit-'0');
- printf("%d ",cc);digit=getchar();
- //telefono en si
- while(digit!=' '){
- if(digit!='-') {printf("%c",digit);cont++;}
- digit=getchar();
- }
- }
- int sacar_ndigitos(int n){
- int cont=1;
- if (n<10) return 1;
- else{
- while(n>10){
- n=n/10;cont++;
- }
- return cont;
- }
- }
- int sacar_continente(int n){
- if(n>=1 && n<=50) return 1;
- else if( n>50 && n<=120) return 2;//europa
- else return 3;
- }
- bool esta(fecha f,fecha in,fecha fin){
- if( in.aa<=f.aa && f.aa<=fin.aa){
- if(f.aa==in.aa){
- if(f.mm>=in.mm){
- if(f.mm==in.mm){
- if(f.dd>in.dd){
- return true;
- }else return false;
- }else return true;
- }else return false;
- }else if(f.aa==fin.aa){
- if(f.mm<=fin.mm){
- if(f.mm==fin.mm){
- if(f.dd<fin.dd) return true;
- else return false;
- }else return true;
- }else return false;
- }else{
- return false;
- }
- }else{
- return false;
- }
- }
- bool nohora(hora f,hora in,hora l1,hora l2){
- bool ac1=false;bool ac2=false;
- if(f.h<l1.h) return false;
- else if(f.h>=l1.h){
- if(f.h==l1.h){
- if(f.m>=l1.m){
- if(f.m==l1.m){
- if(f.s>l1.s){
- ac1=true;
- }else return false;
- }else ac1=true;
- }else return false;
- }else ac1=true;
- }
- if(in.h>l2.h) return false;
- else if(in.h<=l2.h){
- if(in.h==l2.h){
- if(in.m<=l2.m){
- if(in.m==l2.m){
- if(in.s<l2.s){
- ac2=true;
- }else return false;
- }else ac2=true;
- }else return false;
- }else ac2=true;
- }
- return true;
- }
- int main(int argc, char** argv) {
- float ta,te,tas,fac;char car,digit;fecha f;int t,s,con,aux,ccp,ccc,ndig,p1,p2,p3;
- scanf("%f %f %f",&ta,&te,&tas);int p4,p5;
- bool final=false;bool ffec=false;bool nuev=false;hora st,ft;
- float subt,tot,cost;
- fecha in,fin;hora inh,finh;
- scanf("%d/%d/%d",&in.dd,&in.mm,&in.aa);scanf("%d/%d/%d",&fin.dd,&fin.mm,&fin.aa);
- scanf("%d:%d:%d",&inh.h,&inh.m,&inh.s);scanf("%d:%d:%d",&finh.h,&finh.m,&finh.s);
- printf("Tarifas Base:\n");
- printf(" America Europa Asia\n");
- printf(" %.7f %.7f %.7f\n",ta,te,tas);
- while(!final){
- printf("------------------------------------------------------\n");
- printf("------------------------------------------------------\n");
- printf("Usuario: ");
- tot=0.0;
- cc=0;cont=0;cp=0;
- nuev=false;
- Obtener_Nombre();
- printf("\n");
- //una vez leido el usuario y telefono , procedemos con las fechas
- t=scanf("%d/%d/%d",&f.dd,&f.mm,&f.aa);
- while(t!=0 && t!=EOF){
- if(!esta(f,in,fin)){printf("\n");t=scanf("%d/%d/%d",&f.dd,&f.mm,&f.aa);continue;}
- ffec=false;subt=0.0;
- printf("%d/%d/%d: ",f.dd,f.mm,f.aa);
- //printf("\n");
- printf("Telefono Nombre Inicio Fin Factor Costo\n");
- //printf("\n");
- s=scanf("%d-%d",&p4,&p5);
- while(s!=0 && s!=EOF){
- printf(" %d %d",p4,p5);
- digit=' ';
- printf(" ");
- while(digit==' '){
- digit=getchar();
- }
- while(digit!=' '){
- if(digit!=' ' && digit!='\n') printf("%c",digit);
- digit=getchar();
- }
- printf(" ");
- while(digit==' '){
- digit=getchar();
- }
- while(digit!=' '){
- if(digit!=' ' && digit!='\n') printf("%c",digit);
- digit=getchar();
- }
- printf(" ");
- while(digit==' '){
- digit=getchar();
- }
- while(digit!=' '){
- if(digit!=' ' && digit!='\n') printf("%c",digit);
- digit=getchar();
- }
- printf(" ");
- while(!(digit<='9' && digit>='0')){
- digit=getchar();
- if(digit!=' ' && !(digit<='9' && digit>='0') && digit!='\n' ) printf("%c",digit);
- }
- printf(" %c",digit);aux=(digit-'0')*10;
- digit=getchar();aux+=(digit-'0');printf("%c",digit);
- st.h=aux;
- aux=scanf(":%d:%d",&p1,&p2);
- if(aux==1){ printf(":%d",p1);st.m=p1;st.s=0;}
- else {printf(":%d:%d",p1,p2);st.m=p1;st.s=p2;}
- aux=scanf("%d:%d:%d",&p1,&p2,&p3);
- if(aux==2){ printf(" %d:%d",p1,p2);ft.h=p1;ft.m=p2;ft.s=0;}
- else{ printf(" %d:%d:%d",p1,p2,p3);ft.h=p1;ft.m=p2;ft.s=p3;}
- if(!nohora(st,ft,inh,finh)){
- s=scanf("%d-%d",&p1,&p2);
- if(s==EOF){
- tot+=subt;
- printf("Subtotal consumido : %.3f\n",subt);
- printf("total consumido : %.3f\n",tot);
- tot=0;
- final=true;
- break;
- }
- if(s==1){
- //encontré solo fecha
- ffec=true;f.dd=p1;
- scanf("/%d/%d",&f.mm,&f.aa);
- t=1;
- printf("Subtotal consumido : %.3f\n",subt);
- tot+=subt;
- break;
- }else if(s==0){
- //No cncontre nada, lo que significa que es
- //un nuevo usuario
- nuev=true;s=scanf("%d-%d",&p1,&p2);
- if(s==EOF){
- tot+=subt;
- printf("Subtotal consumido : %.3f\n",subt);
- printf("total consumido : %.3f\n",tot);
- tot=0;
- final=true;
- break;
- }
- if(s==1){
- //encontré solo fecha
- ffec=true;f.dd=p1;
- scanf("/%d/%d",&f.mm,&f.aa);
- t=1;
- printf("Subtotal consumido : %.3f\n",subt);
- tot+=subt;
- break;
- }else if(s==0){
- //No cncontre nada, lo que significa que es
- //un nuevo usuario
- nuev=true;tot+=subt;
- printf("Subtotal consumido : %.3f\n",subt);
- printf("total consumido : %.3f\n",tot);
- tot=0;
- break;
- }else{continue;}
- break;
- }else{continue;}
- }
- scanf("%f",&fac);
- printf(" %.3f",fac);
- //proceso de calculo del porcentaje de cobro
- //saco codigo de pais
- ccp=p4/100;
- //saco codigo de ciudad
- ccc=p4%100;
- //saco el numero de digitos dep2
- ndig=sacar_ndigitos(p5);
- /*proceso de comparacion*/
- if(ccp==cp && ccc==cc){//coincide pais y ciudad
- cost=0;
- }else if(ccp==cp){
- //averigua de que continente es
- con=sacar_continente(ccp);
- if(con==1) cost=ta;
- else if(con==2) cost=te;
- else cost=tas;
- if(cont!=ndig) cost=cost*float(115/100);
- }else{//diferente pais
- con=sacar_continente(ccp);
- if(con==1) cost=ta*fac;
- else if(con==2) cost=te*fac;
- else cost=tas*fac;
- if(cont!=ndig) cost=cost*float(115/100);
- }
- /*proceso de impresion*/
- printf(" %.3f\n",cost);
- subt+=cost;
- //comienzo revisando si hay telefono,fecha o EOF
- s=scanf("%d-%d",&p1,&p2);
- if(s==EOF){
- tot+=subt;
- printf("Subtotal consumido : %.3f\n",subt);
- printf("total consumido : %.3f\n",tot);
- tot=0;
- final=true;
- break;
- }
- if(s==1){
- //encontré solo fecha
- ffec=true;f.dd=p1;
- scanf("/%d/%d",&f.mm,&f.aa);
- t=1;
- printf("Subtotal consumido : %.3f\n",subt);
- tot+=subt;
- break;
- }else if(s==0){
- //No cncontre nada, lo que significa que es
- //un nuevo usuario
- nuev=true;tot+=subt;
- printf("Subtotal consumido : %.3f\n",subt);
- printf("total consumido : %.3f\n",tot);
- tot=0;
- break;
- }else{continue;}
- }
- if(final) break;
- if(nuev)break;//nuevo usuario
- }
- if(t==EOF) {final=true;break;}
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement