marialuiza 0 Denunciar post Postado Novembro 28, 2016 Faça uma função que receba por parâmetro um vetor A de 25 números inteiros e substitua os números negativos por 0. Como retornar o vetor para a função principal? #include<stdio.h> #include <stdlib.h> int valoresnegativos(int n, float *A); int main(void) { int i; int A[25]; for (i = 0; i < 25; i++) { printf("Digite o valor %d: ", i+1); scanf("%d", &A); } } int valoresnegativos(int n, float *A) { int i; for (i = 0; i < 25; i++) { if(A<0) { A=0; } else { A=A; } } for(i=0;i<25;i++) printf("%d\n",A); } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 29, 2016 Usando um return Compartilhar este post Link para o post Compartilhar em outros sites
exata0mente 0 Denunciar post Postado Novembro 30, 2016 Olá! Quando passamos um vetor como argumento para alguma função, o passamos por referência, ou seja, não enviamos o valor de cada elemento do vetor e sim o endereço do primeiro elemento do vetor. Lembre-se, quando uma variável é passada como argumento à uma função, esta função cria uma variável local em que "copia" o valor da variável da função chamadora. Agora imagine que você tenha um vetor teste[100]. Passar 100 valores para uma função seria algo que necessitaria de muito processamento, algo desnecessário. Por isso, convenciona-se que a passagem de vetor como argumento seja por referência! Abaixo um trecho extraído do livro "Treinamento em Linguagem C": "As matrizes são consideradas um tipo de dado bastante grande, pois são formados por diversas variáveis. Por causa disso, em linguagem C, determina-se ser mais eficiente existir uma única cópia da matriz na memória, sendo, portanto, irrelevante o número de funções que a acessem. Assim, não são passados os valores contidos na matriz, somente o seu endereço de memória. O que ocorre quando o endereço de uma matriz é passado para uma função como argumento? A função usa o endereço para acessar os elementos da matriz original, criada na função que chama. Isto significa que as alterações que a função efetuar nos elementos da matriz afetarão a matriz original. 'Ao passar o nome de uma matriz para uma função não se cria uma nova cópia da matriz; a passagem é por referência' " Ok, então o que faço? Se o endereço da memória do vetor é o que é passado para a função, significa que o que você fizer neste vetor, será gravado diretamente na memória, ou seja, não precisa retornar nenhum valor para a função chamadora! Logo, toda função que trate apenas vetores são do tipo void. Outro ponto é que o return retorna apenas um único valor. Segue o código com algumas alterações: #include <stdio.h> #include <stdlib.h> #define TAM 4 /*Depois altere para 25*/ void valoresnegativos(float *A); int main(void){ int i; int A[TAM]; for (i = 0; i < TAM; i++){ printf("Digite o valor %d: ", i+1); scanf("%d", &A[i]); } valoresnegativos(A); return 0; } void valoresnegativos(float *A){ int i; for (i = 0; i < TAM; i++){ if(A[i]<0) A[i]=0; } for(i = 0; i < TAM; i++) printf("%d\n",A[i]); } Compartilhar este post Link para o post Compartilhar em outros sites
Wilkyn Fernandes Taborda 0 Denunciar post Postado Março 16, 2020 Em 28/11/2016 at 15:06, marialuiza disse: Como retornar o vetor para a função principal? Na verdade nesse seu código o vetor já está declarado na função principal e não há a necessidade de retorná-lo para ela por que ele já faz parte dela. Por esse motivo o retorno é redundante. Compartilhar este post Link para o post Compartilhar em outros sites