Ir ao conteúdo

Posts recomendados

Postado

Preciso fazer um exercicio de alocagem dinamica cheguei ate um ponto mas não consegui o restante que diz:"Escreva um programa que pergunte ao usuário quanto números ele deseja alocar dinâmicamente, sendo no mínimo 10.000 e no máximo 100.000. Popule o vetor dinâmico com números inteiros sorteados dentro do intervalo 1.000 a 9.999. Modifique então o vetor de forma que, caminhando da esquerda para a direita, tenhamos primeiro todos os números pares, depois, os números impares. Mostre o vetor original e o vetor alterado."

segue o código ate onde consegui, alguem consegue?

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


printf("\n\nQuanto inteiros você quer: ");
scanf("%d", &tam);
    p = (int *) malloc(tam * sizeof(int)); 
    if (p == NULL){
        printf("Erro de alocacao!");
        exit(1);
    }

    printf("Espaco alocado para os inteiros:\n");
    for (i=0; i<tam; i++){
        p[i] = 999;
        printf("%d", p[i]);
    }

    pe = p[0]
    pd = p[tam-1];

    p[e]
    p[d]
    free(p);
    p = NULL
    return 0;
}

 

Postado

@itstalisson Poste o código completo. Falta a condicional para testar se o número está no intervalo pedido e também falta a parte de preencher o vetor com rand.

 

Para carregar o outro vetor que será divido entre um bloco de pares e outro de ímpares, você pode usar duas variáveis para controlar as posições: Uma dos pares que inicia com o 0 e outra dos ímpares que inicia com n - 1 (n = tamanho do vetor), depois teste o valor com mod, p.ex,

 

int par = 0;
int impar = n - 1;
...
if(vetor[i] % 2){
    novo_vetor[impar] = vetor[i];
    impar -= 1;
}else{
    novo_vetor[par] = vetor[i];
    par += 1;
}

 

Postado

@Midori eu consegui fazer ate aqui mas não consigo implementar isso que mandou 

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

const int MAX_TAM = 10000;
const int MIN_N_TAM = 1000;

time_t *t;


int main(int argc,char **argv){

    unsigned int tam;

    srand(time(&t));

    printf("\n Quanto deseja alocar:? ");

    if ( scanf("%ld",&tam) != 1){
        return -1;
    }
    if ( tam < MIN_N_TAM || tam > MAX_TAM){
        printf("\n Valor invalido: %ld \n",tam);
    }

    int *vetor = (int *) malloc(tam*sizeof(int));

    if (!vetor){
        printf("\n erro de alocacao\n");
        return -1;
    }
    int n_rand =0;
    int i;

    for (i=0; i <tam; i+=1){
        n_rand = MAX_TAM + ( rand() % MIN_N_TAM);
        vetor[i] = n_rand;

        printf(" Gerando : %d \n",vetor[i]);

        printf("\n==========================\n");

    }



}

 

@Midori

33 minutos atrás, itstalisson disse:

@Midori eu consegui fazer ate aqui mas não consigo implementar isso que mandou 

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

const int MAX_TAM = 10000;
const int MIN_N_TAM = 1000;

time_t *t;


int main(int argc,char **argv){

    unsigned int tam;

    srand(time(&t));

    printf("\n Quanto deseja alocar:? ");

    if ( scanf("%ld",&tam) != 1){
        return -1;
    }
    if ( tam < MIN_N_TAM || tam > MAX_TAM){
        printf("\n Valor invalido: %ld \n",tam);
    }

    int *vetor = (int *) malloc(tam*sizeof(int));

    if (!vetor){
        printf("\n erro de alocacao\n");
        return -1;
    }
    int n_rand =0;
    int i;

    for (i=0; i <tam; i+=1){
        n_rand = MAX_TAM + ( rand() % MIN_N_TAM);
        vetor[i] = n_rand;

        printf(" Gerando : %d \n",vetor[i]);

        printf("\n==========================\n");

    }



}

 

@m

Postado

@itstalisson Dividindo o programa em funções fica mais simples de resolver, primeiro uma função para iniciar o vetor com os números, depois uma para modificar (que na verdade faz outra alocação) e outra para imprimir. Fiz com 10 elementos, se for isso mesmo e quiser aproveitar o código é só acrescentar a parte que pede o tamanho do vetor e testa se está no intervalo pedido,

 

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

int *inicia(int tamanho){
    int *V = (int *)malloc(sizeof(int) * tamanho);
    srand(time(NULL));

    for(int i = 0; i < tamanho; i += 1){
        V[i] = rand() % 9000 + 1000;
    }
    return V;
}

int *modifica(int *vetor, int tamanho){
    int *V = (int *)malloc(sizeof(int) * tamanho);
    int par = 0;
    int impar = tamanho - 1;
    
    for(int i = 0; i < tamanho; i += 1){
        if(vetor[i] % 2){
            V[impar] = vetor[i];
            impar -= 1;
        }else{
            V[par] = vetor[i];
            par += 1;
        }
    }
    return V;
}

int *imprime(int *vetor, int tamanho){
    for(int i = 0; i < tamanho; i += 1){
        printf(" %d", vetor[i]);
    }
    return vetor;
}

int main(){
    int *vetor = inicia(10);
    int *modificado = modifica(vetor, 10);
    printf("Vetor original:\n");
    imprime(vetor, 10);
    printf("\nVetor modificado:\n");
    imprime(modificado, 10);
    free(vetor);
    free(modificado);
    return 0;
}

 

Postado
3 horas atrás, itstalisson disse:

alocar dinâmicamente, sendo no mínimo 10.000 e no máximo 100.000. Popule o vetor dinâmico com números inteiros sorteados dentro do intervalo 1.000 a 9.999. Modifique então o vetor de forma que, caminhando da esquerda para a direita, tenhamos primeiro todos os números pares, depois, os números impares. Mostre o vetor original e o vetor alterado."


Sério?

 

Então são entre 10 e 100 mil números e vai mostrar os dois vetores, entre 20 e 200 mil números? Wow!

Ao menos não mandaram entregar por escrito. 

 

Sobre seu programa

 

Você não fez quase nada.

  • Sequer testou para ver se o valor de entrada está entre os limites pedidos.
  • TESTE o retorno de scanf(). Não faz sentido seguir se não leu o número...
  • Sobre isso
      printf("Espaco alocado para os inteiros:\n");
        for (i=0; i<tam; i++){
            p[i] = 999;
            printf("%d", p[i]);
        }
    
        pe = p[0]
        pd = p[tam-1];
    
        p[e]
        p[d]
        free(p);

    não consegui entender o que está fazendo nessas linhas.
     

  • nem tentou preencher o vetor

 

Uma vez preenchido apenas percorra o tal vetor da esquerda para a direita e ao encontrar um ímpar troque o valor de lugar com o primeiro par que achar. Faça isso até o fim do vetor e pronto.

 

Claro, mostre o vetor original antes porque assim pode ir usando o mesmo, como faria com uma lista no papel...

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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