Ir ao conteúdo

Posts recomendados

Postado

 

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
Postado

@Simon Viegas , o que significa i:2 ? 

porque pede para digitar dez números primeiro. E qual a função dos números aleatórios após? 

para i de 1 ate 10 faca escreva ("Número ", i:2, ": ")

//ALEATORIO -100, 100

leia(num) //ALEATORIO OFF

 

  • Curtir 1
Postado
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
Postado

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
Postado

@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
  • Membro VIP
Postado
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
  • Membro VIP
Postado
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
Postado
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
Postado

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

@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
Postado

@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
Postado

@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
Postado

@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
Postado

@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
Postado

@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
Postado

@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
Postado

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
Postado

@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
Postado

@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

 

Postado

 

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
Postado
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
  • Membro VIP
Postado
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

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