Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

[Ajuda] Exercício em C

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ [Ajuda] Exercício em C

    E aí galera, é o seguinte, to fazendo um exercício onde pede para fazer um programa que peça a usuário que digite um número e imprima a ordem inversa dele. Exemplo: 132, e transformá-lo em 231.

    Mas, até agora no curso não se falou de vetores, é o próximo assunto. Tem algum jeito de fazer isso sem usar vetores?

    Como vocês podem ver, eu fiz um código porém é muito "Manual", dá pra ir adicionando "if" até o máximo que o tipo int pode aguentar, só que isso exige muito código e não é muito "funcional", entretanto, se vocês notarem os "if", eles apresentam um padrão no aumento, vou ver depois se é possível utilizar esse padrão para "automatizar" o processo sem adicionar tanto "if":

    Código:
    #include <stdio.h>
    
    int inverso (int x) {
        int x1, x2, x3, x4, x5;
    
        if (x < 10) {
            printf("\n%d", x);
        } else if (x >= 10 && x < 100) {
            x1 = x % 10;
            x2 = (x - x1) / 10;
            printf("\n%d%d", x1, x2);
        } else if (x >= 100 && x < 1000) {
            x1 = x % 10;
            x2 = ((x % 100) - x1) / 10;
            x3 = (x - x1 - x2) / 100;
            printf("\n%d%d%d", x1, x2, x3);
        } else if (x >= 1000 && x < 10000) {
            x1 = x % 10;
            x2 = ((x % 100) - x1) / 10;
            x3 = ((x % 1000) - x1 - x2) / 100;
            x4 = (x - x1 - x2 - x3) / 1000;
            printf("\n%d%d%d%d", x1, x2, x3, x4);
        } else if (x >= 10000 && x < 100000) {
            x1 = x % 10;
            x2 = ((x % 100) - x1) / 10;
            x3 = ((x % 1000) - x1 - x2) / 100;
            x4 = ((x % 10000) - x1 - x2 - x3) / 1000;
            x5 = (x - x1 - x2 - x3 - x4) / 10000;
            printf("\n%d%d%d%d%d", x1, x2, x3, x4, x5);
        }
    }
    
    int main () {
        int x;
        printf("Digite um numero: ");
        scanf("%d", &x);
        inverso(x);
    }
    Last edited by Cougar; 19-02-2016, 13:09. Motivo: Segundo post mesclado;

  • Font Size
    #2
    Olá, devo dizer que não sei nada de C mas trazendo experiencia de outras linguagens de programação, e com algumas pesquisas, note o seguinte:

    Ao armazenar um texto em um array desta forma

    Código:
    char a[100] = "hello";
    Você pode obter os caracteres de forma separada, pois na verdade o que acontece por trás desse armazenamento é isso:

    Código:
    a[0] = 'h';
    a[1] = 'e';
    a[2] = 'l';
    a[3] = 'l';
    a[4] = 'o';
    a[5] = '\0';
    Logo, para obter o inverso do texto, basta reescrever o a[x] de forma inversa com alguma repetição:

    Código:
    int i;
    	
    for( i = 4; a > -1; i = i - 1 ){
        printf("a: %d\n", a[i]);
    }
    O que estamos fazendo é utilizar uma repetição for, que vai do valor i até -1, de forma decrescente (pois queremos de trás para frente), e onde i é o ponto final do texto. Depois, utilizamos o próprio valor de i (4, depois 3, 2...) para retornar o valor no array a[i].


    Espero que entenda a ideia do negócio e possa executar melhor que eu.

    Boa sorte.

    Comment


    • Font Size
      #3
      E aí Cougar, eu entendi a forma que você passou. É que, tipo, como não foi passado sobre arrays ainda no curso, eu tentei imaginar se houvesse alguma forma de fazer isso sem eles, mas acho que não dá não, creio que só pelo método "manual" mesmo, com algum limite de testes condicionais.
      Valeu aí!

      Comment


      • Font Size
        #4
        Pra inverter um INT você tem que dividir por 10, pegar o resto da divisão e jogar em outro INT, e depois multiplicar esse outro int por 10.

        ex:

        Numero digitado N = 321


        331/10 = 33 e tem resto 1
        N = 33
        N_inverso = N_inverso * 10 + (resto que é 1)
        N_inverso = 1

        33/10 = 3 e tem 3 de resto 3
        N = 3
        N_inverso =1 * 10 + (resto que é 3)
        N_inverso = 13

        3/10 = 0 e tem resto 1
        N = 0
        N_inverso = 13 * 10 + (resto que é 3)
        N_inverso = 133


        Deu pra entender?


        Código:
        #include <stdio.h>
        #include <stdlib.h>
        
        int main() {
          int N, x = 0, i;
        
          printf("Digite o Numero: ");
          scanf("%d", &N);
        
          while( N > 0) {
            x = (x * 10) + N % 10;
            N = N / 10;
          }
        
          printf("\nNumero invertido: %d", x);
          system("pause");
          return 0;
        }
        __________________________________________________ ____
        Quem pensa antes tem tempo pra pensar, pois não precisa pensar durante ou depois.

        Comment


        • Font Size
          #5
          oric, sua lógica é muito boa cara, parabéns. Valeu aí!

          Comment

          X
          Working...
          X