Autor Tema: Necesito una segunda explicación, ejercicio C.

0 Usuarios y 1 Visitante están viendo este tema.

30 Agosto, 2025, 01:55 am
Leído 15967 veces

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
Necesito una explicación paso a paso sobre este ejercicio, tengo tantas dudas que no se por cual empezar. Una explicación como bien se dice para "dummies",  por no decir para tontos que suena mal... ¡Gracias!  :laugh:

Genere un lazo for que permita incrementar una variable X sumándole el
valor 2 cada vez que se incrementa 10 veces la variable de iteración. Hacer esto hasta
que la variable de iteración del ciclo alcance el valor 80. La variable X está inicialmente
cargada con el valor 0. Cada vez que se incrementa la variable X debe imprimirse el
nuevo valor que tiene cargada la misma. Realizar el programa en lenguaje C.


El seudocódigo del algoritmo sería algo así:

Código: [Seleccionar]
i=0
X=0
Para i desde 0 hasta 80 hacer
         Si i<>0 y el resto de i/10 es 0 entonces
                  X=X+2
                  Imprimir X
        Fin Si
Fin Para

Resolución en C:

Código: [Seleccionar]
#include <stdio.h>
int i;
int x;
int main(void) {
     x=0;

      for(i=0;i<80;i++){

           printf("I--->%d\n",i);

           if((i!=0)&&(i%10==0)){

               x=x+2;

               printf("X--->%d\n",x);
           }
       }
       return 0;
}

30 Agosto, 2025, 05:23 am
Respuesta #1

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Es medio críptico cómo se pide.

"lazo"
¿?

Genere un for que sume 2 a la variable X (que inicialmente es 0) cada vez que se incrementa 10 veces la variable de iteración, I. Hacerlo hasta que I sea 80. Cada vez que aumenta X debe imprimirse el
nuevo valor de la misma. Realizar el programa en lenguaje C.

Lo tienes como en el pseudocódigo excepto que estás imprimiendo algo más, I creo, pero te pidieron que sólo imprimas X.

Pero ese programa puede simplificarse creo.

Código: [Seleccionar]
i=0
X=0
Para i desde 0 hasta 8 hacer
                  X=X+2
                  Imprimir X
Fin Para

Si es para simular un paso de tiempo, sí, lo otro va a tardar más. Además entiendo que es una práctica para hacer cosas complejas, pero si se puede hacer más simple no sé si tiene sentido.

No estoy seguro de que sea lo mismo, imprimes X 80/10 veces, o sea 8...

Si te imprime más o menos veces es que tienes que poner algún otro signo en alguna comparación. Yo ese tipo de cosas suelo arreglarlas luego de ver cómo funciona el programa.

Como no uso for, no sé si el incremento se ejecuta al inicio del ciclo o al final. Supongo que al inicio.

Es 1, no es divisible entre 10, no aumenta X.
Cuando llegue a 10, aumentará.
20...
79...
80 y te lo muestra 8 veces.
Parece bien.

Lo que aquí:
if((i!=0)&&(i%10==0)){
parece que pones una condición en vano ya que si el ciclo comienza aumentando i entonces i nunca va a ser 0 en esa parte.

30 Agosto, 2025, 12:28 pm
Respuesta #2

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
 Esto esta mal
Hola, la variable a sumar no es exactamente la variable  de iteración, por lo tanto lo que tienes que hacer es que el bucle vaya de 0 a 80 en solo 10 pasos. Por lo que un paso es igual al máximo valor de la variable dividido el número de pasos 80/10=8
En python sería
Código: [Seleccionar]
x=0
For i in range(0,80,8):
    x+=2
    print(x)

Conviértelo co una IA a c , mucha diferencia  no hay en sintaxis.
Otra forma pero ineficiente es incrementar la variable de 0 a 80 y preguntar su valor , si es menor a 10 entonces sumar la variable  principal e imprimirla


Código: [Seleccionar]
x=0
For i in range(0,80):
     if i < 10:
          x+=2
          print(x)



Hay muchas formas de lograrlo, pero esas son las más fáciles,
Si lo hiciste  bien el último valor es 20


$$\sum\limits_{i=1}^{10} 2=\sum\limits_{i=0}^9 2=20$$

Edito agregó en tu programa  creo que solo  debes cambiar la sentencia


for(i=0;i<80;i++)
Por
for(i=0;i<80;i+=8)
[cerrar]
Saludos  \(\mathbb {R}^3\)

31 Agosto, 2025, 10:15 am
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Hola, la variable a sumar no es exactamente la variable  de iteración, por lo tanto lo que tienes que hacer es que el bucle vaya de 0 a 80 en solo 10 pasos. Por lo que un paso es igual al máximo valor de la variable dividido el número de pasos 80/10=8

Yo no veo que diga eso el enunciado:

Citar
Genere un lazo for que permita incrementar una variable X sumándole el
valor 2 cada vez que se incrementa 10 veces la variable de iteración. Hacer esto hasta
que la variable de iteración del ciclo alcance el valor 80.
La variable X está inicialmente
cargada con el valor 0. Cada vez que se incrementa la variable X debe imprimirse el
nuevo valor que tiene cargada la misma. Realizar el programa en lenguaje C.

La variable \( x \) se incrementa dos, cada vez que la de iteración se incrementa diez. Por tanto en realidad si quieres hacer los incrementos de la de iteración "de golpe" debes de ir de 10 en 10 no de 8 en 8. De manera que al final hay [tex}80/10=8[/tex] incrementos de \( x \) y el valor final de ella sería \( 16 \).

Por otro lado el enunciado es un poco tonto, no me parece un ejercicio bien diseñado. Porque sin más contexto parece superfluo que la variable iteración vaya de uno en uno; pero sin embargo creo que la filosofía del mismo es respetar eso y no hacer que aumente a saltos.

Saludos.


31 Agosto, 2025, 12:24 pm
Respuesta #4

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Hola

Hola, la variable a sumar no es exactamente la variable  de iteración, por lo tanto lo que tienes que hacer es que el bucle vaya de 0 a 80 en solo 10 pasos. Por lo que un paso es igual al máximo valor de la variable dividido el número de pasos 80/10=8


Yo no veo que diga eso el enunciado:

Citar
Genere un lazo for que permita incrementar una variable X sumándole el
valor 2 cada vez que se incrementa 10 veces la variable de iteración. Hacer esto hasta
que la variable de iteración del ciclo alcance el valor 80.
La variable X está inicialmente
cargada con el valor 0. Cada vez que se incrementa la variable X debe imprimirse el
nuevo valor que tiene cargada la misma. Realizar el programa en lenguaje C.


La variable \( x \) se incrementa dos, cada vez que la de iteración se incrementa diez. Por tanto en realidad si quieres hacer los incrementos de la de iteración "de golpe" debes de ir de 10 en 10 no de 8 en 8. De manera que al final hay [tex}80/10=8 incrementos de \( x \) y el valor final de ella sería \( 16 \).

Por otro lado el enunciado es un poco tonto, no me parece un ejercicio bien diseñado. Porque sin más contexto parece superfluo que la variable iteración vaya de uno en uno; pero sin embargo creo que la filosofía del mismo es respetar eso y no hacer que aumente a saltos.

Saludos.
Te juraría  que no leí eso, pero es claro que lo que pones en rojo no es a lo que creo haber respondido, mi respuesta  no es la solución.


Saludos  \(\mathbb {R}^3\)

31 Agosto, 2025, 01:13 pm
Respuesta #5

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada

Genere un lazo for que permita incrementar una variable X sumándole el
valor 2 cada vez que se incrementa 10 veces la variable de iteración. Hacer esto hasta
que la variable de iteración del ciclo alcance el valor 80. La variable X está inicialmente
cargada con el valor 0. Cada vez que se incrementa la variable X debe imprimirse el
nuevo valor que tiene cargada la misma. Realizar el programa en lenguaje C.




Genere un lazo for que permita incrementar una variable X sumándole el
valor 2 cada vez que se incrementa 10 veces la variable de iteración. Hacer esto hasta
que la variable de iteración del ciclo alcance el valor 80. La variable X está inicialmente
cargada con el valor 0. Cada vez que se incrementa la variable X debe imprimirse el
nuevo valor que tiene cargada la misma. Realizar el programa en lenguaje C.


Si la idea es hacerlo con un bucle for , no queda definido que valor inicializa el bucle de iteracion por lo que el resultado depende el valor que pongas allí, si i empieza en cero
Código: [Seleccionar]
x=0
for i in range(0,80):
     if i%10==9:
          x+=2
          print(x)
A ver para evitar que se ejecute la suma cuando el resto es cero porque la variable e iteracion es cero, busca otro resto para que se ejecute la condicion , el resto 9 ,  no es cualquiera  de entre 1y 9 ,es decir cualquiera que no sea cero, sino que es el valor final de la variable i cuando el ciclo se ejucutó 10 veces, entoces 9 es el resto de dividir la varialble i por 10, cada 10 ejecuciones del ciclo, el bucle i va de 0 a 79 , el bucle se detiene en el 80 y no se ejecuta con este valor , así la variable se incrementa cuando i es 9,19...79
Saludos  \(\mathbb {R}^3\)

01 Septiembre, 2025, 07:57 am
Respuesta #6

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
Bueno para aclarar un poco mas de que va, según el profesor es un ejercicio que supuestamente esta resuelto de esta manera para que se entiendan de manera didáctica algunas cuestiones básicas de programación en C. Personalmente lo que encuentro un poco caótico, todavía no encontré la respuesta que busco, algo mas sencillo.

01 Septiembre, 2025, 09:04 am
Respuesta #7

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada

Personalmente lo que encuentro un poco caótico, todavía no encontré la respuesta que busco, algo mas sencillo.

Modifico citando tu código:
Código: [Seleccionar]
#include <stdio.h>
int i;
int x;
int main(void) {
     x=0;
     for(i=0;i<80;i++){
           if((i%10==9){
               x=x+2;
               printf("X--->%d\n",x);
           }
       }
       return 0;
}
Hola no sabría  como darla más digerida, ni mas corta, ¿cuales son  las dudas?
Abres el procedimiento  principal
Declaras variables
Abres el bucle de manera que al ejecutarse 10 veces conozcas y preveas el valor de la variable del ciclo.
Pones la variable a sumar en cero.
Preguntas si el resto se corresponde con el necesario para la ejecución del ciclo cada 10 veces.(en la primera el resto es 0, en la segunda 1,..., en la décima 9), entonces cada vez que que el resto  sea 9 habrán pasado 10 ciclos.
Si la condición es verdadera  incrementas la variable en 2  y luego la imprimes.
Cierras la condicion if.
Cierras el bucle
Cierras el bloque principal retornando un valor por defecto.

Saludos
Saludos  \(\mathbb {R}^3\)

01 Septiembre, 2025, 09:43 am
Respuesta #8

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

Bueno para aclarar un poco mas de que va, según el profesor es un ejercicio que supuestamente esta resuelto de esta manera para que se entiendan de manera didáctica algunas cuestiones básicas de programación en C. Personalmente lo que encuentro un poco caótico, todavía no encontré la respuesta que busco, algo mas sencillo.

El programa es muy cortito, así que se puede preguntar al máximo detalle sin que sea tedioso. Marca la primera línea que no entiendes y especifica la duda. Y así con todas las que tengan.

Saludos.

01 Septiembre, 2025, 01:12 pm
Respuesta #9

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Más allá de algunas rarezas (para mí) de C, tú eres más complicado de entender que el ejercicio y su solución. Desde el principio no has explicado bien qué quieres.

El código es casi igual al pseudocódigo.

Es corto y no tiene funciones difíciles de entender (como algunas que me da GPT de Python).

Prueba imaginar un reloj de 80 números en vez de 12, de modo que cada vez que la aguja recorre 10 números, otra aguja recorre 2 así de repente.
Por si nunca viste de esos relojes:

Porque ahora suelen ser sólo números.