Ir para conteúdo
marialuiza

Vetor em função C

Recommended Posts

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

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

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.