Duda acerca de estructura iterativa for

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
anderson269
Mensajes: 1
Registrado: 10/01/2019 2:13 pm

Duda acerca de estructura iterativa for

#1 Mensaje por anderson269 » 10/01/2019 2:45 pm

Soy nuevo en el foro y nuevo tambien en la programacion en C. Estoy aprendiendo con el libro Introducción a la programación de Mihaela Juganaru Mathieu. Tengo una duda y no me ha quedado claro esto de las estructuras iterativas en este caso con for (else-if) en un programa que verifica si el número es primo. Mi duda es todo, es decir necesito que me explique cuales son los procedimientos que se hace, linea por linea

Código: Seleccionar todo

/*Programa que verifica si un numero es primo*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
    int n, d;
    short es_primo;
    n = 6751;
    for (d=2, es_primo = 1; d<=sqrtl(n) && es_primo == 1;)
    if (n%d == 0)
        es_primo = 0;
    else if (d==2)
        d = 3;
    else
        d = d + 2;
    if (es_primo)
        printf("%d no es primo\n", n);
    else
        printf("No, %d no es primo\n", n);
    exit(0);
}
Cabe destacar que este programa una vez compilado arroja:

No, 6751 no es primo

Compilé con el GNU GCC Compiler en CodeBlocks

Un saludo, gracias

mollok
Mensajes: 351
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Duda acerca de estructura iterativa for

#2 Mensaje por mollok » 10/01/2019 3:13 pm

Si es un ejemplo del libro está bastante mal planteado, máxime si es para enseñar C desde 0, pues hay formas mucho mas claras de hacer lo mismo.

Te reescribo el código, que hace exactamente lo mismo, pero de una forma mas clara:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main(int argc, char *argv[])
{
    int numero, divisor;
    bool es_primo;

    numero = 6751;
    divisor = 2;
    es_primo = true;

    while(divisor*divisor <= numero && es_primo == true) {
        if (numero%divisor == 0)
            es_primo = 0;
        else if (divisor == 2)
            divisor = 3;
        else
            divisor = divisor + 2;
    }

    if (es_primo)
        printf("%d es primo\n", numero);
    else
        printf("No, %d no es primo\n", numero);

    return 0;
}
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 16 invitados