Problema: devolver vector con return

oZk4h

Pues eso, estaba mirandome una practica de la uni en la k me piden resolver un problema ( en C ) de vectores al que tu le pasas cargas y sus coordenadas y t calcula el vector campo electrico.. La cosa es k tengo k hacerlo por vectores.. todo mas o menos bien hasta k llega un momento en el k tras haber sumado todas las componentes de E y haber construido el vector E total, no puedo devolverlo con el return... me sale un error en el compilador k pone algo de tipos incompatibles "incompatible types of assignment" o algo así:

Para los vagos copio aki el cf:

#include <stdio.h>
#include <math.h>
#define k 8.98e9

float campo(float q[],float v[][2],int i);

int main() {
int i;
float q[1000],v[1000][2];
i=0;
float vet[1][2];
printf("\nDame una carga"); scanf("%f",&q);
while(q) {
printf("\nDame su coordenada x"); scanf("%f",&v[0]);
printf("\nDame su coordenada y"); scanf("%f",&v[1]);


     //llamada a la funcion ,le paso cosas...
     
vet=campo(q,v,i);
    i++;
    
         
    printf("\nDame otra carga"); scanf("%f",&q[i]);     
         }
         // una vez se ha acabado el bucle...
         printf("El vector campo electrico en el punto 0,0 es : (%f, %f) N/C",vet[1][1],vet[1][2]);

// printf(" %f ",v[1][1]); //--< probando





printf("\nFIN");

getch(); return 0;


}

///////////------------------------//////////////////-----------////////

float campo(float q[],float v[][2],int i) {


  //x = v[i][0]   y = v[i][1]
  int m,w;
  float e[1000],r[1000],r2[1000],xe[1000],ye[1000];
  float xet,yet,vet[1][2];
 
  xet=0; yet=0;
  /*
  e=vector de los modulos , r= vector distancias r2=vector distancias al cuadrado , 
  xe=vector componentes "x" de campo , ye=vector componentes "y" de campo , 

vet= vector campo total con suma de componentes x e y
vector xet= v. suma de comp x, vector yet= v. suma comp. y


  */
  v[i][0]=v[i][0]*0.01;
  v[i][1]=v[i][1]*0.01;
  q[i]=q[i]*pow(10,-6); // pasar a culombios
  r2[i]=v[i][0]*v[i][0]+v[i][1]*v[i][1]; // r2[i]=x*x+y*y
  r[i]=sqrt(r2[i]); //r[i]=sqrt(r2)
  
  e[i]=k*q[i]/r2[i];
  xe[i]=e[i]*(-v[i][0]/r[i]); // x = v[i][0]
  ye[i]=e[i]*(-v[i][1]/r[i]); // y = v[i][1]
  
  // ahora sumo los campos electricos componente a componente 
  xet=xet+xe[i];
  yet=yet+ye[i];
  vet[1][1]=xet;
  vet[1][2]=yet;
  
  
  return vet;                ///-----<<<--- Ahí esta el problema , no me coge el vector ni tp acepta la llamada ala funcion cuando le digo k vet=campo(... ) y tal :/.
  
  
  }

PD : se me había olvidado decir k es lenguaje C xd..

A ver si podeis echarme una mano xD.

salu2 y gracias por adelantado.

maRc

El tipo de un vector de floats es "float *", es decir, es un puntero a float.

Y eso de vet[1][2] es un poco extraño, ya que es lo mismo que vet[2].

De todas maneras, eso de devolver un vector no es demasiado recomendable, ya que se almacena en la pila y puede petar. Lo mejor es que para definirlos hagas:

float *vet;
vet = (float ) malloc(sizeof(flaot)2);
if (vet == NULL) {
printf("Sin memoria\n");
exit(1);
}

Y luego, para liberarlo free(vet). Esto en el main, cuando ya no lo vayas a utilizar.

PD: Aunque si no has visto todavía memoria dinámica, puede que esto último te resulte un poco complicado.

elkaoD

¿Pero la historia no sería más que devolver el vector, devolver el puntero al vector y punto?

PD: Hice pasada rápida al post y quizá no lo entendí bien, voy con prisa.

oZk4h

Buenas. La cosa esk al final hice este problema pero enfocandolo de otra manera, xD. dividi el campo total en dos componentes , creando dos funciones k calculaban cada una una cosa, una campox y otra campoy...

La manera esta era btt mas liosa xD.

Usuarios habituales

  • oZk4h
  • elkaoD
  • maRc