Jump to content
Fórum Script Brasil
  • 0

Retorno de uma função à main


Progc++

Question

Olá a todos,

Evoluí para estudo e de funções e estou achando muito interessante, eis o problema...

"Faça uma sub-rotina que receba como parâmetro uma matriz[3][3] e retorne a soma dos seus elementos."

Quando o resultado sai na main em vez de sair como esperado sai um outro numero e muito grande (ex: deveria ser 175, mas sai 47852...).

Detalhe: O resultado sai correto dentro do sub-algoritmo, mas não na main, como descrito.

O que interessa na main...

int funcao(int mat[][3],int soma_res)  //protótipo da função
int main()
{...
  funcao(matriz,soma)    //variáveis da main; são inteiros.
  printf("\n\n\nO resultado da soma entre os elementos da matriz: %d",soma);

   return EXIT_SUCCESS;
}
A função...
int funcao(int mat[][3],int soma_res)
   {
       int i,j;
       soma_res=0;
       for(i=0;i<3;i++)
       {
        for(j=0;j<3;j++)
        {
            soma_res+=mat[i][j];
        }
       }       

     return soma_res;  
   }

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
Olá a todos,

Evoluí para estudo e de funções e estou achando muito interessante, eis o problema...

"Faça uma sub-rotina que receba como parâmetro uma matriz[3][3] e retorne a soma dos seus elementos."

Quando o resultado sai na main em vez de sair como esperado sai um outro numero e muito grande (ex: deveria ser 175, mas sai 47852...).

Detalhe: O resultado sai correto dentro do sub-algoritmo, mas não na main, como descrito.

O que interessa na main...

int funcao(int mat[][3],int soma_res)  //protótipo da função
int main()
{...
  funcao(matriz,soma)    //variáveis da main; são inteiros.
  printf("\n\n\nO resultado da soma entre os elementos da matriz: %d",soma);

   return EXIT_SUCCESS;
}
A função...
int funcao(int mat[][3],int soma_res)
   {
       int i,j;
       soma_res=0;
       for(i=0;i<3;i++)
       {
        for(j=0;j<3;j++)
        {
            soma_res+=mat[i][j];
        }
       }       

     return soma_res;  
   }
você tem que estudar sobre parametros de uma função. Acho que esse é o seu erro, você fez um função que recebesse como parametro um vetor[][3] e um int. o parametro soma_res é passado por cópia ou seja NÃO ALTERA O VALOR DA VARIAVEL PASSADA só dentro da função. aí você usou a variavel depois fora da função em main e quando você imprimiu o printf mostrou o valor da variável soma que era um valor que o compilador dá a variável se ela não for iniciada. Existe duas maneiras para se fazer.
int funcao(int mat[][3])
   {
       int i,j;
       int soma_res=0;
       for(i=0;i<3;i++)
       {
        for(j=0;j<3;j++)
        {
            soma_res+=mat[i][j];
        }
       }       

     return soma_res;  
   }
e para chamar sua função no main() você faz assim...
soma = funcao(matriz);//ou seja sua variavel soma vai ser atribuida com o valor que a função retornar;
Ou dessa maneira, um pouco mais avançada.
VOID funcao(int mat[][3], *int soma_res)
   {
       int i,j;
       soma_res=0;
       for(i=0;i<3;i++)
       {
        for(j=0;j<3;j++)
        {
            soma_res+=mat[i][j];
        }
       }         
   }
e chama-la assim
funcao(matriz, &soma);//Ai você pode altera-la o valor de soma dentro da sua funcao e fora tambem.

Edited by Dan Oliveira
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...