Boa noite, galera. seguinte, gostaria de um help para retornar um vetor, cujo objetivo é implementar uma função que receba um vetor de inteiros V e retorne um outro vetor de inteiros alocado dinamicamente com todos os valores de V que estejam entre o valor mínimo e máximo (que também são passados como parâmetro para a função). quem puder me ajudar, ficarei muito grato.valeu
#include <stdio.h> #include <stdlib.h>
int * valores_entre(int * v, int n, int max, int min){
int i;
int cont = 0;
int *p;
for (i = 0; i < n; i++){
if (v[i] > min && v[i] < max){
cont++;
p = (int )malloc(contsizeof(int));
p[i] = v[i];
}
}
free§;
return p;
}
int main (void){
int vet[] = {1, 2 ,3 ,4 ,5};
int tam = sizeof(vet)/sizeof(int);
int * resultado = valores_entre(vet, 5, 1, 5);
int i;
for (i =0; i < 5; i++){
printf("%d\n", resultado[i]);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void printVetor(int *vetor, int size) {
for(int i = 0; i < size; i++){
printf("%d\n", vetor[i]);
}
}
int *valoresEntre(int *vetor, int sizeVetor, int *sizeResultado, int min, int max) {
for(int i = 0; i < sizeVetor; i++) {
if(vetor[i] > min && vetor[i] < max) {
*sizeResultado += 1;
}
}
int *resultado = malloc(*sizeResultado * sizeof(int));
for(int i = 0, j = 0; i < sizeVetor; i++) {
if(vetor[i] > min && vetor[i] < max) {
resultado[j++] = vetor[i];
}
}
return resultado;
}
int main () {
int vetor[] = {1, 2, 3, 4, 5};
int sizeVetor = sizeof(vetor) / sizeof(int);
int sizeResultado = 0;
int *resultado = valoresEntre(vetor, sizeVetor, &sizeResultado, 1, 5);
printVetor(resultado, sizeResultado);
return 0;
}
Inicialmente peço perdão por fazer alguns ajustes pessoais, como trocar os nomes das variáveis. Bom, eu criei uma função para, tão somente, printar os valores. Na função valoresEntre foi necessário criar um novo for para contar os números de elementos que atendem a condição de estar entre o intervalo (min, max). Após pegar o número de elementos, basta usar a função malloc para reservar o espaço necessário na memória. O último for serve para armazenar os números que atendem a condição do intervalo no novo vetor.
Bom, essa alternativa nunca será a mais eficiente. Há muitas outras melhores!
Divirta-se!
Abraço!
É uma boa prática pensar em quando a memória alocada deve ser liberada. Se isso for um trabalho escolar, mostra para seu professor que essa preocupação existiu também.
No caso específico desse programa, não é obrigatório pq quando processo finalizar, ao final do main, a memória será desalocada pelo sistema operacional quando a aplicação for fechada.