0

¿me pueden explicar por que no me detecta la fincion abs?,pues cuando lo ejecuto me sale un mensaje diciendo

error: 'abs' not declared in this scope

nota: uso el compilador codeblocks 13.12

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

int main(){
    float a,b,c,d,e = 0,f,x,y;
    cout<<"numero de vertices : ";
    cin>>f;

    cin>>a>>b;
    x = a;
    y = b;

    for(int i = 0; i < f; i++){
        cin>>c>>d;
        x = x - c;
        y = y - d;
        x = abs(x);
        y = abs(y);
        e = e + sqrt(x*x + y*y);
        x = c;  // un arreglo en el codigo
        y = d;  // un arreglo en el codigo
    }
    x = x - a;
    y = y - b;
    x = abs(x);
    y = abs(y);
    e = e + sqrt(x*x+ y*y);

    cout<<e;
}

nota :el codigo es para resolver este ejercicio.

--Polígono--
Haz un programa que lee una secuencia de puntos 2D (pares de reales) que representan un polígono (el último punto de la secuencia es igual que el primero), y determina la longitud de su perímetro.

fuente http://minidosis.org

bassily
  • 372
  • 1
  • 4
  • 21

3 Answers3

2

A mi me ha funcionado perfectamente una vez corregidos los errores señalados por rnd y recordados por Camilo.

Puedes [verlo aquí].


Otros detalles a tener en cuenta:

Tipos de librerías

Las cabeceras de no tienen extensión de archivo: <iostream>, <vector>, <string>, etc... excepto las cabeceras que existen por compatibilidad con : <math.h>, <stdlib.h>, <stdint.h>, etc...

La mayoría de cabeceras de C disponen de una versión portada a C++ a la que se le ha quitado la extensión, se les ha añadido el prefijo "c" (por ejemplo <cmath>, <cstdint>) y han sido adaptadas a C++. Si estás trabajando con C++ deberías usar estas últimas no las de C.

Entender los errores

No se que compilador habrás usado, pero el código...

include<iostream>
include<math.h>

... no compila en ninguno de los compiladores de C++ que yo conozco, muestra varios errores pero el primero que me da compilando en GCC es:

prog.cc:1:1: error: 'include' does not name a type
 include<iostream>
 ^~~~~~~

Después ya informa de los errores de no encontrar abs. A la hora de corregir errores intenta seguir los siguientes pasos:

  1. Corrige de primer a último error: No lo hagas en orden inverso pues en bastantes ocasiones errores posteriores son consecuencia de errores previos, así pues si tienes un error en la línea 50 y otro en la línea 2, empieza por el de la línea 2.
  2. El compilador no suele ser amigable con el humano: A veces los textos de error son confusos, pero con un poco de experiencia los entenderás; si has de buscar solución a un error que no entiendes busca dicho error en internet explícitamente omitiendo cualquier referencia a tu código local (nombres de variables o funciones), por ejemplo veo que otras personas han tenido tu problema en Codeblocks.
  3. Si tras buscar no encuentras, pregunta BIEN: A parte del código que te da problemas, debes también añadir los errores que te muestra tu compilador.
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
0

Ya te han dado la respuesta, para incluír una librería usa #, sólo con eso debería funcionarte, pero no está por demás que cambies math.h por cmath (son lo mismo pero la segunda es de c++).

Camilo
  • 1
  • el motivo de el porque no aparece el `#` es por un error de copiar/pegar y si. cambiar `math.h` por `cmath` ha hecho que me funcione el programa – bassily May 25 '16 at 23:02
0

Remplaza

#include<math.h>

por

#include<cmath>

math.h pertenece al estándar , debes utilizar las librerias del estándar de .

rnrneverdies
  • 16,491
  • 3
  • 49
  • 79