Ir ao conteúdo
  • Cadastre-se

VisualG Problema ao adicionar vetor/matriz em registro no visualg?


Posts recomendados

 

Olá pessoal, sou iniciante em programação, iniciante mesmo e estou com o problema.

Estou fazendo um exercício do livro no capítulo sobre registros, porém quando vou colocar o vetor dá problema ao executar o programa, ainda não terminei o exercício pois gosto de ir testando cada passo que vou fazendo, mas vou colocar o código do que eu já fiz e a mensagem de erro.

 

A mensagem: Sintaxe incorreta na declaração de variáveis. Ai informa que é na linha referente ao registro ao campo bimestre, já olhei o livro de novo fiz da maneira que consta lá e não dá certo, testei também o código do livro e deu o mesmo problema.

Algoritmo "escola"

tipo
    bimestre = vetor [1..4] de inteiro
    escola = registro
           nome: caractere
           nota: bimestre
    fimregistro
    
var
   aluno: vetor[1..20] de escola
   i, j: inteiro
   resp: caractere
inicio
      escreval ("Digite uma opção válida: ")
      escreval ("1 - Cadastrar notas bimestrais")
      escreval ("2 - Apresentar todos os alunos cadastrados")
      escreval ("3 - Pesquisar aluno")
      leia (op)
      escolha op
              caso 1
              escreval ("Cadastrar notas bimestrais")
              resp <- "sim"
              i <- 1
              enquanto (resp = "sim") faca
                   escreval ("Nome:..")
                   leia (aluno.nome[i])
                   para j <- 1 ate 4 faca
                        escreval ("Nota:..")
                        leia (aluno.nota[i])
                   fimpara
                   escreval ("Deseja cadastrar outro aluno?")
                   leia (resp)
              fimenquanto
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Jacqueline Santos.

 

3 horas atrás, Jacqueline Santos disse:

A mensagem: Sintaxe incorreta na declaração de variáveis. Ai informa que é na linha referente ao registro ao campo bimestre, já olhei o livro de novo fiz da maneira que consta lá e não dá certo, testei também o código do livro e deu o mesmo problema.

 

A lógica da sintaxe está correta, mas as versões do VisuAlg em si é que não está aceitando (por limitação? bug das versões?).. nem na "versão padrão" 3.0.6.5, nem na versão mais recente "3.0.7.0". Testei na 2.0, e lá nem aceita a declaração de tipos.

 

Então, no Pascal, que é um dos "pais" do VisuAlg essa estrutura estaria correta. Em fim...

 

Como o VisuAlg não está aceitando declaração de tipos sendo vetores, seu código poderia ficar assim:

 

tipo
    t_boletim = registro
           nome :caractere
           nota :vetor[1..4] de inteiro
    fimRegistro

Só que o VisuAlg também não aceita declaração de vetores dentro de um registro, rs. Aí lenhou tudo!!! (talvez por está na sessão de tipos ainda).

 

Outra forma seria assim:

var
   alunos: vetor[1..20] de registro
                             nome :caractere
                             nota :vetor [1..4] de inteiro
                           fimRegistro

Advinha? também não aceita.


RESUMINDO:

Não vai rolar utilizar essa estrutura de registro / vetores no VisuAg... (a não ser que encontre uma versão do VisuAlg que esteja funcionando... tente ver se no livro aparece qual versão eles usaram)

 

 

Daí, ou você reformula a lógica do algoritmo, ou parte para outra linguagem... como por exemplo, o Pascal, que é muito semelhante (apenas os comandos são em inglês... vulgo "inglês instrumental"). Ficaria com algo assim:

program ExemploXXLivroYYYY;
uses
  CRT; //carrega comandos extras como CrlScr, ReadKey, TextColor, TextoBackground etc

type
  t_Notas = array [1..4] of integer;
  t_Alunos = record
               nome :string;
               nota :t_Notas;
             end;

var
  alunos :array[1..3] of t_Alunos;
  contAlunos, i :byte;
  resp :char; //usei char em vez de string, pois só precisa de uma letra (vai aceitar qqr resposta com "s")
  op :char;
begin
contAlunos := 0;
writeln('Digite uma opção válida: ');
writeln('1 - Cadastrar notas bimestrais');
writeln('2 - Apresentar todos os alunos cadastrados');
writeln('3 - Pesquisar aluno');
readln(op);
case op of
  '1':begin
      writeln('Cadastrar notas bimestrais');
      resp := 's';
      while (resp = 's') do
        begin
        contAlunos := contAlunos + 1;
        ClrScr;
        writeln('ALUNO ', contAlunos);
        writeln;
        write  ('Nome: ');
        readln(alunos[contAlunos].nome);
        writeln;
        for i := 1 to 4 do
          begin
          write  (' Nota ', i, ':');
          readln(alunos[contAlunos].nota[i]);
          end;
        writeln;
        writeln('Deseja cadastrar outro aluno? (S / N)');
        readln(resp);
        end;
      end;
      
  '2':begin
  
      end;
      
  '3':begin
  
      end;
   else //caso não seja alguma opção anteirior. obs.: é facultativo
    begin //esse begin/end aqui tb é facultativo para esse else, mas pode deixar
    
    end;
  end; //fim case op
end.

 

Caso queira migrar pro Pascal, como visto, a lógica será muito próxima do VisuAlg, mas com a vantagem do compilador ser mais robusto e flexível. O VisuAlg tem muita limitação boba (como essa de "tipos com vetores").. recomendo.

 

Outra coisa... quando entrar no conceitos de funções e procedimento, lá no VisuAlg NÃO DÁ para passar um vetor por parâmetro, já no Pascal dá... isso é muito útil e irá fazer falta lá.

 

Inicialmente sugeriria utilizar o PascalZim.

 

Qualquer dúvida ou comentários é só postar.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Obrigada pela ajuda rsrs, então no visualg eu tentei inclusive das formas que você informou e até as formas até as formar criativas e mesmo assim não deu certo, então deve ser problema mesmo no visualg mesmo, acabei fazendo o problema de outra maneira mas deu certo no final.

Novamente, obrigada pela ajuda 😀

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Jacqueline Santos,

 

2 horas atrás, Jacqueline Santos disse:

Obrigada pela ajuda rsrs, então no visualg eu tentei inclusive das formas que você informou e até as formas até as formar criativas e mesmo assim não deu certo, então deve ser problema mesmo no visualg mesmo, acabei fazendo o problema de outra maneira mas deu certo no final.

Novamente, obrigada pela ajuda 😀

 

Que bom então.

 

Poste seu código aqui para analisarmos e, também, poder servir de base para outros visitantes.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

@Simon Viegas Então o problema era para ser resolvido com usando registros e o vetor dentro do registro, mas como não deu certo e eu queria resolver o problema mesmo assim, ai usei vetor e matriz, vou colocar o código para vocês analisarem e peço perdão pelos erros que encontrarem no código, estou quebrando a cabeça para aprender isso rsrs.

Algoritmo "turma"
var
   nome: vetor[0..4] de caractere
   media: vetor[0..4] de real
   notas: vetor[0..4, 0..4] de real
   i, j, inicial, meio, final, x, y, op: inteiro
   total, num, m: real
   resp,resp2, busca, aux: caractere
   acha: logico
inicio
   i  <- 0
   resp2 <- "sim"
   enquanto (resp2 = "sim") faca
      escreval ("informe uma das opções: ")
      escreval ("1 - Cadastrar notas de alunos")
      escreval ("2 - Pesquisar aluno")
      escreval ("3 - Apresentar todos os alunos")
      leia (op)
      escolha op
      caso 1
         resp <- "sim"
         escreval ("Cadastrar alunos: ")
         enquanto (resp = "sim") e (i <= 4) faca
            total <- 0
            escreval ("Nome..: ")
            leia (nome[i])
            para j <- 0 ate 4 faca
               escreval ("Nota:.. ", j, "ºBimestre")
               leia (notas[i,j])
               total <- total + notas[i,j]
            fimpara
            media[i] <- total / 5
            escreval ("Deseja cadastrar novo aluno?")
            leia(resp)
            i <- i + 1
         fimenquanto
         para x <- 0 ate 3 faca
            para y <- x + 1 ate 4 faca
               se (nome[x] > nome[y]) entao
                  aux <- nome[x]
                  nome[x] <- nome[y]
                  nome[y] <- aux
                  m <- media[x]
                  media[x] <- media[y]
                  media[y] <- m
               fimse
            fimpara
         fimpara
      caso 2
         escreval ("Pesquisar alunos")
         limpatela
         escreval ("Informse a pesquisa: ")
         leia (busca)
         inicial <- 0
         final <- 4
         acha <- falso
         enquanto (inicial <= final) e (acha = falso) faca
            meio <- (inicial + final) div 2
            se (busca = nome[meio]) entao
               acha <- verdadeiro
            senao
               se (busca < nome[meio]) entao
                  final <- final - 1
               senao
                  inicial <- inicial + 1
               fimse
            fimse
         fimenquanto
         se (acha = verdadeiro) entao
            escreval ("Pesquisa localizada: ")
            escreval (nome[meio])
            se (media[meio] >= 5) então
               escreval ("Aprovado")
            senao
               escreval ("Reprovado", media[meio])
            fimse
         senao
            escreval ("Aluno não localizado")
         fimse
      caso 3
         escreval ("Apresentar todos os alunos")
         para i <- 0 ate 4 faca
            se (media[i] >= 5) entao
               escreval ("Aluno:..   ", nome[i], "   Média:.. ", media[i], "   Aprovado")
            senao
               escreval ("Aluno:..   ", nome[i], "   Média:.. ", media[i], "   Reprovado")
            fimse
         fimpara
      fimescolha
      escreval ("Deseja fazer uma nova operação? ")
      leia (resp2)
   fimenquanto
Fimalgoritmo

 

  • Curtir 1
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!