Ir ao conteúdo
  • Cadastre-se

VisualG Exercícios com Procedimentos e com Funções


Posts recomendados

Urgente!! Preciso de ajuda com 3 exercícios.

 

1) Escreva um programa que lê um valor inteiro (maior do que 1 e menor ou igual a 10) e exibe a tabuada (até 10) de multiplicação do número lido.

Funcao LeNumero(n1, n2:inteiro):inteiro;

    

  Lê um número inteiro no intervalo especificado (n1, n2) e o devolve. Cada vez que for digitado um número inválido (fora do intervalo especificado) a função

deve exibir a mensagem "Número inválido. Digite novamente!"

Procedimento Tabuada( n :inteiro); Recebe como parâmetro um número inteiro e exibe na tela a tabuada de multiplicação de 10 do número lido. Exemplo: número lido 5

5 * 1 = 5   5 * 2 = 10  .... 5 * 10 = 50

 

 

2)Escreva um programa composto de uma função MAX e o programa principal como segue: a) A função MAX recebe como parâmetros de entrada dois números inteiros e retorna o maior. Se forem iguais retorna qualquer um deles;  -b) O programa principal lê 4 séries de 4 números a,b,c e d. Para cada série lida imprime o maior dos quatro números usando a função MAX.

 

3)Faça um programa que leia um número inteiro e gere todos  os números primos entre 1 e este número fornecido, exibindo-os na tela. O programa deve ter uma sub-rotina (procedimento ou função) que determina se um determinado número é ou não primo. Números primos são aqueles que são somente divisíveis por 1 ou por eles mesmos.

 

 

Agradeço!

 

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

@João Vitor Volpin  nesse primeiro você pega um número e verifica se ele está entre 1 e dez ,  se estiver nesse intervalo você mostra a tabuada dele de 1 até dez usando um para assim :

para i de 1 ate 10 faca
  escreval(i," X ",numero," = ",i*numero)
fimpara

se não estiver nesse intervalo mostre a mensagem de número inválido .   

   não podemos te dar um código pronto, pois é contra as regras do fórum, então faça os algoritmos um de cada vez e poste aqui para podermos ver como está e em que podemos ajudar .

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

  • 2 anos depois...
Var
   // Seção de Declarações das variáveis 
   n,x,t,i: inteiro
funcao FuncaoLeNum(n1,n2:inteiro):inteiro
inicio
   t<- i*n
   retorne t
fimfuncao

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

   escreval("digite um número para saber a tabuada dele:")
   leia(n)
   se (n>10) e (n<1) entao
      escreval("digite um número válido")
   fimse

   para i de 1 ate 10 faca
      x<-FuncaoLeNum(n,i)
      escreval("o numero",i," x",n," é igual a:",x)
   fimpara
Var
   // Seção de Declarações das variáveis 
   n,x,t,i: inteiro
funcao FuncaoLeNum(n1,n2:inteiro):inteiro
inicio
   t<- i*n
   retorne t
fimfuncao

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

   escreval("digite um número para saber a tabuada dele:")
   leia(n)
   se (n>10) e (n<1) entao
      escreval("digite um número válido")
   fimse

   para i de 1 ate 10 faca
      x<-FuncaoLeNum(n,i)
      escreval("o numero",i," x",n," é igual a:",x)
   fimpara

 

adicionado 46 minutos depois

2-a)

Var
   // Seção de Declarações das variáveis 
   v1,v2,maior,igual,m: inteiro
funcao MAX(x,y:inteiro):inteiro
inicio
   maior<-x,y
   se v1>v2 entao
      maior<-v1
   senao
      maior<-v2
      se v1=v2 entao
         maior<-v1,v2
         retorne maior
      fimse
   fimse
fimfuncao

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc... 
    escreval("--------------PROGRAMA PARA COMPARAR OS NÚMEROS---------------")
   ESCREVAL("--------------DIGITE UM NÚMERO PARA SABER QUAL É MAIOR------------")
    escreval("digite um número:")
    leia(v1)
    escreval("digite outro número:")
    leia(v2)
    m<-MAX(v1,v2)
    escreval("o maior número é:",maior)
    se (v1=v2) entao
    escreval("os numeros são iguais")
    fimse

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Alice Braga, sei que o código é para @João Vitor Volpin, mas vamos lá:

 

Em 07/11/2017 às 20:22, João Vitor Volpin disse:

1) Escreva um programa que lê um valor inteiro (maior do que 1 e menor ou igual a 10) e exibe a tabuada (até 10) de multiplicação do número lido.

  • Funcao LeNumero(n1, n2:inteiro):inteiro;

Lê um número inteiro no intervalo especificado (n1, n2) e o devolve. Cada vez que for digitado um número inválido (fora do intervalo especificado) a função

deve exibir a mensagem "Número inválido. Digite novamente!"

  • Procedimento Tabuada( n :inteiro);

Recebe como parâmetro um número inteiro e exibe na tela a tabuada de multiplicação de 10 do número lido. Exemplo: número lido 5

5 * 1 = 5   5 * 2 = 10  .... 5 * 10 = 50

 

 

São dois métodos. LeNumero()Tabuada(). Os 2 devem ser implementados, pois assim foi solicitado no enunciado (é o enunciado que manda).

 

Outro ponto é sobre o uso das variáveis. De um modo geral, não devem-se utilizar variáveis globais dentro de procedimento, ou seja: ou as variáveis são as que estão nos parâmetros (no caso n1 e n2), ou as variáveis são declaradas dentro do próprio procedimento. 

 

Veja:

 

6 horas atrás, Alice Braga disse:

funcao FuncaoLeNum(n1,n2:inteiro):inteiro
inicio
   t<- i*n
   retorne t
fimfuncao

 

Aqui você está utilizando t, i e n que são variáveis externas à função ("não pode"). Perceba também que foi declarada para receber valores em n1 e n2, mas essas variáveis sequer foram utilizadas.

 

 

@Alice Braga, perceba que precisa de um ajuste na expressão da condição lá no se também:

 

6 horas atrás, Alice Braga disse:

se (n>10) e (n<1) entao

 

Pense em um número qualquer... É possível número qualquer ser maior que 10 e, ao mesmo tempo, ser menor que 1? Não. Essa condição nunca vai ser verdadeira. No caso, ali seria "maior que 10 OU menor que 1". Só lembrar lá das teorias dos conjuntos... :)

 

 

Segue um esboço inicial:

algoritmo "Exercicio 01"
var
   n: inteiro

funcao LeNumero(n1, n2:inteiro):inteiro
var
   num: inteiro
inicio
   repita
      escreval("Digite um número entre ", n1:1, " e ", n2:2, " (inclusos)")
      leia(num)
      se (nao ((num >= n1) e (num <= n2))) entao
         escreval("Número inválido. Digite novamente!")
      fimSe
      retorne num
   ate ((num >= n1) e (num <= n2))
fimfuncao

procedimento Tabuada(n :inteiro)
inicio
   // Em construção
fimProcedimento

inicio
   n <- LeNumero(1, 10)

   escreval("Teste de número lido: ", n:1) //



fimAlgoritmo

Daí, o valor de n seria utilizado como parâmetro para Tabuada().

 

 

ADENDO:

Talvez a expressão esteja um pouco confusa ali no se, né?... vejam:

se (nao ((num >= n1) e (num <= n2))) entao

Mas não tem mistério... 

 

A minha estrategia foi mais ou menos assim: a condição que eu quero é que "o número seja maior ou igual a n1 e menor ou igual a n2", certo? Desta forma, assim ficou ali no ate do repita, ou seja: vai ficar repetindo até que essa condição seja satisfeita.

 

Daí, a condição para aparecer a "mensagem de erro", é justamente o oposto da condição para parar repetir... é ou não é? Logo, apenas coloquei "tudo" da condição do ate e usei o "nao" para inverter o valor do resultado (já que está sendo verificado justamente esse resultado inverso).

 

 

Poderia ser assim também:

      //se (nao ((num >= n1) e (num <= n2))) entao
      se  ((num < n1) ou (num > n2)) entao

São equivalentes... a negação de ">=" é "<". A negação de e é ou. E a negação de "<=" é ">"... (a negação de não é sim... logo, o comando some).

 

 

Segue um complemento sobre a estrutura se/entao:
 

Spoiler

 

O se/entao funciona mais ou menos assim:

 


se <algo que resulte em VERDADEIRO ou FALSE> entao

Ou seja: se o resultado de tudo que tiver lá resultar em VERDADEIRO, o VisualG vai "entrar" no se e seguir o fluxo que tem lá. Caso resulte em FALSO, ele pula para próxima linha após o fimSe.

 

Exemplo:

 

image.png

 

 

VERDADEIRO é um valor que vale VERDADEIRO, daí, o que tem na expressão lá se resultou em VERDADEIRO, assim entrando e executando o que tem dentro do respectivo se/entao. Já para FALSO (que está antes), é o oposto. Daí não apareceu a mensagem que está lá dentro.

 

 

Como vai funcionar o:


se (nao ((num >= n1) e (num <= n2))) entao

Ficaria algo como:


se (nao ((<expressão 1>) e (<expressão 2>))) entao

Cada uma das expressões resulta em VERDADEIRO ou FALSO... Por exemplo: vamos supor que informou 12 para num:

 


se (nao ((12 >= 1) e (12 <= 10))) entao

12 é maior ou igual que 1? Sim. Então está expressão resulta em VERDADEIRO. 12 é menor ou igual a 10? Não. Então essa outra expressão resulta em FALSO. Daí, vai ser verificado outra expressão. Algo como:

 


se (nao (VERDADEIRO e FALSO)) entao

O que resulta VERDADEIRO e FALSO? Resulta FALSO


se (nao (FALSO) entao

O que resulta nao FALSO? Resulta VERDAEIRO. Logo, toda a expressão resultou VERDADEIRO e assim fazendo aparecer a mensagem. Se quiser, treinem com um número entre 1 e 10 e vejam se entrará na se ou não.

 

Por aí vai..

 

 

No aguardo.

 

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

19 horas atrás, Simon Viegas disse:

@Alice Braga, sei que o código é para @João Vitor Volpin, mas vamos lá:

 

 

 

São dois métodos. LeNumero()Tabuada(). Os 2 devem ser implementados, pois assim foi solicitado no enunciado (é o enunciado que manda).

 

Outro ponto é sobre o uso das variáveis. De um modo geral, não devem-se utilizar variáveis globais dentro de procedimento, ou seja: ou as variáveis são as que estão nos parâmetros (no caso n1 e n2), ou as variáveis são declaradas dentro do próprio procedimento. 

 

Veja:

 

 

Aqui você está utilizando t, i e n que são variáveis externas à função ("não pode"). Perceba também que foi declarada para receber valores em n1 e n2, mas essas variáveis sequer foram utilizadas.

 

 

@Alice Braga, perceba que precisa de um ajuste na expressão da condição lá no se também:

 

 

Pense em um número qualquer... É possível número qualquer ser maior que 10 e, ao mesmo tempo, ser menor que 1? Não. Essa condição nunca vai ser verdadeira. No caso, ali seria "maior que 10 OU menor que 1". Só lembrar lá das teorias dos conjuntos... :)

 

 

Segue um esboço inicial:


algoritmo "Exercicio 01"
var
   n: inteiro

funcao LeNumero(n1, n2:inteiro):inteiro
var
   num: inteiro
inicio
   repita
      escreval("Digite um número entre ", n1:1, " e ", n2:2, " (inclusos)")
      leia(num)
      se (nao ((num >= n1) e (num <= n2))) entao
         escreval("Número inválido. Digite novamente!")
      fimSe
      retorne num
   ate ((num >= n1) e (num <= n2))
fimfuncao

procedimento Tabuada(n :inteiro)
inicio
   // Em construção
fimProcedimento

inicio
   n <- LeNumero(1, 10)

   escreval("Teste de número lido: ", n:1) //



fimAlgoritmo

Daí, o valor de n seria utilizado como parâmetro para Tabuada().

 

 

ADENDO:

Talvez a expressão esteja um pouco confusa ali no se, né?... vejam:


se (nao ((num >= n1) e (num <= n2))) entao

Mas não tem mistério... 

 

A minha estrategia foi mais ou menos assim: a condição que eu quero é que "o número seja maior ou igual a n1 e menor ou igual a n2", certo? Desta forma, assim ficou ali no ate do repita, ou seja: vai ficar repetindo até que essa condição seja satisfeita.

 

Daí, a condição para aparecer a "mensagem de erro", é justamente o oposto da condição para parar repetir... é ou não é? Logo, apenas coloquei "tudo" da condição do ate e usei o "nao" para inverter o valor do resultado (já que está sendo verificado justamente esse resultado inverso).

 

 

Poderia ser assim também:


      //se (nao ((num >= n1) e (num <= n2))) entao
      se  ((num < n1) ou (num > n2)) entao

São equivalentes... a negação de ">=" é "<". A negação de e é ou. E a negação de "<=" é ">"... (a negação de não é sim... logo, o comando some).

 

 

Segue um complemento sobre a estrutura se/entao:
 

  Mostrar conteúdo oculto

 

O se/entao funciona mais ou menos assim:

 



se <algo que resulte em VERDADEIRO ou FALSE> entao

Ou seja: se o resultado de tudo que tiver lá resultar em VERDADEIRO, o VisualG vai "entrar" no se e seguir o fluxo que tem lá. Caso resulte em FALSO, ele pula para próxima linha após o fimSe.

 

Exemplo:

 

image.png

 

 

VERDADEIRO é um valor que vale VERDADEIRO, daí, o que tem na expressão lá se resultou em VERDADEIRO, assim entrando e executando o que tem dentro do respectivo se/entao. Já para FALSO (que está antes), é o oposto. Daí não apareceu a mensagem que está lá dentro.

 

 

Como vai funcionar o:



se (nao ((num >= n1) e (num <= n2))) entao

Ficaria algo como:



se (nao ((<expressão 1>) e (<expressão 2>))) entao

Cada uma das expressões resulta em VERDADEIRO ou FALSO... Por exemplo: vamos supor que informou 12 para num:

 



se (nao ((12 >= 1) e (12 <= 10))) entao

12 é maior ou igual que 1? Sim. Então está expressão resulta em VERDADEIRO. 12 é menor ou igual a 10? Não. Então essa outra expressão resulta em FALSO. Daí, vai ser verificado outra expressão. Algo como:

 



se (nao (VERDADEIRO e FALSO)) entao

O que resulta VERDADEIRO e FALSO? Resulta FALSO



se (nao (FALSO) entao

O que resulta nao FALSO? Resulta VERDAEIRO. Logo, toda a expressão resultou VERDADEIRO e assim fazendo aparecer a mensagem. Se quiser, treinem com um número entre 1 e 10 e vejam se entrará na se ou não.

 

Por aí vai..

 

 

No aguardo.

 

 

Ótima explicação! Estou começando agora nessa área, e confesso que ainda estou perdida com os comandos. Vou refazer este algoritmo e já mando

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