Ir ao conteúdo

VisualG É possível definir o tamanho do vetor utilizando constante em portugol?


Ir à solução Resolvido por kgin,

Posts recomendados

Postado

 

Esse código abaixo tem uma constante chamada MAX_PRODUTOS. Depois, essa constante é utilizada dentro do vetor numeros. Não sei se é possível fazer isso e, se é, como faço para colocar valores nesse vetor que utiliza a constante para definir o tamanho?

 

Algoritmo "Teste"

const MAX_ELEMENTOS = 5

Var

vetor numeros[MAX_ELEMENTOS] : inteiro

 

  • Curtir 1
Postado

@Eli Almeidaa , boa tarde.

 

Você pode definir cada vetor.


 

Algoritmo "Teste"

const MAX_ELEMENTOS = 5

Var
	vetor numeros[MAX_ELEMENTOS] : inteiro

inicio 
	numeros <- [10 8 7 20 35]
fimalgoritmo

 

ou
 

Algoritmo "Teste"

const MAX_ELEMENTOS = 5

Var
    vetor numeros[MAX_ELEMENTOS] : inteiro

inicio
    numeros[0] <- 10
    numeros[1] <- 20
    numeros[2] <- 14
    numeros[3] <- 6
    numeros[4] <- 35
fimalgoritmo

 

Espero ter ajudado!

Abraço,

Diego

  • Curtir 1
  • Obrigado 1
Postado

@Eli Almeidaa É possível sim. A sintaxe é a mesma da declaração de qualquer vetor. A diferença é que no lugar do número você vai colocar o nome da constante que nesse caso é MAX_ELEMENTOS. E para armazenar os valores no vetor não muda nada na forma que já deve conhecer.

  • Curtir 1
  • Obrigado 1
Postado

@Diego Mendes Rodrigues , os dois códigos não funcionam, aparece esse erro :

 

Captura de tela 2023-09-14 171149visualg.jpg

 

5 horas atrás, Midori disse:

@Eli Almeidaa É possível sim. A sintaxe é a mesma da declaração de qualquer vetor. A diferença é que no lugar do número você vai colocar o nome da constante que nesse caso é MAX_ELEMENTOS. E para armazenar os valores no vetor não muda nada na forma que já deve conhecer.

@Midori, já tentei fazer isso, mas sempre dá erro. Você poderia mostrar um

exemplo de um vetor que usa constante para definir o tamanho e que funcione no visualg?

  • Curtir 1
Postado
Algoritmo "Tipos_de_fruta"

const
   QUANTIDADE_FRUTAS = 5

var
   nome_frutas: vetor [1..QUANTIDADE_FRUTAS] de caractere
   contador:inteiro

inicio
   // Inicia o vetor!
   nome_frutas[1] <- "Abacaxi"
   nome_frutas[2] <- "Banana"
   nome_frutas[3] <- "Cereja"
   nome_frutas[4] <- "Damasco"
   nome_frutas[5] <- "Embauba"

   // Mostra o nome das frutas
   limpaTela
   escreval("Nomes das frutas no sistema!")
   para contador de 1 ate QUANTIDADE_FRUTAS faca
      escreval("[", contador, "]-", nome_frutas[contador])
   fimPara
fimAlgoritmo

Consulte o manual para mais detalhes!

  • Curtir 1
  • Obrigado 1
Postado

@Eli Almeidaa No outro tópico no seu código das "reservaLugarCinema" tem lá a declaração correta do vetor. A única diferença é que em vez de colocar o número vai o nome da constante, p.ex,

 

algoritmo "reservaLugarCinema"

const MAX_ELEMENTOS = 10

Var
    lugares : vetor [1..MAX_ELEMENTOS] de caractere

 

  • Curtir 1
  • Obrigado 2
  • Solução
Postado
Em 15/09/2023 às 20:34, Eli Almeidaa disse:

@kgin, @Midori , valeu os dois códigos funcionaram. A constante sendo usada como tamanho do vetor

Só funciona assim no caso :  [1..QUANTIDADE_FRUTAS], assim, não funciona :

[QUANTIDADE_FRUTAS]?

Não porque você tem que especificar qual é a primeira posição do vetor, mas essa lógica é valida em C e C++ pelo fato da primeira posição do vetor ser sempre a posição "0".

exemplo em C

#include <stdio.h>

#define TAMANHO_STR 30

enum tipos_frutas
{
    TF_ABACAXI = 0,
    TF_BANANA,
    TF_CEREJA,
    TF_DAMASCO,
    TF_EMBUABA,
    TF_QUANTIDADE_FRUTAS
};

int main(void)
{
    char buffer[256];       /* Utilizado para pegar a entrada padrão! */
    int contador;
    /* Declara e inicia a matriz */
    char nome_frutas[TF_QUANTIDADE_FRUTAS][TAMANHO_STR] = {
        "Abacaxi",
        "Banana",
        "Cereja",
        "Damasco",
        "Embuaba"
    };
    
    /* Mostra o nome das frutas */
    for (contador = 0; contador < TF_QUANTIDADE_FRUTAS; contador++) {
        printf("[%i]-%s\n", contador, nome_frutas[contador]);
    }
    
    /* Salta uma linha */
    printf("\n");
    
    /* Mostra a primeira e a ultima fruta */
    printf("A primeira fruta e %s\n", nome_frutas[TF_ABACAXI]);
    printf("A ultima fruta e %s\n", nome_frutas[TF_EMBUABA]);
    
    /* Pausa o programa */
    printf("Pressione enter para continuar!\n");
    fgets(buffer, 256, stdin);
    return(0);
}

Experimente online!

 

Você poderia contornar isso declarando a primeira posição do vetor e a ultima.

Exemplo

Algoritmo "Tipos_de_fruta"

const
     QF_INICIO = 1
     QF_FIM = 5

var
   nome_frutas: vetor [QF_INICIO..QF_FIM] de caractere
   contador:inteiro

inicio
   // Inicia o vetor!
   nome_frutas[1] <- "Abacaxi"
   nome_frutas[2] <- "Banana"
   nome_frutas[3] <- "Cereja"
   nome_frutas[4] <- "Damasco"
   nome_frutas[5] <- "Embauba"

   // Mostra o nome das frutas
   limpaTela
   escreval("Nomes das frutas no sistema!")
   para contador de QF_INICIO ate QF_FIM faca
      escreval("[", contador, "]-", nome_frutas[contador])
   fimPara
fimAlgoritmo

Em pascal (a linguagem pai do visualG) isso é uma declaração bem útil, mas no visualG não tem muito sentido fazer isso pelo fato da linguagem ser bem mais limitada.

  • Obrigado 1
Postado
Em 15/09/2023 às 20:34, Eli Almeidaa disse:

Só funciona assim no caso :  [1..QUANTIDADE_FRUTAS], assim, não funciona :

[QUANTIDADE_FRUTAS]?

Não porque esse Portugol não é totalmente compatível com o VisualG. Portugol é uma família de linguagens e existe variações entre elas, uma delas é essa da declaração de vetores.

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