Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Problema: Números Primos

Escribir el psedocodigo y el código en C de el siguiente problema:

Quiero que me muestre de menor a mayor y de mayor a menor los 20 primeros nº primos.
Metodo 1: hasta n-1
<inicio>
primo[20]
contador=0
esprimo=”si” //si: indica que el numero es primo.
listadeprimos=1
numeroacomprobar=1
numero=0
mientras contador<20
    primo[contador]=0
    contador++
finmientras

primo[0]=2
contador=0
numeroacomprobar=2;

// comprobar si ya he llegado a 20 numeros primos.

mientras (contador<20)
numeroacomprobar++
esprimo=”si”
numero=2

// repetir hasta N-1
mientras (numero<(numeroacomprobar-1))
    si numeroacomprobar%numero=0
        //no es un numero primo, salimos del este bucle:
         numero=numeroacomprobar
          esprimo=”NO”;
    finsi
numero++
finmientras

si esprimo=”si”
    contador++
    primo[contador]=numeroacomprobar
    listadeprimos++
finsi
finmientras

// ordenar el listado
contador=20
mientras (contador>-1)
    escribe primo[contador]
    contador--
finmientras
<fin>

Ahora lo hacemos en C:
#include <stdio.h>

int main(int argc, char **argv)
{
int primo[20];
int contador=1;
int esprimo=1; //1 indica que es "S" primo
int listadeprimos=1;
int numeroacompra=1;
int numeroacomprobar=1;
int numero=0;
while (contador<20){
    primo[contador]=0;
    contador++;
}
primo[0]=2;
contador=0;
numeroacomprobar=2;
while (contador<20){
    numeroacomprobar++;
    esprimo=1;
    numero=2;
    while (numero<(numeroacomprobar-1)){
            if (numeroacomprobar%numero==0) {
            // no es un numero primo,salimos de ese bucle
             numero=numeroacomprobar;
            esprimo=0;
             }
            numero++;
    }
if (esprimo==1) {
    contador++;
    primo[contador]=numeroacomprobar;
    listadeprimos++;
    }
}
//ordenar listado (de mayor a menor)
contador=0;
while (contador<20) {
    printf("%d \n",primo[contador]);
    contador++;
}
printf("----------------\n");
contador<20;
while (contador>-1) {
    printf("%d \n",primo[contador]);
    contador--;
}
return 0;
}


Metodo 2: creando una tabla de numeros primos que vaya incorporando los nº primos que encuentre
<inicio>
primo[20]
contador=0
esprimo=1 //1: indica que el numero es primo.
listadeprimos=1
numeroacomprobar=1
numero=0
mientras contador<20
    primo[contador]=0
contador++
finmientras

primo[0]=2
contador=0
numeroacomprobar=1;

// comprobar si ya he llegado a 20 numeros primos.

mientras (contador<20)
    numeroacomprobar++
    esprimo=1
    numero=0
                                                                                                                                                                               
// comparar una lista de numero primos que va añadiendo un numero cada vez que descubra que sea  primo.

mientras (numero<listadeprimos))
    si (numeroacomprobar%primo[numero]=0)
        / /no es un numero primo, salimos del este bucle:
        numero=listadeprimos
         esprimo=0;
    finsi
    numero++
finmientras

si esprimo=1
    contador++
    listadeprimos++
    primo[contador]=numeroacomprobar
    numero=listadeprimos
finsi
finmientras

// ordenar el listado
contador=20
mientras (contador>-1)
    escribe primo[contador]
    contador--
finmientras
<fin>
Ahora lo pasamos a C:

#include <stdio.h>

int main(int argc, char **argv)
{
int primo[20];
int contador=0;
int esprimo=1; //1 indica que es "S" primo
int listadeprimos=1;
int numeroacomprobar=1;
int numero=0;
while (contador<20) {
primo[contador]=0;
contador++;
}
primo[0]=2;
contador=0;
numeroacomprobar=1;
while (contador<20) {
    numeroacomprobar++;
    esprimo=1;
    numero=0;
    while (numero<listadeprimos) {
        // no es primo y salimos del blucle
        if (numeroacomprobar%primo[numero]==0) {
            //no es un numero primo salimos de este bucle
            numero=listadeprimos;
            esprimo=0;
            }
        numero++;
    }
    if (esprimo==1) {
        listadeprimos++;
         contador++;
        primo[listadeprimos-1]=numeroacomprobar;
        numero=listadeprimos;
    }
}
//ordenar listado (de mayor a menor)
contador=0;
while (contador<20) {
    printf("%d \n",primo[contador]);
    contador++;
}
printf("----------------\n");
contador=19;
while (contador>-1) {
    printf("%d \n",primo[contador]);
    contador--;
}
return 0;
}

No hay comentarios:

Publicar un comentario