blue_ice Posted December 3, 2009 at 11:29 PM Report Share #298653 Posted December 3, 2009 at 11:29 PM 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. Link to comment Share on other sites More sharing options...
TheDark Posted December 4, 2009 at 01:26 AM Report Share #298663 Posted December 4, 2009 at 01:26 AM 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. Desaparecido. Link to comment Share on other sites More sharing options...
blue_ice Posted December 5, 2009 at 03:18 PM Author Report Share #298794 Posted December 5, 2009 at 03:18 PM 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 More sharing options...
Baderous Posted December 5, 2009 at 03:20 PM Report Share #298795 Posted December 5, 2009 at 03:20 PM 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. Link to comment Share on other sites More sharing options...
blue_ice Posted December 5, 2009 at 03:35 PM Author Report Share #298802 Posted December 5, 2009 at 03:35 PM boas Importas-te de dar um exemplo para eu poder perceber melhor o que queres dizer? obrigado Link to comment Share on other sites More sharing options...
Baderous Posted December 5, 2009 at 03:53 PM Report Share #298804 Posted December 5, 2009 at 03:53 PM #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 More sharing options...
blue_ice Posted December 5, 2009 at 04:27 PM Author Report Share #298812 Posted December 5, 2009 at 04:27 PM obrigado pelo teu contributo. Link to comment Share on other sites More sharing options...
amp48rc Posted December 5, 2009 at 07:46 PM Report Share #298837 Posted December 5, 2009 at 07:46 PM 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 More sharing options...
Baderous Posted December 5, 2009 at 08:14 PM Report Share #298838 Posted December 5, 2009 at 08:14 PM 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. Link to comment Share on other sites More sharing options...
amp48rc Posted December 5, 2009 at 09:03 PM Report Share #298845 Posted December 5, 2009 at 09:03 PM 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. Link to comment Share on other sites More sharing options...
Baderous Posted December 5, 2009 at 09:10 PM Report Share #298848 Posted December 5, 2009 at 09:10 PM 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 More sharing options...
amp48rc Posted December 6, 2009 at 01:16 AM Report Share #298884 Posted December 6, 2009 at 01:16 AM 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. Link to comment Share on other sites More sharing options...
Baderous Posted December 6, 2009 at 12:17 PM Report Share #298896 Posted December 6, 2009 at 12:17 PM 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. Link to comment Share on other sites More sharing options...
amp48rc Posted December 6, 2009 at 01:30 PM Report Share #298900 Posted December 6, 2009 at 01:30 PM 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 More sharing options...
Baderous Posted December 6, 2009 at 02:04 PM Report Share #298904 Posted December 6, 2009 at 02:04 PM 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. Link to comment Share on other sites More sharing options...
amp48rc Posted December 7, 2009 at 11:52 AM Report Share #299048 Posted December 7, 2009 at 11:52 AM 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 More sharing options...
blue_ice Posted December 7, 2009 at 10:43 PM Author Report Share #299156 Posted December 7, 2009 at 10:43 PM 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? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now