ADVERTENCIA: LOS SIGUIENTES ALGORITMO SE ENTREGA "COMO SON" ("AS IS") SiN GARANTIA DE NINGUN TIPO. DEBE REALIZAR LAS VERIFICACIONES CORRESPONDIENTES ANTES DE EMPLEARLOS PARA CUALQUIER FIN. SOLO TIENEN UNA FINALIDAD EDUCATIVA.

viernes, 16 de noviembre de 2012

Ejemplo de Algoritmo que determina el dia de semana al que corresponde una determinada fecha

En el siguiente enlace podrá encontrar el día de semana al que pertenece una fecha en particular, es deciar, si ingresa 16 de noviembre del 2012 devuelve: Viernes


//Basado en Wikipedia
Proceso DeterminaDiaSemana

Definir anio como entero;
Definir mes como entero;
Definir dia Como Entero;
Definir dias como cadena;
Definir w como entero;
Definir c como entero;
Definir dmc como entero;
Definir a como entero;
Definir b como entero;
Definir d como entero;
Definir a1 como entero;
Definir dm como entero;
Definir dml como entero;

Dimension dml[13];
Dimension dm[13];
Dimension dias[7];

Escribir "Ingrese el dia (1-31): ";
Leer dia;

Escribir "Ingrese mes (1-12): ";
Leer mes;

Escribir "Ingrese año: ";
Leer anio;

dm[1] <- 0;
dm[2] <- 3;
dm[3] <- 3;
dm[4] <- 6;
dm[5] <- 1;
dm[6] <- 4;
dm[7] <- 6;
dm[8] <- 2;
dm[9] <- 5;
dm[10] <- 0;
dm[11] <- 3;
dm[12] <- 5;

dml[1] <- 0;
dml[2] <- 3;
dml[3] <- 4;
dml[4] <- 0;
dml[5] <- 2;
dml[6] <- 5;
dml[7] <- 0;
dml[8] <- 3;
dml[9] <- 6;
dml[10] <- 1;
dml[11] <- 4;
dml[12] <- 6;


Si ((anio % 400 = 0)) | ((anio % 4 = 0) &  (anio % 100 > 0)) Entonces
dmc <- dml[mes];
Sino
dmc <- dm[mes];
FinSi




mes <- mes -1;

a1 <- anio - 1;
a <- trunc((a1)/100);
b <- trunc(3*(a+1)/4);
c <- trunc ((a1)/4);
d <-(c-b)%7;


dias[0] <- "Domingo";
dias[1] <- "Lunes";
dias[2] <- "Martes";
dias[3] <- "Miercoles";
dias[4] <- "Jueves";
dias[5] <- "Viernes";
dias[6] <- "Sabado";



w <- (a1%7 + d%7 + dia%7 + dmc%7 )%7;




Escribir "La fecha indicada es del dia ",dias[w];


FinProceso

miércoles, 14 de noviembre de 2012

Ejemplo de Algoritmo en PseInt que realiza la conversión del sistema de numeración decimal al sistema de numeración Maya

Los Mayas fueron una civilización avanzada de Latinoamérica que desarrollaron la ciencia en grandes dimensiones, fueron realmente avanzados, siendo muy conocidos por su calendario. Pero además de la astronomía también desarrollaron la matemática y parte de ella es su sistema de numeración.

Este es un sistema posicional de base 20, es decir, emplea 20 símbolos, siendo una característica llamativa que estos símbolos tienen a su vez una regla de composición de base cinco y aún más interesante el empleo del cero, lo cual demuestra su gran inteligencia. 

Estos eran


se representaba con un caracol

1  .

2 ..

3 ...

4 ....
5 ----

.
----

Además se escribían de arriba a abajo y no como sotros que lo hacemos de izquierda a derecha.


Proceso NumeracionMaya

Definir n como entero;
Definir nm como entero;
Definir i como entero;
Definir len como entero;
Definir tmp como entero;

Dimension nm[1000];


Escribir "Ingrese el numero en decimal";
Leer n;
i <- 0;

Mientras n > 0 Hacer
nm[i] <- n % 20;
n <- n - nm[i];
n <- n / 20;
i <- i+1;
FinMientras

len <- i;

Para i<- len -1 Hasta 0 Con Paso -1 Hacer



Si nm [i] = 0 Entonces
Escribir "caracol";
Sino
Mientras nm[i] > 0 Hacer
tmp <- nm[i]%5;
nm[i] <- nm[i] - tmp;
Si tmp = 0 Entonces
nm[i] <- nm[i] - 5;
FinSi

Segun tmp Hacer
0:
Escribir "-----";
1:
Escribir "  .  ";
2:
Escribir " . . ";
3:
Escribir ". . .";
4:
Escribir "....";


FinSegun
FinMientras
FinSi

Escribir  "  ";
FinPara


FinProceso



Ejemplo de Algoritmo Factorizador de números Enteros de Phollar Rho


Proceso FactorizacionPollard Definir n como entero; Definir x como entero; Definir y como entero; Definir d como entero; Escribir "Ingrese el numero a factorizar:"; Leer n; x <- 2; y <- 2; d <- 1; Mientras d = 1 Hacer x <- PRNG (x); y <- PRNG (PRNG(y)); d <- AlgoritmoEuclidesBinario (ABS(x-y),n) ; FinMientras Si d = n Entonces Escribir "El algoritmo ha fallado"; FinSi Escribir "El numero ",n," es divisible entre ",d; FinProceso SubProceso MCD <- AlgoritmoEuclidesBinario ( u, v ) Definir MCD Como Entero; Definir desplazamiento Como Entero; Definir continuar como logico; Definir temporal como entero; desplazamiento <- 1; Mientras ((u %2 = 0) & (v % 2 = 0)) Hacer u <- u /2; v <- v /2; desplazamiento <- desplazamiento*2; FinMientras continuar <- verdadero; Mientras u % 2 = 0 Hacer u <- u / 2; FinMientras Mientras continuar Hacer Mientras v % 2 = 0 Hacer v <- v / 2; FinMientras Si u > v Entonces temporal <- u; u <- v; v <- temporal; FinSi v <- v - u; Si v = 0 Entonces continuar <- falso; FinSi FinMientras MCD <- desplazamiento*u; FinSubproceso SubProceso aleatorio <- PRNG( x ) Definir aleatorio como entero; aleatorio <- (16807*x + 12345); aleatorio <- aleatorio % 65536; FinSubProceso


Basado en la Wikipedia

Ejempo del Algoritmo Extendido de Euclides


Si tenemos una ecuación diofántica de primer grado tal que su expresión es de la forma a*x + b*y = MCD  (a,b) el Algoritmo Extendido nos permite calcular los valores de las incognitas x e y. A coantinuación se presenta dicho algoritmo en PseInt:

Proceso AlgoritmoExtendidoEuclides
Definir a como entero;
Definir b como entero;
Definir x como entero;
Definir y como entero;
Definir ux Como Entero;;
Definir uy como entero;
Definir cociente como entero;
Definir tmp como entero;
Definir tmpa como entero;
Definir tmpb como entero;
Definir continuar como Logico;
Definir expresion como cadena;

Escribir "De la expresion a*x + b*c = MCD (a,b)";
Escribir "Ingrese a:";
Leer a;

Escribir "Ingrese b:";
Leer b;

tmpa <-a;
tmpb <-b;

x <- 0;
ux <- 1;
y <- 1;
uy <- 0;

continuar <- verdadero;

Mientras continuar Hacer
cociente <- TRUNC (a/b);
tmp <- a;
a <- b;
b <- tmp % b;
tmp <- x;
x <- ux - cociente*x;
ux <- tmp;
tmp <- y;
y <- uy - cociente*y;
uy <- tmp;
Si b = 0 Entonces
continuar <- falso;
FinSi
FinMientras

Escribir ux,"x",tmpa,"+",uy,"x",tmpb,"=",a;


FinProceso

Basado en Wikipedia

Ejemplo de Algoritmo alternativo al de Euclides que calcula el MCD con operaciones binarias


El algoritmo de Euclides permite el calculo del Máximo Común Divisor. Sin embargo, este requiere de que la realización de divisiones, por eso existe el siguiente algoritmo que permite tal calculo sin que se tenga que efectuar tal operación.


Proceso AlgoritmoEuclidesBinario

 Definir u como entero;
 Definir v como entero;
 Definir desplazamiento Como Entero;
    Definir continuar como logico;
 Definir temporal como entero;
 Definir MCD como entero;

 Escribir "Ingrese uno de los numeros de los que calculara el MCD: ";
 Leer u;

 Escribir "Ingrese uno de los numeros de los que calculara el MCD: ";
 Leer v;

 desplazamiento <- 1;



 Mientras ((u %2 = 0) & (v % 2 = 0)) Hacer

  u <- u /2;
  v <- v /2;
  desplazamiento <- desplazamiento*2;

 FinMientras

 continuar <- verdadero;

 Mientras u % 2 = 0 Hacer
u <- u / 2;
 FinMientras


 Mientras continuar Hacer

  Mientras v % 2 = 0 Hacer
   v <- v / 2;
  FinMientras
  Si u > v Entonces
   temporal <- u;
   u <- v;
   v <- temporal;
  FinSi
  v <- v - u;
  Si v = 0 Entonces
   continuar <- falso;
  FinSi
 FinMientras

    MCD <- desplazamiento*u;
 Escribir "El MCD es :",MCD;


FinProceso

Basado en la Wikipeda

martes, 13 de noviembre de 2012

Ejemplo de algoritmo que determina si un numero es primo y lo demuestra



Proceso EsPrimo
Definir n como entero;
Definir suma como entero;
Definir numero_actual como entero;
Definir primo como entero;
Definir rt como real;
Definir div como entero;
Definir cantidad_primos como entero;
Definir divisor como entero;

Escribir "Ingrese el numero: ";
Leer numero_actual;
primo <- 1;
rt <- raiz (numero_actual);

//Si el numero_actual es primo debe tener un divisor menor que su raíz

Para div<- 2 Hasta rt Con Paso 1 Hacer

//Un numero primo solo es divible entre el y 1 por ello si div divide al numero_actual entonces no es primo
Si numero_actual % div = 0 Entonces
primo <- 0;
divisor <- div;
div <- numero_actual;

FinSi
FinPara

Si primo = 1 Entonces
Escribir "El número ",numero_actual," es primo";
Sino
Escribir "El número no es primo porque ",divisor," lo divide";
FinSi


FinProceso

Ejemplo de Algoritmo que calcula la suma de los n primero cuadrados


Proceso SumaNCuadrados
Definir n como entero;
Definir prod como entero;
Definir i como entero;


Escribir "Ingrese la cantidad de numeros: ";
Leer n;
prod <- 0;

Para i<-1 Hasta n Con Paso 1 Hacer
prod <- prod + i*i;
FinPara

Escribir "La suma del cuadrado de los ",n," primeros numeros positivos es: ",prod;

FinProceso