quinta-feira, 17 de janeiro de 2013

Teste seu conhecimento #1 (lógica de programação)

Desafio
Nos primórdios de 2007, quando estava começando a entrar no mundo da TI, em meio a tantos currículos enviados fui convidado para fazer uma entrevista em uma empresa que desenvolvia softwares em php. Nessa primeira entrevista, todos os candidatos ficavam na mesma sala e recebiam cada um, uma folha contendo 5 questões de lógica de programação e conhecimentos da linguagem (métodos, funções, etc). 

Dentre estas questões, teve uma que dificilmente vou esquecer, era uma pergunta simples mas que fugia do cotidiano. Lanço um desafio para aqueles que desejarem participar e ver em quantos comandos são capazes de resolves. Mas sem colar... hahaha

A Missão

A proposta deste desafio é:

Dada duas variáveis A e B, sendo A = 3 e B = 5, escreva um código, sem utilizar uma terceira variável, capaz de trocar o valor entre elas. Ao fim, as variáveis deverão ser iguais a: A = 5 e B = 3......

Ah sim! Daqui a UM mês irei divulgar o resultado, então há tempo de sobra.

Gostaria muito de receber sua contribuição. Obrigado. :D

45 comentários:

  1. $a = 3//valor inicial de A segundo o enunciado
    $b = 5//valor inicial de B segundo o enunciado
    $a = $a + $b//A passa a vale 8
    $b = $a - $b//B passar a valer 3
    $a = $a - $b//A passar a valer 5
    /* -- Problema Resolvido -- */

    ResponderExcluir
  2. Respostas
    1. É, ficou mais curto, mas em programação geralmente trabalhamos apenas com variáveis.
      Evitamos ao máximo usar constantes (números)
      Assim nos dá a possibilidade aproveitar o código.
      Não importando o valor de A e B, substituímos o valor de um pelo outro...:P

      Excluir
  3. hei patetas voçes estao errado acho eu porque a pergunda diz trocar de valor.

    ResponderExcluir
  4. dexan ajuda nhos=voçes pensa se nao soubecemos os valores como eh que trocavamos os valores

    ResponderExcluir
  5. Do While(A <= B)
    A += 1
    B -= 1
    EndDo

    ResponderExcluir
  6. int a = 3, b = 5;

    Console.WriteLine("A = " + a + " e B = " + b);


    if (a > b)
    {
    a -= b;
    b += a;
    }

    else
    {
    b -= a;
    a += b;

    b = a - b;
    }

    Console.WriteLine("A = "+a +" e B = "+b);
    Console.ReadLine();

    ResponderExcluir
  7. Acredito que o mais simples seja:

    B = B * A
    A = B / A
    B = B / A

    (Gilberto W. Alexandre)

    ResponderExcluir
  8. Java

    int A=3;
    int B=5;

    B = (B-A); // B recebe 5-3 = 2
    A = (A+B); // A recebe 3+2 = 5
    B = (A-B); // B recebe 5-2 = 3

    System.out.println("Valor de A: "+A+" valor de B: "+B);

    ResponderExcluir
  9. Este comentário foi removido pelo autor.

    ResponderExcluir
  10. Em linguagem C;


    #include

    int main (){

    int a,b;

    a=3;
    b=5;
    printf ("\n Valor de A inicialmente = %i\n",a);
    printf ("\n Valor de B inicialmente = %i\n\n",b);


    printf ("\n Agora invertendo valores");

    printf ("\nAgora vamos inverter os valores A= %i\n\n",a+2);
    printf ("\nAgora vamos inverter os valores B= %i\n\n",b-2);

    system ("pause");
    }

    ResponderExcluir
  11. O mais simples, e acho a resposta correta segundo o enunciado:

    A = 5;
    B = 3;

    Se a opção acima não vale, use essa:

    A = A + (B - A)

    B = B - (B - A)

    ResponderExcluir
    Respostas
    1. veja bem....
      fazendo a = a + (b-a) teremos... a = 5 + (3 - 5) => a = 5 - 2 => a = 3
      depois
      fazendo b = b - (b - a) teremos... b = 3 - (3 - 3) => b = 3 - 0 => b = 3

      logo nao chega-se à solução do problema...

      Excluir
  12. Respostas
    1. Eu apaguei mais irei retorna-la, este exemplo é diferente é posicionando o valor maior sempre na posição "A".

      public void TrocaValores()
      {
      const int digitoMaximo = 2;
      var sequenciaDigitada = new int [digitoMaximo];

      Console.WriteLine("A os Numeros a ser trocados.");
      for (int i = 0; i < digitoMaximo; i++)
      {
      string posicao = i == 0 ? "A" : "B";
      Console.WriteLine((i + 1)+ "º Posição" + " - " +(posicao));
      sequenciaDigitada[i] = Convert.ToInt32(Console.ReadLine());
      }
      if (sequenciaDigitada[0] < sequenciaDigitada[1])
      {
      sequenciaDigitada[0] = sequenciaDigitada[1];
      }
      if (sequenciaDigitada[1] > sequenciaDigitada[0])
      {
      sequenciaDigitada[1] = sequenciaDigitada[0];
      }

      Console.WriteLine("Posição: A = {0}, Posição: B = {1}", sequenciaDigitada[0], sequenciaDigitada[1]);
      Console.ReadLine();
      }

      Deixarei este exemplo aqui caso alguém interesse.
      Passei o exemplo da pergunta logo a abaixo.

      Excluir
  13. Muito simples Jovem segue o exemplo:
    public void TrocaValores()
    {
    int a = 5;
    int b = 3;

    if (a < b)
    {
    a = b;
    }
    if (b > a)
    {
    b = a;
    }

    Console.WriteLine("Posição: A = {0}, Posição: B = {1}", a, b);
    Console.ReadLine();
    }

    ResponderExcluir
  14. Explicando meu raciocínio:

    A - 3
    B - 5

    A = A + B

    A - 8
    B - 5

    B = A - B

    A - 8
    B - 3

    A = A - B

    A - 5
    B - 3

    ResponderExcluir
  15. #include

    int main(){

    int a = 3, b= 5;

    printf("valor de a: e valor de b:");
    scanf("%i %i",&a, &b);

    printf("valor de a: %i e valor de b: %i \n",a,b);
    system("pause >> 0");

    }

    ResponderExcluir
  16. Segue solução

    A=(B+B+B)/A
    A=(5+5+5)/3
    A=5

    B=(B+B+B)/B

    B=(5+5+5)/5
    B=3

    ResponderExcluir
  17. Utilizando bytewise (qualquer linguagem)..

    A ^= B
    B ^= A
    A ^= B

    Pronto.. :)

    ResponderExcluir
  18. public static void main(String[] args) {

    int a = 3;
    int b = 5;

    a = a + b; // 3+5=8
    b = a - b; // 8-5=3
    a = a - b; // 8-3=5

    System.out.println("a = " + a + "\n" + "b = " + b);

    }
    }

    ResponderExcluir
  19. A forma que muita gente pensou, e que é bem curta e simples é essa:
    #include
    using namespace std;

    int main() {
    int a = 8;
    int b = 15;

    a = b-a;
    b = b-a;
    a = b+a;

    cout<<"\na = "<<a;
    cout<<"\nb = "<<b;
    return 0;
    }

    ResponderExcluir
  20. Qualquer linguagem:
    a = b-a;
    b = b-a;
    a = b+a;

    ResponderExcluir
  21. em java

    int a = 3
    int b = 5

    a = b
    b = a-2

    ResponderExcluir
  22. """
    Fiz em Python
    """
    #Versão de Paulo Cão

    A, B = 3, 5
    A = B
    B = A-2
    print("A variável (A) vale", A,"e a variável (b) vale", B,)

    ResponderExcluir
  23. Este comentário foi removido pelo autor.

    ResponderExcluir
  24. int a=3;
    int b=5;
    System.out.println("Variavel a adiciona 2 " +(a+2));
    System.out.println("Variavel b subtrai 2 " +(b-2));

    ResponderExcluir
  25. Mais simples que python nâo tem:
    A, B = 3, 5
    B, A = A, B

    ResponderExcluir
  26. Mais correto e prático que achei foi o código do (Gilberto W. Alexandre), pois não importa a mudança de valores de A e B, sendo assim sempre A=B, e B=A.

    ResponderExcluir
  27. int a = 10;
    int b = 20;

    a = a * b;
    b = a / b;
    a = a / b;

    System.out.println(a);
    System.out.println(b);

    ResponderExcluir
  28. int a=3,b=5;
    a = (a+b)-a;
    b = (a+a+a)/b;
    System.out.println(a+" "+b);

    JAVA

    ResponderExcluir

  29. public class Logica {

    public static void main(String[] args) {

    int A = 3;
    int B = 5;

    if (A == 3 && B == 5){
    A = 5;
    B= 3;

    }
    System.out.println("A= " + A);
    System.out.println("B= " + B);

    }

    }

    ResponderExcluir
  30. public class Logica {

    public static void main(String[] args) {

    int A = 3;
    int B = 5;


    A=A+B
    B=A-B
    A=A-B

    System.out.println("A= " + A);
    System.out.println("B= " + B);
    }
    }

    ResponderExcluir
  31. import java.util.Scanner;

    public class Teste_1 {

    int a;
    int b;

    public void troca(int a, int b) {
    this.a = b;
    this.b = a;
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner scan = new Scanner(System.in);
    Teste_1 teste = new Teste_1();

    System.out.println("Digite o valor de a : ");
    int a = scan.nextInt();
    System.out.println("Digite o valor de b : ");
    int b = scan.nextInt();

    teste.a = a;
    teste.b = b;

    System.out.println("Valor real\n");
    System.out.println("a = " + teste.a);
    System.out.println("b = " + teste.b);


    teste.troca(teste.a, teste.b);

    System.out.println("\n\nValor depois\n");
    System.out.println("a = " + teste.a);
    System.out.println("b = " + teste.b);

    }

    }

    ResponderExcluir
  32. A = B + A // A = 8
    B = A - B // B = 3
    A = A - B // A = 5

    ResponderExcluir