Jump to content
rjfs

Vector dinâmico/Listas dinâmicas

Recommended Posts

rjfs

Preciso de ajuda num exercício.

Tenho um ficheiro .txt com 4 marcas de carros - marca1, marca2, marca3, marca4.

Tenho ainda um ficheiro para cada marca (marca1.scd, marca2.scd, marca3.scd e marca4.scd), cada uma com um número de carros. Para além do nome do carro, têm ainda a sua matrícula, ano e valor, na forma <nome do carro> | <matricula> <ano> <valor>.

O que tenho que fazer é pôr as 4 marcas num vector (dinâmico?) e para cada marca criar uma lista dinâmica com a informação de cada carro. Posteriormente, tem que ser possível inserir, remover, e procurar carros (ao inserir o nome do carro, é-me mostrada a sua marca, matrícula, ano e valor).

Estou com muitas dúvidas a iniciar as listas. Sei mais ou menos o que tenho que fazer, mas não sei que código introduzir.

É um exercício importante, por isso agradecia muito a vossa ajuda.

Share this post


Link to post
Share on other sites
Localhost

Tens que utilizar funções como malloc. Quais são as dúvidas em concreto?


here since 2009

Share this post


Link to post
Share on other sites
rjfs

Onde tenho mais dúvidas é nas estruturas e na procura.

Sei que tenho que criar uma estrutura para o carro com as 3 informações do ficheiro. Tenho que criar outra para a marca para poder ter os vários carros dentro da marca. Não sei é se é ou não necessário criar uma outra para ter as várias marcas.

Também não sei como fazer a função procura, em que o utilizador insere o nome do carro e o programa devolve a sua marca, matricula, ano e valor.

Share this post


Link to post
Share on other sites
Localhost

Podes criar uma estrutura para as marcas e dentro dessa teres um campo com um vector para os carros. Podes até ter uma lista ligada dentro de cada estrutura das marcas. Tens várias alternativas, cada uma com diferente complexidade e eficiência.

Quanto à pesquisa, basicamente tens que percorrer todas as estruturas (se for listas ligadas, através dos ponteiros, se for um vector normal de estruturas, fazes um ciclo que te percorre todas as posições) e comparar o nome que se procura com o campo na estrutura que estás a percorrer que contém o nome.


here since 2009

Share this post


Link to post
Share on other sites
rjfs

Posso então fazer as estruturas desta forma?


#define DIM 100


typedef struct CARRO {

char nome[DIM];
char matricula[DIM];
int ano;
float valor;
struct CARRO *prox;
} CARRO;


typedef struct MARCA {

char nome_marca[DIM];
CARRO carro;
struct MARCA *prox;
} MARCA;

Acho que assim facilitaria a procura, mas desta forma não estou a conseguir armazenar os carros em listas dinâmicas...

Share this post


Link to post
Share on other sites
Localhost

Não. Tu dentro da estrutura MARCA tens que ter um ponteiro para o início de uma lista ligada do tipo da estrutura CARROS para depois, cada vez que crias uma nova estrutura (dinamicamente), passares para a função que faz isso esse endereço.


here since 2009

Share this post


Link to post
Share on other sites
rjfs

Então acho que só me esqueci de um *

É assim que deve ficar?


#define DIM 100


typedef struct CARRO {

        char nome[DIM];
        char matricula[DIM];
        int ano;
        float valor;
        struct CARRO *prox;
} CARRO;


typedef struct MARCA {

        char nome_marca[DIM];
        CARRO *carro;
        struct MARCA *prox;
} MARCA;

Tentei ontem assim e já consigo mostrar os carros de uma marca introduzida pelo utilizador.

Ainda não consegui foi fazer a função procura. Devolve-me sempre NULL, mas vou tentar agora resolver isso...

Share this post


Link to post
Share on other sites
Localhost

Para a procura é simples.

Fazes o seguinte:

* Encontras a marca que queres (percorres toda a lista e vais comparando o nome da marca usando a função strcmp).

* Passas para a função de procura o endereço que o ponteiro da estrutura que encontraste no passo anterior.

* Nessa função percorres (começando nesse ponteiro) toda a lista de carros e vais comparando o nome dos carros com o que procuras.


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.