Autor Tema: magnitud de un vector dado su dimension y componentes (donde esta el error)

0 Usuarios y 1 Visitante están viendo este tema.

22 Julio, 2008, 06:59 pm
Leído 1384 veces

leonardo09

  • Leonardo Andrés Jofré Flor
  • Experto
  • Mensajes: 798
  • Karma: +0/-0
  • Sexo: Masculino
  • Leonardo Jofré
    • Leonardo Andrés Jofré Flor
/* Diceñar una funcion Modulo(x,n) que determina el largo del vector*/

#include <stdio.h>
#include <math.h>

float Modulo(float, float);

main()
{
      int n, counter;
      float x[n];
     
      printf("Ingrese la longitud del vector");
      scanf("%d", &n);
     
      if(n <= 1){
           printf("Valor no valido");
           }
      else{
           for(counter = 0; counter <=(n-1); counter++) {
                 printf("Ingrese el dato para X[%d]",counter);
                 scanf("%f", &x[counter]);     
                       }
      printf("La magnitud del vector ingresado es: %f", Modulo(x,n));
           }
      getchar();
      return(0);
      }
     
float Modulo(float x, int n)
{
      double magnitud;
      int j, total = 0;
     
      for(j = 0; j = n-1; j++){
            total = total + pow(x[j],2);
            }
           
      magnitud = sqrt(total);
     
      return(magnitud);
     
      }

¿Cual es el error?
nunca seré buen matemático

23 Julio, 2008, 10:22 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 46,712
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Hola

 Correcciones y comentarios:


#include <stdio.h>
#include <math.h>

float Modulo(float *x, int n);

Declara la función exactamente como la vas a definir luego. Además los vectores y matrices se pasan como punteros. Es decir no pasas una copia del vector, sino la dirección de su primer elemento. De ahí el asterisco.

main()
{
      int n, counter;
      float x[n];
     
      printf("Ingrese la longitud del vector");
      scanf("%d", &n);
     
      if(n <= 1){
           printf("Valor no valido");
           }
      else{
           for(counter = 0; counter <=(n-1); counter++) {
                 printf("Ingrese el dato para X[%d]",counter);
                 scanf("%f", &x[counter]);     
                       }
      printf("La magnitud del vector ingresado es: %f", Modulo(x,n));
           }
      getchar();
      return(0);
      }
     
float Modulo(float * x, int n)

De nuevo el vector como puntero.
{
      double magnitud, total=0.;

total es una variable que va a sumar números no necesariamente enteros. Tampoco entiendo muy bien porque en unos sitios usas double y otros float. Aunque esto funcionará bien en muchos casos en otros podría dar algún problema difícil de encontar. Lo mejor es decidirse si queremos el resultado en precisión simple o doble.
      int j;
     
      for(j = 0; j <= n-1; j++){
te comiste el menor o igual
            total = total + pow(x[j],2);
            }
           
      magnitud = sqrt(total);
     
      return(magnitud);
     
      }

Saludos.