União de dois vetores e intermediários de um vetor

Em Programação de Computadores foi pedido* que se fizesse duas aplicações, ambas utilizando alocação dinâmica de memória em uma função.

Para a primeira foi necessário que a partir de um vetor de inteiros fossem separados em um outro vetor (esse alocado dinamicamente) os valores entre um minimo e máximo vindo do usuário. Após a alocação de memória e o seu preenchimento o programa exibe na tela o conteúdo desse vetor.

Já na segunda aplicação era necessário apenas a união de dois vetores.

Os códigos do primeiro e segundo programas podem ser vistos abaixo:

/*
Exercício 1 - Valores entre um minimo e máximo
Made with despair by iojoaomarcos
Programação de Computadores @ USF
*/
#include <stdio.h>
#include <stdlib.h>
//Define o tamanho do vetor
#define TAM_VETOR 10
int *valores_entre(int *v, int n, int min, int max, int *qtde){
int i;
int j = 0;
int *intermediarios; //vetor de elementos entre o min e max
//Verifica quantos números existem entre o min e max
for (i = 0; i < n; i++){
if(v[i] > min && v[i] < max){
j++;
}
}
*qtde = j;
if(*qtde > 0){
//Aloca dinamicamente o vetor intermediarios
intermediarios = (int*) malloc(*qtde * sizeof(int));
/*Copia os valores entre min e max
no vetor intermediarios
j está presente para colocar no inicio do vetor*/
j = 0;
for(i = 0; i < n; i++){
if((v[i] > min) && (v[i]) < max){
intermediarios[j] = v[i];
j++;
}
}
}
else{
return NULL;
}
return intermediarios;
}
int main(){
int v[TAM_VETOR]; //vetor a ser analisado
int n = TAM_VETOR; //quantidade de elementos do vetor v
int min, max; // minimo e máximo definido pelo usuário
int qtde = 0; //quantidade de elementos entre min e max
int i;
int *pAux; /*Ponteiro auxiliar para receber o vetor
"intermediarios" da função valores_entre*/
//Recebendo os dados do usuário...
for(i = 0; i < n; i++){
printf("Digite o %io elemento: ", i+1);
scanf("%i", &v[i]);
}
printf("\nQual eh o valor minimo? E maximo?: ");
scanf("%i %i", &min, &max);
pAux = valores_entre(&v, n, min, max, &qtde);
printf("\n-------------------------------------------------\n");
if(qtde > 0){
printf("\nOs valores entre %i e %i sao:\n", min, max);
for(i = 0; i < qtde; i++){
//Imprime o conteúdo de pAux em cada posição(i)
printf("%i ", *(pAux + i));
}
}
else{
printf("\n Nao foram encontrados elementos entre o min e max :(\n");
}
//Libera a memória
free(pAux);
system("pause");
return 0;
}
/*
Exercicio 2 - União de 2 vetores
Made with despair by iojoaomarcos
Programação de Computadores @ USF
*/
#include <stdio.h>
#include <stdlib.h>
// Define estáticamente o tamanho dos vetores v1 e v2
#define TAM_VETOR 10
int *uniao(int *v1, int n1, int *v2, int n2){
int i = 0;
// Aloca dinamicamente v3
int *v3 = malloc((n1 + n2) * sizeof(int));
//Preenche o vetor com o v1
for(i = 0; i < n1; i++){
v3[i] = v1[i];
}
//Preenche o vetor com v2
for(i = 0; i < n2; i++){
v3[n1 + i] = v2[i];
}
return v3;
}
int main(){
int i = 0;
int v1[TAM_VETOR]; //primeiro vetor
int v2[TAM_VETOR]; //segundo vetor
int n1 = TAM_VETOR; //tamanho do v1
int n2 = TAM_VETOR; // tamanho do v2
int *pAux;
printf("Digite os elementos do primeiro vetor:\n");
for(i = 0; i < n1; i++){
printf("Da %ia posicao: ", i+1);
scanf("%i", &v1[i]);
}
printf("\nDigite os elementos do segundo vetor:\n");
for(i = 0; i < n2; i++){
printf("Da %ia posicao: ", i+1);
scanf("%i", &v2[i]);
}
pAux = uniao(&v1, n1, &v2, n2);
printf("\n-----------------------------------------------------\n");
printf("A uniao de v1 e v2 resulta:\n");
for( i = 0; i < (n1 + n2); i++){
printf("%i ", *(pAux + i));
}
//libera a memória alocada dinamicamente
free(pAux);
system("pause");
return 0;
}
*Esses exercícios foram requisitados para a formulação da N2 da disciplina e foi entregue à professora em 11/2017

Comentários

Postagens mais visitadas deste blog

Parli Italiano? III- Alfabeto Italiano

Vogal ou Consoante com Switch-Case em C