O que há de Novo?
  • Anunciando os planos GOLD no Fórum Outer Space
    Visitante, agora você pode ajudar o Fórum Outer Space e receber alguns recursos exclusivos, incluindo navegação sem anúncios e dois temas exclusivos. Veja os detalhes aqui.

[Ajuda} algoritmo - Não estou entendo a condição da variável lógica...

MFA Games

Ei mãe, 500 pontos!
Mensagens
26.088
Reações
35.328
Pontos
574
Estou estudando aqui sozinho, o que é uma m****, só leitura, estou com duvida com relação a um algoritmo.

é basico, digitar o numero do mes e escrever por extenso. e se não for um numero válido, mostrar numero não é valido. Ok, até aí eu entendi, o problema é quando colocaram a variável lógica para tratar o erro, e evitar que apareça a mensagem: O numero X equivale ao mes Y

aqui tá o algoritmo:

Código:
programa

{

  funcao inicio()

  {

    inteiro numMes

    cadeia mesExtenso=""

    logico invalido=falso

    escreva("Informe o número do mês: ")

    leia(numMes)

    se (numMes==1)

    {

      mesExtenso="janeiro"

    }

    senao se (numMes==2)

    {

      mesExtenso="fevereiro"

    }

    senao se (numMes==3)

    {

      mesExtenso="março"

    }

    senao se (numMes==4)

    {

      mesExtenso="abril"

    }

    senao se (numMes==5)

    {

      mesExtenso="maio"

    }

    senao se (numMes==6)

    {

      mesExtenso="junho"

    }

    senao se (numMes==7)

    {

      mesExtenso="julho"

    }

    senao se (numMes==8)

    {

      mesExtenso="agosto"

    }

    senao se (numMes==9)

    {

      mesExtenso="setembro"

    }

    senao se (numMes==10)

    {

      mesExtenso="outubro"

    }

    senao se (numMes==11)

    {

      mesExtenso="novembro"

    }

    senao se (numMes==12)

    {

      mesExtenso="dezembro"

    }

    senao

    {

      escreva("Mês inválido!!!")
      invalido=verdadeiro

    }

    se (nao invalido)


    escreva("O número ", numMes, " equivale ao mês de ", mesExtenso)

  }

}
alguém pode me ajudar? me expliquem o que caralhos foi feito nessa variável...

eu preferiria copiar o texto " escreva("O número ", numMes, " equivale ao mês de ", mesExtenso) " e colocar debaixo de cada variável senão e f**a-se, na base da gambiarra, como bom programador faria :coolface
 


thiagobcoelho

Habitué da casa
Mensagens
379
Reações
454
Pontos
89
Estou estudando aqui sozinho, o que é uma m****, só leitura, estou com duvida com relação a um algoritmo.

é basico, digitar o numero do mes e escrever por extenso. e se não for um numero válido, mostrar numero não é valido. Ok, até aí eu entendi, o problema é quando colocaram a variável lógica para tratar o erro, e evitar que apareça a mensagem: O numero X equivale ao mes Y

aqui tá o algoritmo:

Código:
programa

{

  funcao inicio()

  {

    inteiro numMes

    cadeia mesExtenso=""

    logico invalido=falso

    escreva("Informe o número do mês: ")

    leia(numMes)

    se (numMes==1)

    {

      mesExtenso="janeiro"

    }

    senao se (numMes==2)

    {

      mesExtenso="fevereiro"

    }

    senao se (numMes==3)

    {

      mesExtenso="março"

    }

    senao se (numMes==4)

    {

      mesExtenso="abril"

    }

    senao se (numMes==5)

    {

      mesExtenso="maio"

    }

    senao se (numMes==6)

    {

      mesExtenso="junho"

    }

    senao se (numMes==7)

    {

      mesExtenso="julho"

    }

    senao se (numMes==8)

    {

      mesExtenso="agosto"

    }

    senao se (numMes==9)

    {

      mesExtenso="setembro"

    }

    senao se (numMes==10)

    {

      mesExtenso="outubro"

    }

    senao se (numMes==11)

    {

      mesExtenso="novembro"

    }

    senao se (numMes==12)

    {

      mesExtenso="dezembro"

    }

    senao

    {

      escreva("Mês inválido!!!")
      invalido=verdadeiro

    }

    se (nao invalido)


    escreva("O número ", numMes, " equivale ao mês de ", mesExtenso)

  }

}
alguém pode me ajudar? me expliquem o que caralhos foi feito nessa variável...

eu preferiria copiar o texto " escreva("O número ", numMes, " equivale ao mês de ", mesExtenso) " e colocar debaixo de cada variável senão e f**a-se, na base da gambiarra, como bom programador faria :coolface
Bem, vou tentar:
no começo escolhe o numero para o mês, faz uma "put*" verificação(ssds switch) e caso não exista ele entra no ultimo if("senao"), ate ai tudo blz.
Ele escreve que o mes é invalido e atribui o valor como verdadeiro para a variavel. Ta bom.
No final ele verifica se essa variavel e verdadeira ou falsa, caso verdadeira ele não escreve, caso contrario ele escreve
 

AriltonJA

O Arauto da Luz
VIP
Mensagens
2.786
Reações
3.055
Pontos
304
Você tem uma serie de ifs aninhados. Francamente, bem idiota esse codigo até para ensinar algo para alguem acho, não no sentido de falta de complexidade mas que é elaborado de forma ruim.

Na parte 1
todos os seus "senao se" são executados um após o outro desde que a condição do "senao se" anterior não tenha sido atendida, correto?
  • Se nenhum "senao se" em for atendido, ele vai chegar ao ultimo "senao" e marcar que invalido é verdadeiro.
  • Se algum "senao se" for atendido, ele vai parar antes do fim e invalido vai continuar falso (como foi definido no inicio da função).
No final de tudo, na parte 2, ele verifica se invalido é verdadeiro ou falso e imprime algo a partir do resultado.

Parte 1
Código:
    se (numMes==1)
    {
      mesExtenso="janeiro"
    }
    senao se (numMes==2)
    {
      mesExtenso="fevereiro"
    }
    senao se (numMes==3)
    {
      mesExtenso="março"
    }
    senao se (numMes==4)
    {
      mesExtenso="abril"
    }
    senao se (numMes==5)
    {
      mesExtenso="maio"
    }
    senao se (numMes==6)
    {
      mesExtenso="junho"
    }
    senao se (numMes==7)
    {
      mesExtenso="julho"
    }
    senao se (numMes==8)
    {
      mesExtenso="agosto"
    }
    senao se (numMes==9)
    {
      mesExtenso="setembro"
    }
    senao se (numMes==10)
    {
      mesExtenso="outubro"
    }
    senao se (numMes==11)
    {
      mesExtenso="novembro"
    }
    senao se (numMes==12)
    {
      mesExtenso="dezembro"
    }
    senao
    {
      escreva("Mês inválido!!!")
      invalido=verdadeiro
    }
Parte 2
Código:
  se (nao invalido) < ou seja, se invalido for falso
    escreva("O número ", numMes, " equivale ao mês de ", mesExtenso)
PS: Bem idiota a ferramenta de codigos não exibir a numeração das linhas. Po @brunoos , melhora isso ai pra gente <3
 
Ultima Edição:

carlos222

Bam-bam-bam
Mensagens
3.571
Reações
10.063
Pontos
294
Deixa eu vê se entendi a duvida.

vc não entendeu essa parte aqui?

{

escreva("Mês inválido!!!")
invalido=verdadeiro

}

se (nao invalido)


escreva("O número ", numMes, " equivale ao mês de ", mesExtenso)

}

Se não for igual a jan até dez ele entra nessas chaves.
Vai aparecer na tela: mês inválido. E vai colocar o variável "invalido" como verdadeiro e o programa terminará aí.

Se for for igual a algum mês, o programa vai para o último SE.
Dentro do SE, ele fez uma negação (se for verdadeiro vai ser falso, o contrário também é valido).
Se o resultante for verdadeira, ele printa o mês.
 

Ero_Seenin

Spaaaaaace Geek
Mensagens
22.885
Reações
22.065
Pontos
734
Não sou programador profissional, sou da área da saúde, mas até eu achei essa caralhada se IF amontoado um em cima do outro deselegante :kpensa
 

Ero_Seenin

Spaaaaaace Geek
Mensagens
22.885
Reações
22.065
Pontos
734
Eu faria isso:

Dim meses(12) as string
Mes(1)="janeiro"
Mes(2)="fevereiro"
.
.
.

X=input("Digite o número do mes")
X=int(x)
IF x<1 or x>12 then mensagem de erro

Msgbox(mes(x))
 


MFA Games

Ei mãe, 500 pontos!
Mensagens
26.088
Reações
35.328
Pontos
574
Você tem uma serie de ifs aninhados. Francamente, bem idiota esse codigo até para ensinar algo para alguem acho, não no sentido de falta de complexidade mas que é elaborado de forma ruim.

Na parte 1
todos os seus "senao se" são executados um após o outro desde que a condição do "senao se" anterior não tenha sido atendida, correto?
  • Se nenhum "senao se" em for atendido, ele vai chegar ao ultimo "senao" e marcar que invalido é verdadeiro.
  • Se algum "senao se" for atendido, ele vai parar antes do fim e invalido vai continuar falso (como foi definido no inicio da função).
No final de tudo, na parte 2, ele verifica se invalido é verdadeiro ou falso e imprime algo a partir do resultado.

Parte 1
Código:
    se (numMes==1)
    {
      mesExtenso="janeiro"
    }
    senao se (numMes==2)
    {
      mesExtenso="fevereiro"
    }
    senao se (numMes==3)
    {
      mesExtenso="março"
    }
    senao se (numMes==4)
    {
      mesExtenso="abril"
    }
    senao se (numMes==5)
    {
      mesExtenso="maio"
    }
    senao se (numMes==6)
    {
      mesExtenso="junho"
    }
    senao se (numMes==7)
    {
      mesExtenso="julho"
    }
    senao se (numMes==8)
    {
      mesExtenso="agosto"
    }
    senao se (numMes==9)
    {
      mesExtenso="setembro"
    }
    senao se (numMes==10)
    {
      mesExtenso="outubro"
    }
    senao se (numMes==11)
    {
      mesExtenso="novembro"
    }
    senao se (numMes==12)
    {
      mesExtenso="dezembro"
    }
    senao
    {
      escreva("Mês inválido!!!")
      invalido=verdadeiro
    }
Parte 2
Código:
  se (nao invalido) < ou seja, se invalido for falso
    escreva("O número ", numMes, " equivale ao mês de ", mesExtenso)
PS: Bem idiota a ferramenta de codigos não exibir a numeração das linhas. Po @brunoos , melhora isso ai pra gente <3
então ele cria a variavel invalido falso e define ela como verdadeiro se o mês for diferente dos anteriores, usando a variável nao. ou seja, tudo que não for valido vai ser verdadeiro, e no final ele verifica, se invalido for falso, ele imprime o texto, se for verdadeiro, não imprime... meio confuso KKKKKK
 

AriltonJA

O Arauto da Luz
VIP
Mensagens
2.786
Reações
3.055
Pontos
304
então ele cria a variavel invalido falso e define ela como verdadeiro se o mês for diferente dos anteriores, usando a variável nao. ou seja, tudo que não for valido vai ser verdadeiro, e no final ele verifica, se invalido for falso, ele imprime o texto, se for verdadeiro, não imprime... meio confuso KKKKKK
Exatamente isso. Nesse caso do pseudocodigo, o "nao invalido" quer dizer a negação do valor .
Uma variavel booleana pode assumir somente duas variáveis em computação não quântica. Ou ela é zero, ou ela é um. Ou ela é true ou é false.
O nao é uma negação disso. Logo:

invalid = true;
se você imprimir not invalid, a resposta vai ser false.

Uma recomendação que eu te dou é começar a escrever tudo em ingles no codigo, e trabalhar com pseudocodigo pra algo desse nível ai eu já acho bobeira. Não sei qual linguagem você quer aprender mas pode ficar brincando com os interpretadores online. Esse abaixo é para python mas se prefere algo da familia do C ou java ou o que for, você acha tambem.

joga isso abaixo nesse site por exemplo pra você ver o que acontece

invalid = False
print(invalid)
print(not invalid)
 

MFA Games

Ei mãe, 500 pontos!
Mensagens
26.088
Reações
35.328
Pontos
574
Exatamente isso. Nesse caso do pseudocodigo, o "nao invalido" quer dizer a negação do valor .
Uma variavel booleana pode assumir somente duas variáveis em computação não quântica. Ou ela é zero, ou ela é um. Ou ela é true ou é false.
O nao é uma negação disso. Logo:

invalid = true;
se você imprimir not invalid, a resposta vai ser false.

Uma recomendação que eu te dou é começar a escrever tudo em ingles no codigo, e trabalhar com pseudocodigo pra algo desse nível ai eu já acho bobeira. Não sei qual linguagem você quer aprender mas pode ficar brincando com os interpretadores online. Esse abaixo é para python mas se prefere algo da familia do C ou java ou o que for, você acha tambem.

joga isso abaixo nesse site por exemplo pra você ver o que acontece

invalid = False
print(invalid)
print(not invalid)
então, eu to fazendo redes de computação, e tô tendo a materia algoritmo. a materia vai ensinando passo a passo, ou seja, cada coisa de uma vez. estava aprendendo sobre se, depois aprendi sobre senão, depois foi sobre Estrutura seletiva aninhada, e agora estou aprendendo sobre seleção de caso.

o curso trabalha com portugol estudio e C++, então tem exemplos dos dois, mas eu tava usando mais o portugol...
 

AriltonJA

O Arauto da Luz
VIP
Mensagens
2.786
Reações
3.055
Pontos
304
Eu faria isso:

Dim meses(12) as string
Mes(1)="janeiro"
Mes(2)="fevereiro"
.
.
.

X=input("Digite o número do mes")
X=int(x)
IF x<1 or x>12 then mensagem de erro

Msgbox(mes(x))
então, eu to fazendo redes de computação, e tô tendo a materia algoritmo. a materia vai ensinando passo a passo, ou seja, cada coisa de uma vez. estava aprendendo sobre se, depois aprendi sobre senão, depois foi sobre Estrutura seletiva aninhada, e agora estou aprendendo sobre seleção de caso.

o curso trabalha com portugol estudio e C++, então tem exemplos dos dois, mas eu tava usando mais o portugol...
Saquei. Nossa, cara, eu pessoalmente não sou fã de portugol. Quer dizer, é uma boa forma de ensinar programação para quem não sabe inglês. Porém se a pessoa já sabe inglês, eu já obtive resultados muito mais rápidos ensinando direto em c++. Até chegar em ponteiros, a linguagem é muito direta nesse sentido e fica bem melhor para o aluno experimentar.

Portugol é útil quando a pessoa não sabe nada e está fazendo curso de Java, que não é nem um pouco direta
 

ryuzoRX

Bam-bam-bam
Mensagens
3.168
Reações
6.586
Pontos
354
Estou aprendendo na marra também, fiz um curso de algoritmo e lógica de programação pela Udemy, depois empolguei e comecei Java

Tava muito bem até começar orientação a objeto, aí me deu um nó na cabeça

No lugar desses tantos condicionais aninhados aí eu usaria o switch case, acho que o código fica mais organizado e fácil de interpretar
 

AriltonJA

O Arauto da Luz
VIP
Mensagens
2.786
Reações
3.055
Pontos
304
Estou aprendendo na marra também, fiz um curso de algoritmo e lógica de programação pela Udemy, depois empolguei e comecei Java

Tava muito bem até começar orientação a objeto, aí me deu um nó na cabeça

No lugar desses tantos condicionais aninhados aí eu usaria o switch case, acho que o código fica mais organizado e fácil de interpretar
Na Alura eu já vi um curso com uma explicação muito boa do tópico de orientação a objetos. No YouTube tem umas explicações bem legais também onde os caras usam paralelos com objetos reais mesmo para descrever e explicar o paradigma.

Possivelmente o professor dele passou essa b*sta de ifs pra depois mostrar como poderia ser feito um switch ou até só criar um array com os meses, visto que a indexação é o próprio número do mês.

meses = [jan..dez]
entrada = valor digitado
Imprimir( meses[valor digitado])
 

MFA Games

Ei mãe, 500 pontos!
Mensagens
26.088
Reações
35.328
Pontos
574
Saquei. Nossa, cara, eu pessoalmente não sou fã de portugol. Quer dizer, é uma boa forma de ensinar programação para quem não sabe inglês. Porém se a pessoa já sabe inglês, eu já obtive resultados muito mais rápidos ensinando direto em c++. Até chegar em ponteiros, a linguagem é muito direta nesse sentido e fica bem melhor para o aluno experimentar.

Portugol é útil quando a pessoa não sabe nada e está fazendo curso de Java, que não é nem um pouco direta
então, to usando o portugol porque eu to olhando pro código e entendendo, já no C++ eu fico: que porra significa essa variável aqui mesmo??? ou: qual é a variável que representa o escreva mesmo??? KKKKKKKKKKK
 

AriltonJA

O Arauto da Luz
VIP
Mensagens
2.786
Reações
3.055
Pontos
304
então, to usando o portugol porque eu to olhando pro código e entendendo, já no C++ eu fico: que porra significa essa variável aqui mesmo??? ou: qual é a variável que representa o escreva mesmo??? KKKKKKKKKKK
Hahahahaha tem algumas coisas que demoram a pegar mesmo. Ao menos não é Java.
 
Topo Fundo