• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Tharis

[Dúvida] Variáveis

11 mensagens neste tópico

Tenho uma dúvida, por exemplo, tenho:

printf("Quantas pessoas?");
scanf("%d",&nr_pessoas);

e depois, consoante o número de pessoas, um questionário era levantado "nr_pessoas" vezes, mas cada vez que o questionário era levantado, armazenava em variáveis diferentes, tipo:

nr_1_name

nr_1_idd

nr_2_name

nr_2_idd

se fosse 2 o valor de "nr_pessoas".

Será possível fazer isto?

Cumps

tharis20

P.S.: Esta secção vai estar cheia de posts meus! ;) -> :hmm: -> :bored: -> :down:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens várias hipóteses, como criar um vector para armazenar os nomes e outro para armazenar as idades, ou crias vector de estruturas com um campo para o nome e outro para a idade.

#define MAX 20

typedef struct {
    int idade;
    char nome[MAX];
} Pessoa;


int npessoas;
int i;

scanf("%d", &npessoas);

Pessoa pessoas[npessoas];

for(i=0;i<npessoas;i++)
    scanf("%d %s", &pessoas[i].idade, pessoas[i].nome);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesta situação não seria preferível usar listas??

A partir de que ponto se devem usar as listas?

Saudações!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesta situação não seria preferível usar listas??

Na minha opinião não, os arrays e as estruturas servem perfeitamente e são muito fáceis de implementar e aprender.

P.S.: Esta secção vai estar cheia de posts meus! ;) -> :hmm: -> :bored: -> :down:

Espero que sim, vou ajudar-te sempre que souber. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja agora faz-me um favor e responde à minha 2a pergunta!

Como costumas decidir o que usar, listas ou arrays?

Quando usas quantidades gigantescas de informação só ai usas listas??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depende de caso para caso, quando tens um certo número de informação que precisas de gerir, como poder eliminar e adicionar facilmente entradas, as listas tornam-se mais flexíveis.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Thank You Triton! (again)

Tenho de ver a parte das estruturas e (muitas) outras cenas.

Mas mesmo assim, acho que percebi o que escreveste lá!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

neste caso pode-se usar arrays. antes do array ser necessário, já se sabe o seu tamanho (foi perguntado o valor ao utilizador), podendo este ser alocado dinamicamente com exactamente o número de posições necessárias.

existem vários factores que podem influenciar na escolha de listas ou arrays:

- as lista crescem e diminuem de tamanho facilmente, os arrays, embora também seja possível fazê-lo, pode trazer problemas de desempenho;

- com arrays acedes à n-ésima posição em tempo constante, com lista, normalmente tens que a percorrer toda até chegar à posição n;

- inserir um elemento no meio de um array, obriga-te a deslocar todos os elementos que estão depois dessa posição, tornando a operação ineficiente, já com lista é um operação fácil de efectuar.

só mais uma nota, deve-se evitar este tipo de código Pessoa pessoas[npessoas]; pois só é válido a partir do c99, logo pode não ser suportado por alguns compiladores. alternativamente pode-se usar o malloc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando não sabes o tamanho do array, eu costumo usar o realloc,

axo uma função bastante prática quando queres acrescentar inserir dados para além do tamanho defenido inicialmente.

Uma solução facil e com versatilidade quando não sabes o tamanho do array, é fazeres uma pequena função usando o realloc que testa  o tamanho do teu array semp que inseres um novo valor, caso ele fique cheio, esta função aumenta o tamanho do teu array( por exemplo aos grupos de 20 ou assim).

Fazendo esta pequena função depois não precisas de te preocupar com tamanhos de arrays porque ele aumenta automaticamente.

Para quem não quiser usar listas penso ser a melhor solução, uma vez que não me parece boa prática pedir o tamanho ao inicio.

Saoudações...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando não sabes o tamanho do array, eu costumo usar o realloc,

axo uma função bastante prática quando queres acrescentar inserir dados para além do tamanho defenido inicialmente.

Uma solução facil e com versatilidade quando não sabes o tamanho do array, é fazeres uma pequena função usando o realloc que testa  o tamanho do teu array semp que inseres um novo valor, caso ele fique cheio, esta função aumenta o tamanho do teu array( por exemplo aos grupos de 20 ou assim).

Fazendo esta pequena função depois não precisas de te preocupar com tamanhos de arrays porque ele aumenta automaticamente.

Para quem não quiser usar listas penso ser a melhor solução, uma vez que não me parece boa prática pedir o tamanho ao inicio.

Saoudações...

eu tenho uma biblioteca para lidar com arrays dinâmicos, mas mesmo assim, só a uso quando à partida já tenho uma ideia do tamanho final, pois, tal como referi no post anterior, embora seja possível alterar o tamanho de um array, pode trazer problemas de eficiência, visto que pode ser necessário copiar todos os valores antigos para uma nova localização.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só mais uma nota, deve-se evitar este tipo de código Pessoa pessoas[npessoas]; pois só é válido a partir do c99, logo pode não ser suportado por alguns compiladores. alternativamente pode-se usar o malloc.

Exacto, isso só é possível usar em C99. Em concursos sabes quase sempre os limites das variáveis problemas, por isso metes logo um #define no ínicio e alocas logo um array com as posições máximas para não perder tempo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora