Algoritmo secuencia numérica

C

Hola, hemos empezado hace muy poco a programar en C y nos han puesto para resolver unos programillas pero en uno me he quedado atascado... a ver si alguno me podeis ehcar una mano a plantearlo con while e if.

Escribir un algoritmo usando mientras que muestre una salida con la siguiente secuencia numérica:
0, 4, 2, 6, 4, 8, 6, 10, 8, 12, 10, 14, 12, 16, 14, 18, 16, 20, 18, 22, 20, 24
La secuencia debe detenerse al llegar al 24.
La secuencia se obtiene partiendo de 0 y sumando 4 y restando 2, alternativamente.

Valor i 0 0+4=4 4-2=2 2+4=6
Valor n n=0 n=1 n=2 n=3

Gracias :)

Poisonous

Se me ocurre algo asi:
(no lo he probado, no se si funciona y ni siquiera se si compila)

int bandera = 0;

while (i < 24) {

if (bandera == 0) {
i = i + 4;
bandera = 1,
}
else {
i = i - 2;
bandera = 0;
}

}

elkaoD

Depende de como quieras, se puede hacer de las siguientes formas:

#define LIMITE 24 // i sub n limite

int main (void)
{
  int actual = 0;

  while (actual < LIMITE)
  {
    printf ("%d ", actual);
    actual += 4;
    printf ("%d ", actual);
    actual -= 2;
  }

  return 0;
}

Más elegante, aunque el primer printf así es una cutrada xD

#define LIMITE 24 // iteración límite (n, no i sub n)

int main (void)
{
  int actual = 0;
  printf ("%d ", actual);

  for (i=0; i<=LIMITE; i++)
  {
    if (i%2 == 0)
      actual += 4;
    else
      actual -= 2;

printf ("%d ", actual);
  }

  return 0;
}

Intenta entender el código, no copies los ejercicios así porque sí.

Soleil

Intentando hacer la versión de #3 más elegante...
(sí, es coña)

main() {int x,y = 0; while (++x < 24) printf("%d",y += x % 2 ? 4 : -2);}

khumalo

Me quedo con la version de soleil, a mi tambien se me habia pasado por la cabeza usar el Mod 2 para aprovechar pares e impares en la operacion.

LOc0

Es un ejercicio con un poquillo de mala leche (tp mucha la verdad) Prueba de ello es que las soluciones de #3 y #4 no hacen exactamente lo que pide (y saben programar, doy fe :P).

spoiler

Salu2 ;)

Khanser

pues a mi me mola más el codigo de #4 xD

C

Muchas gracias a todos, al final lo he dejado asi y funciona:

#include<stdio.h>
#include<stdlib.h>
int main(){
int num= 0;
while (num < 22) {

printf ("%i ", num);
num += 4;

printf ("%i ", num);
num -= 2;
}
system("pause");
return 0;
}

Lo que no entiendo es que para que funcione tenga que pones while num < 22 y no while num < 24 y porque si hago num=num+4 no funciona y con num+=4 si...

Salu2 ;)

Soleil

La mejor versión, la de #6.

El mío no imprime el cero, no incluye stdio.h (warning de gcc), no declara el tipo de main ni sus argumentos... pero todo sea para que no digan que sólo se hacen one-liners en Perl : -P

JuAn4k4

#6 Nunca te han dicho que programar de esa forma hace el codigo ilegible ? Depende demasiado de la sintaxis propia de C, y para uno que esta empezando meterse en esa sintaxis farragosa es .. de todo menos recomendable.

LOc0

#10

Algún compañero me lo ha dicho sí, pero no tantas veces como se lo decía yo a un forero de elrincondelc.com Tiene gracia que lo que antes yo tanto le criticaba me pase a mi ahora jeje... No se trata de fastidiar a #1, que está empezando. Es sólo un jueguecillo personal el contestar a este tipo de threads "ofuscando" el código (que ni se acerca a una ofuscación de verdad por otro lado). Sí, parece una parida, seguramente lo es, pero me importa poco ;) Yo me entretengo contestando, #1 consigue una solución más y de paso ve cosas que aunque ahora no entienda del todo le "sonarán" más adelante (o no, pero repito que eso tp me quita el sueño). Si a ti te quita el sueño, descuida que sé cuándo debo ofuscar y cuando comentar hasta los puntos y coma ;)

Salu2 ;)

PD: ahora que veo a #4, quizás tendría que haber añadido la palabra "coña" en mi respuesta para evitarme esto. Lo empezaré a poner en práctica...

Usuarios habituales