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

Tharis

[Dúvida] Variáveis

Recommended Posts

Tharis

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! ;) -> 🤔 -> :bored: -> :down:

Share this post


Link to post
Share on other sites
Triton

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);


<3 life

Share this post


Link to post
Share on other sites
zzee

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

A partir de que ponto se devem usar as listas?

Saudações!!

Share this post


Link to post
Share on other sites
Triton

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! ;) -> 🤔 -> :bored: -> :down:

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


<3 life

Share this post


Link to post
Share on other sites
zzee

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??

Share this post


Link to post
Share on other sites
Triton

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.


<3 life

Share this post


Link to post
Share on other sites
Tharis

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á!

Share this post


Link to post
Share on other sites
Rui Carlos

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.

Share this post


Link to post
Share on other sites
zzee

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

Share this post


Link to post
Share on other sites
Rui Carlos

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.

Share this post


Link to post
Share on other sites
Triton

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.


<3 life

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

×

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.