Se puede hacer esto con un ciclo FOR ?

Kanario93

Buenas

La verdad es que llevo unas hora intentando resolver este problema pero mi nivel en programación no da para mas, el problema es realmente sencillo y ya lo he resuelto usando while pero se puede resolver usando un bucle FOR realmente?

spoiler

Perdonad pero solo soy un novato mas que esta aprendiendo a programar y os quiero preguntar a vosotros los que lleváis mas tiempo si realmente se puede hacer.

Mewtwo

#1 Si sabes que siempre van a ser 10 valores exactos tendrias que hacerlo con un bucle for , si es hasta 10 entonces seria un repeat until o do while ( depende del lenguaje)

eXtreM3
empiezo for de 1 hasta 10
        pido número
        sumo número
termino for
pinto la suma total
divido la suma total entre 10: esto es el promedio

La variable suma tienes que declararla antes del for para usarla a posteriori, de lo contrario quedaría dentro del ámbito del for y daría error.

RaymaN

Un for no es más que un while con dos expresiones más integradas en su declaración. Normalmente se usa para simplificar un while con la declaración del contador y su incremento tras cada ejecución.

2 1 respuesta
eXtreM3

#4 incremento o decremento, según la dirección que le demos :P

B

Tanto el while como el for traen complicaciones innecesarias a nivel conceptual.

#include <stdio.h>

main(L,o,l) {
  if(L == 11) return printf("Suma: %d, promedio: %.04f\n", o, (double)o/10.0);
  return main(L+1, o*(L>1) + 0*scanf("%d",&l) + l,l);
}
9 9 respuestas
Baltar

#6 Malditos "recursivistas" XD Arded cabrones!

1 1 respuesta
eXtreM3

#6 buen trozo de código para alguien que está empezando, sí señor.

2
Vashealer

#6 el op al leerlo

11
X-Crim

#6 Despedido.

2
babri

#6 eres un canalla.

afhn

Por ejemplo en un java sería lo más básico, quedándose algo tal que así:

Con el bucle For por lo menos a mí parecer es de la mejor forma, ya que lo que vas a hacer es una petición indicada en el for las veces que quieras, y los valores que se den se guardarán en un contador, haciendo la suma.

varuk

For:

Siempre que tengas que hacer el recorrido completo sí o sí. En este caso es así porque no vas a para antes de la iteración 10 ya que quieres sumar los 10 primeros números sin dejar ninguno.

While:

Se usa cuando cabe la posibilidad de que no haga falta llegar hasta el final del recorrido.
Por ejemplo, el usuario mete un número del 1 al 100 y, tras esto, vas a recorrer la lista de 100 números para ver si en esa lista está el número 20 (o el que tu quieras. En ese caso el FOR es malo porque el número 20 podría estar en la segunda iteración, y no haría faltar recorrer los 100 números. Así que se pone un While. El número 20 puede estar el primero o el último, o por el medio. Puedes recorrer los 100 números o no... no lo sabes.

PD: Lógicamente para el primer caso, de recorrer todo obligatoriamente, puedes usar el While... pero el FOR deja un código más limpio y luego, cuando lo veas, con el paso del tiempo, ya sabrás que ese recorrido será para hacerlo completo. Además, creo que el compilador lo gestionará mejor para optimizarlo. Pero bueno, de momento quédate con la idea que te dije antes para saber cuando usar uno u otro.

1 1 respuesta
Martita-

#13
Con poner un condicional en el for donde hagas que se salga con cierta condicion, haces lo mismo que con el while.

1 respuesta
eXtreM3

#14 pero forzar una salida del for es no plantear bien el flujo. Se puede hacer esto sí

for ($i=0; $i < 10; $i++) { 
    echo $i;
    if ($i==5) {
        return;
    }
}

Pero rompes con la filosofía del for, que es ejecutar unas sentencias un número conocido de veces.

2 respuestas
Martita-

#15
No me refiero a forzarla ahi, sino en el $i < 10 y poner ahi una condicion con &&.

dane-sd

Si sabes hacerlo con un while, debes saber hacerlo con un for porque es igual. Con el while tú habrás puesto un contador, mientras que con el for el contador ya está dentro de su sintaxis.

#15 un boolean. A mí no me dejan usar un return xD

Kanario93

La verdad que ya caí en ello ayer después de estar un rato intentando hacerlo en papel llegue a la conclusión de como hacerlo y al final es lo mismo que hacerlo con el while.

Muchas gracias por haber respondido para una duda tan sencilla.

#6 Jaja con ese código me mataste, por cierto que lenguaje es C?

1 respuesta
Martita-
for ($i=0; $i < 10 && suma < 500; $i++) { 
}

si suma llega a 500 antes que i a 10, tambien se saldria, sin usar booleans ni historias.

1 respuesta
varuk

#19

Supongo que en caso de encontrar un número sería algo así:

boolean condicion  = false

for ($i=0; $i < 10 && !condition ; $i++) { 
    echo $i;
    if ($i==5) {
        condicion = true;
    }
}

Nunca lo había pensado así, la verdad.

1 respuesta
Martita-

#20
Pero como te puse yo, no te hace falta tener un booleano, si tu quieres controlar la variable suma, como es el caso de #1, pones la condicion con suma, y ya esta.

Y en tu caso, si quieres que se salga si es i == 5

for ($i=0; $i < 10 && i != 5; $i++) { 
}
1 respuesta
varuk

#21 Sí, tienes razón. Si sólo va a ser un número el que quieres comprobar es mejor así. Mi mente se fue a programación donde tienes que hacer ya cosas más complejas.

Bueno, en tu caso, para cosas sencillas, tu solución está bien.

1 respuesta
Martita-

#22
Solo era un apunte a lo que dijiste que el for tenia que hacer todas las iteraciones, y no es asi, puedes usarlo igual que un while practicamente, como tu dices, para cosas sencillas.

1 respuesta
Amazon

En ese caso (de lo que estáis hablando al final), yo estoy con extreme, para eso no uséis un for sino un while (aunque funciona igual)

Martita-

Solo he hecho un apunte a un comentario, nada mas... vamos que si hay que pararlo bajo una condicion, estoy de acuerdo con varuk, que es mejor el while, no me mateis.

varuk

#23 Ya ya, y está bien. Una cosa nueva que sé. Gracias : )

B

#18 Es C, sí

willy_chaos

#6 Grande xD me he jartado a reir con tu codigo y el comentario de #7

Intrak

#6 Me acabo de dar cuenta que no tengo ni puta idea de programar en C. Haría lo mismo en cualquier otro lenguaje, pero eso no lo entiendo. :D

7 días después
mortadelegle

Que si se puede hacer con un for? Claro que se puede hacer con un for

import Control.Monad

main = do 
        nums <- forM [1..10] (\_ -> do
                putStrLn "Introduce un número"
                line <- getLine
                return (read line))
        let suma = sum nums
            media = suma / 10
        putStrLn $ "Suma: " ++ show suma ++ " Media: " ++ show media