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:
*Esses exercícios foram requisitados para a formulação da N2 da disciplina e foi entregue à professora em 11/2017
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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; | |
} |
Comentários
Postar um comentário