Ir ao conteúdo
  • Cadastre-se

C Desenvolva um programa em C que contenha dois vetores para armazenar valores...


Posts recomendados

Desenvolva um programa em C que contenha dois vetores para armazenar valores inteiros,
sendo o primeiro com 5 elementos e o segundo com 8 elementos. Os vetores devem ser
preenchidos com valores aleatórios. O programa ainda deve conter um terceiro vetor com 13
posições para armazenar a junção dos dois primeiros vetores. Os valores dos 3 vetores devem ser
apresentados na tela.
Exemplo:
Vetor 1: 2 5 0 9 3
Vetor 2: 7 0 9 9 1 8 2 3
Vetor 3: 2 5 0 9 3 7 0 9 9 1 8 2 3

 

#include <stdio.h>
#include <locale.h>

int main(void) {
	setlocale (LC_ALL, "Portuguese");

    int i, j;
    int vetorX[5], vetorY[8], vetorZ[13];

    srand(time(NULL));

	printf("\n\n VETOR 1: ");
    for(i = 0; i < 5; i++){
    	vetorX[i] = rand()%30;
    	printf("%d ", vetorX[i]);
	}
	
	printf("\n\n VETOR 2: ");
	for(i = 0; i < 8; i++){
    	vetorY[i] = rand()%30;
    	printf("%d ", vetorY[i]);
	}
	
	for(i=0; i<5; i++){
        vetorZ[i] = vetorX[i];
    }
    for (j=0; j<8; j++){
        vetorZ[j+5] = vetorY[j];
    }
        
    printf("\n\n VETOR 3: ");
    for(i = 0; i < 13; i++){
    	printf("%d ", vetorZ[i]);
	}
        
    printf("\n\n\n 			FIM!!!");
		
    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@alexandrecasa Vai precisar incluir a time.h se quiser usar time(), e também a stdlib.h para usar srand() e rand().

 

1 hora atrás, alexandrecasa disse:

gere 15 números inteiros aleatórios

Então podemos dizer que o intervalo é de INT_MIN até INT_MAX, já que não foi especificado. Se você fizer:

// rand() % ((maior - menor) + 1) + menor
rand() % ((INT_MAX - INT_MIN) + 1) + INT_MIN;

vai receber uma mensagem de erro: INT_MAX - INT_MIN obviamente causa overflow, o resultado é UINT_MAX.

Em vez disso, poderia usar o seguinte:

int randint(void)
{
    // Assumindo que srand() ja foi chamada
    return ((rand() % 2) ? (rand()) : ((-rand()) - 1));
}

Se rand() % 2 for 0 e rand() retornar por exemplo RAND_MAX, randint() retorna INT_MIN, ou quem sabe SHRT_MIN, vai depender já que RAND_MAX ≤ INT_MAX.

De qualquer forma, isso tende a te dar valores grandes, e baseado no exemplo do enunciado:

1 hora atrás, alexandrecasa disse:

Exemplo:
Vetor 1: 2 5 0 9 3
Vetor 2: 7 0 9 9 1 8 2 3
Vetor 3: 2 5 0 9 3 7 0 9 9 1 8 2 3

Acho que você poderia gerar valores de 0 a 9 mesmo :D

Como eu havia dito:

rand() % ((maior - menor) + 1) + menor

Então seria:

rand() % 10;

Veja:

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

int main(void)
{
    int i, j;
    int vetorX[5], vetorY[8], vetorZ[13];

    srand(time(NULL));

    printf("Vetor 1:");
    for(i = 0; i < 5; i++)
    {
        vetorX[i] = rand() % 10;
        printf(" %d", vetorX[i]);
    }

    printf("\nVetor 2:");
    for(i = 0; i < 8; i++)
    {
        vetorY[i] = rand() % 10;
        printf(" %d", vetorY[i]);
    }

    for(i = 0; i < 5; i++)
        vetorZ[i] = vetorX[i];
    for(j = 0; j < 8; j++)
        vetorZ[j+5] = vetorY[j];

    printf("\nVetor 3:");
    for(i = 0; i < 13; i++)
        printf(" %d", vetorZ[i]);

    return 0;
}

E na saída:

image.png.b567c02e1cc9ccb4e334c91bd309c3a2.png

É interessante sempre formatar como no exemplo do enunciado :D

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

8 horas atrás, Lucca Rodrigues disse:

Vai precisar incluir a time.h se quiser usar time(), e também a stdlib.h para usar srand() e rand().

 

Há (ou não há) uma razão objetiva para usar srand(). Uma é reiniciar o gerador para um determinado número aleatório. Outra é exatamente o contrário: forçar uma semente conhecida para poder regerar sequências para testar um programa ou um modelo. E em desenvolvimento a segunda é talvez mais importante. Em produção a primeira, em geral.

 

Mas muitas vezes é irrelevante, como aqui. Não precisa de srand(). E se vai usar não precisa incluir time.h só para isso: use um número qualquer.

 

10 horas atrás, alexandrecasa disse:
 int vetorX[5], vetorY[8], vetorZ[13];

 

Talvez não precise repetir vetor toda hora...

 

8 horas atrás, Lucca Rodrigues disse:

Então podemos dizer que o intervalo é de INT_MIN até INT_MAX, já que não foi especificado. Se você fizer:

// rand() % ((maior - menor) + 1) + menor
rand() % ((INT_MAX - INT_MIN) + 1) + INT_MIN;

 

8 horas atrás, Lucca Rodrigues disse:
int randint(void)
{
    // Assumindo que srand() ja foi chamada
    return ((rand() % 2) ? (rand()) : ((-rand()) - 1));
}

 

Talvez estejam complicando demais as coisas. Trata-se de um programa em C, a linguagem que foi escrita para manipular essas coisas com facilidade.

 

Considere esse programa:
 

#include <stdio.h>
int main(void)
{
    int x = 0x8765;
    printf("x = %d ou 0x%X (hex)\n", x, x );

    x <<= 16;
    printf("\n(x shift left 16 bits) x = %d ou 0x%X (hex)\n", x, x );

    int y = 0x3210;
    printf("\ny = %d ou 0x%X (hex)\n", y, y );

    int z = x | y;
    printf("\nz = x|y = %d ou 0x%X (hex)\n", z, z );

    return 0;
}

 

E veja o que ele mostra:
 

x = 34661 ou 0x8765 (hex)

(x shift left 16 bits) x = -2023424000 ou 0x87650000 (hex)

y = 12816 ou 0x3210 (hex)

z = x|y = -2023411184 ou 0x87653210 (hex)

 

Em muitas plataformas RAND_MAX é short int, 32767. Mas é sempre um valor positivo. Se quer um valor aleatório que cubra todo o espectro, de INT_MIN a INT_MAX inclusive, ou mesmo um long long int com 8 bytes, pode usar rand() para cada um byte ou dois e depois usar OR, o popular '|'.

 

Veja no programa acima: x sendo 0x8765 e y sendo 0x3210 x|y vale 0x87653210, x<<16 vale 0x87650000. e a conta fecha. É mais simples escrever assim

 

8 horas atrás, Lucca Rodrigues disse:

Se rand() % 2 for 0 e rand() retornar por exemplo RAND_MAX, randint() retorna INT_MIN, ou quem sabe SHRT_MIN, vai depender já que RAND_MAX ≤ INT_MAX.

De qualquer forma, isso tende a te dar valores grandes

 

Não exatamente. Não é que "tende a dar valores grandes". Se são aleatórios e tem 2 bytes por exemplo, o primeiro byte vai ser 0 em média 1 a cada 256 chamadas a rand() :). É o que se espera.

 

 

 

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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

Redes-Wi-Fi-capa-3d-newsletter.png

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!