Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

×

Informação importante

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