Jump to content

Duvida vector em C


blue_ice
 Share

Recommended Posts

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

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
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
 Share

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