Ir para conteúdo
  • 0
Maroto

[RESOLVIDO] Erro de memória com algoritimo no VisualG

Pergunta

Olá, pessoas.

 

Criei um programa com fins de estudo no visualg, cuja finalidade é preencher uma matriz com valores aleatórios e, em seguida, conferir e armazenar numa segunda atriz se o valores gerados são pares ou ímpares. Todavia o programa fica dando um erro ("Access violation at address xxxx in module" visualg30.exe). Não sei se eu que estou errando na lógica, se meu pc está quebrado ou se é um bug do visualg. 

Abaixo deixo meu código para quem puder me ajudar. Obrigado :)

 

Var
   // Seção de Declarações das variáveis
   matriz1: vetor [0..2, 0..2] de inteiro
   matriz2: vetor [0..2, 0..2] de caractere

  // Procedimento que gera valores inteiros aleatorios para preencher a matriz1.
  procedimento preencheMatriz
  var
     // Variaveis contadoras
     i1, i2: inteiro
  inicio
     para i1 de 0 ate 1 passo 1 faca
        para i2 de 0 ate 2 passo 1 faca
           aleatorio on
           leia (matriz1[i1,i2])
           limpatela
           aleatorio off
        fimpara
     fimpara
     // Imprimindo a matriz na tela
     para i1 de 0 ate 1 passo 1 faca
        para i2 de 0 ate 2 passo 1 faca
           escreva (matriz1[i1,i2])
        fimpara
        escreval ("")
     fimpara
  fimprocedimento

  // Procedimento que verifica se os valores das posições da matriz1 são pares
  // ou ímpares.
  procedimento verificaParImpar
  var
     i1, i2: inteiro
  inicio
     para i1 de 0 ate 1 passo 1 faca
        para i2 de 0 ate 2 passo 1 faca
           se (matriz1[i1, i2] MOD 2=0) entao
              matriz2[i1,i2] <- "par"
              escreva(matriz2[i1,i2], " ")
           senao
              matriz2[i1,i2] <- "ímpar"
              escreva(matriz2[i1,i2], " ")
           fimse
        fimpara
        escreval(" ")
     fimpara
  fimprocedimento

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   preencheMatriz
   verificaParImpar
Fimalgoritmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 resposta a esta questão

Recommended Posts

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

  • Conteúdo Similar

    • Por irwingato
      Var // Seção de Declarações das variáveis romano:caractere subtexto :caractere i:inteiro letra1:caractere Inicio // Seção de Comandos, procedimento, funções, operadores, etc... escreval("Digite um número em romano para ser convertido em arábico") escreval("menor que 4000 e maior que 0") leia(romano) para i de 1 ate Compr(romano) faca subtexto <- Copia(romano,i,1) escreval(subTexto) fimpara Consegui fazer somente isso, o problema está na hora de salvar letra por letra num vetor e saber a posição de cada letra pois se for uma letra menor que a posterior subtrai-se um exemplo é o X antes de C subtrai-se 10 ficando 90 e quando o C vale 100 e quando vem antes de um número maior que ele um exemplo é D ficando 400, acho que somente a letra I, X, C, subtraem-se se estiver antes de um número maior o resto soma-se, o problema está em saber a posição da letra.
      Alguém  tem alguma ideia?
      Acho que sei como finalmente fazer primeiramente eu pegaria o valor em romano digitado, pegaria o tamanho da letra valor atribuído seria n tamanho da letra e desse tamanho da letra tiraria n-1, depois tentaria dividir a letra, não sei o comando no VisualG para separar as letras e criaria um variável para armazenar o separamento dessas letras nesse caso separador criaria outra variável nesse caso s e receberia zero depois faria um para onde i =0 e i tem que ser menor que o tamanho da letra nessa e iria somando por +1 depois abriria um se verificando se a divisão da letras separador = "M" então s= s+1000 e dentro desse se abriria outro se  e se se separador[i-1]= "C" então s= s-200, terminaria esse se depois abriria outro se verificando se separador = "D" então s=s+500 e dentro abriria outro se e se separador[i-1] = "C" então s=s-200 depois fecharia esse se e abriria outro se separador = "C" então s=s+100 e dentro desse se abriria outro se se separador[i-1] = "X" e então s=s-20 depois terminaria esse se e abriria outro se, se separador = "L" então s=s+50 dentro abriria outro se, se separador[i-1] = "X" então
      s=s-20 depois terminaria esse se e abriria outro se, se separador="X" então s=s+10 abriria outro se, se separador[i-1] = "I" então s=s-2 depois fecharia esse se depois abriria outro se, se separador="V" então s=s+5 e dentro desse se abriria outro se, se separador[i-1] = "I" então s=s-2 fecharia esse se depois abriria outro se se separador = "I" então s=s+1
      depois daria um escreval(s)
      O problema está na hora de separar as letras qual o comando no VisualG para separar letra ou não tem?
      O comando copia é útil somente se separar letra por letra porém falha na hora, por exemplo de copiar um número romano, eu eu tenho que já passar esse comando com parâmetros já pré-deficinidos copie desta casa até esta casa (romano;1;2), que no não teria como colocar todos os parâmetros para todos os números de 1 a 3999
       
    • Por irwingato
      Var // Seção de Declarações das variáveis romano:caractere subtexto :caractere i:inteiro letra1:caractere Inicio // Seção de Comandos, procedimento, funções, operadores, etc... escreval("Digite um número em romano para ser convertido em arábico") escreval("menor que 4000 e maior que 0") leia(romano) para i de 1 ate Compr(romano) faca subtexto <- Copia(romano,i,1) escreval(subTexto) fimpara Consegui fazer somente isso, o problema está na hora de salvar letra por letra num vetor e saber a posição de cada letra pois se for uma letra menor que a posterior subtrai-se um exemplo é o X antes de C subtrai-se 10 ficando 90 e quando o C vale 100 e quando vem antes de um número maior que ele um exemplo é D ficando 400, acho que somente a letra I, X, C, subtraem-se se estiver antes de um número maior o resto soma-se, o problema está em saber a posição da letra.
      Alguém  tem alguma ideia?
       
    • Por irwingato
      Var // Seção de Declarações das variáveis Fatorial,Numero,x : Inteiro Primo,Resposta : Inteiro vetorr : vetor[0..1000] de inteiro Flag : Logico Inicio // Seção de Comandos, procedimento, funções, operadores, etc... Limpatela Mudacor("Amarelo","Frente") Escreva("Deseja até que número primo: ") leia(Numero) Escreval Escreva(" 1") Para Primo de 2 ate Numero faca Fatorial<- 2 Flag <- Falso enquanto (Primo<>fatorial) faca Resposta <- Primo MOD Fatorial Fatorial <- Fatorial + 1 se Resposta = 0 entao Flag <- Verdadeiro fimse fimenquanto se (Nao Flag) entao escreva(" , ",Primo) vetorr[x] := primo x := x + 1 fimse fimpara escreval escreval escreval("O Número Primo Anterior A ",numero," é ",vetorr[x-1]) O código ficou bom mas contém um erro o número 1 não é primo e preciso otimizá-lo ainda para ficar mais eficiente gostaria de quando você múltiplo de um número já removesse da contagem e passasse para o próximo número, pois quando é múltiplo já não é mais primo pois somente precisa ter 2 divisores exatos que no caso seria o 1 e o número digitado, a e outra falha no algoritmo tem que ser um número primo anterior e caso o número digitado seja primo deve informar o número primo anterior a este digitado
    • Por irwingato
      Var // Seção de Declarações das variáveis respostas,gabarito: vetor[1..3]caractere i,acertos, erros: inteiro Inicio // Seção de Comandos, procedimento, funções, operadores, etc... //Escreval("Digite a resposta") //Escreval("Digite o gabarito") para i de 1 ate 3 faca Escreval("Digite a resposta") leia(respostas[i]) se(respostas[i]<>a) e (respostas[i]<>b) e (respostas[i]<>c) e (respostas[i]<>d) Escreval("Por favor digite respostas válidas de a,b,c e d") fimse fimpara para i de 1 ate 3 faca Escreval("Digite o gabarito") leia(gabarito[i]) se(gabarito[i]<>a) e (gabarito[i]<>b) e (gabarito[i]<>c) e (gabarito[i]<>d) Escreval("Por favor digite um gabarito válido de a,b,c e d") fimse fimpara acertos<-0 para i de 1 ate 3 faca se(respostas[i] = gabarito[i]) entao acertos<-acertos+1 fimse erros<-3-acertos fimpara escreval("O número de acertos foi:",acertos) escreval("O número de erros foi:", erros) Fimalgoritmo Criei esse algoritmo porém o mesmo apresenta o erro variável RESPOSTAS[1] não foi encontrada, já tentei achar o erro e nada, o algoritmo que fiz é para pedir as respostas de a até d caso não seja informado isso irá pedir para informar esse valor no gabarito também e também conta os acertos e os erros
    • Por Ravierf
      Galera, sou novo em programação, alguem poderia me ajudar nessa nessa questão em Visual G?
       
      1-A padaria PãoFresco vende uma certa quantidade de pães franceses e uma quantidade de biscoitos a cada dia. Cada pãozinho custa R$ 0,25 e o biscoito custa R$ 1,70. Ao final do dia, o dono quer saber quanto arrecadou com a venda dos pães e broas (separados) e o total dos 2 juntos. O dono também quer saber quanto deste valor deve guardar numa conta de poupança (sendo este 10% do total arrecadado). Com base nestas informações, desenvolva um algoritmo para ler as quantidades de pães e de biscoitos diários  e calcule e imprima as seguintes informações:
      - Total do valor dos pães
      - Total do valor dos biscoitos
      - Total do valor dos pães e biscoitos juntos
      - Valor que será colocado na poupança
      - Valor final para o dono ( sem o valor aplicado na poupança)
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.