Ir ao conteúdo

Posts recomendados

Postado

 Escreva um programa que solicite o nome e o dia, mês e ano de nascimento de um usuário. O algoritmo deve converter para a forma extensa o valor numérico do mês e informar a idade do usuário. Informe como no exemplo abaixo  :

Entrada de dados:                             Saída de dados:

Nome: aluno 1                                   Aluno 1 tem 37 anos.

Data de Nascimento                         Data de nascimento:

Dia: 01                                               01 de março de 1980

Mês: 03

 meu programa:
var
Nome, ano:caractere
dia, mes: inteiro
ano2: caractere
escreva ("Nome: ")
     leia (nome)
     escreval ("Dia do Nascimento: , ex:24")
     leia (dia)
     Escreval ("Mês de Nascimento: , ex:02")
     leia(mes)
     escreval ("Data de Nascimento: , ex:1980")
     leia(ano)
     limpatela
     Escreval ("Ano Atual: ")
     leia(ano2)
     ano <- (ano2 - ano)
     escreval("Nome: ", nome, "Tem", ano2, )
     escreval ("Nasceu em: ", mes, "De", ano)

quando eu tento executar o "ano" da erro porque isso?, já vi vários exercícios igualzinhos e todos estavam assim :v

  • Curtir 1
Postado

@davidzinh    está dando erro porque você está tentando subtrair string de string e isso não pode .   e para fazer esse programa você precisará de umas cem linhas pois você precisa usar muitos se para fazer as comparações do mês com o respectivos por extenso .

  • Curtir 1
Postado

@davidzinh      coloque a variável ano e ano2 como inteiro e crie mais uma variável para o mes pode ser mes2 do tipo caractere para receber o mes por extenso, e depois de pegar o dia precisa verificar se está dentro da faixa certa que é de 1 até 31 e se não estiver nessa faixa repetir esse trecho até que esteja certo, e quando pegar o mês verificar também se está na faixa de 1 até 12, se não estiver repetir esse trecho até que esteja dentro da faixa, em seguida quando pegar o ano e o ano2, que é o ano atual, verificar se ano2 é maior que ano de nascimento, e se não for então repetir esse trecho até que esteja certo, depois você faz as verificações do mês, para ver que mês é, e coloca em mes2 o por extenso desse mês,  por exemplo :

se mes = 1 ENTÃO
  mes2 := " Janeiro"
senao
  se mes = 2 ENTÃO
    mes2 := "Fevereiro"
      .
      .
    continuação do codigo
    ate o mes de dezembro
      .
  fimse
fimse

assim no final depois de comparar até o 12 você terá o mês por extenso, então imprimir o resultado assim :

  escreval("Nome: ",nome," Tem",ano2-ano," Anos de idade" )
  escreval (nome," Nasceu em: ",dia," De ",mes2," De ",ano)

 

  • Curtir 1
Postado
Var
Nome, mes2:caractere
dia, mes: inteiro
ano:real
nascimento, idade:real
Inicio
     escreva ("Nome: ")
     leia (nome)
     escreval ("Dia do Nascimento: , ex:24")
     leia (dia)
     Escreval ("Mês de Nascimento: , ex:02")
     leia(mes)
     escreval ("Ano De Nascimento: , ex:1980")
leia (nascimento)
limpatela
escreval ("Ano Atual: ")
leia (ano)
idade <- (ano - nascimento)
     escreval("Nome: ", nome,"Tem", idade, "Anos de Idade")
    para mes de 1 ate 12 faca
     se mes = 1 então
  mes2 <- " Janeiro"
senao
  se mes = 2 então
    mes2 <- "Fevereiro"
se mes = 3 então
    mes2 <- "Março"
    senao
se mes = 4 então
    mes2 <- "Abril"
    senao
se mes = 5 então
    mes2 <- "Maio"
    senao
se mes = 6 então
    mes2 <- "Junho"
se mes = 7 então
    mes2 <- "Julho
    senao
se mes = 8 então
    mes2 <- "Agosto"
se mes = 9 então
    mes2 <- "Setembro"
    senao
se mes = 10 então
    mes2 <- "Outubro"
se mes = 11 então
    mes2 <- "Novembro"
se mes = 12 então
    mes2 <- "Dezembro"
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimpara
 escreval (nome," Nasceu em: ",dia," De ",mes2," De ",nascimento)
adicionado 26 minutos depois

já consegui valeu @devair1010

  • Curtir 1
  • Membro VIP
Postado

Olá.

 

Como o código já está "pronto", tentei dar uma reorganizada fazendo correções e ao mesmo tempo passando algumas sugestões:
 

Alguns tópicos aplicados:

1) Você está utilizando algumas variáveis como real, mas sem necessidade. São inteiros!;

2) No lugar de mes2, sugiro usar mesExt, ou algo do tipo.

3) Creio que não ficou legal usar nascimento para o ano de nascimento. Já que o dia e o mês também fazem parte da data de nascimento. Sugiro usar dia, mes e ano para a data de nascimento, e anoAtul para o ano atual;

4) Como citado por @devair1010:

Em 22/08/2017 às 21:13, devair1010 disse:

ficou faltando alguns senao

5) Evite começar as palavras com maiúscula no meio da frase, ou seja, seguindo a forma "natural" de escrever.

6) No VisuAlg, não precisa colocar espaços antes das variáveis numéricas, é inserido automaticamente. Se inserir, fica um espaçamento duplo (acho isso um defeito do programa, mas fazer o quê?);

7) Esse para não tem funcionalidade no seu código, ou seja, está repetindo a mesma verificação 12 vezes. Simplesmente remova-o.

...

 

Ficaria algo assim:

algoritmo "Nome do meu algoritmo"
var
  nome, mesExt   :caractere
  dia, mes, ano  :inteiro
  anoAtual       :inteiro
  idade          :inteiro
Inicio
escreva("Nome: ")
leia(nome)
escreval("Dia do Nascimento: , ex:24")
leia (dia)
Escreval ("Mês de Nascimento: , ex:02")
leia(mes)
escreval ("Ano De Nascimento: , ex:1980")
leia(ano)

limpatela
escreval ("Ano Atual: ")
leia (anoAtual)

idade <-(anoAtual-ano)

se mes = 1 ENTÃO
   mesExt <- "Janeiro"
senao
   se mes = 2 ENTÃO
      mesExt <- "fevereiro"
senao
   se mes = 3 ENTÃO
      mesExt <- "março"
senao
   se mes = 4 ENTÃO
      mesExt <- "abril"
senao
   se mes = 5 ENTÃO
      mesExt <- "maio"
senao
   se mes = 6 ENTÃO
      mesExt <- "junho"
senao
   se mes = 7 ENTÃO
      mesExt <- "julho
senao
   se mes = 8 ENTÃO
      mesExt <- "agosto"
senao
   se mes = 9 ENTÃO
      mesExt <- "setembro"
senao
   se mes = 10 ENTÃO
      mesExt <- "outubro"
senao
   se mes = 11 ENTÃO
      mesExt <- "novembro"
senao
   se mes = 12 ENTÃO
      mesExt <- "dezembro"
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
fimse
escreval(nome," tem",idade," anos de idade") //fiz pequenos ajustes e deixei aqui em baixo [Simon.Viegas]
escreval(nome," nasceu em",dia," de ",mesExt," de",ano) //fiz pequenos ajustes [Simon.Viegas]
fimalgoritmo

 

Como está utilizando uma mesma variáveis numa sequência de se/senão (e é uma variável do tipo inteiro), é possível utilizar o Escolha. Ex.:

escolha mes
   caso 1
      mesExt <- "janeiro"
   caso 2
      mesExt <- "fevereiro"
   caso 3
      mesExt <- "março"
   caso 4
      mesExt <- "abril"
   caso 5
      mesExt <- "maio"
   caso 6
      mesExt <- "junho"
   caso 7
      mesExt <- "julho
   caso 8
      mesExt <- "agosto"
   caso 9
      mesExt <- "setembro"
   caso 10
      mesExt <- "outubro"
   caso 11
      mesExt <- "novembro"
   caso 12
      mesExt <- "dezembro"
fimescolha

 

Poderia também usar um vetor de 1 a 12, contendo respectivamente o mês... e usaria a variável mes como coordenada. Algo como: mesExt <- vetMes[mes]. Dessa forma não precisaria mais da estrutura de seleção, ou seja  os se ou escolha.

 

 

Por ai vai.

 

No aguardo.

  • Curtir 1
  • Obrigado 1
Visitante
Este tópico está impedido de receber novas respostas.

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!