Ir ao conteúdo
  • Cadastre-se

(Pascal) Determinar o menor valor do conjunto(?) Não consigo destrinchar


tony101

Posts recomendados

Construa um algorítmo que, dado um conjunto de valores inteiros e positivo, determine qual o valor do conjunto. "O Final do conjunto é conhecido quando for digitado 0" (zero), que não deve ser considerado.

"O Final do conjunto é conhecido quando for digitado 0". Não entedi, se uma variável ja tem o valor zero atribuido a ela, como pode finalizar o programa quando ela for zero?

Lembrando que sou iniciante em programação (pascal)

Ja fiz (muito errado por sinal):


PROGRAM QUESTAO5;
USES CRT;

VAR VALOR, MEN_VAL:INTEGER;

BEGIN
VALOR:=0;
WHILE VALOR <> 0 DO
BEGIN
WRITELN('DIGITE UM NUMERO');
READLN (NUM);

MEN_VAL:=NUM<NUM;
IF NUM<NUM THEN

WRITELN ('O MENOR VALOR é:', MEN_VAL);
IF NUM = 0 THEN
WRITELN('FIM DO PROGRAMA');
END;
READKEY;
END.

Fico grato a que poder me ajudar...

Link para o comentário
Compartilhar em outros sites


program questao5;
uses
crt;
var
valor, men_val:integer;
begin
repeat
clrscr;
writeln('digite um n',#233,'mero: ');
repeat
readln(valor)
until valor >= 0;
if ((valor > 0) and (valor < men_val)) or (men_val = 0) then
men_val := valor;
until valor = 0;
writeln('menor = ',men_val:0);
clrscr;
readkey;
end.

Link para o comentário
Compartilhar em outros sites


program questao5;
uses
crt;
var
valor, men_val:integer;
begin
repeat
clrscr;
writeln('digite um n',#233,'mero: ');
repeat
readln(valor)
until valor >= 0;
if ((valor > 0) and (valor < men_val)) or (men_val = 0) then
men_val := valor;
until valor = 0;
writeln('menor = ',men_val:0);
clrscr;
readkey;
end.

Muito obrigado.

É que estou com uma lista de várias questões aqui para praticar para fazer uma prova.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

tony101, só para esclarecer alguns pontos...

Logo de início, sugiro que baixe e leia esse livro, que é disponibilizado aqui no fórum:

Programando com Pascal DOWNLOAD. Inclusive vou usar ele como base.

1) Sobre tua dúvida para valores igual a zero

"O Final do conjunto é conhecido quando for digitado 0". Não entedi, se uma variável ja tem o valor zero atribuido a ela, como pode finalizar o programa quando ela for zero?

Só perceba que ele se inicia com "0", mas antes de ser feita a primeira verificação ela será alterada pelo um novo valor digitado pelo usuário (poder ser novamente ou não um "0").

Vou aproveitar e falar um pouco sobre variáveis.

VARIÁVEIS:

«Em programação, uma variável simples (ou simplesmente variável) é uma posição de memória cujo conteúdo pode ser modificado durante a execução de um programa, devendo ser-lhe associados um identificador e um tipo de dado.» (vide tópico 2.1 do livro)

Vou fazer um comparativo...

Uma variável funciona como um "gaveta" (variável) para armazenar objetos (dados), que está armazenada num armário (memória), onde tem uma identificação (identificador) para assim podermos fazer uma referência a ela. Ela terá que possuir uma estrutura para armazenamento de objetos (tipo de dado) que já existe ou que foi previamente definida, ou seja, a estrutura (tipo de dados) é «um conjunto cujos elementos podem ser nela armazenados».

Em outras palavras, uma variável é simplesmente um lugar onde você pode armazenar um dado, de determinado tipo, na memória. Sendo que éla pode ser modificada durante a execução do programa (por isso que se chama variável)

PS: Semelhante as variáveis existem as "constantes", que na verdade são a mesma coisa, o que muda é que nestas você NÃO pode alterar o valor dela durante a execução do programa

O segredo é entender que cada componente do Pascal são independentes, ou seja, a combinação e organização deles no seu código é que vai fazer (ou não) o algoritmo funcionar. Tipo, um if não sabe que uma variável existe ou não, mas tem a capacidade de "reconhecer" quando por exemplo uma é usada na condição. Ex.

var
numero :integer; {defini o tipo como sendo um "integer", ou seja, podendo receber um valor numérico entre -32768 e 32767}

BEGIN
numero:=10; {atribui o valor "10" a variável "numero" (veja que "10" está entre o valor que "numero" suporta)}

if numero > 5 then
writeln('O número é maior que 5');
END.

Neste exemplo, o "if" acessa a memória usando o "identificador" numero, que o Pascal previamente associou a determinada posição na memória... daí coleta o valor (no caso 10), e compara com o outro valor que está na condição...

if (10) > 5 then

Como "10" é maior que "5" (resultado = true), então o "if" permite que execute a linha que está associada a ele, que no caso é a mensagem de texto, seja o próximo comando a ser executado (poderia ser qualquer outro comando).

Veja que "writeln" é outro comando, que também é independente dos outros, ou seja, ele simplesmente foi executado, já que ele foi a próxima instrução da sequência.

A variável é somente o lugar onde eu tenho o dado... que pode ser modificada, copiada, alterada...

RESUMINDO

Respondendo a tua pergunta

Não entendi, se uma variável já tem o valor zero atribuído a ela, como pode finalizar o programa quando ela for zero?

A identificação de qual valor que está numa variável e o que fazer com ela é definida pelo programador. Como visto anteriormente o Pascal, e seus comandos, não sabem o que tem nas variáveis, ele simplesmente vai executando "passos", ou seja, quando ele é ordenado a verificar qual valor tem lá, ele vai lá e tentar verificar e fazer o que foi definido.

O Pascal é um executador de ordem. (Quais ele aceita e como fazer são definidos na sua sintaxe, e usadas de acordo com o critério do programador)

Assim só importará se tem "0" ou não no momento que está sendo verificado!!! :lol:

2) Interpretação do código de viniciusbmatos com uma pequena correção

program questao5;
uses
crt;
var
valor, men_val:integer;
begin
repeat
clrscr;
writeln('digite um n',#233,'mero: ');
repeat
readln(valor)
until valor >= 0;
if ((valor > 0) and (valor < men_val)) or (men_val = 0) then
men_val := valor;
until valor = 0;
writeln('menor = ',men_val:0);
clrscr;
readkey;
end.

Só comentar algumas linhas e remover o último "ClrScr" que não deixará exibir o resultado.

program questao5;
uses
crt; {carrega comandos extras, como ReadKey, ClrScr, TextColor, etc}
var
valor, {valores lidos pelo usuário}
men_val :integer; {menor número que foi lido}
begin
repeat
clrscr; {limpa a tela}
writeln('digite um n',#233,'mero: ');
repeat
readln(valor); {faltou um ";"}
until valor >= 0; {até que digite um número "não negativo"}
if ((valor > 0) and (valor < men_val)) or (men_val = 0) then
men_val := valor; {atualiza o menor valor}
until valor = 0; {até que digitem um valor = 0}
writeln('menor = ',men_val:0);
{clrscr;} {com ele não consiguirá visualizar a responda }
readkey;
end.

É isso que queria postar...

PS: Obrigado a você por solicitar a reabertura do post e a gandalfnho por ter reaberto.

Qualquer dúvida relacionada a esse tópico em geral é só postar, ou se for o caso poste suas considerações finais e informe que já está resolvido. (depois os moderadores fecham novamente).

Abraços

Link para o comentário
Compartilhar em outros sites

:muro:

Era para ser ao contrário:


program questao5;
uses
crt; {carrega comandos extras, como ReadKey, ClrScr, TextColor, etc}
var
valor, {valores lidos pelo usuário}
men_val :integer; {menor número que foi lido}
begin
repeat
clrscr;
writeln('digite um n',#233,'mero: ');
repeat
readln(valor)
until valor >= 0;
if ((valor > 0) and (valor < men_val)) or (men_val = 0) then
men_val := valor;
until valor = 0;
[COLOR="DarkOliveGreen"] clrscr;
writeln('menor = ',men_val:0);
readkey;[/COLOR]
end.

Obs.: acho que o uso do ponto-e-vírgula no último comando do REPEAT é opcional, não há diferenças no resultado nem erro de compilação.

Esta apostila diz isso na página 25.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

:muro:

Era para ser ao contrário:


program questao5;
uses
crt; {carrega comandos extras, como ReadKey, ClrScr, TextColor, etc}
var
valor, {valores lidos pelo usuário}
men_val :integer; {menor número que foi lido}
begin
repeat
clrscr;
writeln('digite um n',#233,'mero: ');
repeat
readln(valor)
until valor >= 0;
if ((valor > 0) and (valor < men_val)) or (men_val = 0) then
men_val := valor;
until valor = 0;
[COLOR="DarkOliveGreen"] clrscr;
writeln('menor = ',men_val:0);
readkey;[/COLOR]
end.

Obs.: acho que o uso do ponto-e-vírgula no último comando do REPEAT é opcional, não há diferenças no resultado nem erro de compilação.

Esta apostila diz isso na página 25.

Olá,

viniciusbmatos, essa questão de poder ou não usar ";" é interessante didaticamente... Mas eu particularmente recomento sempre usar.

Vi o trecho lá:

Como o until é um delimitador, não é necessário colocar-se um ponto-e-vírgula ";" após o comando que o precede.

Como você mesmo disse, é opcional, mas observe que na própria apostila dela, ela usa o ";" em todos os comandos antes dos "until" e dos "end"... ^_^

Na minha opinião: já que pode, coloca... ainda mais porque quando for colocar outro comando entre os dois, vai ter que ficar lembrando de botar... e tirar... para mim basta os "else" dos "if" ;)

PS: Veja que no seu código, um "until" tá sem ";", já o outra está com!

Mas isso não muda nada mesmo na estrutura, é só ao "gosto" do programador mesmo...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • 2 semanas depois...
Olá,

PS: Veja que no seu código, um "until" tá sem ";", já o outra está com!

Mas isso não muda nada mesmo na estrutura, é só ao "gosto" do programador mesmo...

Abraços

Salvo blocos de IF THEN ELSE. Ponto-e-vírgula antes de um ELSE é sintaticamente errado e não compila.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!