GARANTIR DESCONTO

Fórum Valores Ordem Crescente #206650

15/01/2004

0

Olá pessoal, to com 1 dúvida, estou fazendo 1 exercício dum livro que não consigo revolver, tem que digitar 3 valores inteiros, (variaveis A, B, C, por exemplo), e apresentá-los em ordem crescente.

Fiz um com 2 variáveis, com o seguinte código:

var
A, B, X: Integer;
begin
A := StrToInt(edtA.Text);
B := StrToInt(edtB.Text);
if (A > B) then
begin
X := A;
A := B;
B := X;
end;
lblA.Caption := IntToStr(A);
lblB.Caption := IntToStr(B);
edtA.SetFocus;

acontecia o seguinte, caso digitar valores iguais ele mostra na tela em ordem ´crescente´, teria como fazer será com 3 variáveis?

não se se entenderam o código?

Desde já agradeço a ajuda, obrigado


Diegobarcelos

Diegobarcelos

Responder

Posts

15/01/2004

Marcelo Saviski

vamos lá

digamos que você tenha três Edits

crie três variaveis

Num1, Num2, Num3: Integer;

coloque um botão organizar e insira esse código
Num1 := IntToStr(Edit1.Text);
Num2 := IntToStr(Edit2.Text);
Num3 := IntToStr(Edit3.Text);


agora temos que organizar isso

a variável Num1 deve conter o menor valor, a Num2 o valor mediano e Valor3 a maior valor, porenquanto eles estão desordenados

para isso, temos que comparar se Num1 é menor que Num2, se Num1 for menor, temos que mandar ele para algum lugar, uma váriavel temporária ([color=green:6b0a9dd095]tmp: Integer;[/color:6b0a9dd095])

ficaria mais ou menos assim:

    If num2 < num1 Then
    begin
        tmp := num1;
        num1 := num2;
        num2 := tmp;
    end;
    
    If num3 < num2 Then
    begin
        tmp := num2;
        num2 := num3;
        num3 := tmp;
    end;


pode fazer assim agora:

ShowMessage(´NumMenor = ´ + IntToStr(Num1) + ´ NumMedio = ´ + IntToStr(Num2) + ´ NumMaior = ´ + IntToStr(Num3));



Responder

Gostei + 0

15/01/2004

Marco Salles

Acho Que Nosso Amigo Marcelo Saviski Na Pressa(Sabe Com é Net No Meio De Semana) Esqueceu De Fazer Mais Um Bloco If..then.
Vamos Trabalhar Com Números Para Ficar Mais Fácil:
Num1=3,Num2=2,Num3=1 Valores Antes

Marcelo Saviski Escreveu:

//1 bloco if..then
If num2 < num1 Then //num2=2 < Num1=3===> Verdade
begin
tmp := num1;
num1 := num2;
num2 := tmp;
end;
Valores Apos 1 Bloco If.... Then:
Num1=2, Num2=3,Num3=1

//2 bloco if then

If num3 < num2 Then //Num3=1 < Num2=3====> Verdade
begin
tmp := num2;
num2 := num3;
num3 := tmp;
end;
Valores Após o Segundo Bloco If.... Then
Num1:=2,Num2=1,Num3=3; ***Que Acredito Não Estar Em Ordem***

Portanto, Com Eu Disse Anteriormente , Nosso Amigo Marcelo Saviski, Esqueceu De Colocar Um Último e Decissivo Bloco If..Then. Quero Ainda Destacar a Tecnica De Ordenação(Usando a SUBSTITUIÇAO) Sugerido Pelo Marcelo Saviski ...O Código Que Sugiro Basei-se Nesta Mesma Tecnica, Porem Usa 3 Blocos If Then e Segue Abaixo:

procedure TForm1.Button3Click(Sender: TObject);
var
a,b,c,x:Integer;
begin
a:=StrToInt(Edita.Text);
b:=StrToInt(Editb.Text);
c:=StrToInt(Editc.Text);
if (b>a) Then //Troca
begin
x:=a;
a:=b;
b:=x;
end;
if (c>a) Then //Troca
begin
x:=a;
a:=c;
c:=x;
end;
if (c>b) Then //Troca
begin
x:=b;
b:=c;
c:=x;
end;
Edita.Text:=IntToStr(a);
Editb.Text:=IntToStr(b);
Editc.Text:=IntToStr(c);
end;

Obs: Existem Muitas Maneiras De Realizar Este Tipo De Tarefa.


Responder

Gostei + 0

15/01/2004

Fabio.hc

Só uma obs:

Olá pessoal, to com 1 dúvida, estou fazendo 1 exercício dum livro que não consigo revolver, tem que digitar 3 valores inteiros, (variaveis A, B, C, por exemplo), e apresentá-los em ordem crescente.


A solução apresentada pelo Marco Salles mostra o resultado em ordem decrescente.
Para mostrar em ordem crescente usando o mesmo código que o Marco Salles apresentou basta trocar o sinal ´>´ para ´<´ dos if´s.


Responder

Gostei + 0

15/01/2004

Marco Salles

Como eu Disse No ínicio Do Tópico, Net No Meio De Semana :P .......O Importante, que a ´Gaf´ Que Cometi Foi Bem Sinalizado Pelo Fábio. Só Para Completar , Não Precissa Sequer Trocar Os Sinais, Basta Trocar Duas Palavrinhas Que O Resultado Será Em Ordem Crescente.No Trecho Final :

Edita.Text:=IntToStr(a);
Editb.Text:=IntToStr(b);
Editc.Text:=IntToStr(c);

Trocar Por :

[color=red:fec764ae4c]Edita.Text:=IntToStr(c); [/color:fec764ae4c]
Editb.Text:=IntToStr(b);
[color=red:fec764ae4c]Editc.Text:=IntToStr(a); [/color:fec764ae4c]

e o Critério Da Ordem Será Respeitado. Valeu....


Responder

Gostei + 0

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

Aceitar