Troca de Valores Entre Variáveis

22/02/2004

0

Olá pessoal, preciso desenvolver um algoritmo de troca de valores entre duas variaveis, ex.:
A = 1
B = 2
mudar para
A = 2
B = 1
.............
Seria simples se eu pudesse usar uma terceira variavel ou entao um operador XOR, mas eu nao posso.
Então preciso trocar os valores sem auxilio dos itens acima. Diz meu professor que resolve-se matematicamente. Alguem ai poderia me ajudar?
Abraços


Lucianobarreto

Lucianobarreto

Responder

Posts

22/02/2004

Jasig Aurumalfa

Faça o seguinte esquema:
A:=A+1
e
B:=B-1
Espero ter ajudado...


Responder

22/02/2004

Ildefonso

Olá, Luciano...

Logicamente, a resposta do Jasig não vai servir se os números forem:[list:088a855f56]A = 5
B = 3[/list:u:088a855f56]
Mas o problema é: você já tentou resolver quanto?
Pareço até o cara das Casas Bahia (pena que não ganho o que ele ganha).

Eu já desenvolvi o ´pobrema´ e uma ´soluçation´. Gostaria de ver o que você já imaginou, para saber se, como professor, também, devo lhe ajudar em uma tarefa tão básica ou devo deixá-lo suar mais um tempo.

Está valendo nota? Quanto?

:wink:


Responder

22/02/2004

Marco Salles

Olá pessoal, preciso desenvolver um algoritmo de troca de valores entre duas variaveis, ex.: A = 1 B = 2 mudar para A = 2 B = 1 ............. Seria simples se eu pudesse usar uma terceira variavel ou entao um operador XOR, mas eu nao posso. Então preciso trocar os valores sem auxilio dos itens acima. Diz meu professor que resolve-se matematicamente. Alguem ai poderia me ajudar? Abraços


Faça Um Alguritimo Com as Quatro Instruções Abaixo Seguidas
1) A=A+B====Novo Valor De A=3
2) B=B+A====Novo Valor De B=5
3) A=B- A====Novo Valor De A=2
4) B=B-2*A===Novo Valor De B=1 



Responder

22/02/2004

Ildefonso

Ôôôô, Marco...
Não era para entregar tão fácil a tarefa do Luciano.

Gostei da sua solução. Eu havia imaginado uma com três operações e não quatro. Mas usando operadores de multiplicação e divisão. Acho que a sua deve ser mais rápida para o processador, em casos de muitas repetições.

Muito bom. 8)


Responder

22/02/2004

Marco Salles

Faça Um Alguritimo Com as Tres Instruções Abaixo Seguidas 
1) A=A*B====Novo Valor De A=2 
2) B=B/A====Novo Valor De B=1 
3) A=A/B====Novo Valor De A=2


Obs:Algoritimo Vale Somente Se A E B <> ZERO


Responder

22/02/2004

Marco Salles

Correção : Algoritmo Vale Do Jeito Que Foi Postado , Somente Se A OU B
Forem <> Zero


Responder

22/02/2004

Beppe

[quote:296661acea=´Marco Salles´]Correção : Algoritmo Vale Do Jeito Que Foi Postado , Somente Se A OU B
Forem <> Zero[/quote:296661acea]
E Addr(A) <> Addr(B).

Com uma instrução a menos:
X := X + Y;
Y := X - Y;
X := X - Y;


Parecem haver várias soluções para o problema, mas a única correta é introduzindo uma variável auxiliar. Devido ao [i:296661acea]aliasing[/i:296661acea], outras soluções não funcionam. Explico melhor:

A := A xor B;
B := A xor B;
A := A xor B;


O código acima não funciona quando A e B referem ao mesmo local na memória. Isto se chama aliasing, introduzido através da diretiva [b:296661acea]absolute[/b:296661acea], ponteiros, e call-by-reference em parâmetros de funcões.

Se quisermos uma função pra uso geral, poderiamos ter isso:

procedure TrocaInt(var X, Y: Integer);
begin
  X := X xor Y;
  Y := X xor Y;
  X := X xor Y;
end;


Que não funciona quando chamamos assim TrocaInt(A, A);, o que lea faz é zerar as variáveis.

A única alternativa que funciona sob todas as circustâncias seria:

procedure TrocaInt(var X, Y: Tipo);
var
  T: Tipo;
begin
  T := X;
  X := Y;
  Y := T;
end;


Só mais um detalhe: acredito que a semântica da passagem de parâmetro [b:296661acea]var[/b:296661acea] tenha mudado no Delphi 8, devido à natureza do CIL. Se estiver certo, as soluções usando aritmética funcionarão.


Responder

22/02/2004

Marco Salles

Beep, Acertei Seu Nome :P ...O Nosso Amigo LucianoBarreto Nos Postou O Seguinte:
Seria simples se eu pudesse usar uma terceira variavel ou entao um operador XOR, mas eu nao posso.


Voce Não Deve Ter Observado Este Detalhe :P

No Mais Tudo Acaba Em Samba....


Responder

22/02/2004

Beppe

Estava atento a isso sim, o que quiz era esclarecer o problema em usar aritmética.

PS: Você só acertou meu nome 80¬ :mrgreen:


Responder

22/02/2004

Aroldo Zanela

[quote:6a7a532e16=´Marco Salles´]
Faça Um Alguritimo Com as Tres Instruções Abaixo Seguidas 
1) A=A*B====Novo Valor De A=2 
2) B=B/A====Novo Valor De B=1 
3) A=A/B====Novo Valor De A=2


Obs:Algoritimo Vale Somente Se A E B <> ZERO[/quote:6a7a532e16]

Este aqui não funciona, independente de ter valor zero (já que não podemos dividir por zero).


Responder

22/02/2004

Marco Salles

Eu Sei Que Este Último Algoritimo Tem Limitaçõe e Não Deve Ser Apresentado Pelo Luciano Ao Seu Professor ..Só Quis Responder a Uma Citação Do Nosso Amigo Ildefonso:
Ôôôô, Marco... Não era para entregar tão fácil a tarefa do Luciano. Gostei da sua solução. Eu havia imaginado uma com três operações e não quatro. Mas [color=red:811cfbf4cf]usando operadores de multiplicação e divisão[/color:811cfbf4cf]. Acho que a sua deve ser mais rápida para o processador, em casos de muitas repetições.


O Algoritimo Que o LucianoBarreto Deve Apresentar Para o Seu Professor é O Código Anteriormente Apresentado, Segue Abaixo:
Faça Um Alguritimo Com as Quatro Instruções Abaixo Seguidas 
1) A=A+B====Novo Valor De A=3 
2) B=B+A====Novo Valor De B=5 
3) A=B- A====Novo Valor De A=2 
4) B=B-2*A===Novo Valor De B=1 


Isto é , Se Amanhã Ao Acordar e Ver Tantas Respostas No Seu Tópico e Tiver Desanimo De Le-las...
O Que Nós Devemos Entender é Que Muitas Das Vezez Quando Somos Solicitados Para Resolver Um Problema De Lógica, O Solicitante Quer a Resposta Lógica Do Problema e Não Se o Delphi Tem Ou Não Um Componente Ou Uma Classe, Ou Um Objeto Que Resolva a Questão Com Uma Só Instrução...Isto Serve Para Programação ,Mas Para Dever De Lógica Serve Não....Mas o Papo Tá Virando Carnaval :P


Responder

22/02/2004

Lucianobarreto

Olá Pessoal. Primeiramente agradeço a todos pela resposta tão rápida. Agora vou a alguma citações. Eu ainda nao testei mas agradeço desde já...
Ildefonso ==> Eu tinha testado tudo isso que voce me passou, lógico, faltou a última parte entao nao deu certo...
Marco Salles ==> Obrigado pela resposta, mas poderá entrar sim o numero zero e tambem os negativos.. mesmo assim agradeço.. E como você disse, nao estou englobando qualquer linguagem, preciso mesmo do algoritmo...
Obrigado pessoal, mas se tiverem outras formas gostarei de recebelas.. abraços


Responder

22/02/2004

Lucianobarreto

Olá Pessoal. Primeiramente agradeço a todos pela resposta tão rápida. Agora vou a alguma citações. Eu ainda nao testei mas agradeço desde já... Ildefonso ==> Eu tinha testado tudo isso que voce me passou, lógico, faltou a última parte entao nao deu certo... Marco Salles ==> Obrigado pela resposta, mas poderá entrar sim o numero zero e tambem os negativos.. mesmo assim agradeço.. E como você disse, nao estou englobando qualquer linguagem, preciso mesmo do algoritmo... Obrigado pessoal, mas se tiverem outras formas gostarei de recebelas.. abraços

Falha Técnica ==> Eu fiz confusão com os nomes ae.. foi mal...


Responder

23/02/2004

Marco Salles

Xiiii, Nun To Ententendo eh Nade :?:
No Algoritimo Abaixo Tem Algum Erro :?: Ele Não Vale Para o Zero :?:
Não Vale Para Os Numeros Negativo :?:

Exempo: A=1;B=-3
Faça Um Alguritimo Com as Quatro Instruções Abaixo Seguidas 
1) A=A+B====Novo Valor De A=-2 
2) B=B+A====Novo Valor De B=-5 
3) A=B- A====Novo Valor De A=-3 
4) B=B-2*A===Novo Valor De B=1


Marco Salles ==> Obrigado pela resposta, mas poderá entrar sim o numero zero e tambem os negativos..


Luciano, Eu Não Disse Em Momento Nenhum Que o Numero Zero Não Poderia Entrar....Eu Disse Simplesmente, Que No Algoritimo Onde Se Faz Com Multiplicação e Divisão o Zero Deveria Ser Excluido, Sendo O Algoritmo Portanto Limitado...Qualquer Comentário , Esteja á Vontade Para Colocar o Bloco Na Rua
:P


Responder

24/02/2004

Lucianobarreto

[quote:27a08f6abe=´Marco Salles´]Xiiii, Nun To Ententendo eh Nade :?:
No Algoritimo Abaixo Tem Algum Erro :?: Ele Não Vale Para o Zero :?:
Não Vale Para Os Numeros Negativo :?:

Exempo: A=1;B=-3
Faça Um Alguritimo Com as Quatro Instruções Abaixo Seguidas 
1) A=A+B====Novo Valor De A=-2 
2) B=B+A====Novo Valor De B=-5 
3) A=B- A====Novo Valor De A=-3 
4) B=B-2*A===Novo Valor De B=1


Marco Salles ==> Obrigado pela resposta, mas poderá entrar sim o numero zero e tambem os negativos..


Luciano, Eu Não Disse Em Momento Nenhum Que o Numero Zero Não Poderia Entrar....Eu Disse Simplesmente, Que No Algoritimo Onde Se Faz Com Multiplicação e Divisão o Zero Deveria Ser Excluido, Sendo O Algoritmo Portanto Limitado...Qualquer Comentário , Esteja á Vontade Para Colocar o Bloco Na Rua
:P[/quote:27a08f6abe]
Não Marcos, o seu está correto, fui eu quem trocou os nome na citação... Desculpe a falha... E funciona corretamente com qualquer numero sim.. obrigado


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar