Ir ao conteúdo
  • Cadastre-se
Alison_999

Armazenar uma estrutura (struct) no vetor C++

Recommended Posts

Ola, sei pouco sobre C++, estou começando tenho muitas dificuldades, estou tentado fazer um algoritmo que armazene os dados da struct em vetor em seguida mostre:

 

Tenho um codigo que fiz, esta apenas lendo, quando vou passar pro vetor da um erro, dizendo: não premitido a conversão de dados. Vi varias video aulas fiz exemplos mas não consegui resolver meu problema.

 

Abaixo o codigo:

 

 

//estrutura.cpp
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<conio2.h>
#include<string.h>
#define MAX 10

using namespace std;

struct Elementos {
                        int n1;
                        float n2;
                };

main(){



        Elementos numero;
        Elementos vet[MAX];


        for(int i = 0; i < MAX; i++){

            cout << "\n\tDigite um numero :  ";
            cin >> numero.n1;
            cout << "\n\tDigite um numero :  ";
            cin >> numero.n2;
        }

    system("PAUSE");

}




Ficarei grato se alguém me ajudar, obrigado.

 

Programa recebe dois valores, em seguida armazena no vetor e realiza as operações abaixo descritas:

 

a. A soma entre os valores ímpares de n1;
b. A média entre os valores de n2;
c. A raiz quadrada de cada valor positivo de n2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma objeto de uma estrutura simples se assemelha a um vetor porém foi concebida para armazenar valores de diferentes tipos e não de tipos iguais como um vetor. Então vetores armazenam tipos iguais e estruturas armazenam tipos diferentes ok. O mesmo acontece para matrizes e vetor de estruturas, sao muito semelhantes.

 

Que é uma matriz? É um tipo de vetor de vetores tudo do mesmo tipo! Simplesmente isso. Já um vetor de estruturas é como "si" uma matriz permitisse guardar un vetor de valores de diferente tipo, hipoteticamente falando, claro que isso não é possível. Ou sim?!! Sim... se chama estrutura hahaha!!

Vamos explicar como é uma matriz realmente, assim você vai ver o que uma matriz é a mesma coisa que um vetor de estruturas.
Imaginamos que eu tenho um vetor de ponteiros a int:

int *matriz[2];

Agora imaginamos que tenho 2 vetores:

int n1[10];
int n2[10];

Agora unimos todas elas fazendo que matriz[0] aponte a n1 e matriz[1] aponte a n2

matriz[0] = &n1[0];
matriz[1] = &n2[0];

 

Agora poderia fazer traquilamente:
cout << matriz[0][0];

 

...como si de uma matriz normel se trata-se, isso é uma matriz. É um vetor que aponta a outros dados, porém esses dados tem que ser de um tipo igual. A diferencia com uma estrutura e que a acessamos a matriz tipo m[0][0], si fosse uma estrutura seria acessada mais ou menos como m[0].n1 porém isso é incorreto já que n1 é um vetor e por isso se usa []. C/C++ proporcionam diferentes mecanismos de acesso conforme a necessidade tenha isso em conta. Note que nesse caso a matriz pode ter diferentes tamanhos em cada linha, não como quando criamos uma matriz tipo char frase[10linhas][100letras], poderia ser 10 linhas de diferentes quantidades de letras cada uma, porque a criamos manualmente, fica meio chato isso porque teríamos que decorar o tamanho de cada linha, para isso existem outros mecanismos melhores, estruturas por exemplo. :lol:

Agora que sabemos que uma matriz se assemelha e muito a um vetor de estruturas e vice-versa, vamos ver como acessamos o que tem dentro de uma estrutura.

 

si eu tenho:

 

struct Elementos {
    int n1;
    float n2;
} e;

 

a esse objeto "e", eu uso o operador de referencia (.) para acessar ao seu membro e.n1=2, mas si crio um vetor de "Elementos", então a coisa muda. Vamos fazer a mesma coisa que fiz antes com vetor de vetores, mas agora com vetor de estruturas.

Crio um vetor de 2 ponteiros a "Elementos":

Elementos *vet[2];

 

Logo crio 2 objetos do tipo Elemento.
Elemento e1; // um elemento é como um vetor. Lembra? Mas contem um conjunto de variáveis diferentes tipos(tamanho)
Elemento e2;

 

É só fazer o mesmo processo:

vet[0] = e1;

vet[1] = e2;

Note que nesse caso não usei [] como fiz com vetor de vetores, lembre que C/C++ proporcionam diferentes mecanismos de acesso conforme a necessidade, isso te pode confundir um pouco ao principio. Como uma estrutura possui variáveis membro de diferentes tipos, de nada serve trabalhar com [] "índices", si você já estudou aritmética de ponteiros você já sabe a razão para trabalhar com índices, essa razão se traduz a fazer saltos entre variáveis de um mesmo tamanho(tipo), então não serve nas estruturas porque elas contem o membros de diferentes tipos, ou seja, diferentes tamanhos, para isso usamos o operador(.) para acessar a cada objeto individualmente.

si vet fosse uma matriz (vetor de vetores), para aceder a seus membros faríamos vet[][], fazendo uso dos índices[] nos 2 níveis. porém como vet é um (vetor de estruturas) usamos índice para acessar as estruturas no primeiro nível somente, lógico, cada estrutura sim é igual uma da outra, porém dentro da estrutura não são iguais, então para acessar ao conteúdo da estrutura use referencias(.). Isso tudo se traduz a vet[x] .membro Entendeu? Resumindo vet[x].n1, ou vet[x].n2 no seu caso.

 

Vamos ver como fica isso arrumado:

#include<iostream>using namespace std;struct Elementos {    int n1;    float n2;};int main() {    const int MAX = 2;    Elementos vet[MAX];    for ( int i = 0; i < MAX; i++ ) {        cout << "Digite um numero para vet[" << i << "]   int: ";        cin >> vet[i].n1;        cin.sync();  //Evita problemas de leitura evitando que se guarde lixo no buffer, sobretudo quando trabalhamos com strings.                cout << "Digite novamente para vet[" << i << "] float: ";        cin >> vet[i].n2;        cin.sync();        cout << endl;    }    cout << endl;    for ( int i = 0; i < MAX; i++ ) {        cout << "vet[" << i << "]   int : "<<  vet[i].n1 << endl;        cout << "vet[" << i << "] float : "<<  vet[i].n2 << endl;    }    cin.ignore(); //<-melhor que system pause    return 0;    }

Espero que tenha entendido. B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×