Jump to content
mauricio lanner

Alocação dinâmica

Recommended Posts

Bom dia pessoal, estou com um probleminha, preciso entregar hoje um trabalho de faculdade em algoritimos computacionais, mas to me batendo muito.

A questão é assim:

 

Faça um programa que leia números do teclado e os armazene em um vetor alocado dinamicamente. O usuario irá digitar uma sequência de números, sem limite de quantidade. Os números serão digitados um a um e, sendo que caso ele deseje encerrar a entrada de dados, ele irá digitar o numero ZERO. Os dados devem ser armazenados na memória deste modo:
    • Inicie com um vetor de tamanho 10 alocado dinamicamente;
    • Apos, caso o vetor alocado esteja cheio, aloque um novo vetor do tamanho do vetor anterior adicionado espaço para mais 10 valores (tamanho N+10, onde N inicia com 10);
    • Copie os valores já digitados da área inicial para esta área maior e libere a memória da área inicial;
    • Repita este procedimento de expandir dinamicamente com mais 10 valores o vetor alocado cada vez que o mesmo estiver cheio. Assim o vetor ira ser ’expandido’ de 10 em 10 valores.

 

O grande problema que estou tendo é que não consigo fazer o while repetir da forma que preciso. iniciei o programa assim:

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

main(){
	int *vetor,tam=10,i=0;
	
	vetor = malloc(sizeof(int)*tam);
	
	while (vetor!=0 || i<tam){
		scanf("%d",vetor+i);
		printf("%d i \n",i);
		i++;
	}
	 for(i=0;i<tam;i++){
	 	printf("indice %d vetor %d\n",i,vetor+i);
	 }
}

mas o ||(ou) não quer funcionar, ou ele usa um como parametro ou usa a outra regra.

Alguem consegue me ajudar a resolver isso?

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

  • Similar Content

    • By Edwar Saliba Jr.
      Boa tarde Senhores(as)!
       
      O código-fonte a seguir é a miniaturização de um problema maior no qual estou trabalhando.
       
      Preciso imprimir os valores do vetor gerado pela função "fazVetor", na função "main".
       
      Porém, para que o código se assemelhe ao problema real no qual estou trabalhando, existem duas restrições que devem ser respeitadas. Estas estão comentadas no código a seguir.
       
      #include <stdio.h> #include <stdlib.h> #define TAM 3 int fazVetor(int **vet){ int *array = malloc(sizeof(int) * TAM); array[0] = 4; array[1] = 7; array[2] = 8; /* nesta função somente a linha a seguir pode ser alterada. */ *vet = array; } int main() { int **qq; /* Na função main, somente a linha a seguir NÃO PODE ser alterada. */ fazVetor(&qq); printf("\n--==[Valores do Vetor]==--\n\n"); for(int i = 0; i < TAM; i++){ printf(" %d", (qq[i])); } printf("\n\n"); return 0; }  
      O único objetivo é a impressão dos valores do vetor na função "main". Respeitadas as devidas restrições.
       
      De antemão, muito obrigado!
       
       
      Edwar Saliba Jr.
    • By Guiibarbosaa
      Olá galera, bom dia !
       
      Estou desenvolvendo um trabalho para faculdade onde armazeno e exibo os resultados de ordenação de diversos algoritmos, sendo numero de comparações, trocas e tempo.
      Tenho tudo pronto e escrito, ou seja, o escopo do trabalho esta Ok, falta implementar o resto dos algoritmos.
       
      Consegui quase tudo com a ajuda de colegas de outro fórum, porém estou com um erro que não consigo soluciona-lo, se alguém puder me dar uma ideia do que esta acontecendo fico grato.
       
      1- Aqui eu tenho minha lista global de registros que ira armazenar os resultados de ordenação:
       
      typedef struct{
          int numcomp;
          int numtrocas = 0;
      }ESTATISTICAS;
       
      2-  Como exemplo o algoritmo bubble sort recebendo os valores por referencia:
       
      void bubbleSort(int vet[], int num, ESTATISTICAS* estatisticas){

          int i, continua, aux, fim = num;
                  do{
                      continua = 0;
              
                      for(i = 0; i < fim -1; i++ ){
                      
                          estatisticas->numcomp++;    
                          if(vet > vet[i+1]){
                              aux = vet;
                              vet = vet[i+1];
                              vet[i+1] = aux;
                              estatisticas->numtrocas++;
                              continua = 1;
                          }
                      }
                      fim--;
                  }while(continua != 0);
      }
       
       
      3- e aqui a declaração da lista e a chamada da função de ordenação com a exibição dos valores armazenados:
       
      int *ptr;
                          ptr = geraVetor(vetor1);
                          //imprimeVetor(ptr, vetor1);
                      
                              
                          ESTATISTICAS* estatisticas = (ESTATISTICAS*) malloc(sizeof(ESTATISTICAS)); 
                          
                          clock_t  start, end;
              
                          start = clock();
                          bubbleSort(ptr,vetor1, estatisticas);
                          end = clock();
                          printf("\n\nTROCAS: %d", estatisticas->numcomp);
                          printf("\n\nTROCAS: %d", estatisticas->numtrocas);
       
      4- O erro consiste em: quando compilo meu programa tudo esta ok, porém o valor retornado pela variável numcomp esta muito além do numero de comparações, se parecendo mais com um endereço de memoria. algo do tipo: 348219. Já a variável numtrocas o valor é retornado normalmente apos os incrementos ++;
       
       
      Aguardo ajuda, de já agradeço.
       
       
    • By r1castro1
      :( Olá pessoal, estou aprendendo programação em C/C++ e ainda me perco na resolução de alguns problemas. A questão abaixo, requer eu crie 5 ponteiros e os ordene em forma crescente. Há uma semana que estou nisso. Alguém pode me ajudar?
      //Faça um programa usando ponteiros, para ordenar 5 números e mostrá-los ordenados na tela. //A ordenação deve ser realizada através dos ponteiros. Então é necessário criar cinco ponteiros [ code] #include <stdio.h> int main() { int a, b, c, d, e; int *ponteiro_a = &a, *ponteiro_b = &b, *ponteiro_c = &c, *ponteiro_d = &d, *ponteiro_e = &e; int *menor = ponteiro_a, *medio_1 = ponteiro_a, *medio_2 = ponteiro_a, *medio_3 = ponteiro_a, *maior = ponteiro_a; printf("Entre com 5 numeros Inteiros [separados por espaços]: "); scanf(" %d %d %d %d %d", ponteiro_a, ponteiro_b, ponteiro_c, ponteiro_d, ponteiro_e); if(*ponteiro_b > *maior) maior = ponteiro_b; if(*ponteiro_c > *maior) maior = ponteiro_c; if(*ponteiro_d > *maior) maior = ponteiro_d; ; if(*ponteiro_e > *maior) maior = ponteiro_e; if(*ponteiro_b < *menor) menor = ponteiro_b; if(*ponteiro_c < *menor) menor = ponteiro_c; if(*ponteiro_d < *menor) menor = ponteiro_d; if(*ponteiro_e < *menor) menor = ponteiro_e; if(maior != ponteiro_a && menor != ponteiro_a && medio_1 != ponteiro_a) medio_2 = ponteiro_a; else { medio_3 = ponteiro_a; } if(maior != ponteiro_b && menor != ponteiro_b && medio_1 != ponteiro_B) medio_1 = ponteiro_b; else { medio_3 = ponteiro_b; } if(maior != ponteiro_c && menor != ponteiro_c && medio_1 != ponteiro_c) medio_2 = ponteiro_c; else { medio_3 = ponteiro_c; } if(maior != ponteiro_d && menor != ponteiro_d && medio_1 != ponteiro_d) medio_2 = ponteiro_d; else { medio_3 = ponteiro_d; } if(maior != ponteiro_e && menor != ponteiro_e && medio_1 != ponteiro_e) medio_2 = ponteiro_e; else { medio_3 = ponteiro_e; } printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_1, *medio_2, *medio_3, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_3, *medio_2, *medio_1, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_2, *medio_3, *medio_1, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_1, *medio_3, *medio_2, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_2, *medio_1, *medio_3, *maior); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_1, *medio_2, *medio_3, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_3, *medio_2, *medio_1, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_2, *medio_3, *medio_1, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_1, *medio_3, *medio_2, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_2, *medio_1, *medio_3, *menor); return 0; } [ /code]
    • By Druid
      Pessoal preciso muito da ajuda dos feras deste fórum.

      Seguinte, usei e ainda uso um programa para cadastrar conteúdos de DVD, e HDD, o programa foi feito em Delphi 5, e o desenvolvedor descontinuou o programa e disponibilizou os fontes para a comunidade GNU.

      Ocorre que faz muito tempo que não mexo com Delphi, e como o programa é antigo, porém muito bom e funcional, ele não trata o tamanho dos arquivos em GigaBytes/TeraBytes, nem existiam HD com 1TB ou maiores na época, e meus arquivos MKV, por exemplo, que tem valores em GibaBytes, o programa está lendo e armazenando os tamanhos dos arquivos com valores errôneos, e os apresenta com valores negativos e muitas vezes errados.

      Abri o projeto e verifiquei que o desenvolvedor usa programação de baixo nível com uso de record e ponteiros, para ler um DVD, ou um HDD, e tentei por 3 dias entender a lógica disso, mas estou jogando a toalha, porque não sei como alterar a leitura/gravação dos arquivos .QDR que ele cria, para contemplar GIGA BYTES e/ou TERA BYTES.

      Se alguém puder me ajudar, ficarei muito grato.

      A fonte encontra-se aqui na minha conta MEGA:

      https://mega.nz/#!bgw3mL4K

      Chave para descryptografia no MEGA

      !ln-C0iOSHrVighGGXoHB-cZgMgDXMIdOTo5Hy-bnrXU

      Att.

      Druid®.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.