Fundamentos:Solucións:Primos con Lista Enlazada

De Wiki do Ciclo ASIR do IES de Rodeira

Escribir un programa que permita as seguintes operacións:

  1. Averiguar si un número e Primo
  2. Descompoñer un número en Factores Primos
  3. Listado de Primos
  4. Gardar Lista de Primos
  5. Cargar Lista de Primos
  6. Sair
  • Primeira opción debe solicitarlle ó usuario un número e informar si é primo ou non. Para facer eso, se manterá unha lista enlazada cos números primos que se vaian calculando, de xeito que cada vez sexa máis rápido o cálculo.
  • A Segunda opción debe solicitarlle ó usuario un número e descompoñelo en factores primos. Para facelo se manterá unha lista enlazada cos números primos que se vaian calculando.
  • A Terceira opción informará o usuario do número de primos que existen na lista, do maior e do menor, e permitirá o usuario listar os primos comprendidos nun rango determiñado entre os números almacenados.

O saír do programa se salvará a lista enlazada nun ficheiro "primos.dat", que se cargará o iniciar o programa de novo.


Pseudocódigo

Implementación en C

/* Primos con lista enlazada
*/
#include <stdio.h>
#include <stdlib.h>

#include "libprimo.h"

void espera(void);
void verPrimo(void);
void descomponNumero(void);
void listaPrimos(void);

void espera(void)
{
   printf("\n\n\n  Para continuar pulsa ENTER...");
   scanf("%*c");
}

void verPrimo(void)
{
   int num;

   system("clear");
   printf("Numero?");
   scanf("%d%*c",&num);
   printf("O número %d ",num);
   if (ePrimo(num)) printf("E primo.\n");
   else             printf("NON e primo.\n");
   espera();
}

void descomponNumero(void)
{
  int num;
  int fac=0;

  system("clear");
  printf("Numero?");
  scanf("%d%*c",&num);
  printf("Factores de %d = ",num);
  while(num!=1)
  {
     fac=minFactor(num);
     printf("%d*",fac);
     num=num/fac;
  }
  printf("1");
  espera();
}


void main(void)
{
   int op;

   do {
      system("clear");
      printf("¿Que queres facer?\n\n");
      printf("1.- Averiguar si un número é primo.\n");
      printf("2.- Descompoñer un número en factores primos.\n");
      printf("3.- Lista de números primos.\n");
      printf("4.- Garda a Lista de números primos.\n");
      printf("5.- Carga a Lista de números primos.\n");
      printf("6.- Saír.\n");
      scanf("%d%*c",&op);
      switch(op)
      {
        case 1: verPrimo();
                break;
        case 2: descomponNumero();
                break;
        case 3: listaPrimos();
                espera();
                break;
        case 4: gardaPrimos();
                break;
        case 5: cargaPrimos();   
                break;
      }
   } while (op!=6);
   eliminaPrimos();
}