Ir ao conteúdo
  • Cadastre-se

VisualG Maior número entre um conjunto de inteiros


Posts recomendados

 

Em 19/03/2023 às 11:23, Simon Viegas disse:

 

O primeiro número é o 1001 (já que é "maior que 1000"), mas algoritmo aí está começando com número 1002 (uma inconformidade). Basta inicializar o num com 1000 mesmo.

 

Só para ficar claro: e se 1001 dividido por 11 desse resto 5? Para exemplificar, troque o 11 por 12 e teste inicializando com 1001 e com 1000 e vejam o que acontece.

 

@Simon Viegas, será que agora estaria correto assim? 

Var

   Num: Inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   Num <- 1000
   Repita
      Num <- Num + 1
   Ate (Num Mod 11 = 5)
   Escreval("O Numero e ", Num + 11 * 4)

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

21 horas atrás, Simon Viegas disse:

O primeiro número é o 1001 (já que é "maior que 1000"), mas algoritmo aí está começando com número 1002 (uma inconformidade). Basta inicializar o num com 1000 mesmo.

Bem observado, se fosse 1006 já apresentaria o resultado errado. Outra alternativa é fazer o teste da condição antes.

 

Algoritmo "Numero"
Var
    Num: Inteiro
Inicio
    Num <- 1006
    Enquanto  não (Num Mod 11 = 5) Faca
        Num <- Num + 1
    FimEnquanto
    Escreval("O Numero e ", Num + 11 * 4)
FimAlgoritmo

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Alguém sabe se essa atividade estaria certa dessa forma?

// Descrição : Construa um algoritmo que leia uma quantidade indeterminada de
//números inteiros e identifique qual foi o maior número digitado. O final da
//série de números digitada deve ser indicado pela entrada de -1.
Var
   num,maior:inteiro

Inicio
   maior <- 0
   enquanto (num<>-1)faca
      escreval(" Informe um número inteiro positivo ou -1 para encerrar")
      leia(num)
      se (num > maior) então
         maior <- num
      fimse
   fimenquanto
   escreval("O maior número digitado foi : " , maior)
Fimalgoritmo

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa .  Sim está certo, funciona bem como pede o enunciado , apenas você colocou uma linha que não precisa, essa aqui

2 horas atrás, Eli Almeidaa disse:
maior <- 0

Pois no visualG ao cria a variável o compilador já inicializa ela com o valor zero , caso seja inteiro ou real , e assim não precisa inicializar novamente  se o valor for zero . 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 19/03/2023 às 21:38, Eli Almeidaa disse:

@Simon Viegas, o que significa i:2

 

esse ":x" serve para reservar espaços para o valor da variável, ou seja, o valor impresso de i vai ter pelo menos 2 espaços. Teste a execução com outros valores, como 4, 10 etc e veja o comportamento.

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 20/03/2023 às 16:22, Eli Almeidaa disse:

Alguém sabe se essa atividade estaria certa dessa forma?

 

Se for ler uma quantidade ilimitada ou ler 10, a lógica para verificar o maior, em si, é a mesma. No tópico abaixo detalho sobre. Dá uma olhada lá.

 

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

20 horas atrás, Simon Viegas disse:

 

esse ":x" serve para reservar espaços para o valor da variável, ou seja, o valor impresso de i vai ter pelo menos 2 espaços. Teste a execução com outros valores, como 4, 10 etc e veja o comportamento.

 

Esse "espaço" aí seria para os números não ficarem grudados ? Não entendi

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Se alguém puder ajudar aí, comecei a fazer essa questão,mas não sei como

fazer para calcular a quantidade de números  pares e ímpares .

// Descrição   :Faça um algoritmo que leia uma quantidade não determinada de números positivos.
Calcule a quantidade de números pares e ímpares, a média de valores pares e a
média geral dos números lidos. O número que encerrará a leitura será zero.
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 22/03/2023
Var
   // Seção de Declarações das variáveis
   num:inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...

   num <-1
   enquanto num > 0 faca
      leia(num)
   fimenquanto

Fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

48 minutos atrás, Eli Almeidaa disse:

como ficaria? o mod não seria apenas para mostrar os números ímpares e pares?

Mod é o operador que você pode usar para pegar o resto da divisão. Já viu isso aqui no tópico no exercício da divisão por 11 com resto 5. A diferença é que agora tem que ser o resto da divisão por 2. Se for zero é par.

 

48 minutos atrás, Eli Almeidaa disse:

Será que não seria mostrar a quantidade exemplo " São 4 números pares ou ímpares" ?

No enunciado diz que é para mostrar a média e a quantidade de pares e ímpares. Para isso é só fazer a condição com Mod e incrementar as variáveis do par ou ímpar.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa    com o mod verifica se é par ou ímpar ,  e incrementa um contador de patres e ímpares .

enquanto num > 0 faca   // Loop repete 
  leia( num )
  se num = 0 então      // se digitou zero
    interrompa          // sai desse Loop enquanto
  fimse                 // e continua depois do fimenquanto
  se num mod 2 = 0 então
    pares <- pares + 1  // soma uma unidade ao conteúdo da variAvel pares
  senao
    impares <- impares + 1 
  fimse
fimenquanto
escreval("total de Pares ",pares)  

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@devair1010 , estou tentando fazer dessa maneira para não fica igual ao seu e também para por em prática

o que já foi passado para mim, mas está dando erro nessa parte da média geral , também não sei se está certo dessa forma, se você

puder verificar qual é o erro aqui. 

Var
   // Seção de Declarações das variáveis
   num,contpar,contimpar,somarpar,somarimpar:inteiro
   mediapar,mediageral:real

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   num <-1
   contpar <-0
   contimpar <-0
   enquanto (num > 0 )faca
      escreval(" Digite um número inteiro positivo ou 0 para encerrar")
      leia(num)

      se (num%2=0)então
         contpar <- contpar+1
         somarpar <- somarpar+num
         mediapar <-somarpar/contpar
      senao
         se (num%2=1) então
            contimpar <- contimpar+1
            somarimpar<- somarimpar+num
         fimse
      fimse
      mediageral <-(somarpar+somarimpar)/contpar+contimpar
      escreval()
      escreval ("A quantidade de números pares é:" ,contpar)
      escreval()
      escreval ("A média de números pares é:" ,mediapar)
      escreval()
      escreval ( "A média geral dos números lidos é:",mediageral)
      escreval ()
      escreval ("A quantidade de números ímpares é:" ,contimpar)

   fimenquanto

Fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010,  Acho que conseguir consertar esse erro da média geral , mas não sei se está certo .

Var
   // Seção de Declarações das variáveis
   num,contpar,contimpar,somarpar,somarimpar:inteiro
   mediapar,mediageral:real

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   num <-1
   contpar <-0
   contimpar <-0
   enquanto (num > 0 )faca
      escreval(" Digite um número inteiro positivo ou 0 para encerrar")
      leia(num)

      se (num%2=0)então
         contpar <- contpar+1
         somarpar <- somarpar+num
         mediapar <-somarpar/contpar
      senao
         se (num%2=1) então
            contimpar <- contimpar+1
            somarimpar<- somarimpar+num
             mediageral <-(somarpar+somarimpar)/(contpar+contimpar)

         fimse
      fimse
      mediageral <-(somarpar+somarimpar)/(contpar+contimpar)
      escreval()
      escreval ("A quantidade de números pares é:" ,contpar)
      escreval()
      escreval ("A média de números pares é:" ,mediapar)
      escreval()
      escreval ( "A média geral dos números lidos é:",mediageral)
      escreval ()
      escreval ("A quantidade de números ímpares é:" ,contimpar)

   fimenquanto
Fimalgoritmo

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa   o cálculos estão certos ,   porém você colocou para fazer esses cálculos dentro do Loop "enquanto / fimenquanto" ,  e funciona desse modo , sim , mas vai ficar repetindo isso várias vezes e ocupando os recursos  do processador à toa ,  seria melhor colocar esses cálculos depois do Loop , e serão feitos apenas uma vez , e do modo como está , seu código vai computar o último número também , o zero  ,   pois o zero será consiferado como sendo do tipo "par" , e aumentando assim a quantidade dos números pares ,  em uma unidade ,  e a conta finaL então estará com certeza errada ,  e apenas organizando seu código para ficar mais fácil de ler e adicionei  uma comparação para sair do loop  assim que digitar o zero ,  e também isolei essa segunda comparação , pois não precisa dela , pois se um número não for do tipo "Par" então será lógico que só poderá ser do tipo "ímpar" , diminuindo a quantidade de linhas do programa , igualmente as duas linhas referentes a inicialização das variáveis "contpar" e "contimpar" :

Algoritmo "media de par e impar"
Var
  num,contpar,contimpar : inteiro
  somarpar,somarimpar   : inteiro
  mediapar,mediageral   : real
Inicio
  num       <- 1
  //contpar   <- 0 não precisa inicializar pois já foi
  //contimpar <- 0 inicializada ao ser criada  no inIcio
  enquanto num > 0 faca
    escreval(" Digite um número inteiro positivo ou 0 para encerrar")
    leia( num )
    se num = 0 então
      interrompa        // faz sair desse loop "enquanto" e continuar
    fimse               // depois dele "fimenquanto"
    se num % 2 = 0 então
      contpar  <- contpar  + 1
      somarpar <- somarpar + num
    senao
      //se num % 2 = 1 então            não precisa dessa comparaCAo
        contimpar  <- contimpar  + 1 // pois se não for par só pode ser Impar
        somarimpar <- somarimpar + num
      //mediageral <- ( somarpar + somarimpar ) / ( contpar + contimpar )
      //fimse
    fimse
  fimenquanto
  se contpar > 0 então    // validar a divisao por zero , senAo dAh ruim né
    mediapar   <- somarpar   / contpar
  fimse
  mediageral <- ( somarpar + somarimpar ) / ( contpar + contimpar )
  escreval ("")
  escreval ("A quantidade de números pares é ----: " ,contpar)
  escreval ("")
  escreval ("A quantidade de números ímpares é --: " ,contimpar)
  escreval ("")
  escreval ("A média de números pares é ---------: " ,mediapar)
  escreval ("")
  escreval ("A média geral dos números lidos é --: ",mediageral)
  escreval ("")
Fimalgoritmo

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@devair1010 ,obrigada modifiquei o código aqui. Nessa parte que você diz

" não precisa dessa comparação" , como ficaria essa parte sem essa comparação ?

Precisa colocar dessa primeira forma para encontrar a média de par?   

se contpar > 0 então
mediapar <- somarpar / contpar 

 

 

, ou assim também não estaria certo para encontrar a média? 

 

se (num%2=0)então
         contpar <- contpar+1
         somarpar <- somarpar+num
         mediapar <-somarpar/contpar

 

 

 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa     essa comparação aqui

se contpar > 0 então    // validar a divisao por zero , senAo dAh ruim né
  mediapar   <- somarpar   / contpar
fimse

é por que não se pode dividir nenhum número por zero , e no visualG quando isso acontece ele trava e precisa fechar para voltar a funcionar , então faz essa verificação ,  e só vai fazer a divisão se o divisor for diferente de zero , 

   sim , para encontrar a média vai funcionar sim , mas  ali dentro do loop "enquanto" esse cálculo será feito a cada número inserido , e esse cálculo requer muitos ciclos de máquina , atrasando a execução do programa ,  como explicado no post acima , pois em um programa pequeno desse não dá para perceber a perda de tempo , mas em um programa maior , se percebe bem essa perda de tempo ,  e é lógico que desse modo

se num % 2 = 0 então 
  contpar  <- contpar  + 1
  somarpar <- somarpar + num
  mediapar <- somarpar / contpar
fimse                              

vai funcionar certo também ,  mas colocando para fazer o cálculo depois do loop estará mais certo , pois só vai calcular uma vez . e creio que seja mais adequado .

1 hora atrás, Eli Almeidaa disse:

Nessa parte que você diz

" não precisa dessa comparação" , como ficaria essa parte sem essa comparação ?

ficaria desse jeito que está no código que postei , a comparação referida é essa 

//se num % 2 = 1 então            não precisa dessa comparaCAo

veja ali que tem essa duas barras indicando que essa linha é um comentário e portanto está isolada do restante do código e o compilador não vai executar os comandos escritos nessa linha comentada . e não precisa dessa comparação por que se o número for par então não será ímpar .  então para que comparar uma coisa que você já sabe de antemão .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010, mas se tirar essa parte aqui , como faria para contar os números ímpares? porque a questão também pede

 se (num%2=1) então            
contimpar <- contimpar+1            

 

 

Ficaria assim?

 

se (num%2=0)então
         contpar <- contpar+1
         somarpar <- somarpar+num
         mediapar <-somarpar/contpar
      senao
            contimpar <- contimpar+1
            somarimpar<- somarimpar+num
         fimse

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Essa questão abaixo é a mesma coisa que a anterior, mas o que muda é que para encerrar utiliza o -5 , mas eu não

sei como colocar esse -5 para encerrar, se alguém puder ajudar aí .

 

 Faça um algoritmo que leia uma quantidade não determinada de números positivos.
Calcule a quantidade de números pares e ímpares, a média de valores pares e a
média geral dos números lidos. O número que encerrará a leitura será -5.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa O primeiro passo para encerrar o programa é sair do loop. Já deve ter percebido que essas estruturas de repetição tem uma parte lá para especificar uma condição. É aí que você vai colocar o que diz no enunciado para sair do loop e terminar o programa.

 

No seu último código tem essa estrutura,

 

Enquanto Num > 0 Faca

...

FimEnquanto

 

Assim vai ficar em loop enquanto a condição Num > 0 for verdadeira (ou até ser falsa). Então é só usar a mesma lógica para qualquer outra condição.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Eli Almeidaa

    isso mesmo , pois se não for "par" ele vai no "senao" e lá dentro da estrutura desse "senao" ,  está  o incremento das variáveis que conta  e soma os ímpares e assim atualiza a variável contimpar e somarimpar :

se num % 2   =  0 então // se for "Par" faz esse
 contpar     <- contpar    + 1
 somarpar    <- somarpar   + num
 mediapar    <- somarpar   / contpar
senao                  // se não for "Par" Eh por Que Eh "Impar" e faz esse
  contimpar  <- contimpar  + 1
  somarimpar <- somarimpar + num
fimse

para encerrar a execução de forma que não interfira nas contagens e médias ,  use essa condicional  com o comando  "se / fimse"

enquanto num > 0 faca
    escreval(" Digite um número inteiro positivo ou 0 para encerrar")
    leia( num )
    se num = 0 então
      interrompa        // esse comando "interrompa" , faz sair desse loop 
    fimse               // "enquanto" e continuar depois dele "fimenquanto"
    // aqui mais outros comandos
fimenquanto

 

Link para o comentário
Compartilhar em outros sites

 

Outra forma só com o critério da própria estrutura para encerrar como comentei pode ser assim,

 

Algoritmo "Conta Par e Impar"
Var
    PConta: Inteiro
    TConta: Inteiro
    PSoma:  Inteiro
    TSoma:  Inteiro
    Num:    Inteiro

Inicio
    Repita
        Leia(Num)
        Se(Num > 0) então
            Se(Num Mod 2 = 0) então
                PSoma <- PSoma + Num
                PConta <- PConta + 1
            FimSe
            TSoma <- TSoma + Num
            TConta <- TConta + 1
        FimSe
    Ate Num = 0

    Escreval("Pares = ", PConta)
    Escreval("Impares = ", TConta - PConta)
    Se(PConta <> 0) então
        Escreval("Media Pares = ", PSoma/PConta)
    FimSe
    Se(TConta <> 0) então
        Escreval("Media Total = ", TSoma/TConta)
    FimSe
FimAlgoritmo

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

19 horas atrás, Midori disse:

@Eli Almeidaa O primeiro passo para encerrar o programa é sair do loop. Já deve ter percebido que essas estruturas de repetição tem uma parte lá para especificar uma condição. É aí que você vai colocar o que diz no enunciado para sair do loop e terminar o programa.

 

No seu último código tem essa estrutura,

 

Enquanto Num > 0 Faca

...

FimEnquanto

 

Assim vai ficar em loop enquanto a condição Num > 0 for verdadeira (ou até ser falsa). Então é só usar a mesma lógica para qualquer outra condição.

 

 

@Midoriquando digita primeiramente -5 aqui dá erro saberia o motivo?

// Descrição  : Faça um algoritmo que leia uma quantidade não determinada de
//números positivos.
//Calcule a quantidade de números pares e ímpares, a média de valores pares e a
//média geral dos números lidos. O número que encerrará a leitura será -5.
// Autor(a)  : Nome do(a) aluno(a)
// Data atual : 23/03/2023
Var
   num,contpar,contimpar,somarpar,somarimpar:inteiro
   mediapar,mediageral:real

Inicio
   num <- 1
   enquanto (num <> -5 )faca
      escreval(" Digite um número inteiro positivo ou 0 para encerrar")
      leia(num)
      se num = -5 então
         interrompa
      fimse
      se (num%2=0)então
         contpar <- contpar+1
         somarpar <- somarpar+num
         mediapar <-somarpar/contpar
      senao
         contimpar <- contimpar+1
         somarimpar<- somarimpar+num
      fimse
   fimenquanto
   mediageral <-(somarpar+somarimpar)/(contpar+contimpar)
   escreval()
   escreval ("A quantidade de números pares é:" ,contpar)
   escreval()
   escreval ("A média de números pares é:" ,mediapar)
   escreval()
   escreval ( "A média geral dos números lidos é:",mediageral)
   escreval ()
   escreval ("A quantidade de números ímpares é:" ,contimpar)
Fimalgoritmo

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
14 horas atrás, Eli Almeidaa disse:

@Midoriquando digita primeiramente -5 aqui dá erro saberia o motivo?

 

Qual erro? (Pergunta retórica.)

 

Tente entender o erro informado, daí tente achar uma solução. Tenta primeiro analisar... aí, posta o que está ocorrendo e o quê tentou fazer...

 

 

 

Exemplo:

Quando digito primeiramente -5, apresenta esse erro:

 

image.png

 

O VisualG não aponta em qual linha ocorreu, e agora?... Mas está exibindo a mensagem de erro "Invalid floating point operation". Hum!!! Pode ser que ajude!

 

Que tal pesquisar no Google?

visualg Invalid floating point operation

 

Entende?

 

Tá! Vi que provavelmente seria algo relacionado à "divisão por zero". Matematicamente essa operação é problemática... ou dá indeterminado, ou é impossível (se não lembra ou não entende o motivo, pesquisa sobre "divisão por zero". Isso é importante!). Computadores não se dão muito bem com essa situação (o VisualG não foi programado para tratar esses casos).

 

 

Vamos analisar o código: ao se "digitar primeiramente -5", vai interromper o laço de repetição, certo? A próxima linha é:

 

14 horas atrás, Eli Almeidaa disse:
mediageral <-(somarpar+somarimpar)/(contpar+contimpar)

 

Percebe que o denominador de uma divisão é a soma dos valores de duas variáveis? Oras! Quais os valores de contpar e contimpar nesse momento? Valem 0. Só para relembrar: 

 

Em 19/03/2023 às 14:24, Simon Viegas disse:

MPORTANTE: lembrando que o VisualG já atribui um valor inicial a todas a variáveis globais, portanto, todas as variáveis do tipo inteiro automaticamente já começam com 0.

 

 

Dá para ver os valores também lá na "Áreas das variáveis de memória":

 

image.png

 

 

Ambas estão zeradas. Logo, irá utilizar "0" lá na denominador (da divisão que calcula a média), ou seja, 0 + 0 = 0. O VisualG travará. (Pois.....).

 

 

 

 

 

 

Se quiser testar o passo a passo:

 

image.png

 

 

Cada vez que vai apertando F8, o VisualG vai executando uma linha... ai você vai acompanhando o fluxo do código.

 

 

image.png

 

Antes de executar a linha, veja os valores das variáveis.

 

RESUMINDO:

É preciso dar um tratamento à possibilidade da divisão por zero. Exemplo:

 

   se (contpar+contimpar > 0) então
      mediageral <-(somarpar+somarimpar)/(contpar+contimpar)
   fimSe

 

Dessa forma estaria "garantindo" que o denominador seja diferente de zero (que é cerne do problema).

 

Veja que tudo é uma abstração. É uma forma de entendermos os comportamentos. Ao fazer isso acima, a média deve dar zero. Isso é certo? Não sei, mas aí busca uma solução.

 

PS: quando digo "vai dar zero", seria porque "vai exibir que a média é zero"? Vai ocorrer isso porque, hem? Hem? (Dica: veja o valor da variável no momento que vai exibir o resultado.)

 

PS 2: por que estou verificando a soma, em vez de verificar cada variável?

 

Está assim:

2 minutos atrás, Simon Viegas disse:
 se (contpar+contimpar > 0) então

 

E por que não assim?

2 minutos atrás, Simon Viegas disse:
se ((contpar > 0) OU (contimpar > 0)) então

 

Não sei! Eu apenas abstrair o problema. O que não pode ser 0 é o denominador... seria algo como:

 

 se (denominador > 0) então

 

Como o denominador é uma soma, eu inseri a tal soma... as duas sentenças acima serão semelhantes. Certo? Observe que tudo é uma questão de abstração, pois pode ser que nem sempre tenham o mesmo comportamento. Tipo, se as variáveis tiverem números opostos, exemplo: 4 e -4?  A soma vai dar zero. Não iria passar na condição de cima, mais iria passar na condição de baixo. (Ao mesmo tempo, tecnicamente a soma não deve dar negativa, concorda? Entra outra questão: quem disse que uma soma não pode dar negativo? 😵

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!