Unamonos los programadores de taringa y compartamos nuestros codigos, ya sea java, C, C++, php, jsp, html, css, python.... etc etc etc.. Enterate tambien de las innovaciones en el software y nuevas distribuciones de Microsoft, Linux y MacOS

Ver más
  • 1,702 Miembros
  • 560 Temas
  • 308 Seguidores
  • 0

[Ayuda] Porque mi bucle no se ejecuta?

Hola a todos, de nuevo .
Bueno, yo estoy haciendo un curso de algoritmia. Un ejercicio nos decia:
Calcular el factorial de un numero x. Pongamosle que x es 6.
Este es mi codigo: http://www.copypastecode.com/171812/
El problema esta en que el bucle no se ejecuto jamas, y no veo la razon de porque.
Por cierto, yo no se si factorial es esto: 6! = 6x5x4x3x2x1, algo asi era
Espero su ayuda.
Gracias.

EDIT:
Gracias por tu ayuda. Aqui esta el programa que ALFIN funciona que haya el factorial de 6, obviamente con unos cambios se podria hacer que el usuario introduzca el valor y el programa le muestre el factorial del numero.
Aqui esta el codigo que si funciona, sin errores y sin warnings: http://www.copypastecode.com/171972/
  • 0
  • 0Calificación
  • 0Seguidores
  • 99Visitas
  • 0Favoritos

13 respuestas

@cxs00 dijo Hace más de 3 meses:

la condicion esta mala x==0 nunca se va a cumplir, tendria que ser x>0 o x>=0

@cxs00 dijo Hace más de 3 meses:

2 ejemplos (iterativo y recursivo)
#include<stdio.h>

#define N 10

int fact_iter(int);
int fact_recu(int);

int main(void)
{
        printf("%dn",fact_recu(N));
        printf("%dn",fact_iter(N));

        return 0;
}

int fact_recu(int n)
{
        return (n<1)?1:n*fact_recu(n-1);
}

int fact_iter(int n)
{
        int i,r;

        for(i=r=1;i<n;i++,r*=i)
                ;

        return r;
}

@cxs00 dijo Hace más de 3 meses:

Gracias, y tambien me di cuenta de algo, asi (mi ejemplo) nunca sabre la factorial de 6


esacto, la condicion era de un principio incumplibe, siempre tienes que fijarte que la condicion se cumpla de un comienzo, como vi un error parecido en u ncodigo anterior tuyo te doy unos tip (sorry si son demaciado noobprof)

los while() en español se leerian "mientras la condicion se cumple haz algo" por ende la condicion se tiene que cumplir de entrada y se tiene que terminar de cumplir dentro del "haz algo".

while(condicion){
haz algo;
}

los do while() serian "haz algo y si la condicion se cumple repitelo mientras siga cumpliendose" la condicion aca se tiene que cumplir a mas tardar despues de la primera "vuelta" y dejar de hacerlo en el haz algo.

do{
haz algo;
}while(condicion);

y los for() serian "desde un estado inicial; mientras se cumpla la condicion; cambia el estado y haz algo"
entonces la condicion se tiene que cumplir en "estado inicial" y dejar de cumplirse en "cambia el estado"

for(estado inicial;condicion; cambio de estado){
haz algo;
}

creo que lo enrede mas... bueno ami se me hiso mas facil asi XD

@cxs00 dijo Hace más de 3 meses:

gracias, ya lo sabia, pero nada mas no sabia expresarlo bien, pero gracias por el ejemplo de 'for', ya que yo no sabia que era "cambio de estado" sino "incremento o decremento"(++(expresion)--(expresion)).
Pero quiero hacerte dos preguntas 1 esta a ver si chequeas mi codigo otra vez
http://www.copypastecode.com/171965/
Me supuse que con ese codigo SI se iva a poder hallar el factorial de 6. Pero te pido ayuda en el c-- que lanza un warning a ver si hay forma de reemplezarlo


no deverias modificar las variables del for desde adentro, la otra es que estas inizilisando i cada ciclo, y que ademas tienes una posible multiplicacion por 0 en el --c, ademas indenta bien tu codigo y usa los nombres "estandar"

codigo corregido:
#include <iostream>
 
using namespace std;
 
int main ()
{
    int r=1;
    for (int i = 6; i > 0; i--)
    {
        r=r*i;
        cout << r << endl;
    }
    return 0;
}



Y la pregunta 2 es:
Como hacer para poner el codigo en los comentarios y temas?


las etiquetas son   (aver si salio)

@cxs00 dijo Hace más de 3 meses:

las etiquetas son [code*][/code*] sin el asterisco

@cxs00 dijo Hace más de 3 meses:

jajjajajaj ahora me rio porque me tarde tanto en hacer el mio, ya que mi codigo usa if, else y el tuyo solamente r = r * i. bueno la proxima vez intentare hacer mas simples las cosas, pero de todas formas ambos codigos dan el mismo resultado

//Probando codigo


@rrnum7 dijo Hace más de 3 meses:

Espero no confundirte, pero ojo con esto: independientemente de que estés dentro o fuera de un for, while, etc. el warning se debe específicamente a esta parte:
i = c * --c;
porque en la misma operación (multiplicación) estás usando y modificando valor de c. Nunca debes hacer eso, ya que el resultado está indefinido, porque las reglas de C++ no especifican si se evalúa primero el operando a la izquierda (c) o a la derecha (--c). O sea, ¿primero toma el valor actual de c y lo multiplica por --c? O por el contrario, ¿primero decrementa c y a continuación efectúa la multiplicación ya con este valor?

Suponiendo que c valiera 5, en el primer caso pasaría esto:
i = 5 * 4;
Pero si se diera el segundo caso:
i = 4 * 4;
No hay forma de saber lo que hará el compilador, por lo que siempre debes evitar estas situaciones.

Veo que en este caso se trató de un error, pero si en otra ocasión quieres hacer algo parecido, descomponlo en 2 operaciones:
--c;
i = c * c;

o bien:
i = c * c;
--c;

Así queda perfectamente especificado el orden en que sucederán.

@Maazaapaan dijo Hace más de 3 meses:

Mira el codigo para hacer un factorial es este:

#include "stdafx.h"
#include <iostream>
#include <iomanip>


using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
long int x, y, m=1;
cout<<"ingrese un numero"<<endl;
cin>>x;

if(x>0){
for(y=1; y<=x; y++)
{
m=m*y;
}
cout<<"su factorial es:"<<m<<endl;
system("pause";
}
else{
cout<<"el numero debera de ser mayor de cero"<<endl;
system("pause";
}


return 0;
}

Tienes que ser miembro para responder en este tema