Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal ... funciona assim, a primeira tela é para cadastrar o gabarito. Vai ter um contador j que vai de 1 a 5 que vai lendo as notas e armazenando as notas em um vetor de 5 posições (gab[x]). Vai limpar a tela. A segunda tela é a tela de cadastrar o nome e a nota dos alunos. São 3 alunos. A resposta da resposta de cada aluno é armazenada é armazenada temporariamente em outro vetor de 5 posições(resp[x]). Se o valor das posição respectiva do vetor gabarito e resp[x] forem iguais, o aluno ganha dois pontos, que são armazenados em nota[x]. Na terceira tela, mostra o resultado, com a nota de cada aluno e a média da turma.

 

algoritmo "Aula 14 - Corrigindo provas"
var
   nome: vetor[1..3] de caractere
   Gab, Resp: vetor[1..5] de caractere
   Nota: vetor[1..3] de real
   NotasTurma, MediaTurma: real
   i, j: inteiro
   
funcao CalcularPontos(gabarito, resposta: real):real
var
   N: real
Inicio
   Se (maiusc(gabarito) = maiusc(resposta)) então
      N:= 2
   Fimse
   Retorne N
fimfuncao

inicio
   //--------------------------------------------//
   //Tela 1:
   //Cadastro de Gabarito:
   EscrevaL("  Passo 1 - Cadastro de Gabarito  ")
   EscrevaL("----------------------------------")
   Para j de 1 ate 5 faca
      EscrevaL("Questão ", j, ":")
      Leia(Gab[j])
   Fimpara
   LimpaTela
   //--------------------------------------------//
   //Tela 2:
   //Cadastro de Nome:
   Para i de 1 ate 3 faca
      EscrevaL("--------------------")
      EscrevaL(" Aluno ", i)
      EscrevaL("--------------------")
      Escreva("Nome: ")
      Leia(nome[i])
      //Cadastro da Notas e cálculo da nota
      //de cada aluno:
      Para j de 1 ate 5 faca
         EscrevaL("RESPOSTAS DADAS")
         Escreva("Questão ", j, ":")
         Leia(Resp[j])
         nota[i]:= nota[i] + CalcularPontos(Gab[j], Resp[j])
      FimPara
      //-----------------------------------------//
      NotasTurma:= NotasTurma + Nota[i]
      LimpaTela
   Fimpara
   MediaTurma:= NotasTurma/3
   LimpaTela
   //--------------------------------------------//
   //Tela 3:
   //Resultado com notas finais e média da turma:
   EscrevaL("Notas Finais")
   EscrevaL("------------------------")
   Para i de 1 ate 3 faca
      EscrevaL("Nome: ", nome[i]:10, Nota[i]:3:1)
   FimPara
   EscrevaL("------------------------")
   EscrevaL("Média da turma: ", MediaTurma)
   //--------------------------------------------//
fimalgoritmo

Alguém poderia avaliar?

  • Curtir 1
Postado

@viniciusv21      seu código está bom, mas tem alguns erros, você colocou na função CalcularPontos 

(gabarito, resposta:real):real

sendo que o que você vai compara são caracteres então precisa ser assim :

(gabarito,resposta:caractere):caractere

e na hora de retornar precisa passar para real

Retorne numpcarac(N)

e na hora de somar volte ele para numero assim :

nota[i]:= nota[i]+caracpnum(CalcularPontos(Gab[j], Resp[j]))

 

  • Curtir 2
  • Membro VIP
Postado

Olá.

 

Só complementando:

 

13 horas atrás, devair1010 disse:

sendo que o que você vai compara são caracteres então precisa ser assim :


(gabarito,resposta:caractere):caractere

e na hora de retornar precisa passar para real


Retorne numpcarac(N)

e na hora de somar volte ele para numero assim :


nota[i]:= nota[i]+caracpnum(CalcularPontos(Gab[j], Resp[j]))

 

@devair1010, ai seriam 2 trabalhos... mais simples deixar a função retornando real. Ex.:

funcao CalcularPontos(gabarito,resposta:caractere):real

 

  • Curtir 3
Postado

Oi, eu fiz umas mudanças no código, colocando tudo em funções e procedimentos e vendo os detalhes que faltavam..

Mas quando rodo e chego na linha 22 aparece a mensagem:

image.thumb.png.00398288953e59199f88ff28f321c0e8.png

 

Coloquei colocar mais parênteses mas também não foi. Me deem uma ajuda rs

 

algoritmo "Aula 14 - Corrigindo provas"
var
   gabarito: vetor[1..5] de caractere
   aluno_n: inteiro
   nome: vetor[1..3] de caractere
   questao: inteiro
   Resposta: vetor[1..3, 1..5] de caractere
   Acerto: logico
   nota: vetor[1..3] de real
   SomaNotas, MediaTurma: real
   
funcao CadastrarGabarito(Q: inteiro):caractere
var
   GAB: caractere
inicio
   EscrevaL("----------------------------------")
   EscrevaL("  Passo 1 - Cadastro de Gabarito  ")
   EscrevaL("----------------------------------")
   Repita
      Escreva("Digite a resposta da ", Q , "º questão: ")
      Leia(GAB)
      Se nao(maiusc(GAB)>= "A" e maiusc(GAB)<="E") então
         EscrevaL("Opção inválida")
      Fimse
      LimpaTela
   Ate (maiusc(GAB)>="A") e (maiusc(GAB)<="E")
   Retorne GAB
fimfuncao

funcao CadastraNomes(A: inteiro): caractere
var
   N: caractere
Inicio
   EscrevaL("-------------------------------")
   EscrevaL("  Passo 2 - Cadastro de Nomes  ")
   EscrevaL("-------------------------------")
   Repita
      EscrevaL(" Aluno ", A)
      Escreva("Nome: ")
      Leia(N)
      Se N = "" então
         EscrevaL("Opção inválida!")
      Fimse
   Ate N <> ""
   LimpaTela
   Retorne N
fimfuncao

funcao RecebeResposta(A, Q: inteiro): caractere
var
   R: caractere
Inicio
   EscrevaL("-----------------------------------")
   EscrevaL("  Passo 3 - Cadastro de Respostas  ")
   EscrevaL("-----------------------------------")
   Repita
      EscrevaL(" Aluno nº ", A, ":", nome[A])
      Escreva (" Questão", Q, ": ")
      Leia(R)
      Se nao(maiusc(GAB) >= "A" e maiusc(GAB) <= "E") então
         EscrevaL("Opção inválida! O gabarito vai de A até E.")
      Fimse
   Ate (maiusc(R)>="A") e (maiusc(R)<="E")
   LimpaTela
   Retorne R
fimfuncao

funcao ComparaResposta(A,Q:inteiro; GAB: caractere): logico
var
   AC: logico
inicio
   AC <- falso
   Se (maiusc(Resposta[A,Q]) = maiusc(GAB)) então
      AC <- verdadeiro
   Fimse
   Retorne AC
fimfuncao

procedimento MostraNotasDeCadaAluno()
inicio
   EscrevaL("----------------------")
   EscrevaL("     Notas Finais     ")
   EscrevaL("----------------------")
   Para aluno_n de 1 ate 3 faca
      EscrevaL("Nome: ", nome[aluno_n]:10, Nota[aluno_n]:3:2)
   FimPara
fimprocedimento

procedimento MostraMediaDaTurma()
inicio
   EscrevaL("------------------------")
   EscrevaL("  Média da turma: ", MediaTurma:3:2)
   EscrevaL("------------------------")
fimprocedimento

inicio
   //Tela 1:
   Para questao de 1 ate 5 faca
      gabarito[questao] <- CadastrarGabarito(questao)
   Fimpara
   //Tela 2:
   Para aluno_n de 1 ate 3 faca
      nome[aluno_n] <- CadastraNomes(aluno_n)
   Fimpara

   Para aluno_n de 1 ate 3 faca
      Para questao de 1 ate 5 faca
         Resposta[aluno_n, questao] <- RecebeResposta(aluno_n, questao)
         Acerto <- ComparaResposta(aluno_n, questao, gabarito[questao])
         //ATRIBUIR NOTA:
         Se (Acerto = verdadeiro) então
            nota[aluno_n] <- nota[aluno_n] + 2
         FimSe
      Fimpara
      SomaNotas <- SomaNotas + nota[aluno_n]
   FimPara
   MediaTurma <- (SomaNotas/3)
   LimpaTela
   
   //TELA 3:
   MostraNotasDeCadaAluno()
   MostraMediaDaTurma()
fimalgoritmo

 

  • Curtir 1
Postado

Oi!

Considerem esta versão:

 

algoritmo "Aula 14 - Corrigindo provas"
var
   gabarito: vetor[1..5] de caractere
   aluno_n: inteiro
   nome: vetor[1..3] de caractere
   questao: inteiro
   Resposta: vetor[1..3, 1..5] de caractere
   Acerto: logico
   nota: vetor[1..3] de real
   SomaNotas, MediaTurma: real

procedimento CadastrarGabarito(var GAB: caractere; Q: inteiro)
inicio
   EscrevaL("----------------------------------")
   EscrevaL("  Passo 1 - Cadastro de Gabarito  ")
   EscrevaL("----------------------------------")
   Repita
      Escreva("Digite a resposta da ", Q , "º questão: ")
      Leia(GAB)
      Se nao(maiusc(GAB)>= "A" e maiusc(GAB)<="E") então
         EscrevaL("Opção inválida")
      Fimse
      LimpaTela
   Ate (maiusc(GAB)>="A") e (maiusc(GAB)<="E")
fimfuncao

funcao CadastraNomes(A: inteiro): caractere
var
   N: caractere
Inicio
   EscrevaL("-------------------------------")
   EscrevaL("  Passo 2 - Cadastro de Nomes  ")
   EscrevaL("-------------------------------")
   Repita
      EscrevaL(" Aluno ", A)
      Escreva("Nome: ")
      Leia(N)
      Se N = "" então
         EscrevaL("Opção inválida!")
      Fimse
   Ate N <> ""
   LimpaTela
   Retorne N
fimfuncao

procedimento RecebeResposta(var R: caractere)
var
   R: caractere
Inicio
   EscrevaL("-----------------------------------")
   EscrevaL("  Passo 3 - Cadastro de Respostas  ")
   EscrevaL("-----------------------------------")
   Repita
      EscrevaL(" Aluno nº ", A, ":", nome[A])
      Escreva (" Questão", Q, ": ")
      Leia(R)
      Se nao(maiusc(GAB) >= "A" e maiusc(GAB) <= "E") então
         EscrevaL("Opção inválida! O gabarito vai de A até E.")
      Fimse
   Ate (maiusc(R)>="A") e (maiusc(R)<="E")
   LimpaTela
fimfuncao

funcao ComparaResposta(A,Q:inteiro; GAB: caractere): logico
var
   AC: logico
inicio
   AC <- falso
   Se (maiusc(Resposta[A,Q]) = maiusc(GAB)) então
      AC <- verdadeiro
   Fimse
   Retorne AC
fimfuncao

funcao AtribuirNota(A: inteiro; Q: inteiro; AC: logico)
inicio
   Se (AC = verdadeiro) então
      nota[aluno_n] <- nota[aluno_n] + 2
   FimSe
fimfuncao

procedimento MostraNotasDeCadaAluno()
inicio
   EscrevaL("----------------------")
   EscrevaL("     Notas Finais     ")
   EscrevaL("----------------------")
   Para aluno_n de 1 ate 3 faca
      EscrevaL("Nome: ", nome[aluno_n]:10, Nota[aluno_n]:3:2)
   FimPara
fimprocedimento

procedimento MostraMediaDaTurma()
inicio
   EscrevaL("------------------------")
   EscrevaL("  Média da turma: ", MediaTurma:3:2)
   EscrevaL("------------------------")
fimprocedimento

inicio
   //Tela 1:
   Para questao de 1 ate 5 faca
      CadastrarGabarito(gabarito[questao], questao)
   Fimpara
   //Tela 2:
   Para aluno_n de 1 ate 3 faca
      CadastraNomes(nome[aluno_n])
   Fimpara

   Para aluno_n de 1 ate 3 faca
      Para questao de 1 ate 5 faca
         RecebeResposta(resposta[aluno_n, questao])
         Acerto <- ComparaResposta(aluno_n, questao, gabarito[questao]) 
         nota[aluno_n] <- AtribuirNota(aluno_n, questao, Acerto) 
     	     //Se Acerto for verdadeiro o aluno_n recebe dois pontos
      Fimpara
      SomaNotas <- SomaNotas + nota[aluno_n]
   FimPara
   MediaTurma <- (SomaNotas/3)
   LimpaTela

   //TELA 3:
   MostraNotasDeCadaAluno()
   MostraMediaDaTurma()
fimalgoritmo

 

  • Curtir 1
  • Membro VIP
Postado

Olá.

 

1)  SEPARAÇÃO DAS SENTENÇAS

Esse erro o próprio compilador aponta a linha.

 

Cada sentença é separados por ().

3 horas atrás, Vinícius Werneck disse:

      Se nao(maiusc(GAB)>= "A" e maiusc(GAB)<="E") então

 

Por

      Se nao (maiusc(GAB)>= "A") e (maiusc(GAB)<="E") ENTÃO

 

 

 

2) ERRO SINTAXE

Aqui, o bagulho fica mais louco... tava dando erro na linha procedimento MostraMediaDaTurma(), ai fiz uns testes apertando F8 para ver o comportamento linha a linha (vai marcando com uma linha azul)... e percebi que após terminar o CadastrarGabarito(), o código continuou para função abaixo, em vez de voltar para o programa principal.... :confused:

 

Daí consegui ver que usou fimFuncao em detrimento do fimprocedimento para alguns procedimento(s).

 

Pronto. Ai deu outro erro na função AtribuirNota()... nela você não determinou qual o retorno, ou seja, como provavelmente não era para ter retorno mesmo, basta mudar para procedimento (assim como também usar fimProcedimento).

 

 

***

 

Parece que voltou a rodar sem erros.. mas não fiz muitos testes e nem analisei se está se comportando como deveria.

 

No aguardo.

Postado

Oi,

 

Eu fiz os testes e não deu problema :)

O único detalho que tive que ainda não sei resolver é na parte de cadastrar os Nomes, se eu der dois espaços ao em vez 1 de um, em vez de dar nome inválido ele cadastra o nome e a parte do código :

Repita
      EscrevaL(" Aluno ", A)
      Escreva("Nome: ")
      Leia(N)
      Se N = "" então
         EscrevaL("Opção inválida!")
      Fimse
   Ate N <> ""

.. só funciona para quando aperta enter. Se der dois espaços e dar enter o programa cadastra o nome como vazio rs

O código completo:

 

algoritmo "Aula 14 - Corrigindo provas"
const
   MAX = 35
var
   gabarito: vetor[1..5] de caractere
   total: inteiro
   aluno_n: inteiro
   nome: vetor[1..MAX] de caractere
   questao: inteiro
   Resposta: vetor[1..MAX, 1..5] de caractere
   Acerto: logico
   nota: vetor[1..MAX] de real
   SomaNotas, MediaTurma: real

procedimento CadastrarGabarito(var GAB: caractere)
var
   ind: inteiro
   letras: vetor[0..8] de caractere
inicio
   EscrevaL("----------------------------------")
   EscrevaL("  Passo 1 - Cadastro de Gabarito  ")
   EscrevaL("----------------------------------")
   Repita
      EscrevaL("Digite a resposta da ", questao:1 , "º questão: ")
      //Testator: Gerador de caracteres aleatórios para GAB que vai de A até I
         letras[0] <- "a"
         letras[1] <- "b"
         letras[2] <- "c"
         letras[3] <- "d"
         letras[4] <- "e"
         letras[5] <- "f"
         letras[6] <- "g"
         letras[7] <- "h"
         letras[8] <- "i"
         ind <- Randi(9)
         GAB <- maiusc(letras[ind])
      //Leia(GAB)
      Se nao ((maiusc(GAB)>= "A") e (maiusc(GAB)<="E")) então
         EscrevaL("Opção inválida")
      Fimse
   Ate (maiusc(GAB)>="A") e (maiusc(GAB)<="E")
   LimpaTela
fimprocedimento

procedimento CadastrarQuantidadeAlunos(var total: inteiro)
var
   continuar : logico
inicio
   Repita
      continuar := falso
      Escreva("Digite a quantidade de alunos: ")
      aleatorio 1,40
      Leia(total)
      Se (total > 35) ou (total < 1) então
         EscrevaL("Quantidade de alunos inválida. [Mín: 1, Máx: 35]")
      Senao
         continuar := verdadeiro
      Fimse
   Ate continuar
   Limpatela
fimprocedimento

procedimento CadastraNomes(var nome: caractere)
var
   continuar : logico
Inicio
   EscrevaL("-------------------------------")
   EscrevaL("  Passo 2 - Cadastro de Nomes  ")
   EscrevaL("-------------------------------")
   Repita
      EscrevaL(" Aluno ", aluno_n:1)
      Escreva("Nome: ")
      Leia(nome)
      Se nome = "" então
         EscrevaL("Opção inválida!")
      Fimse
   Ate nome <> ""
   LimpaTela
fimprocedimento

procedimento RecebeResposta(var R: caractere)
var
   letras:vetor[0..8] de caractere
   ind: inteiro
Inicio
   EscrevaL("-----------------------------------")
   EscrevaL("  Passo 3 - Cadastro de Respostas  ")
   EscrevaL("-----------------------------------")

   Repita
      EscrevaL(" Aluno nº ", aluno_n:1, ": ", nome[aluno_n])
      Escreva (" Questão", questao, ": ")
      //Testator: Gerador de caracteres aleatórios para GAB que vai de A até I
         letras[0] <- "a"
         letras[1] <- "b"
         letras[2] <- "c"
         letras[3] <- "d"
         letras[4] <- "e"
         letras[5] <- "f"
         letras[6] <- "g"
         letras[7] <- "h"
         letras[8] <- "i"
         ind <- Randi(9)
         R <- maiusc(letras[ind])
      //Leia(R)
      se nao ((maiusc(R)>="A") e (maiusc(R)<= "E")) então
         EscrevaL("Opção inválida! O gabarito vai de A até E.")
      Fimse
   Ate (maiusc(R)>="A") e (maiusc(R)<="E")
   LimpaTela
fimprocedimento

funcao ComparaResposta(RESP :caractere; GAB: caractere): logico
var
   AC: logico
inicio
   AC <- falso
   Se (maiusc(RESP) = maiusc(GAB)) então
      AC <- verdadeiro
   Fimse
   Retorne AC
fimfuncao

procedimento AtribuirNota(var notaAluno: inteiro; AC: logico)
inicio
   Se (AC = verdadeiro) então
      notaAluno <- notaAluno + 2
   FimSe
fimprocedimento

procedimento SomarNotaDosAlunos()
inicio
   Para aluno_n de 1 ate total faca
      SomaNotas := SomaNotas + nota[aluno_n]
   FimPara
fimprocedimento

procedimento FazerMediaDaTurma()
inicio
   MediaTurma := SomaNotas/total
fimprocedimento

procedimento MostraNotasDeCadaAluno()
inicio
   EscrevaL("----------------------")
   EscrevaL("     Notas Finais     ")
   EscrevaL("----------------------")
   Para aluno_n de 1 ate total faca
      EscrevaL("Nome: ", nome[aluno_n]:10, Nota[aluno_n]:3:2)
   FimPara
fimprocedimento

procedimento MostraMediaDaTurma()
inicio
   EscrevaL("------------------------")
   EscrevaL("  Média da turma: ", MediaTurma:3:2)
   EscrevaL("------------------------")
fimprocedimento

inicio
Aleatorio on
   //Tela 1:
   Para questao de 1 ate 5 faca
      CadastrarGabarito(gabarito[questao])
   Fimpara
   //Tela 2:
   CadastrarQuantidadeAlunos(total)
   //Tela 3:
   Para aluno_n de 1 ate total faca
      CadastraNomes(nome[aluno_n])
   Fimpara
   //Tela 4:
   Para aluno_n de 1 ate total faca
      Para questao de 1 ate 5 faca
         RecebeResposta(resposta[aluno_n, questao])
         Acerto <- ComparaResposta(resposta[aluno_n, questao], gabarito[questao])
         AtribuirNota(nota[aluno_n], Acerto)
     	     //Se Acerto for verdadeiro o aluno_n recebe dois pontos
      Fimpara
   FimPara

   SomarNotaDosAlunos()
   FazerMediaDaTurma()
   LimpaTela

   //TELA 5:
   MostraNotasDeCadaAluno()
   MostraMediaDaTurma()
aleatorio off
fimalgoritmo

Também removi parâmetros que não serviam para nada em RecebeResposta, Acerto e AtribuirNota

  • Membro VIP
Postado

Olá.

 

3 horas atrás, Vinícius Werneck disse:

Eu fiz os testes e não deu problema :)

Em relação ao qual código? o antigo ou atual?

 

 

 

3 horas atrás, Vinícius Werneck disse:

.. só funciona para quando aperta enter. Se der dois espaços e dar enter o programa cadastra o nome como vazio rs

Normal. Pois está verificando apenas se a variável está vazia. Espaço é um caractere como qualquer outro.

 

Daí, você pode definir as regras para um nome ser válido, ex.:

- Apenas conter letras e espaços (vogais e consoantes) ;

- Não começar com espaço e nem terminar com espaço;

- Não possuir mais de um espaço consecutivo;

etc.

 

Tem que aplicar as regras de acordo com as definições que escolher.

 

 

No aguardo.

Postado
36 minutos atrás, Simon Viegas disse:

Olá.

 

Em relação ao qual código? o antigo ou atual?

 

O novo.

 

36 minutos atrás, Simon Viegas disse:

 

Normal. Pois está verificando apenas se a variável está vazia. Espaço é um caractere como qualquer outro.

 

Daí, você pode definir as regras para um nome ser válido, ex.:

- Apenas conter letras e espaços (vogais e consoantes) ;

- Não começar com espaço e nem terminar com espaço;

- Não possuir mais de um espaço consecutivo;

etc.

 

Tem que aplicar as regras de acordo com as definições que escolher.

 

 

No aguardo.

Legal. Já já posto

Abraços.

  • Curtir 1
Postado

Oi. Achei legal em vez de colocar opção inválida no caso de ter duplo espaço ou espaço vazio no início é fazer uma função que retira os espaços do início, outra que tira os espaços consecutivos. Também achei legal alinhar as notas a partir do nome de maior largura. Segue:

 

algoritmo "Corrigindo provas"
const
   MAX = 35
var
   gabarito: vetor[1..5] de caractere
   total: inteiro
   tamanho_maiornome: inteiro
   aluno_n: inteiro
   nome: vetor[1..MAX] de caractere
   questao: inteiro
   Resposta: vetor[1..MAX, 1..5] de caractere
   Acerto: logico
   nota: vetor[1..MAX] de real
   SomaNotas, MediaTurma: real

procedimento CadastrarGabarito(var GAB: caractere)
inicio
   EscrevaL("----------------------------------")
   EscrevaL("  Passo 1 - Cadastro de Gabarito  ")
   EscrevaL("----------------------------------")
   Repita
      EscrevaL("Digite a resposta da ", questao:1 , "º questão: ")
      Leia(GAB)

      Se (compr(GAB) = 1) então
         Se nao ((maiusc(GAB)>= "A") e (maiusc(GAB)<="E")) então
            EscrevaL("Opção inválida!")
         Fimse
      Senao
         EscrevaL("Opção inválida!")
      Fimse
   Ate (maiusc(GAB)>="A") e (maiusc(GAB)<="E") e (compr(GAB)=1)
   LimpaTela
fimprocedimento

procedimento CadastrarQuantidadeAlunos(var total: inteiro)
var
   continuar : logico
inicio
   Repita
      continuar := falso
      Escreva("Digite a quantidade de alunos: ")
      Leia(total)
      Se (total > 35) ou (total < 1) então
         EscrevaL("Quantidade de alunos inválida. [Mín: 1, Máx: 35]")
      Senao
         continuar := verdadeiro
      Fimse
   Ate continuar
   Limpatela
fimprocedimento

procedimento VerificarSeNome_eh_o_maior(nomealuno: caractere; var largura_maior_nome:inteiro )
inicio
   Se (compr(nomealuno) > largura_maior_nome) então
      largura_maior_nome <- compr(nomealuno)
   Fimse
fimprocedimento

procedimento CadastraNomes(var nome: caractere)
var
   continuar, nomevalido : logico
Inicio
   EscrevaL("-------------------------------")
   EscrevaL("  Passo 2 - Cadastro de Nomes  ")
   EscrevaL("-------------------------------")
   Repita
      EscrevaL(" Aluno ", aluno_n:1)
      Escreva("Nome: ")
      nomevalido <- falso
      Leia(nome)
      Se ApenasEspacos_ou_EspacoVazio(nome) = verdadeiro então
         EscrevaL("Entrada inválida! Nome em branco.")
      Senao
         Se (Conferir_setem_ApenasConsoante_e_Espaco(nome) = verdadeiro) então
            nomevalido <- verdadeiro
            Se (Conferir_setem_EspacoInicio_ou_EspacoFim(nome) = verdadeiro) então
               nome <- Retirar_EspacoInicio_e_ou_EspacoFim(nome)
            Fimse
            Se (Conferir_DoisEspacosConsecutivos(nome) = verdadeiro) então
               nome <- Retirar_EspacoConsecutivo(nome)
            Fimse
         Senao
            EscrevaL("Nome inválido. Só são permitidos letras e espaços.")
         Fimse
      Fimse
   Ate nomevalido = verdadeiro
   LimpaTela
fimprocedimento

funcao ApenasEspacos_ou_EspacoVazio(nomealuno: caractere): logico
var
   i: inteiro
   apenas_espaco: logico
   Q_espacos: inteiro
inicio
   Q_espacos <- 0
   Para i de 1 ate compr(nomealuno) faca
      Se (copia(nomealuno,i,1) = " ") então
         Q_espacos <- Q_espacos + 1
      Fimse
   FimPara
   Se (Q_espacos = compr(nomealuno)) então
      apenas_espaco <- verdadeiro
   Fimse
   Retorne apenas_espaco
fimfuncao

funcao Conferir_setem_ApenasConsoante_e_Espaco(nomealuno: caractere): logico
var
   caracter_valido: inteiro
   i: inteiro
   nomevalido: logico
inicio
   nomevalido <- falso
   Para i <- 1 ate compr(nomealuno) faca
      //Vai verificar quantos caracteres são validos:
      Se (copia(maiusc(nomealuno),i,1) >= "A") e (copia(maiusc(nomealuno),i,1) <= "Z") então
         caracter_valido <- caracter_valido + 1
      Fimse
      Se (copia(nomealuno,i,1) = " ") então
         caracter_valido <- caracter_valido + 1
      Fimse
   Fimpara
   Se (caracter_valido = compr(nomealuno)) então
      nomevalido <- verdadeiro
   Fimse
   Retorne nomevalido
fimfuncao

funcao Conferir_setem_EspacoInicio_ou_EspacoFim(nomealuno:caractere): logico
var
   precisa_retirar_espaco: logico
inicio
   precisa_retirar_espaco <- falso
   Se (Copia(nomealuno,1,1) = " ") então //Verifica se tem espaço no início
      precisa_retirar_espaco <- verdadeiro
   Senao
      Se (Copia(nomealuno,compr(nomealuno),1) = " ") então //Verifica se tem espaço
                                                          //no fim
         precisa_retirar_espaco <- verdadeiro
      Fimse
   Fimse
   Retorne precisa_retirar_espaco
fimfuncao

funcao Retirar_EspacoInicio_e_ou_EspacoFim(nomealuno:caractere): caractere
var
   nomecorrigido: caractere
   i: inteiro
   posicao_primeira_letra, posicao_ultima_letra: inteiro
inicio
   i <- 1
   posicao_primeira_letra <- 0
   posicao_ultima_letra <- 0
   Repita
      //Primeiro vai procurar onde está a primeira letra da direita para
      //esquerda.
      Se (copia(nomealuno,i,1) = " ") então  //Se a posição estiver vazia..
         i<-i+1      //...Vai procurar na próxima posição à direita
      Senao
          //Quando encontrar a primeira letra:
          posicao_primeira_letra <- i
      Fimse
   Ate (i> compr(nomealuno)) ou (posicao_primeira_letra <> 0)

   i<-compr(nomealuno)
   Repita
      //Por último vai procurar onde está a última letra, verificando
      //da esquerda para direita:
      Se (copia(nomealuno,i,1) = " ") então
         i<-i-1
      Senao
         posicao_ultima_letra <- i
      Fimse
   Ate (i<1) ou (posicao_ultima_letra <> 0)

   //Corrigindo nome:
   nomecorrigido <- copia(nomealuno, posicao_primeira_letra, posicao_ultima_letra)
   Retorne nomecorrigido
fimfuncao

funcao Conferir_DoisEspacosConsecutivos(nomealuno: caractere): logico
var
   i: inteiro
   precisa_tirar1espaco : logico
inicio
   i <- 1
   Repita
      Se Copia(nomealuno,i,1) = " " então
         Se Copia(nomealuno,i+1,1) = " " então
            precisa_tirar1espaco <- verdadeiro
         Fimse
      Fimse
      i <- i + 1
   Ate (i>compr(nomealuno)) ou (precisa_tirar1espaco = verdadeiro)
   Retorne precisa_tirar1espaco
fimfuncao

funcao Retirar_EspacoConsecutivo(nomealuno:caractere):caractere

var
   nomecorrigido: caractere
   i: inteiro
inicio
   nomecorrigido <- ""
   i<-1
   Repita
      Se copia(nomealuno,i,1) = " " então
         Se (Copia(nomecorrigido, compr(nomecorrigido),1) <> "") e (Copia(nomecorrigido, compr(nomecorrigido),1) <> " ") então
            nomecorrigido <- nomecorrigido + copia(nomealuno,i,1)
         Fimse
      Senao
         nomecorrigido <- nomecorrigido + copia(nomealuno,i,1)
      Fimse
      i <- i + 1
   Ate i>compr(nomealuno)
   Retorne nomecorrigido
fimfuncao

procedimento RecebeResposta(var R: caractere)
Inicio
   EscrevaL("-----------------------------------")
   EscrevaL("  Passo 3 - Cadastro de Respostas  ")
   EscrevaL("-----------------------------------")

   Repita
      EscrevaL(" Aluno nº ", aluno_n:1, ": ", nome[aluno_n])
      Escreva (" Questão", questao, ": ")
      Leia(R)
      Se nao ((maiusc(R)>="A") e (maiusc(R)<= "E")) então
         EscrevaL("Opção inválida! O gabarito vai de A até E.")
      Fimse
   Ate (maiusc(R)>="A") e (maiusc(R)<="E")
   LimpaTela
fimprocedimento

funcao ComparaResposta(RESP :caractere; GAB: caractere): logico
var
   AC: logico
inicio
   AC <- falso
   Se (maiusc(RESP) = maiusc(GAB)) então
      AC <- verdadeiro
   Fimse
   Retorne AC
fimfuncao

procedimento AtribuirNota(var notaAluno: inteiro; AC: logico)
inicio
   Se (AC = verdadeiro) então
      notaAluno <- notaAluno + 2
   FimSe
fimprocedimento

procedimento SomarNotaDosAlunos()
inicio
   Para aluno_n de 1 ate total faca
      SomaNotas := SomaNotas + nota[aluno_n]
   FimPara
fimprocedimento

procedimento FazerMediaDaTurma()
inicio
   MediaTurma := SomaNotas/total
fimprocedimento

procedimento MostraNotasDeCadaAluno()
inicio
   EscrevaL("----------------------")
   EscrevaL("     Notas Finais     ")
   EscrevaL("----------------------")
   Para aluno_n de 1 ate total faca
      EscrevaL("Nome: ", nome[aluno_n]:tamanho_maiornome+2, Nota[aluno_n]:3:2)
   FimPara
fimprocedimento

procedimento MostraMediaDaTurma()
inicio
   EscrevaL("------------------------")
   EscrevaL("  Média da turma: ", MediaTurma:3:2)
   EscrevaL("------------------------")
fimprocedimento

inicio
   //Tela 1:
   Para questao de 1 ate 5 faca
      CadastrarGabarito(gabarito[questao])
   Fimpara
   //Tela 2:
   CadastrarQuantidadeAlunos(total)
   //Tela 3:
   tamanho_maiornome <- 10 //Para alinhar as notas no final. Pelo menos vai ter 10 espaços.
   Para aluno_n de 1 ate total faca
      CadastraNomes(nome[aluno_n])
      VerificarSeNome_eh_o_maior(nome[aluno_n], tamanho_maiornome)
         //Vai ser utilizado para alinhar as notas no final
   Fimpara
   //Tela 4:
   Para aluno_n de 1 ate total faca
      Para questao de 1 ate 5 faca
         RecebeResposta(resposta[aluno_n, questao])
         Acerto <- ComparaResposta(resposta[aluno_n, questao], gabarito[questao])
         AtribuirNota(nota[aluno_n], Acerto)
     	     //Se Acerto for verdadeiro o aluno_n recebe dois pontos
      Fimpara
   FimPara
   SomarNotaDosAlunos()
   FazerMediaDaTurma()
   LimpaTela
   //TELA 5:
   MostraNotasDeCadaAluno()
   MostraMediaDaTurma()
fimalgoritmo

 

  • Curtir 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!