Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <string.h>
- int main(void)
- {
- int menu1;
- do{
- printf("--- CALCULADORA ---\n");
- printf("Escolha a base que o valor SE ENCONTRA:\n");
- printf("1. Binario\n");
- printf("2. Octal\n");
- printf("3. Decimal\n");
- printf("4. Hexadecimal\n");
- printf("0. Sair\n");
- setbuf(stdin, NULL);
- scanf("%d", &menu1);
- int submenu1;
- switch(menu1){
- /* BIN */
- case 1:
- printf("Escolha a base que o valor SERA CONVERTIDO:\n");
- printf("1. Octal\n");
- printf("2. Decimal\n");
- printf("3. Hexadecimal\n");
- printf("0. Voltar\n");
- setbuf(stdin, NULL);
- scanf("%d", &submenu1);
- switch(submenu1){
- /* OCT */
- case 1:
- {
- printf("Digite o valor em BIN: ");
- char valBase2[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase2);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase2) - 1; i >= 0; i--) {
- int digit = valBase2[i] - 48;
- int tmp = digit * pow(2, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- /* convertendo de decimal para octal */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 8) {
- int r = dividendo % 8;
- buffer[pos] = r + 48; /* ajusta o int de acordo com a tabela ASCII */
- pos++;
- dividendo = dividendo / 8;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase8[33];
- int j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase8[j] = buffer[i];
- }
- valBase8[j] = '\0';
- printf("%s (OCT)\n", valBase8);
- }
- break;
- /* DEC */
- case 2:
- {
- printf("Digite o valor em BIN: ");
- char valBase2[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase2);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase2) - 1; i >= 0; i--) {
- int digit = valBase2[i] - 48;
- int tmp = digit * pow(2, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- printf("%d (DEC)\n", valBase10);
- }
- break;
- /* HEX */
- case 3:
- {
- printf("Digite o valor em BIN: ");
- char valBase2[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase2);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase2) - 1; i >= 0; i--) {
- int digit = valBase2[i] - 48;
- int tmp = digit * pow(2, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- /* convertendo de decimal para hexadecimal */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 16) {
- int r = dividendo % 16;
- if(r <= 9) {
- buffer[pos] = r + 48;
- }
- else if(r <= 15) {
- buffer[pos] = r + 55;
- }
- pos++;
- dividendo = dividendo / 16;
- }
- if(dividendo <= 9) {
- buffer[pos] = dividendo + 48;
- }
- else if(dividendo <= 15) {
- buffer[pos] = dividendo + 55;
- }
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase16[33];
- int j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase16[j] = buffer[i];
- }
- valBase16[j] = '\0';
- printf("%s (HEX)\n", valBase16);
- }
- break;
- case 0:
- printf("Voltando...\n");
- break;
- default:
- printf("Opcao invalida!\n");
- }
- break;
- /* OCT */
- case 2:
- printf("Escolha a base que o valor SERA CONVERTIDO:\n");
- printf("1. Binario\n");
- printf("2. Decimal\n");
- printf("3. Hexadecimal\n");
- printf("0. Voltar\n");
- setbuf(stdin, NULL);
- scanf("%d", &submenu1);
- switch(submenu1){
- /* BIN */
- case 1:
- {
- printf("Digite o valor em OCT: ");
- char valBase8[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase8);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase8) - 1; i >= 0; i--) {
- int digit = valBase8[i] - 48;
- int tmp = digit * pow(8, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- /* convertendo de decimal para binário */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 2) {
- int r = dividendo % 2;
- buffer[pos] = r + 48; /* ajusta o int de acordo com a tabela ASCII */
- pos++;
- dividendo = dividendo / 2;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase2[33];
- int j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase2[j] = buffer[i];
- }
- valBase2[j] = '\0';
- printf("%s (BIN)\n", valBase2);
- }
- break;
- /* DEC */
- case 2:
- {
- printf("Digite o valor em OCT: ");
- char valBase8[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase8);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase8) - 1; i >= 0; i--) {
- int digit = valBase8[i] - 48;
- int tmp = digit * pow(8, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- printf("%d (DEC)\n", valBase10);
- }
- break;
- /* HEX */
- case 3:
- {
- printf("Digite o valor em OCT: ");
- char valBase8[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase8);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase8) - 1; i >= 0; i--) {
- int digit = valBase8[i] - 48;
- int tmp = digit * pow(8, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- /* convertendo de decimal para hexadecimal */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 16) {
- int r = dividendo % 16;
- if(r <= 9) {
- buffer[pos] = r + 48;
- }
- else if(r <= 15) {
- buffer[pos] = r + 55;
- }
- pos++;
- dividendo = dividendo / 16;
- }
- if(dividendo <= 9) {
- buffer[pos] = dividendo + 48;
- }
- else if(dividendo <= 15) {
- buffer[pos] = dividendo + 55;
- }
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase16[33];
- int j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase16[j] = buffer[i];
- }
- valBase16[j] = '\0';
- printf("%s (HEX)\n", valBase16);
- }
- break;
- case 0:
- printf("Voltando...\n");
- break;
- default:
- printf("Opcao invalida!\n");
- }
- break;
- /* DEC */
- case 3:
- printf("Escolha a base que o valor SERA CONVERTIDO:\n");
- printf("1. Binario\n");
- printf("2. Octal\n");
- printf("3. Hexadecimal\n");
- printf("0. Voltar\n");
- setbuf(stdin, NULL);
- scanf("%d", &submenu1);
- switch(submenu1){
- /* BIN */
- case 1:
- {
- printf("Digite o valor em DEC: ");
- int valBase10;
- setbuf(stdin, NULL);
- scanf("%d", &valBase10);
- /* convertendo de decimal para binário */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 2) {
- int r = dividendo % 2;
- buffer[pos] = r + 48; /* ajusta o int de acordo com a tabela ASCII */
- pos++;
- dividendo = dividendo / 2;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase2[33];
- int i, j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase2[j] = buffer[i];
- }
- valBase2[j] = '\0';
- printf("%s (BIN)\n", valBase2);
- }
- break;
- /* OCT */
- case 2:
- {
- printf("Digite o valor em DEC: ");
- int valBase10;
- setbuf(stdin, NULL);
- scanf("%d", &valBase10);
- /* convertendo de decimal para octal */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 8) {
- int r = dividendo % 8;
- buffer[pos] = r + 48; /* ajusta o int de acordo com a tabela ASCII */
- pos++;
- dividendo = dividendo / 8;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase8[33];
- int i, j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase8[j] = buffer[i];
- }
- valBase8[j] = '\0';
- printf("%s (OCT)\n", valBase8);
- }
- break;
- /* HEX */
- case 3:
- {
- printf("Digite o valor em DEC: ");
- int valBase10;
- setbuf(stdin, NULL);
- scanf("%d", &valBase10);
- /* convertendo de decimal para hexadecimal */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 16) {
- int r = dividendo % 16;
- if(r <= 9) {
- buffer[pos] = r + 48;
- }
- else if(r <= 15) {
- buffer[pos] = r + 55;
- }
- pos++;
- dividendo = dividendo / 16;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase16[33];
- int i, j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase16[j] = buffer[i];
- }
- valBase16[j] = '\0';
- printf("%s (HEX)\n", valBase16);
- }
- break;
- case 0:
- printf("Voltando...\n");
- break;
- default:
- printf("Opcao invalida!\n");
- }
- break;
- /* HEX */
- case 4:
- printf("Escolha a base que o valor SERA CONVERTIDO:\n");
- printf("1. Binario\n");
- printf("2. Octal\n");
- printf("3. Decimal\n");
- printf("0. Voltar\n");
- setbuf(stdin, NULL);
- scanf("%d", &submenu1);
- switch(submenu1){
- /* BIN */
- case 1:
- {
- printf("Digite o valor em HEX: ");
- char valBase16[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase16);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase16) - 1; i >= 0; i--) {
- int digit;
- if(valBase16[i] <= '9') {
- digit = valBase16[i] - 48;
- }
- else if(valBase16[i] >= 'A' && valBase16[i] < 'a') {
- digit = valBase16[i] - 55;
- }
- else {
- digit = valBase16[i] - 87;
- }
- int tmp = digit * pow(16, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- /* convertendo de decimal para binário */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 2) {
- int r = dividendo % 2;
- buffer[pos] = r + 48; /* ajusta o int de acordo com a tabela ASCII */
- pos++;
- dividendo = dividendo / 2;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase2[33];
- int j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase2[j] = buffer[i];
- }
- valBase2[j] = '\0';
- printf("%s (BIN)\n", valBase2);
- }
- break;
- /* OCT */
- case 2:
- {
- printf("Digite o valor em HEX: ");
- char valBase16[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase16);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase16) - 1; i >= 0; i--) {
- int digit;
- if(valBase16[i] <= '9') {
- digit = valBase16[i] - 48;
- }
- else if(valBase16[i] >= 'A' && valBase16[i] < 'a') {
- digit = valBase16[i] - 55;
- }
- else {
- digit = valBase16[i] - 87;
- }
- int tmp = digit * pow(16, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- /* convertendo de decimal para octal */
- char buffer[33]; /* precisão de 32 dígitos + EOS */
- int dividendo = valBase10;
- int pos = 0;
- while(dividendo >= 8) {
- int r = dividendo % 8;
- buffer[pos] = r + 48;
- pos++;
- dividendo = dividendo / 8;
- }
- buffer[pos] = dividendo + 48;
- pos++;
- buffer[pos] = '\0'; /* finaliza a string com o EOS (caracter terminador) */
- /* inverte o vetor */
- char valBase8[33];
- int j;
- for(i = strlen(buffer) - 1, j = 0; i >= 0; i--, j++) {
- valBase8[j] = buffer[i];
- }
- valBase8[j] = '\0';
- printf("%s (OCT)\n", valBase8);
- }
- break;
- /* DEC */
- case 3:
- {
- printf("Digite o valor em HEX: ");
- char valBase16[33]; /* precisão de 32 dígitos + EOS */
- setbuf(stdin, NULL);
- scanf("%s", valBase16);
- /* convertendo para a base decimal */
- int valBase10 = 0;
- int expoent = 0;
- int i;
- for(i = strlen(valBase16) - 1; i >= 0; i--) {
- int digit;
- if(valBase16[i] <= '9') {
- digit = valBase16[i] - 48;
- }
- else if(valBase16[i] >= 'A' && valBase16[i] < 'a') {
- digit = valBase16[i] - 55;
- }
- else {
- digit = valBase16[i] - 87;
- }
- int tmp = digit * pow(16, expoent);
- valBase10 = valBase10 + tmp;
- expoent = expoent + 1;
- }
- printf("%d (DEC)\n", valBase10);
- }
- break;
- case 0:
- printf("Voltando...\n");
- break;
- default:
- printf("Opcao invalida!\n");
- }
- break;
- case 0:
- printf("Saindo do menu...\n");
- break;
- default:
- printf("Opcao invalida!\n");
- }
- }while(menu1 != 0);
- printf("Sistema encerrado.\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement