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

blue_ice

Duvida vector em C

17 mensagens neste tópico

Boa noite

Estou com uma duvida na construção de um programa que leia um vector de números inteiros positivos, o que se pretende é que o vector não tenha limite ou seja tanto pode ler 1 número como 10000.

a minha questão é em como fazer que ele não tenha limite.

Agradeço a ajuda disponibilizada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou perguntas ao utilizador quantos números quer inserir (que não deve ser o pretendido), ou inicias com um array de tamanho determinado, e quando preencheres todas as posições do array, alocas memória nova, copias os elementos, e libertas o array antigo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Estou como uma duvida, como é que posso por um programa em c a percorrer um determinado vector de forma a ser circular, também como é que meto o programa a andar x posições para a frente quando lê um determinado numero do vector?

do genro vector 65422583 lê o numero 6 na posição 0 e anda 6 números para a frente até ao 8.

Obrigado pela ajuda disponível

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para ser circular tens de jogar com a função do resto da divisão (%) e com o tamanho do vector. Para andar o número de posições que queres é só incrementar o índice no número pretendido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas

Importas-te de dar um exemplo para eu poder perceber melhor o que queres dizer?

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>

#define DIM 5

int main(void) {
    int array[DIM]={1,2,3,4,5};
    int i;
    for (i=0;i<10;i++)
        array[i%DIM] = i+1;
    for (i=0;i<DIM;i++)
        printf("%d\n",array[i]);
    return 0;
}

Tens aqui um array de 5 posições que vai ser iterado num ciclo com 10 iterações em que, em cada uma, actualizo a posição do array indicada pelo índice i com o valor do índice incrementado em 1 unidade. Ao utilizar o i%DIM estou a dizer que quando ele chegar à posição final do array, volta ao início, pois sendo i=5 e DIM=5, i%DIM = 0, logo reinicia o índice. As iterações fazem as seguintes substituições:

i: array[ i]

1ª iteração (0<=i<=5)

0: 1

1: 2

2: 3

3: 4

4: 5

2ª iteração (5<=i<10)

0: 6

1: 7

2: 8

3: 9

4: 10

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se o vector não estiver todo preenchido ?

A última posição não pode ser utilizada nos cálculos se o vector não estiver todo preenchido pois não ?

Como fazer neste caso para saber qual a última posição preenchida no vector e torná-lo circular ?

Se for um vector de inteiros como se detecta o preenchimento das posições ?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode, não interessa o que está lá dentro (está sempre alguma coisa), só interessa é saber a sua dimensão (tamanho do array e não o nº de elementos com que foi inicializado).

O exemplo que dei já foi com vector de inteiros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No teu exemplo a variável DIM é o número de valores preenchidos não é ?

Mas o vector foi preenchido por ti.

Mas se o vector for preenchido com input do teclado como se controla o que está preenchido ?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu precisas de ir estudar arrays antes de fazeres essas perguntas.

1) DIM é o tamanho que eu defini para o meu array. O tamanho NÃO É o número de elementos que eu coloquei no array! Neste caso foi porque me apeteceu.

2) Sempre que crias um array ele é inicializado com valores desconhecidos. Isto é diferente de não ter nada! Ele tem lá valores, mas não se sabe quais são a menos que faças um printf desses valores! Depois é que nós podemos atribuir valores às posições do array que irão sobrepor-se a esses valores já existentes! Capiche?

3) Como controlas o que está preenchido? Podes colocar uma flag na posição seguinte à última que preencheste a indicar que na posição anterior se encontra o último valor introduzido via teclado. É um pouco como o '\0' nas strings.

EDIT: http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desde já agradeço a tua paciência em responder a perguntas tão básicas.

Tens alguma sugestão para a flag a utilizar e como testar o fim do preenchimento com essa flag.

Podias refazer o teu exemplo por favor para esse caso ?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso depende um pouco daquilo que queres ler para o array. Se só quiseres ler inteiros positivos podes, por exemplo, colocar um inteiro negativo como o -1 para representar a flag.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim só quero ler inteiros positivos.

A ideia é percorrer o vector de forma circular ou seja da última posição passar para a primeira.

Ex:

int vector[5]={10,9,2,0,0};

1. ler vector[0] que neste caso é 10.

2. Percorrer 10 posições como se o vector fosse circular.

3. Teria que passar por 9,2 -> 10,9,2 -> 10,9,2 -> 10 e parar em 9 -> array[1]

Para isso posso inicializar o vector desta forma ?

int vector[5]={0,0,0,0,0};

E para passar da última posição preenchida do vector para a primeira, como faço ?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem terás entao o vector:

int vector[5] = {10,9,2,-1,0}

Percorres o vector até encontrares o -1 e vais contando o nº de elementos. O nº que obtiveres vai ser o teu DIM do meu exemplo anterior. A partir daí é igual.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Baderous.

Já consigo detectar o último valor preenchido do vector.

Já consigo ler o primeiro valor do vector e calcular  o nº de posições que ele vai percorrer.

Não consigo perceber como voltar ao ínicio do vector continuando a contar posições:

Ex:

int vector[6]={10,11,22,17,0,0};

1. Já controlo o nº de valores preenchidos (neste caso n=4)

2. Já sei que o nº de posições que ele vai percorrer no ínicio (neste caso vector[0]%n=2 -> 10%4=2).

3. Vou ter que me deslocar para a posição vector[2] e calcular o nº de posições a percorrer:

vector[2]%n=2 -> 22%4=2

4. Só que agora tinha que ir para a posição vector[0] (vector[2] + 2 posições) e isso não estou a conseguir.

Baderous podes explicar melhor como conseguir este movimento ?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite

Não estou a conseguir por o programa a ler a 1º posição do vector nem que ele ande x posições para a frente consoante a valor no qual ele estiver ler.

Alguém me pode dar uma ajuda?

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