Ir ao conteúdo
  • Cadastre-se

maior e menor de 4 numeros


henriquerick

Posts recomendados

Boa noite pessoal

Estou cursando Ciência da computação e já no segundo dia de aula o professor lançou um desafio: imprimir o maior e menor entre 4 números, mas não pode utilizar nenhum comando de seleção (IF, SWITCH, condição ternária) ou repetição (FOR, WHILE, DO..WHILE). Alguém tem uma ideia de como pode ser feito isso?

Link para o comentário
Compartilhar em outros sites

Tendo dois números x e y, o maior é o resultado deste conjunto de operações F5Rua4D.gif:


x ^ ((x ^ y) & -(x < y))

Se fossem quatro números, o código aplicado para o primeiro e o segundo número forneceria o maior deles. Este com o terceiro número resultaria no maior dos três primeiros. Este com o quarto número forneceria o maior dos quatro.

Espero ter ajudado GbhmuXl.gif.

Link para o comentário
Compartilhar em outros sites

Muito obrigado rjj!! Deu certo aqui

Tendo dois números x e y, o maior é o resultado deste conjunto de operações F5Rua4D.gif:


x ^ ((x ^ y) & -(x < y))

Se fossem quatro números, o código aplicado para o primeiro e o segundo número forneceria o maior deles. Este com o terceiro número resultaria no maior dos três primeiros. Este com o quarto número forneceria o maior dos quatro.

Espero ter ajudado GbhmuXl.gif.

Rjj, você poderia explicar em detalhes essa fórmula? Eu não consegui entender essa conta

Link para o comentário
Compartilhar em outros sites

uma solução mais simples.

Você faz um for para percorrer o vetor, começando com uma variavel 'maior -> int = 0'

e dentro do for, verificar se um numero é maior que a propria variavel maior


if (vetor[i] > maior)
maior = vetor[i]

Pro menor você faz ao contrário.

Agora, caso esteja armazenando em 4 variáveis, vem a chamada gambiarra.

porém a variável maior continua...

e você faz o teste com as 4 variáveis.

ou seja

você declara a variável maior começando com zero


maior = 0;

e depois faz os testes


if (n1 > maior)
maior = n1;

e assim por diante até chegar o n4, ou seja, vai repetir o mesmo teste porém com as outras variáveis

pro menor... mesma coisa...

porém a variavel menor tera que começar com um valor digamos "absurdamente" alto

você declara a variável maior começando com zero


menor = 999999;

ou caso você queira deixar algo "melhor", após os testes com o número maior, a sua variável menor pode receber o número maior


menor = maior

ou a outra opção que é atribuir um valor alto para a variável menor

e depois faz os testes


if (n1 < menor)
menor = n1;

e assim por diante até chegar o n4, ou seja, vai repetir o mesmo teste porém com as outras variáveis

dai você ira ter que fazer esses ifs com todas as variáveis que você aloca os números (caso não esteja utilizando vetor)

Link para o comentário
Compartilhar em outros sites

uma solução mais simples.

Você faz um for para percorrer o vetor, começando com uma variavel 'maior -> int = 0'

e dentro do for, verificar se um numero é maior que a propria variavel maior


if (vetor[i] > maior)
maior = vetor[i]

Pro menor você faz ao contrário.

Agora, caso esteja armazenando em 4 variáveis, vem a chamada gambiarra.

porém a variável maior continua...

e você faz o teste com as 4 variáveis.

ou seja

você declara a variável maior começando com zero


maior = 0;

e depois faz os testes


if (n1 > maior)
maior = n1;

e assim por diante até chegar o n4, ou seja, vai repetir o mesmo teste porém com as outras variáveis

pro menor... mesma coisa...

porém a variavel menor tera que começar com um valor digamos "absurdamente" alto

você declara a variável maior começando com zero


menor = 999999;

ou caso você queira deixar algo "melhor", após os testes com o número maior, a sua variável menor pode receber o número maior


menor = maior

ou a outra opção que é atribuir um valor alto para a variável menor

e depois faz os testes


if (n1 < menor)
menor = n1;

e assim por diante até chegar o n4, ou seja, vai repetir o mesmo teste porém com as outras variáveis

dai você ira ter que fazer esses ifs com todas as variáveis que você aloca os números (caso não esteja utilizando vetor)

Não pode usar nenhum laço de repetição e comandos de seleção

Link para o comentário
Compartilhar em outros sites

uma solução mais simples.

Agora, caso esteja armazenando em 4 variáveis, vem a chamada gambiarra.

porém a variável maior continua...

e você faz o teste com as 4 variáveis.

ou seja

você declara a variável maior começando com zero


maior = 0;

e depois faz os testes


if (n1 > maior)
maior = n1;

e assim por diante até chegar o n4, ou seja, vai repetir o mesmo teste porém com as outras variáveis

pro menor... mesma coisa...

porém a variavel menor tera que começar com um valor digamos "absurdamente" alto

você declara a variável maior começando com zero


menor = 999999;

ou caso você queira deixar algo "melhor", após os testes com o número maior, a sua variável menor pode receber o número maior


menor = maior

ou a outra opção que é atribuir um valor alto para a variável menor

e depois faz os testes


if (n1 < menor)
menor = n1;

e assim por diante até chegar o n4, ou seja, vai repetir o mesmo teste porém com as outras variáveis

dai você ira ter que fazer esses ifs com todas as variáveis que você aloca os números (caso não esteja utilizando vetor)

Siga essa parte então.

Ou eu entendi que não pode usar nem IFS? é isso? se não segue essa citação que eu te expliquei antes

Link para o comentário
Compartilhar em outros sites

Muito obrigado rjj!! Deu certo aqui

Rjj, você poderia explicar em detalhes essa fórmula? Eu não consegui entender essa conta

Se naquela fórmula x for maior que y, tem-se:


x ^ ((x ^ y) & 0)

A operação bit a bit AND entre (x ^ y) e 0 equivale à multiplicação individual entre cada um de seus bits, conforme é aprendido em Álgebra de Boole. Como 0 ou 1 multiplicado por 0 é 0, o resultado seria um número composto apenas de bits 0, o número nulo F5Rua4D.gif:


x ^ 0

Pela tabela-verdade da operação XOR, o XOR de um valor lógico e 0 sempre é o próprio valor. Logo, chega-se a:


x

Que é o mesmo maior número.

Se y for maior que x, tem-se inicialmente:


x ^ ((x ^ y) & -1)

As máquinas atualmente utilizam uma técnica denominada complemento de dois para representar números negativos. Ela funciona de tal forma que uma variável que armazena o número -1 contém apenas bits 1 GbhmuXl.gif.

O valor lógico 1 é elemento neutro da operação AND. Então, vem:


x ^ (x ^ y)

Pela propriedade associativa da operação XOR, tem-se:


(x ^ x) ^ y

Pela tabela-verdade do XOR, quando os valores lógicos são iguais, o resultado é zero. Daí, vem F5Rua4D.gif:


0 ^ y

Novamente, pela tabela-verdade, o XOR de um número e 0 é o próprio número:


y

E esse, no caso, é o maior número.

Espero ter ajudado GbhmuXl.gif.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...