Ir ao conteúdo
  • Cadastre-se

Vetores e busca dos 2 menores e 2 maiores


srabates

Posts recomendados

Olá galera, tenho que fazer um programa em PASCAL que

leia números inteiros maiores ou iguais a zero do teclado, até que um número negativo seja digitado. Escreva os dois menores valores e os dois maiores valores. :eek:

to com dificuldade para entender como fazer um vetor sem uma constante. ja que vamos ter que armazenar todos os numeros que o usuario digitar, ate aparecer um numero negativo. isso pode ser 10 ou 1000.

e como fazer a busca ? buscar o maior e menor é moleza, agora o segundo maior e o segundo menor ta difícil

valeu galera!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá galera, tenho que fazer um programa em PASCAL que

leia números inteiros maiores ou iguais a zero do teclado, até que um número negativo seja digitado. Escreva os dois menores valores e os dois maiores valores. :eek:

to com dificuldade para entender como fazer um vetor sem uma constante. ja que vamos ter que armazenar todos os numeros que o usuario digitar, ate aparecer um numero negativo. isso pode ser 10 ou 1000.

e como fazer a busca ? buscar o maior e menor é moleza, agora o segundo maior e o segundo menor ta difícil

valeu galera!

Olá,

srabates, tudo vai depender da tua lógica. Tem duas formas básicas de fazer.

1) Utilizando array

Neste caso você cria um array com um tamanho específico mesmo, ex.: 20. Daí se digitado mais de 20, antes de inserir um negativo, você informa que não é mais possível inserir números e faz as verificações.

Veja que teoricamente sempre vai ter um limite de números a ser armazenado. Sempre. Ou seja, se vai ser armazenado, vai ocupar espaço, a quantidade pode ser até grande, mas sempre vai existir um limite mesmo.

Resumindo: crie um array, armazene os números até onde pode e depois faz as verificações.

Obs.: A questão ai é que sempre você vai "gastar" a mesma quantidade de memória independente da quantidade de números digitados, já que os "arrays", neste caso, terão um tamanho fixo. Ou seja, se ler 1 ou 20 números, a quantidade de memória será a mesma...

PS: Só para explicar um pouco mais... os arrays quando criados já ocupam o seu tamanho máximo... na prática, cada posição dele já será ocupada por um número (se for no begin principal, começará com zero). Daí ao inserir um valor em determinada posição, o Pascal na verdade irá "substituí" o valor antigo pelo novo... :D....

2) Verificações a cada leitura

Você pode também fazer as verificações a cada leitura de um novo número. Ou seja, tentar de alguma forma verificar os maiores e menores a cada leitura. Desta forma, NÂO haverá limite, já que você só precisará armazenar os 4 valores (os 2 maiores e os 2 menos).

***

Resumindo

O problema principal é saber "como encontrar os 2 valores maiores e 2 menos"... armazenar todos os valores ou não vai depender basicamente do enunciado, pois ele pode determinar que deve ou não deve, ou simplesmente deixar ao seu critério..

Sugestão

Primeiro faça um programa que exiba somente 1 valor maior e menor para aquecer...

PS: Se puder, poste aqui o que conseguiu fazer para verificarmos

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
program 3 (input{teclado}, output{video});
Uses crt;
var
cont,n, maior, segundomaior, menor, segundomenor: integer;
Fim: boolean;

begin

Fim := false;
cont:= 0;
maior := 0;
segundomaior := 0;
menor:= maxint;
segundomenor:= maxint;
writeln(output,' Digite valores, para terminar a execuçao insira um numero negativo.');
While not Fim do
begin
write(output, 'Digite um valor: ');
readln(input, n);
if n < 0 then
Fim := true
else
begin
cont:= cont + 1;
if n >= maior then
begin
segundomaior := maior;
maior := n
end
else
if n <= menor then
begin
segundomenor:= menor;
menor:= n
end
else
if n >= segundomaior then
segundomaior:= n
else
if n <= segundomenor then
end; segundomenor:= n ;

end;
if cont = 1 then
writeln (output, 'Apenas um numero foi digitado.')
else
begin
writeln(output, 'O maior valor é : ', maior );
writeln(output, 'O segundo maior valor é: ', segundomaior );
writeln(output, 'O menor valor é : ', menor);
writeln(output, 'O segundo menor valor é ', segundomenor);
end;
read(maior);
end.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

srabates, vamos lá.

Tem um pequeno erro no seu códgo, que eu acredito ser de digitação.

   end;           segundomenor:= n ;

Veja que o "end" está na mesma linha, mas deveria está embaixo (ou depois) do comando...

Seu código corrigido:

program ex3 (input{teclado}, output{video});
uses
crt;
var
cont,
n,
maior, segundomaior,
menor, segundomenor :integer;
Fim : boolean;

BEGIN
TextColor(15); {cor texto branco}
ClrScr; {limpa a tela}
Fim:=false;
cont:=0;
maior:=0;
segundomaior:=0;
menor:=MaxInt;
segundomenor:=MaxInt;
writeln(output,' Digite valores, para terminar a execuçao insira um numero negativo.');
while not Fim do
begin
write(output, 'Digite um valor: ');
readln(input, n);
if n<0 then
Fim:=true
else
begin
cont:= cont + 1;
if n >= maior then
begin
segundomaior := maior;
maior := n
end
else
if n <= menor then
begin
segundomenor:= menor;
menor:= n
end
else
if n >= segundomaior then
segundomaior:= n
else
if n <= segundomenor then
segundomenor:= n ;
end; {1° else}
end; {whiile}
if cont = 1 then
writeln (output, 'Apenas um numero foi digitado.')
else
begin
writeln(output, 'O maior valor é : ', maior );
writeln(output, 'O segundo maior valor é: ', segundomaior);
writeln(output, 'O menor valor é : ', menor);
writeln(output, 'O segundo menor valor é ', segundomenor);
end;
{read(maior);}
ReadKey; {aguarda uma tecla ser precionada}
END.

Tem basicamente só duas mudanças: o end no lugar certo, e troquei o read(maior); por ReadKey;...

PS: O restante a lógica está certa...

Abraços

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!