How to convert percentages to C?

Asked

Viewed 708 times

2

I tried to make a program to convert percentages from days to weeks, months, year, etc. However it is not working, this is the code as it is now, I do not know what the error is.

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main(){

setlocale(LC_ALL,"");

int pct1, tmp1, tmp2;

double pct2=0, dec1=0, dec2=0;

printf("Olá, bem-vindo ao programa para transformar porcentagens.");
printf("\nEste programa irá calcular a porcentagem dada em um período para outra em outro período de tempo maior ou menor.");
printf("\nPor favor insira a porcentagem original: ");
scanf("%d", &pct1);
printf("\nE o tempo original, de acordo com os índices indicados: ");
printf("\n1.Dia");
printf("\n2.Semana");
printf("\n3.Mês");
printf("\n4.Bimestre");
printf("\n5.Trimestre");
printf("\n6.Semestre");
printf("\n7.Ano\n");
scanf("%d", &tmp1);
printf("Digite o tempo para qual deseja que a porcentagem seja convertida, de acordo com os índices indicados: ");
printf("\n1.Dia");
printf("\n2.Semana");
printf("\n3.Mês");
printf("\n4.Bimestre");
printf("\n5.Trimestre");
printf("\n6.Semestre");
printf("\n7.Ano\n");
scanf("%d", &tmp2);

if(tmp1>7 || tmp1<1 || tmp2>7 || tmp2<1 || tmp1==tmp2){
    printf("Erro. Valores Inválidos.");
}else if((tmp1==1 && tmp2==1) || (tmp1==2 && tmp2==2) || (tmp1==3 && tmp2==3) || (tmp1==4 && tmp2==4) || (tmp1==5 && tmp2==5) || (tmp1==6 && tmp2==6) || (tmp1==7 && tmp2==7)){
    printf("Os valores dos tempos são iguais. A porcentagem será a mesma.");
}else if(tmp1==1 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 7))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==1 && tmp2==3){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 30))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==1 && tmp2==4){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 60))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==1 && tmp2==5){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 90))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==1 && tmp2==6){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 180))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==1 && tmp2==7){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 360))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==2 && tmp2==1){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, (1/7)))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==2 && tmp2==3){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 4))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==2 && tmp2==4){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 9))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==2 && tmp2==5){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 13))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==2 && tmp2==6){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 26))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==2 && tmp2==7){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 52))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==3 && tmp2==1){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.03333333))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==3 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.25))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==3 && tmp2==4){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 2))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==3 && tmp2==5){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 3))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==3 && tmp2==6){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 6))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==3 && tmp2==7){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=(pow(dec2, 12)-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==4 && tmp2==1){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.01666667))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==4 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.125))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==4 && tmp2==3){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.5))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if (tmp1==4 && tmp2==5){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 1.5))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==4 && tmp2==6){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 3))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==4 && tmp2==7){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 6))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==5 && tmp2==1){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.01111111))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==5 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.07692308))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==5 && tmp2==3){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.33333333))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==5 && tmp2==4){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.66666667))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==5 && tmp2==6){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 2))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==5 && tmp2==7){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 4))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==6 && tmp2==1){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.00555556))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==6 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.03846154))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==6 && tmp2==3){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.16666667))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==6 && tmp2==4){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.33333333))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==6 && tmp2==5){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.5))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==6 && tmp2==7){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 2))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==7 && tmp2==1){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.00277778))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==7 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.01923077))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==7 && tmp2==3){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.08333333))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==7 && tmp2==4){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.16666667))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==7 && tmp2==5){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.25))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}else if(tmp1==7 && tmp2==6){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 0.5))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}

return 0;
}
  • 3

    A lot of code and a lot of variable name that only you know what it means could isolate the problem? http://answall.com/help/mcve

1 answer

1

This is not an answer - I don’t have a reputation for comment yet: it’s just a comment. Your code is very pasty and redundant. I suggest that, first of all, you take the time to reform it. For example, there is no need to keep repeating printf("A nova porcentagem é %lf.", pct2);. Besides, all the if (...) else if (...) else (...)are not a good practice of programming.

For now, I find something very complicated. For example, instead of:

else if(tmp1==1 && tmp2==2){
    dec1=pct1/100;
    dec2=1+dec1;
    pct2=((pow(dec2, 7))-1)*100;
    printf("A nova porcentagem é %lf.", pct2);
}

just write:

else if(tmp1==1 && tmp2==2){
   pct2=1/7*100;
   printf("A nova percentagem é: %f",pct2);
 }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.