Problema con C++

Buenas. Estoy haciendo un programa en C++ que muestre por pantalla la sucesión de Fibonacci usando vectores. Al compilar no me da errores, pero el programa no ejecuta nada. A ver si podéis ayudarme [tomaaa] :



#include
#include

using namespace std;

int main ()
{

const int MAX = 20;
typedef int vector20 [MAX]; //Definición del tipo vector de 20 elementos
vector20 fibonacci; //Definición del vector "fibonacci"

fibonacci [0] = 0;
fibonacci [1] = 1;

int i;
for (i=2; i=(MAX-1); i++)
{
fibonacci [i] = fibonacci [i-1] + fibonacci [i-2];
}


cout << "Los primeros veinte términos de la sucesión: " << fibonacci [i];


system ( "PAUSE" ) ;
return 0;
}




Gracias!! :D
En el for tienes puesto como condición del bucle i=MAX-1
tienes que poner i <=MAX-1
Para que un for se ejecute la condición ha de ser cierta, en la primera iteración asignas a i el valor 2, como i es distinto de MAX-1, la condición falla, saliendo del bucle, y por tanto el código dentro del for nunca se llega a ejecutar.
Joder, menudo fallo más tonto. Muchas gracias tío, de verdad. Ahora me surge otra duda. Al comprobar con cualquiera de los términos del vector, calcula correctamente el valor. Pero si quiero mostrar el valor de todos los elementos del vector, no tengo que poner:

cout << fibonacci [i];

¿?¿?¿?

Porque si pongo eso no me da un resultado incorrecto :p
Seria bueno que despues de poner cout <
Al salir del bucle, i vale 20, momento en que la condición del bucle (i<=19) deja de cumplirse y sale. Sin embargo, no has establecido ningún valor en fibonacci[20], básicamente porque esa posición ni siquiera pertenece al vector (el vector tiene tamaño 20, posiciones de 0 a 19)
Lo que deberías poner es cout << fibonacci[MAX-1];
Eso si, ten en cuenta que eso solo te mostrará el último término de la sucesión de fibonacci, si quieres que te imprima por pantalla todos los términos a partir del segundo, tienes que meter fibonacci[i] dentro del bucle, y por supuesto después de asignar a fibonacci[i] su valor

Es decir:
#include
#include

using namespace std;

int main ()
{

const int MAX = 20;
typedef int vector20 [MAX]; //Definición del tipo vector de 20 elementos
vector20 fibonacci; //Definición del vector "fibonacci"

fibonacci [0] = 0;
fibonacci [1] = 1;

cout << "Los primeros veinte términos de la sucesión: "<< endl;

int i;
for (i=2; i<=(MAX-1); i++)
{
fibonacci [i] = fibonacci [i-1] + fibonacci [i-2];
cout << fibonacci [i] << " ";
}
system ( "PAUSE" ) ;
return 0;
}

Y yo te recomendaría quitar el system("pause"), ya que si por ejemplo ejecutas ahora mismo el programa en linux, o si en un futuro deciden eliminar el comando pause de la consola de comandos de windows dará un error al llegar a esa línea. El programa funcionará correctamente, simplemente te dará el error que puedes tener al escribir mal un comando en la consola de windows.
Si quieres forzar a hacer una pausa utiliza cin.get()
Vale, solucionado. Con otro bucle for he sacado por pantalla los 20 términos, uno a uno :-P

Gracias por vuestra ayuda
XTRminator escribió:Vale, solucionado. Con otro bucle for he sacado por pantalla los 20 términos, uno a uno :-P

Gracias por vuestra ayuda

Para qué hacer dos bucles cuando sobra con uno?
;)
Muy cierto, el caso es que lo había pensado, pero estaba tan hasta los huevos del programa este (es que hace poco que doy programación, y ando algo verde [burla2] ) que al ver que me funcionaba lo dejé, sencillamente. Luego pensé que se podría meter todo en el mismo bucle, así que luego igual lo hago, aunque así también está bastante claro. Supongo que chupará más memoria, verdad?
XTRminator escribió:Muy cierto, el caso es que lo había pensado, pero estaba tan hasta los huevos del programa este (es que hace poco que doy programación, y ando algo verde [burla2] ) que al ver que me funcionaba lo dejé, sencillamente. Luego pensé que se podría meter todo en el mismo bucle, así que luego igual lo hago, aunque así también está bastante claro. Supongo que chupará más memoria, verdad?


Solo un par de KBs mas. Ahroa que estas empezando pues todavia es normal que lo pongas en dos bucles, pero siempre es bueno coger buenas costumbres a la hora de programar y cuantos menos recursos utilices mejor.
s4ur0n escribió:
Solo un par de KBs mas. Ahroa que estas empezando pues todavia es normal que lo pongas en dos bucles, pero siempre es bueno coger buenas costumbres a la hora de programar y cuantos menos recursos utilices mejor.

KB? no creo que llegue a tanto: en ensamblador un for se podría hacer con 5 o 6 instrucciones más una variable más: 7*32bits = 228Bytes, que es poco más de un KB, suponiendo una gran optimización por parte del compilador.
En cualquier caso S4ur0n tiene razón, es cuestión de no coger malos hábitos, y es cuestión de eficiencia, porque en este caso da lo mismo, pero si el vector tuviera 100000 elementos sí habría una diferencia ;)
zheo escribió:KB? no creo que llegue a tanto: en ensamblador un for se podría hacer con 5 o 6 instrucciones más una variable más: 7*32bits = 228Bytes, que es poco más de un KB, suponiendo una gran optimización por parte del compilador.
En cualquier caso S4ur0n tiene razón, es cuestión de no coger malos hábitos, y es cuestión de eficiencia, porque en este caso da lo mismo, pero si el vector tuviera 100000 elementos sí habría una diferencia ;)


Hombre no queria echar calculos precisamente xD (que por cierto 7x32 bits = 224 bits = 28 bytes). Simplemente era para que viera que no ocuparia gran cosa en lo que son los pc actuales.
Gracias a todos por vuestra ayuda. Ya que estamos, he estado viendo el tema de programar en modo Windows...parece muy jodido...no? xD
¿Por qué pones i <= (MAX-1) y no i < MAX? Las dos condiciones son las mismas, solo que la primera para mi gusto es algo rebuscada :)
XTRminator escribió:Gracias a todos por vuestra ayuda. Ya que estamos, he estado viendo el tema de programar en modo Windows...parece muy jodido...no? xD


¿Programar en modo windows? Si te refieres a crear aplicaciones graficas para windows, es todo acostumbrarse a las funciones de la libreria win32 y sobretodo saber que hacen. Pero eso es mejor dejarlo para cuando ya sabes mas o menos como "funciona" el lenguaje, antes de meterte en ello.
XTRminator escribió:Gracias a todos por vuestra ayuda. Ya que estamos, he estado viendo el tema de programar en modo Windows...parece muy jodido...no? xD


Como te dicen, mejor esperate y aprende a programar en C++...

Yo te recomendaría antes de programar aplicaciones Windows supieras crear:

Estructuras
Funciones
Memoria dinámica
Clases: Vectores, Pilas, Listas doblemente enlazadas
Amistad entre clases.
Algo de conocimientos de programación orientada a objetos.

Y sabe algo de SQL.

Programar aplicaciones Windows no es difícil si sabes como funciona el entorno de desarrollo que vas a utilizar. Se basa prácticamente en arrastrar y soltar elementos a tu ventana y ya cambiar sus propiedades y eventos, con lo cual ya le asignas la función que le hayas creado.

Luego si tienes dotes de diseñador puedes cojer esa aplicación que has creado y con una herramienta de diseño, cojer ese programa que has creado y personalizarlo cambiando el estilo de los botones, la formada de la ventana, etc... Pero ese ya es el último paso, y que muy pocos programadores hacen, ya que la mayoría se lo deja a los diseñadores gráficos.
14 respuestas