Dev - C++ - construir un array con los numeros positivos de otro array

 
Vista:
sin imagen de perfil
Val: 13
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

construir un array con los numeros positivos de otro array

Publicado por Toni (7 intervenciones) el 10/10/2018 18:18:26
filtrar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

construir un array con los numeros positivos de otro array

Publicado por Martín (158 intervenciones) el 10/10/2018 22:42:42
Esta es una forma C++ de hacerlo:
La "lista de números reales" acá es un vector de floats (std::vector<float>) pero podría ser otro tipo de contenedor y otro tipo de "número real", naturalmente.
Los números de coma flotante no pueden compararse con los operadores con expresiones que usen < , <=, del estilo if(f < 0) { ... así que acá se usa signbit para determinar si el número es negativo, que tiene en cuenta tanto a -0.0 como a +0.0.

(El C++ no es de los fáciles :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <cmath>     // signbit
#include <algorithm> // remove_copy_if
 
std::vector<float> filtrar(const std::vector<float>& reales)
{
	std::vector<float> res;
	std::remove_copy_if(reales.begin(), reales.end(), std::back_inserter(res),
		[](float f) { return std::signbit(f); });
	return res;
}
 
int main()
{
	std::vector<float> vf{ 1.1f, -2.3f, 4.5f, -2.3f, -0.0f, 3.4f };
	std::vector<float> positivos = filtrar(vf);
 
	for (const auto& f : positivos)
		std::cout << f << "; ";
	std::cout << '\n';
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 13
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

construir un array con los numeros positivos de otro array

Publicado por Toni (7 intervenciones) el 10/10/2018 22:53:11
Gracias, ya se que no es facil pero es lo que nos pide el profesor en la universidad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

construir un array con los numeros positivos de otro array

Publicado por Toni (7 intervenciones) el 10/10/2018 23:13:54
perdona pero me salta un error aqui:

std::remove_copy_if(reales.begin(), reales.end(), std::back_inserter(res),
[](float f) { return std::signbit(f); });


El error es este: lambda expressions only available with -std=c++11 or -std=gnu++11
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

construir un array con los numeros positivos de otro array

Publicado por Martín (158 intervenciones) el 10/10/2018 23:19:46
en las propiedades de tu proyecto tienes que seleccionar -std=c++11
que quiere decir que el compilador va a usar el estándar C++ del 2011. (Creo que es lo mínimo, hoy está en pleno uso el estándar C++17)
Si no, deberías tener alguna buena razón para continuar usando el estándar de 1998.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar