Como faço para uma função retornar um vetor?

657 views
Skip to first unread message

Jefferson Henrique

unread,
Jun 23, 2013, 7:16:31 PM6/23/13
to DeAlunoP...@googlegroups.com
mais uma dúvida...

Preciso fazer o seguinte exercício:

4. Faça um procedimento que recebe por parâmetro os valores necessário para o cálculo da fórmula de báskara e retorna, também por parâmetro, as suas raízes, caso seja possível calcular.

Consegui fazer o seguinte:

#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;

int main ()


{
    float a, b, c;
    float baskara (float a, float b, float c);
    float raiz1[2] = baskara (a , b , c);
cout<<"As raizes sao: "<<raiz1[2];

system("pause>>null");
}
float baskara (float a, float b, float c)
{
  float raiz1[2];
  cout<<"digite o valor de a: ";
  cin>>a;
  cout<<"digite o valor de b: ";
  cin>>b;
  cout<<"digite o valor de c: ";
  cin>>c;
  float delta = sqrt(b*b-4*a*c);
  raiz1[0] = ((-1*b+delta)/2*a);
  raiz1[1] = ((-1*b-delta)/2*a);
  return raiz1[2];
  
      }

Onde estou errando?

Ítalo Grossi

unread,
Jun 24, 2013, 3:31:16 PM6/24/13
to DeAlunoP...@googlegroups.com
Algumas coisas importantes a serem consideradas:

Nessa parte
float raiz1[2] = baskara (a , b , c);

O que o programe entende é que você está passando os VALORES das variáveis A, B ,C... mas perceba que as variáveis A, B, C ainda não possuem valores. Se você quiser fazer o programa dessa maneira vai precisar saber ponteiros... Em vez de passar os valores de A, B, C você passaria o ENDEREÇO de MEMÓRIA de A, B, C... mas acho que não tem necessidade de complicar.

Nessa parte, dentro da função BASKARA
float raiz1[2];

É importante lembrar que quando essa função é retornada.. o seu vetor raiz1 "morre"... para retornar um ponteiro é necessário utilizar ponteiros..e em conjunto fazer o seu vetor raiz1 estático, dessa maneira ele não "morreria" quando a função retorna-se.

A maneira mais fácil de resolver esse problema sem utilizar ponteiros é passar o seu vetor criado em main como argumento da função.

Com todas as modificações acima o programa ficaria assim

#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;


int main ()
{
   
float a, b, c;

   
void baskara (float a, float b, float c, float vetor[]);

   
float raiz1[2];
   
    cout
<<"digite o valor de a: ";
    cin
>>a;
    cout
<<"digite o valor de b: ";
    cin
>>b;
    cout
<<"digite o valor de c: ";
    cin
>>c;

   
    baskara
(a , b , c, raiz1);
    cout
<<"As raizes sao: "<<raiz1[0];
    cout
<<"\nAs raizes sao: "<<raiz1[1];
   
   
system("pause>>null");
}


void baskara (float a, float b, float c, float vetor[])
{
    vetor
[0] = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
    vetor
[1] = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
}

Jefferson Henrique

unread,
Jun 24, 2013, 6:08:47 PM6/24/13
to DeAlunoP...@googlegroups.com
Cara, muito obrigado, deu certinho aqui. vlw mesmo.

Ainda tenho muitas dúvidas sobre o comando return, não entendi como que os valores passaram de uma função pra outra sem o comando return.

E não achei nenhum vídeo falando melhor sobre esse comando...


Ítalo Grossi

unread,
Jun 25, 2013, 4:19:20 AM6/25/13
to DeAlunoP...@googlegroups.com
dê uma olhada nesse vídeo aqui.
http://www.youtube.com/watch?v=NS1LdXMyx3A

Se você tiver tempo assista  série sobre funções.. acho que vai clarear bastante coisa
Reply all
Reply to author
Forward
0 new messages