Ir ao conteúdo
  • Cadastre-se

Portugol Esse pseucódigo está certo?


Posts recomendados

O algoritmo apresentado é uma implementação simples do "Verificar Primo", onde o usuário tem a opção de inserir um número e verificar se ele é primo.

Tenho uma dúvida em relação a esse pseudocódigo, esse "contarDivisor <- 0 "e " contador <- 1" que está dentro da estrutura " caso 2" deveria ficar fora dessa estrutura ? ficar no início do programa?

Algoritmo "Verificar Primo"

Var
   opcao, numero, contador, contarDivisor: inteiro

Inicio
   repita
      escreval("Menu")
      escreval("1. Inserir número")
      escreval("2. Verificar se é primo")
      escreval("3. Sair")
      escreval("Escolha uma opção:")
      leia(opcao)

      escolha(opcao)
         caso 1:
            escreval("Digite o número:")
            leia(numero)
         caso 2:
            contarDivisor <- 0
            contador <- 1

            se numero <= 1 então
               escreval(numero, " não é primo.")
            senao
               repita
                  se numero % contador = 0 então
                     contarDivisor <- contarDivisor + 1
                  fimse
                  contador <- contador + 1
               ate (contador > numero)

               se contarDivisor > 2 então
                  escreval(numero, " não é primo.")
               senao
                  escreval(numero, " é primo.")
               fimse
            fimse
         caso 3:
            escreval("Encerrando o programa...")
         caso contrario:
            escreval("Opção inválida. Tente novamente.")
      fimEscolha

   ate (opcao = 3)

   escreval("Programa encerrado.")

Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

Em 06/07/2023 às 20:37, Eli Almeidaa disse:

Tenho uma dúvida em relação a esse pseudocódigo, esse "contarDivisor <- 0 "e " contador <- 1" que está dentro da estrutura " caso 2" deveria ficar fora dessa estrutura ? ficar no início do programa?

Essas variáveis devem ser iniciadas antes de entrar no loop da opção 2. Pode ser assim como fez.

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

@Eli Almeidaa Na opção 2 seu código verifica se o número primo. Para isso o loop faz o incremento das variáveis contarDivisor e contador. Se essas variáveis não forem iniciadas corretamente, no próximo loop elas vão continuar com o valor do processo anterior. Por isso a atribuição delas deve ser feita sempre antes de entrar no loop.

Se você fizer isso no início do programa só vai iniciar uma vez, p.ex assim teria resultados errados,

 

Var
    opcao, numero, contador, contarDivisor: inteiro

Inicio
    contarDivisor <- 0
    contador <- 1

Repita
    escreval("Menu")
    escreval("1. Inserir número")

...

 

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

@Midori , mas elas não são variáveis globais ? Ainda não conseguir entender o que você está querendo dizer, porque colocando assim, também funciona :   

Var
    opcao, numero, contador, contarDivisor: inteiro

Inicio
    contarDivisor <- 0
    contador <- 1

Repita
    escreval("Menu")
    escreval("1. Inserir número")

...

c

Link para o comentário
Compartilhar em outros sites

45 minutos atrás, Eli Almeidaa disse:

porque colocando assim, também funciona :   

Não funciona.

 

Primeiro insira um número que não é primo (1000 p.ex) e escolha a opção 2. Seu programa vai dizer corretamente que não é primo.

 

Na sequencia insira o número 13 e escolha a opção 2. Aí vai mostrar que 13 não é primo.

 

Acho que assim vai entender o quero dizer sobre iniciar as variáveis antes do loop.

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

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

elas não são variáveis globais?

 

Sim. As variáveis são globais, pois elas estão no escopo global. São enxergadas por todo programa, mas o problema é outro. Está relacionado ao fluxo do algoritmo. Resumidamente: para o contexto, essas variáveis precisam ser reinicializadas a cada verificação de primo, pois a cada verificação elas precisam ter determinados valores iniciais (requisito do algoritmo da tal verificação). Veja:

 

23 horas atrás, Eli Almeidaa disse:
Inicio
    contarDivisor <- 0
    contador <- 1

Repita
    escreval("Menu")

 

Assim, a variável é inicializada apenas uma vez (o algoritmo fica errado)... simplesmente por "está fora do laço de repetição". Se colocar em algum lugar dentro do loop (dentro do repita) e que esteja antes de ser utilizado lá no caso 2, vai funcionar. Exemplo:

 

   repita
      escreval("Menu")
      escreval("1. Inserir número")
      escreval("2. Verificar se é primo")
      contarDivisor <- 0
      escreval("3. Sair")
      escreval("Escolha uma opção:")
      leia(opcao)
      contador <- 1
     
      escolha(opcao)
      caso 1
         escreval("Digite o número:")
         leia(numero)
      caso 2
         se numero <= 1 então
            escreval(numero, " não é primo.")

 

Ou seja: antes de entrar no caso 2, a cada loop, necessariamente vai inicializar as duas variáveis que preciso lá... o problema de ficarem fora do caso 2 (dentro do repita, mas fora do escopo do caso 2) é que vai ser reinicializar sempre... mesmo que escolha o caso 1. Na prática não vai perceber diferença nenhuma na execução, mas tecnicamente seria um "desperdício de recurso", entende? Para que inicializar se não vai ser utilizada no caso 1? Para avaliação da lógica, seria considerado um erro. Mais correto é ficar dentro do caso 2 mesmo.

 

Deixando dentro do caso 2, vai ser inicializado apenas quando precisa.

 

Ah!, mas se no caso 1 também utilizasse essas mesmas variáveis? Aí poderia inicializar uma vez em cada caso, ou inicializaria antes do escolha. Aqui as duas formas poderiam seriam válidas. Teria que avaliar o que ficaria mais interessante.

 

 

 

 

RESUMINDO:

Assimile que o fluxo de execução execução do VisualG é "da esquerda para direita, de cima para baixo". Vai executando linha por linha. Daí, para o algoritmo funcionar corretamente, as instruções precisam está numa sequência válida para o contexto do algoritmo em si.

 

 

 

 

 

 

 

Adendo 1

Segue uma demonstração de porque não funciona se colocar ANTES do repita:

 

image.png

 

O VisualG vai executar linha por linha... quando chega num leia(), o programa para., pois fica aguardando o usuário informar o valor. Nesse momento, as variáveis estão com 0 e 1 respectivamente, pois foram os valores que acabaram de ser atribuído mais acima.

 

image.png

 

Inseri um valor qualquer...: 123. O programa volta para o menu e vou para a opção 2. Verificado se é primo. Após o resultado, o fluxo do programa voltar novamente para próximo linha após o repita... mostra o menu e pede para informar a nova opção. Veja como estão os valores das variáveis!!! Oras, ao informar um novo número (ou tentar verificar novamente o mesmo), essas variáveis, essenciais para a lógica de verificação, estarão com o "lixo" da execução anterior, comprometendo o resultado.

 

Não é pela quantidade de divisores que teu algoritmo verificar se é primo?

Em 06/07/2023 às 20:37, Eli Almeidaa disse:
               se contarDivisor > 2 então
                  escreval(numero, " não é primo.")

 

Dessa forma, sempre que for digitado um valor maior que 1, será executada a linha abaixo:

Em 06/07/2023 às 20:37, Eli Almeidaa disse:
                  contador <- contador + 1

 

Portanto, contarDivisor será atualizado e o algoritmo parará de funcionar corretamente, pois a variável terá um valor maior que 2 acusando para qualquer outro novo valor, que não é primo!

 

 

 

 

Adendo 2:

Em 06/07/2023 às 20:37, Eli Almeidaa disse:
caso 1:

 

Na sintaxe do escolha, cada caso não tem esses ":". Basta removê-los.

 

 

 

 

Adendo 3: para entender melhor o fluxo, experimente diminuir a velocidade de execução. Exemplo:

inicio
   timer 300
   contarDivisor <- 0
   contador <- 1

   repita
      escreval("Menu")
      escreval("1. Inserir número")
      escreval("2. Verificar se é primo")

 

Defina a velocidade que quiser... o número ali depois do timer é em milissegundos.

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

  • 2 semanas depois...

@Simon Viegas ,@Midori , obrigada.

Ouvi dizer que a melhor maneira de nomear uma função ou procedimento é utilizar um verbo e um substantivo. Por exemplo, para calcular a média, pode-se dar a essa função o nome :

 funcao calcularMedia

.

E para os parâmetros dessa o melhores nomes seriam (nota1, nota2, nota3: real).

Então a função ficaria

funcao calcularMedia(nota1, nota2, nota3: real): real 

 

. Mas se for pedir para o usuário digitar essas três notas, qual nome então, daria as variáveis de entrada, por exemplo :
 

escreva ("Informe a 1º nota")

 leia (nota1) 

escreva ("Informe a 2º nota")

 leia (nota2) 

escreva ("Informe a 3º nota")

 leia (nota3) 

Nesse , caso, poderia usar "nota1", "nota2" e "nota3", aí no "leia", já que eles já está sendo usado nos parâmetros da função? qual o melhor

nome para dá para esses dados de entrada?

 

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

  • Membro VIP
Em 22/07/2023 às 21:28, Eli Almeidaa disse:

Ouvi dizer que a melhor maneira de nomear uma função ou procedimento é utilizar um verbo e um substantivo.

 

Sim.. seria uma forma interessante.

 

 

Em 22/07/2023 às 21:28, Eli Almeidaa disse:

Nesse , caso, poderia usar "nota1", "nota2" e "nota3", aí no "leia", já que eles já está sendo usado nos parâmetros da função? qual o melhor

nome para dá para esses dados de entrada?

 

Podem, se quiser, utilizar o mesma nomenclatura... pois as variáveis da função ou procedimento são locais. Já as variáveis do programa principal são ditas como globais, como são de escopos diferentes, o VisualG permite "duplicar" os nomes...

 

Veja:

image.png

 

São 4 variáveis distintas.

 

Sugiro pesquisar sobre:

- variáveis globais x variáveis locais;

- escopo

- passagem de parâmetro por valor x parâmetro por referência

 

 

Adendo: para testar linha a linha do código, pode ir pressionando F8.

 

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

@Simon Viegas
Tenho outra dúvida, existem duas maneiras de passar parâmetros por valor e por referência, 
no caso, eu poderia modificar as variáveis globais utilizando "var", como nesse código aqui :

Algoritmo " Função Fibonacci"
var
   c , t1, t2, t3 : inteiro
funcao proximoFibonacci ( var n1, n2: inteiro): inteiro
var n3: inteiro
inicio
   n3 := n1+ n2
   n1 := n2
   n2:= n3
   retorne n3
fimFuncao

inicio
   t1 <- 0
   escreva (t1)
   t2 <- 1
   escreva (t2)
   para c := 3 ate 10 faca
      t3 <-proximoFibonacci (t1, t2)
      escreva (t3)
   fimPara
Fimalgoritmo

Nesse código para imprimir os dez primeiros números de Fibonacci , t1 e t2 são variáveis globais, que são diretamente modificadas 
dentro da função por causa da palavra reservada "var". Então, nesse caso é passagem de parâmetros por referência.       

 

Porém se eu tirar "var", nesse  usando esse mesmo código , ainda assim, sem usar "var", consigo modificar as variáveis globais t1 e t2 :

Algoritmo " Função Fibonacci"
var
   c , t1, t2, t3 : inteiro
funcao proximoFibonacci (): inteiro
var n3: inteiro
inicio
   n3 := t1+ t2
   t1 := t2
   t2:= n3
   retorne n3
fimFuncao

inicio
   t1 <- 0
   escreva (t1)
   t2 <- 1
   escreva (t2)
   para c := 3 ate 10 faca
      t3 <-proximoFibonacci ()
      escreva (t3)
   fimPara
Fimalgoritmo

 

Minha dúvida é então  posso
usar parâmetros com a palavra reservada "var" para modificar as variáveis globais, como nesse primeiro exemplo da  dos dez primeiros números da sequência  de Fibonacci, ou
consigo modificar as variáveis globais também diretamente dentro da função, quando elas tiverem o mesmo nome dentro da função sem usar parâmetros para essas variáveis e palavra reservada "var", como nesse segundo código modificado dos dez primeiros
números da sequência de Fibonnacci ?  
E se consigo modificar as variáveis globais diretamente sem usar a palavra reservada "var", para que usar "var"?
Teriam três maneiras de modificar variáveis uma não modificaria a variável global, mas só passaria uma cópia, no caso, passagem de parâmetros por valor.
As outras duas maneiras poderia modificar as variáveis globais, uma quando usa o mesmo nome da variável global, dentro da função, sem usar parâmetro para essa variável e
a outra maneira de modificar a variável global seria utilizando parâmetros para a variável com a palavra reservada "var"?

 

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

  • Membro VIP

@Eli Almeidaa, você fez perguntas retóricas... é basicamente isso que você disse. 🙂

 

 

Segue uma síntese::

 

1. se uma variável local tiver a mesma nomenclatura de uma variável local, a função só pode acessar a mais próxima, ou seja, a local; No VisualG não tem como acessar a variável global de mesmo nome. Em algumas linguagens é possível; (Tem, por exemplo, o comando "this.", antes da variável, que diferenciaria indicando que quer a local.)

 

2. o var serve para ver lances que geraram dúvid... para fazer que as alterações nas variáveis locais sejam repassadas para as variáveis que foram passadas no respectivo parâmetro (sejam globais ou não... poderia ser de uma outra função), ou seja, a variável local seria uma 'referência" para variável que foi passada no parâmetro; No VisualG, ao terminar a função, o programa repassa o valor da local para a variável passada... Meio que trabalha separadamente. Em outras linguagem, creio que seja uma referência direta... (apontam para a mesma posição de memória... não sei dizer.). Na prática, o resultado final é o mesmo... mas tecnicamente o funcionamento é diferente. Qualquer coisa dá uma pesquisada sobre "ponteiros", algo bastante forte no C (que não manjo muita coisa);

 

3. como visto, o uso do var não tem relação com variáveis ter o mesmo nome. São coisas distintas. A relação é com a correspondência da variável passada ao chamar a função e a variável local lá do parâmetro. Se a local chamar t1 e passar t2 nela, vai altera no fim a t2 mesmo... 

 

4. a questão de NÃO usar variáveis globais dentro de funções estaria relacionada a boas práticas. A recomendação geral é evitar usar mesmo e receber por parâmetro, mesmo que queira alterar (usando var). A questão também do parâmetro é que a função fica "desaclopada", ou seja, se eventualmente mudar o nome da variável global, não vai precisar mexer na função. A ideia é que as funções sejam livres... sequer precisam saber os nomes das variáveis que vão usar ao chamar a função (a única coisa relacionada é o "tipo de dado", que tem que ser compatíveis entre si).

 

5. resumidamente: a primeira função seria mais elegante que a segunda. Mas vai do contexto também. Está ligado à questão de "padrões de projetos", ou seja, as regras de implementações impostas, por exemplo, pelo professor ou pelo cliente quer o algoritmo. 

 

6. No VisualG dá para "debugar" . Vai pressionando F8 e vendo os valores das variáveis no lado direito do programa. Tem também o conceito de bleakpoint e timer.

 

7. pode definir o var para individualmente. Como está usando "," para separar, vai todo o conjunto. Caso necessário, declara as variáveis separadamente, utilizando var ou não nas que desejar. 

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

@Simon Viegas , então, mesmo que dê para modificar a variável global sem usar o parâmetro por referência, é recomendado

utilizar com o "var", caso queira modificar a variável global? Em funções é mais comum se utilizar passagem de parâmetro por valor mais do que por referência e para procedimento é a mesma coisa ?

 

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

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

@Simon Viegas , então, mesmo que dê para modificar a variável global sem usar o parâmetro por referência, é recomendado

utilizar com o "var", caso queira modificar a variável global?

 

Mais uma pergunta retórica? 🙂

 

 

 

17 horas atrás, Eli Almeidaa disse:

Em funções é mais comum se utilizar passagem de parâmetro por valor mais do que por referência e para procedimento é a mesma coisa ?

 

Funções e procedimentos são basicamente a mesma coisa. Em algumas linguagens sequer tem essa diferenciação... são até apenas chamadas de "métodos". Apenas o que muda é que funções retornam valores nelas mesmas. Já os procedimentos seriam funções que não tem retorno neles mesmos.

 

Um procedimento seria análogo a algo assim:

funcao minhaFuncao() : VAZIO
inicio

fimFuncao

Saca? "É" uma função que não tem retorno!

 

Já utilizar por valor ou por referência seria só uma questão de necessidade do contexto do algoritmo. Eu suponho que seja muito mais comum as funções/procedimentos utilizarem por valor, já que é mais natural não precisar que o valor do que foi passado seja modificado ou que não precisa retornar algo de dentro da função.

 

Um exemplo utilização de uso de por referência... imagine que precisa de um método que retorne dois valores. Funções só retornam um valor (e o VisualG não aceita vetor como retorno), e agora? Uma forma seria utilizar dois parâmetros por referência... 😉. (Outra forma seria de algum jeito concatenar os valores numa cadeia só e depois separar fora da função etc. Vai da "robustez" ou "limitações" da linguagem... e também dos "padrões de projetos" e "boas práticas".)

 

Por aí vai.

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

@Simon Viegas , mostra uma exemplo aí usando função disso que você falou " Um exemplo utilização de uso de por referência... imagine que precisa de um método que retorne dois valores. Funções só retornam um valor (e o VisualG não aceita vetor como retorno), e agora? Uma forma seria utilizar dois parâmetros por referência... "

Esse exemplo aqui serviria para exemplificar isso ? esse código aqui não está funcionando e não sei o motivo :

 

funcao calcular_soma_produto(a, b: inteiro, var soma, produto: inteiro)
inicio
    // Calcula a soma dos números
    soma <- a + b

    // Calcula o produto dos números
    produto <- a * b
fimfuncao

algoritmo Exemplo_Parametros_Por_Referencia
var
    resultado_soma, resultado_produto, num1, num2: inteiro

// Entrada de dados
escreva("Digite o primeiro número: ")
leia(num1)

escreva("Digite o segundo número: ")
leia(num2)

// Chamando a função e passando as variáveis por referência
calcular_soma_produto(num1, num2, resultado_soma, resultado_produto)

// Saída dos resultados
escreva("Soma: ", resultado_soma)
escreva("Produto: ", resultado_produto)
fimalgoritmo

 

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

  • Membro VIP
Em 26/07/2023 às 16:55, Eli Almeidaa disse:

Esse exemplo aqui serviria para exemplificar isso ? esse código aqui não está funcionando e não sei o motivo :

 

O quê não está funcionando? Veja: para encontrar um solução, é preciso entender o problema. 

 

 

 

 

Vamos lá:

1. a função é dentro do algoritmo. Você colocou antes;

2. você não definiu o retorno da função. Ou se não vai ter retorno, mude para procedimento;

3. faltou o comando inicio.

4. a separação entre tipos na assinatura do método é com ";".

 

O 4 é a única novidade. Segue um exemplo:

procedimento calcular_soma_produto(a, b: inteiro; var soma, produto: inteiro)
inicio
   soma <- a + b
   produto <- a * b
fimProcedimento

 

Adendo: um programa não deve* ter comentários. Ele deve está tão bem escrito, que não se fará necessário. 

Adendo 2: a medida que vai escrevendo um código, já vai testando. Assim os problemas tendem a está naquilo que está fazendo no momento. Exemplo:

 

algoritmo "Exemplo_Parametros_Por_Referencia"

procedimento calcular_soma_produto(a, b: inteiro, var soma, produto: inteiro)
inicio

fimProcedimento

inicio

fimAlgoritmo

 

Além de ter visto logo o erro da falta das " lá no topo (errinho bobo), já identificaria que existe um erro na linha 3. Que foi justamente a falta do ";". Faria testes e testes... pesquisaria na internet etc. Daí vai dando continuidade. Claro que poderia também fazer de uma forma que faça rodar, como por exemplo deixar tudo com o var, até que entendesse/descobrisse como fazer... ou mesmo saber seria possível.

 

Em síntese, o algoritmo sempre deve está "compilável"*. A única preocupação deve ficar na lógica, não na sintaxe. 

 

* o VisualG não compila código, ele apenas vai interpretando linha a linha em tempo de execução.

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

@Simon Viegas , obrigada.  Tenho uma dúvida ainda

você não disse que poderia utilizar a passagem de parâmetro por referência se quisesse retornar 

dois valores de dentro da função, já que a função só poderia retornar um valor ? Como faria para retornar esse dois valores aí tanto a soma 

como o produto, de dentro da função, ou é impossível utilizando função ? 

Outra dúvida em funções é obrigatório declarar o tipo de retorno delas?

 

Tentei passar esse código aí que postei para funções, mas ele só funciona se declarar o tipo de retorno da função, ou seja, colocar  o tipo "inteiro". Outra coisa, fica aparecendo um zero a mais no código :

algoritmo "Exemplo_Parametros_Por_Referencia"

var
   resultado_soma, resultado_produto, num1, num2: inteiro

funcao calcular_soma_produto(a, b: inteiro; var soma, produto: inteiro):inteiro
inicio

   soma <- a + b
   produto <- a * b
fimfuncao

inicio
   escreva("Digite o primeiro número: ")
   leia(num1)

   escreva("Digite o segundo número: ")
   leia(num2)

   escreval(calcular_soma_produto(num1, num2, resultado_soma, resultado_produto))

   escreval("Soma: ", resultado_soma)
   escreval("Produto: ", resultado_produto)
fimAlgoritmo

 

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

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

mas ele só funciona se declarar o tipo de retorno da função

 

E existe função que não retorna algo em si mesma? 🙂.

 

A pergunta que você precisaria se fazer é: qual a diferença entre função e procedimento? Já teve algum contato, mas ainda não tá claro.. né? Daí só pesquisar novamente... Para relembrar, já falamos um pouco sobre:

 

Em 26/07/2023 às 15:35, Simon Viegas disse:
Em 25/07/2023 às 21:36, Eli Almeidaa disse:

Em funções é mais comum se utilizar passagem de parâmetro por valor mais do que por referência e para procedimento é a mesma coisa ?

 

Funções e procedimentos são basicamente a mesma coisa. Em algumas linguagens sequer tem essa diferenciação... são até apenas chamadas de "métodos". Apenas o que muda é que funções retornam valores nelas mesmas. Já os procedimentos seriam funções que não tem retorno neles mesmos.

 

Ou seja: como eventualmente o teu método não tem retorno nele mesmo, então deveria utilizar procedimento, em vez de função. A tua ideia de dar um retorno foi válido.. assim como "precisou" colocar para "obter o retorno da função" lá utilizando o escreva(). O detalhe apenas é que era só mudar para procedimento.

 

Outra pergunta que poderia se fazer é: oxente! eu declarei como função e defini o tipo do retorno certinho, mas não utilizei o comando retorne devolver retorno para quem invocou a função. Por que não deu erro? Resposta: quem souber morre!. Mas você entende que não faz muito sentido criar algo que retorna um valor e você não retornar um valor? É como criar uma laço de repetição que só repete uma vez. Ou criar uma estrutura de seleção onde só existe um resultado possível... etc.

 

REFORÇANDO:

Pesquise mais sobre Funções e Procedimentos. É bem simples. Como disse: são a mesma* coisa, mas precisa assimilar melhor. Faça testes e testes e vá absorvendo os detalhes e se acostumando com os comportamentos.

 

 

 

ADENDO

Veja esse exemplo de uso de função e também do uso da referência para retornar valores.

 

algoritmo "Divisão e Potencia numa mesma função"

funcao calcular_divisao_e_potencia(n1, n2:inteiro; var quociente, potencia:real) : LOGICO
inicio

   se (n2 = 0) então
      retorne FALSO
   senao
      quociente <- n1/n2
      potencia <- n1^n2
      retorne VERDADEIRO
   fimSe
fimFuncao

var
   num1, num2 : inteiro
   quociente : real
   potencia : inteiro

inicio
   escreva("Digite o primeiro número: ")
   leia(num1)
   escreva("Digite o segundo número: ")
   leia(num2)

   se (calcular_divisao_e_potencia(num1, num2, quociente, potencia)) então
      escrevaL("Quociente: ", quociente:1:2)
      escrevaL("Potência : ", potencia:1)
   senao
      escrevaL("Nâo é possível dividir por 0")
   fimSe
fimAlgoritmo

 

Nesse caso, eu quis que o retorno da função (nela mesma) fosse dizer se conseguiu calcular ou não, ou seja, se o numerador for zero, o computador não vai saber calcular, daí não faz a conta e retorna FALSO. E lá no programa principal, eu sei o que a função pode retornar e fiz um tratamento para cada caso.

 

É preciso abstrair o que está disponível, no caso para os metodos... Algo como: um método pode ter retorno nele mesmo (função) ou pode não ter (procedimento). Assim como cada um destes podem ter parâmetros ou não. Assim como cada um dos eventuais parâmetros podem ser por valor ou referência... Por aí vai. Não precisa decolar. Vai testando.. "será que se eu declarar um método sem parâmetro funciona?". Vai lá e testa. Sabemos que sim...

 

Qualquer dúvida... sempre pergunte antes a si mesmo. Imagine que outra pessoa esteja te perguntando e que você é capaz de descobrir (como qualquer um)... saca? Vá desenvolvendo a capacidade de vestir a roupa de sapo.

 

Mas daí se persistir ou tiver alguma dúvida, vai perguntando também! 😉

 

ADENDO:

2 minutos atrás, Simon Viegas disse:
se (calcular_divisao_e_potencia(num1, num2, quociente, potencia)) então

 

Não me pergunte porque não tem uma "expressão" aí no se, tente entender!!! (Se é que já não entende, é claro.)

 

Exemplo:

"Tá, a função retorna FALSO ou VERDADEIRO... daí, seria como "se FALSO então" ou "se VERDADEIRO então"... Hum!... daí..... vai tentando entender. Por aí vai.

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

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!