|
1341
|
Programación / Programación C/C++ / Re: NeuN textbox de respuesta// formula cuadratica
|
en: 17 Abril 2016, 00:55 am
|
Esa operación está mal planteada. Tienes que poner paréntesis. Actualmente tienes esto: -b + ( (sqrt(b*b-4*a*c) / 2) *a) Y quieres lograr esto: (-b + sqrt(b*b-4*a*c) ) / (2*a) Ahora hay 2 problemas: no hay raiz cuadrada de números negativos, que ha de ser el problema que tenías, y no se divide entre 0. Así que: -Si a y b son 0, error. -Si a es 0 y b no, como dijo boctulus: -c/b -Si b es 0 y a no: sqrt(-c/a), comprobando que -c/a sea positivo o cero. -Si a y b son distintos de 0, la fórmula, salvo que b*b-4*a*c sea negativo, en tal caso error.
|
|
|
1342
|
Programación / Programación C/C++ / Re: Problema al pasar char* como parametro
|
en: 17 Abril 2016, 00:36 am
|
En C/C++ hay 2 tipos de arrays: los estáticos y los dinámicos, por así decirlo. "char str[ 10 ]" sería estático, es una variable de 10 bytes, "char *str" sería dinámico, y realmente no es un array, sino un puntero a char.
Cuando le pasas un array estatico a la función, lo interpreta como simplemente un puntero. El tamaño de un puntero es de 4 bytes, y el tamaño de un char es de 1 byte (por lo general). Así pues, 4/1 = 4. Ahí tu resultado, totalmente real.
Solo hay 2 formas reales de saber el tamaño de una cadena: o pasándoselo a las funciones (evidentemente, funciona siempre), o contando caracteres hasta encontrar un caracter nulo ('\0', funciona solo con cadenas de texto, no para binarias). strlen lo que hace es contar hasta el caracter nulo.
|
|
|
1344
|
Programación / Programación C/C++ / Re: Classes em Ficheiros
|
en: 16 Abril 2016, 20:21 pm
|
#include "MyClass.h" #include "MyClass.cpp"
Solo haz include del .h. Los .cpp se compilan a parte. ¿Tienes un proyecto o compilas cada archivo por separado? La compilación en este caso, va así: test.cpp -> test.o MyClass.cpp -> MyClass.o test.o + MyClass.o -> test.exe "Undefined reference" significa que no encuentra la clase en los ".o". Lo más probable es que estés haciendo: test.o -> test.exe :: Error: falta MyClass No sé como compilas, ni que IDE o editor usas, así que no puedo decir más.
|
|
|
1346
|
Programación / Programación C/C++ / Re: Copiar vectorr 2D
|
en: 16 Abril 2016, 19:27 pm
|
Un vector tiene internamente un array, memoria dinámica de tamaño fijo. Suponte que tuviera un array de 1 elemento. Cuando haces un push_back, tiene que reservar memoria para 2 elementos, luego copiar lo anterior junto al valor nuevo, y liberar la memoria antigua. Si tiene un array de 100 elementos, y haces push_back, tendrá que copiar 100 elementos. Si le das un tamaño fijo, te ahorras todas esas copias. Edito: Cabe decir que esto es en la teoría. En la práctica, en vez de reservar de 1 en 1 por cada push_back(), se suele reservar más, ya sea de N en N, o de otros modos, para evitar en lo posible este problema de eficiencia. Edito de nuevo: #include <iostream> #include <vector> using namespace std; class T{ public: T(){cout << 'a';} // Constructor T(const T&){cout << 'b';} // Constructor de copia T(const T&&){cout << 'c';} // Constructor de movimiento }; int main( void ){ vector<T> v; for(int i=0; i<10; i++){ v.push_back(T()); cout << v.capacity() << endl; } }
Y su salida es: ac1 acb2 acbb4 ac4 acbbbb8 ac8 ac8 ac8 acbbbbbbbb16 ac16
|
|
|
1347
|
Programación / Programación C/C++ / Re: Copiar vectorr 2D
|
en: 16 Abril 2016, 19:14 pm
|
mpNetMasse.resize(m.size()); for(size_t i(0); i<m.size(); i++) { mpNetMasse[i].resize(m[i].size()); for(size_t j(0); j<m[i].size(); j++) { mpNetMasse[i][j] = new Masse (m[i][j]); } }
Si le das un tamaño inicial, ahorras bastante (aunque quizás nos e note, vaya) Sino, con push_back: for(size_t i(0); i<m.size(); i++) { mpNetMasse.push_back(std::vector<Masse*>()); for(size_t j(0); j<m[i].size(); j++) { mpNetMasse[i].push_back(new Masse (m[i][j])); } }
|
|
|
1349
|
Programación / Programación C/C++ / Re: cual es el mejor ide para programa en c++?
|
en: 16 Abril 2016, 17:57 pm
|
+1 a Code::Blocks. Simple, con manejo de proyectos, y plugins. CodeBocks es medio "basura", cuando agrandas el codigo los numeros de linea del costado empiezan a comerse toda la pantalla y tiene otros problemas grandes de interfaz Mucho tienes que agrandar, y es muy poco lo que come ._. Ten en cuenta que en opciones, le puedes marcar cuanto margen hay. Y en cuanto a problemas de interfaz, nunca tuve. utilice codeblock un tiempo pero cuando hay un error solo muestra la linea del error y no muestra cual es el error Abajo tiene varias pestañas. En una de ellas te muestra lso errores resumidos en uan tabla, y en la otra, todo lo que indicó el compilador/linker. El error está completo, con sugerencias y etc (lo que da el compilador, vamos)
|
|
|
|
|
|
|