[Curso] Introducción a la programación en C (VIII)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

dark_sasuke escribió:es que weno imprimo fuera del bucle

:? Imprimes dentro del bucle
Imagen

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3380
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dark_sasuke »

no profe, me refiero a probando imprimiendo fuera del bucle y pasa lo antes mencionado

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])

{

int  num_insertado, bucle = 2;
   
//bienvenida al programa y escaneo del numero
printf("bienvenido a este programa :)\n");
printf("por favor inserte un numero entero : ");
scanf("%d", &num_insertado);

   
while(num_insertado%bucle++!=0)

   

if(num_insertado==bucle)   
   
   printf("\ntu numero es primo");
else

   printf("\ntu numero NO es primo");



   return 0;
      
 
}
 
Imagen

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Así siguen estando dentro del bucle, melón. Para que no estén dentro del bucle necesitas poner un ; detrás del while...
Imagen

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3380
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dark_sasuke »

m0skit0 escribió:Así siguen estando dentro del bucle, melón. Para que no están dentro del bucle necesitas poner un ; detrás del while...


ah perdon profe eso no lo sabia :roll:
Imagen

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Cuando es una sola instrucción (un if..else... es una sola), no hace falta poner las llaves, por ejemplo:

Código: Seleccionar todo

i = 0;
while(i++<10)
    // El printf es por cada vuelta del bucle
    printf("%d ", i);

Imprime del 1 al 10.

Pero si cerramos el while, no hay bucle, por ejemplo:

Código: Seleccionar todo

i = 0;
while(i++<10);
// Es el bucle y luego el printf
printf("%d ", i);

Imprime sólo el 10.

Ojito con los ; que traen más de un quebradero de cabeza :evil:

PD: tú que has dado un poco de Pascal, podrás ver que en Pascal esto no ocurre, ya que es obligatorio el uso de BEGIN y END independientemente del número de instrucciones ;) Por eso se dice que Pascal es más estricto que C.
Imagen

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3380
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dark_sasuke »

pasa lo comentado profe, si inserto un primo, dice al menos 10 veces que no es primo y al final dice que si lo es, con los no primos si va bien :S

perdon por ser tan pesaito con el tema pero es que el tema de la programacion me gusta :)
si el pascal te pide BEGIN y END obligatoriamente pero profe END. con el puntito que si no no compila :D

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])

{

int  num_insertado, bucle = 2;
   
//bienvenida al programa y escaneo del numero
printf("bienvenido a este programa :)\n");
printf("por favor inserte un numero entero : ");
scanf("%d", &num_insertado);

   
while(num_insertado%bucle++!=0);

   

if(num_insertado==bucle)   
   
   printf("\ntu numero es primo");
else

   printf("\ntu numero NO es primo");



   return 0;
      
 
}
 
Imagen

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Vamos a ver... Tal y como lo tienes, funciona tal que así:

Código: Seleccionar todo

m0skit0@sodiet:~/Temp$ ./prueba
bienvenido a este programa :)
por favor inserte un numero entero : 11

tu numero NO es primom0skit0@sodiet:~/Temp$
m0skit0@sodiet:~/Temp$ ./prueba
bienvenido a este programa :)
por favor inserte un numero entero : 15

tu numero NO es primom0skit0@sodiet:~/Temp$
m0skit0@sodiet:~/Temp$

No imprime nada 10 veces, ya que el bucle está vacío. Comprueba que estés ejecutando el programa compilado correcto o si has vuelto a compilarlo tras modificarlo :tongue:

En todo caso, tu fallo radica en que marca siempre no primo. Cuando el número insertado es primo, por ejemplo 5, cuando bucle llega a 5, se cumple que num_insertado%bucle++!=0 es falso (o lo que es lo mismo, num_insertado%bucle++==0). Peeeero al haber puesto bucle++ en la condición, independientemente de que se cumpla o no la condición bucle pasa a ser 6, por tanto nunca se va a cumplir if(num_insertado==bucle), a menos que numero_insertado sea divisible por número_insertado - 1 (algo que es imposible -salvo para el 2-).

PD: pon siempre un "\n" al final del programa para que no quede el prompt pegado a la última frase (tu numero NO es primom0skit0@sodiet:~/Temp$ ) xD
Imagen

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3380
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dark_sasuke »

gracias profe por la explicacion :) te quiero profe! :tongue: :laughing:

en un ratito lo posteo arreglado, tengo que poder joder !!! xD
Imagen

Avatar de Usuario
wf19
Habitual
Habitual
Mensajes: 194
Registrado: 03 Sep 2009, 02:12

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por wf19 »

Bueno, viendo los errores y mejorando el código posteado anteriormente, acá presento la optimización :D

Spoiler:

Código: Seleccionar todo

#include <stdio>

int main ()

{
int numero_introducido, verificador = 2;

printf("Dood! inserta un numero y te dire si es primo o no: ");
scanf("%d", &numero_introducido);

if (numero_introducido <= 0)
   numero_introducido = 0;

switch (numero_introducido)
{
   case 0:
   printf("\nNumero NO valido dood!!!!");
   return 0;

   case 1:
   printf("\NO es primo... Pero tampoco compuesto Dood!!!");
   return 0;

   default:
   while (numero_introducido % verificador != 0)
   verificador++;
   
   if (numero_introducido == verificador)
      printf("\nEs un numero primo Dood!!!");

   if (numero_introducido != verificador)
      printf("\nEs un numero NO primo Dood!!!");
   break;
}
return 0;
}


Esperando golpiza :shock:

Avatar de Usuario
dark_sasuke
Moderador Global
Moderador Global
Mensajes: 3380
Registrado: 03 Sep 2009, 02:13
Twitter: D4rkyt0

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por dark_sasuke »

yo lo optimize algo diferente:

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])

{

int  num_insertado, bucle = 2;
   
//bienvenida al programa y escaneo del numero
printf("bienvenido a este programa :)\n");
printf("por favor inserte un numero entero : ");
scanf("%d", &num_insertado);

   
while(num_insertado%bucle!=0)
   bucle++;
 

if(num_insertado==bucle)      
   printf("\ntu numero es primo");

if(num_insertado!=bucle)
   printf("\ntu numero NO es primo");



   return 0;
     

}


PD: tiene el pequeño bug de que si insertas 1 no hace nada y si insertas 0, dice que no es primo :roll:
Imagen

Responder