Ir ao conteúdo
  • Cadastre-se

Dúvida - Vetor Dinâmico em C


FabianoLothor

Posts recomendados

Bom galera, estou aqui quebrando a cabeça com um exercício da faculdade, comecei a aprender ponteiros a uns 3 dias atrás e estou tendo dificuldades em criar um vetor dinâmico em C.

O enunciado da questão está logo no início do código, se poderem dar alguma dica para resolução deste problema fico grato. A alocação dinâmica parece não estar sendo feita, pois apesar do programa compilar, ao imprimir os valores na tela só é exibido o primeiro número digitado.

Sistema Operacional: Windows 7 Ultimate.

IDE: Dev-C++ 4.9.9.2.


* Construa uma aplicação onde números
* são armazenados em um vetor alocado
* dinamicamente e ampliado em tamanho
* à medida que novas entradas são
* digitas.
*/

#include <stdio.h>
#include <stdlib.h>

void aloca(int *vetor_1, int *vetor_2, int numero, int contador);
void exibeVetor(int *vetor_1, int *vetor_2, int contador);

int main(int argc, char *argv[])
{
int numero, contador = 0;
int *vetor_1, *vetor_2;

do
{
printf("Digite um numero (0 para sair): ");
scanf("%i",&numero);

aloca(&vetor_1, &vetor_2, numero, contador);

++contador;
} while (numero != 0);

exibeVetor(&vetor_1, &vetor_2, contador);

system("PAUSE");
return 0;
}

void aloca(int *vetor_1, int *vetor_2, int numero, int contador)
{
int indice, tam_vetor_1, tam_vetor_2;

tam_vetor_1 = strlen(vetor_1);
tam_vetor_2 = strlen(vetor_2);

if(contador == 0)
{
vetor_1[contador] = numero;
}

if(contador % 2 == 1)
{
free(vetor_2);

vetor_2 = (int *) malloc(contador+1 * sizeof(int));

for(indice = 0;indice < tam_vetor_2-1;++indice)
{
vetor_2[indice] = vetor_1[indice];
}

vetor_2[tam_vetor_2] = numero;
}

if((contador % 2 == 0) && (contador !=0))
{
free(vetor_1);

vetor_1 = (int *) malloc(contador+1 * sizeof(int));

for(indice = 0;indice < tam_vetor_1-1;++indice)
{
vetor_1[indice] = vetor_2[indice];
}

vetor_1[tam_vetor_1] = numero;
}
}

void exibeVetor(int *vetor_1, int *vetor_2, int contador)
{
int indice, tam_vetor_1, tam_vetor_2;

tam_vetor_1 = strlen(vetor_1);
tam_vetor_2 = strlen(vetor_2);

if(contador % 2 == 0)
{
for(indice = 0;indice < tam_vetor_1;++indice)
{
printf("%i",vetor_1[indice]);
}
}

if(contador % 2 == 1)
{
for(indice = 0;indice < tam_vetor_2;++indice)
{
printf("%i",vetor_2[indice]);
}
}
}
/*

Desde já agradeço a todos!

Link para o comentário
Compartilhar em outros sites

Olá galera!

Desde o dia 18 e ninguém se atreveu a postar nada. Ponteiros infelizmente causam "medo" nas pessoas (incluse em mim), mas felizmente consegui terminar o programa.

Fiz o código inteiro de forma estruturada, sem a utilização de funções ou procedimentos, em breve talvez busque implementar algo do tipo, mas de momento estou sem tempo.

Abaixo segue o código de resolução do problema, para caso mais alguém possua esta mesma dúvida. Um site excelente que indico para estudos sobre ponteiros é este: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c600.html

Me ajudou bastante na resolução deste exercício. Bom, agora chega de papo, vamos ao que interessa!


/*
* Construa uma aplicação onde números
* são armazenados em um vetor alocado
* dinamicamente e ampliado em tamanho
* à medida que novas entradas são
* digitas.
*/

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int *vetor_1, *vetor_2, auxiliar, numero, contador, indice;

contador = 0;
auxiliar = 0;

vetor_1 = &auxiliar;
vetor_2 = &auxiliar;

do
{

printf("Digite o %do numero (ou 0 para sair): ",contador+1);
scanf("%d",&numero);

if(contador == 0)
{
*vetor_1 = numero;
}

if(contador % 2 == 1)
{
vetor_1 = (int *) malloc(sizeof(int) * contador+1);

for(indice = 0;indice < contador;++indice)
{
*(vetor_1 + indice) = *(vetor_2 + indice);
}

*(vetor_1 + contador) = numero;
}

if((contador % 2 == 0) && (contador !=0))
{
vetor_2 = (int *) malloc(sizeof(int) * contador+1);

for(indice = 0;indice < contador;++indice)
{
*(vetor_2 + indice) = *(vetor_1 + indice);
}

*(vetor_2 + contador) = numero;
}

++contador;

} while (numero != 0);

puts("");

--contador;

printf("Os numeros que voce digitou, foram: ");

if(contador % 2 == 0)
{
free(vetor_1);

for(indice = 0;indice < contador-1;++indice)
{
printf("%i, ",*(vetor_2 + indice));
}
printf("%i.\n\nEstes numeros foram armazenados no vetor 2!",*(vetor_2 + indice));
}

if(contador % 2 == 1)
{
free(vetor_2);

for(indice = 0;indice < contador-1;++indice)
{
printf("%i, ",*(vetor_1 + indice));
}
printf("%i.\n\nEstes numeros foram armazenados no vetor 1!",*(vetor_1 + indice));
}

puts("\n");

system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!