domingo, 14 de diciembre de 2014

Tablas de multiplicar algoritmo

  En un principio se utilizaba el ábaco pero cuando las cantidades eran demasiado grandes esto suponía un problema para ir registrando los resultados de la contabilidad y entonces los grandes matemáticos del pasado inician la sumatoria simplificada que es la multiplicación o sea sumar un numero n veces por si mismo para evitar hacer el procedimiento de cada una de las iteraciones.

  Hoy vamos a desarrollar un pequeño algoritmo para imprimir las ya famosas tablas de multiplicar del 1 al 10, para esto realizamos dos ciclos en el Proceso tablasMultiplicar y un ciclo más en el SubProceso ajustarCadena que retorna una cadena de texto limitada en caracteres para tener una mejor presentación de las tablas. 




Algoritmo en PSeInt:


Proceso tablasMultiplicar
Definir i,n Como Entero;
Definir linea,espacio Como Texto;
tabla<-"";i<-1;n<-1;
espacio<-"  ";
Mientras (i<11) Hacer
linea<-"";
Para n<-1 Hasta 10 Con Paso 1 Hacer

linea<-linea+ajustarCadena(ConvertirATexto(n)+" x "+ConvertirATexto(i)+" = "+ConvertirATexto(n*i));

Fin Para
Escribir linea;
i<-i+1;
Fin Mientras
FinProceso

SubProceso cadAjustada<-ajustarCadena(cad)
Definir cadAjustada Como Texto;
Definir i Como Entero;

cadAjustada<-"";
Para i<-0 Hasta 12 Con Paso 1 Hacer
cad<-cad+" "
Fin Para
cadAjustada<-Subcadena(cad,0,12);
FinSubProceso

sábado, 13 de diciembre de 2014

Crear menú de opciones PSeInt

Hay gran variedad de aplicaciones de consolas o CLI (Command Line Interface) por sus siglas en ingles; en modo de texto que requieren de una forma de efectuar tareas múltiples sin tener que estar abriendo y cerrando una aplicación cada que se termina de ejecutar, por tal motivo se crean los menús y/o submenús de opciones.

  Hoy les vengo a mostrar un sencillo ejemplo en PSeInt de como implementar un pequeño menú de opciones básicas de operaciones matemáticas (suma, resta, multiplicación y división de dos números).

Screenshot:


Algoritmo:

Proceso MenuPrincipal
Definir op Como Entero;
op<-0;
Repetir
Limpiar Pantalla;
menu();
leer op;
Segun op Hacer
1:
operar(op);
2:
operar(op);
3:
operar(op);
4:
operar(op);
De Otro Modo:
Escribir "FIN...";
FinSegun
Hasta Que (op<1 || op>4);
FinProceso

SubProceso menu()
Escribir "1.- SUMA";
Escribir "2.- RESTA";
Escribir "3.- MULTIPLICACIÓN";
Escribir "4.- DIVISIÓN";
Escribir "5.- SALIR";
Escribir "";
Escribir "OPCIÓN: ";
FinSubProceso

SubProceso operar(opdr)
Definir op1,op2 como Real;
Escribir "operando 1:";
leer op1;
Escribir "operando 2:";
leer op2;
Segun opdr Hacer
1:
op1<-op1+op2;
2:
op1<-op1-op2;
3:
op1<-op1*op2;
4:
op1<-op1/op2;
De Otro Modo:

FinSegun
Escribir "Resultado: ",op1;
Esperar Tecla;
FinSubProceso

domingo, 30 de noviembre de 2014

Recursividad -Factorial de un número

Definición: En programación es cuando una función o método se llama a si mismo, sirve para algoritmos complejos o que serian casi imposibles sin la recursividad.

Ventajas: 
  • Se escribe poco código.
  • resuelve problemas recurrentes. 
Desventajas:
  • Creación y uso de muchas variables, lo que consume tiempo.
  • Requiere memoria adicional, para cada llamada de la función o método de si misma.
Requerimientos y Rendimiento:
  • Llamarse a si misma dentro de su código.
  • Retornar un valor.
  • Especificar un caso base, es cuando debe de terminar llamarse a si mismo e iniciar el retorno de los valores generados en cada llamada.
  • Hacer un análisis comparativo de uso de memoria y velocidad para saber si aplicar recursividad o su equivalente iterativo en caso de haberlo.
Seudocódigo o algoritmo en PSeint factorial de un número en forma recursiva:








martes, 11 de noviembre de 2014

Algortitmo para convertir números arábigos a números romanos


Historia:


   Los romanos formaron un imperio que se extendía por la mayor parte de Europa y por el norte de África
Los pueblos sometidos aprendieron de ellos su modo de vida, sus costumbres, su lengua llamada latín, su escritura y también su sistema de numeración.

  Tras la desaparición del Imperio Romano, en los siglos posteriores algunas de las cosas aprendidas de los romanos permanecieron, aunque fueron cambiando. Así nosotros, actualmente hablamos Castellano que es Latín evolucionado y al escribir seguimos utilizando letras latinas. Pero otras cosas aunque permanecieron varios siglos, después desaparecieron, así pasó con el sistema de numeración romano. Se sustituyó por el sistema de numeración arábigo, que proviene de la India y lo extendieron los árabes, es el que empleamos ahora y es mucho más fácil de manejar.

   Actualmente vemos y utilizamos números romanos en muy pocas ocasiones: para nombrar los siglos, en los actos y escenas de una obra de teatro, en la designación de olimpiadas, congresos y certámenes, en la numeración de reyes, emperadores y papas, en inscripciones antiguas y en relojes antiguos.

Algoritmo para convertir números arábigos a números romanos



Proceso Romanos
      Definir r,i,n,numsRomanos,nT Como Entero;
      Definir romano Como Texto;
      nT<-0;
      romano<-"";
      Escribir "Número:";
      Leer n;
     
                        r<-n%1000;
                        nT<-n/1000;
                        si(nT>=1 && nT<=9)Entonces
                             romano<-romano+repetirCaracteres(nT,'M');
                        FinSi
                        n<-r;
                       
                        r<-n%500;
                        nT<-n/500;
                        si(nT==1 && r<400)Entonces
                             romano<-romano+"D";
                        Sino
                             si(nT>0 && r>=400)Entonces
                                   romano<-romano+"CM";
                             FinSi
                        FinSi
                        n<-r;
                 
                        r<-n%100;
                        nT<-n/100;
                        si(nT>=1 && nT<=3)Entonces
                             romano<-romano+repetirCaracteres(nT,'C');
                        Sino
                             si(nT==4 && n>500)Entonces
                                   romano<-romano+"CD";
                             FinSi
                        FinSi
                        n<-r;
                       
                        r<-n%50;
                        nT<-n/50;
                        si(nT==1 && r<=39  )Entonces
                             romano<-romano+"L";
                        Sino
                             si(n>80)Entonces
                                   romano<-romano+"XC";
                             FinSi
                        FinSi
                        n<-r;
                       
                        r<-n%10;
                        nT<-n/10;
                        si(nT>=1 && nT<=3)Entonces
                             romano<-romano+repetirCaracteres(nT,'X');
                        FinSi
                        n<-r;

                        r<-n%5;
                        nT<-n/5;
                        si(nT==1 && r<4)Entonces
                             romano<-romano+"V";
                        finSi
                        si(nT==1 && n==9)Entonces
                             romano<-romano+"IX";
                        FinSi
                       
                        si(r>=1 && r<=3)Entonces
                             romano<-romano+repetirCaracteres(r,'I');
                        FinSi
                        Si(nT==0 && r==4)Entonces
                             romano<-romano+'IV';
                        FinSi
                        n<-r;

      Escribir "Numero romano: ",romano;
           
FinProceso

SubProceso ca<-repetirCaracteres(nV,c)
      Definir i Como entero;
      Definir ca Como Texto;
      ca<-"";
      Para i<-1 Hasta nV Con Paso 1 Hacer
            ca<-ca+c;
      FinPara
FinSubProceso

  Este algoritmo muestra una forma de convertir números arábigos a números romanos solo probado con positivos.
  Cualquier duda o comentario, también si hay errores favor de comentar espero les guste.

viernes, 31 de octubre de 2014

Algoritmo para contar cuantas veces se repite un número K en una lista de números entrada por el usuario


Algoritmo para contar cuantas veces se repite un número K en una lista de números entrada por el usuario


  En ocasiones necesitamos saber que tantas veces se repite cierto elemento de entre una lista de elementos, para poder hacer un conteo de las repeticiones en que podemos encontrar dicho elemento podemos usar un algoritmo como el que sigue.


  Se definen la variables o sea se nombran y se les define un tipo especifico según lo que necesitemos calcular o variar para nuestro propósito, inicializamos las variables para que sea valida al usarla en un ciclo o instrucción definida, pedimos la cantidad de números que pondremos en la lista y seguido pedimos el numero que vamos a verificar sus repeticiones dentro de la lista de n elementos.

 Algoritmo:

Proceso kRepetido
     Definir i,n,nk,k,cont Como Entero;
     n<-0;
     cont<-0;
    
     Escribir "Cantidad de números:";
     Leer n;
     Escribir "Número a contar:";
     Leer k;
    
     Para i<-0 Hasta n-1 Con Paso 1 Hacer
         Escribir "Número:";
         Leer nk;
         si(nk==k)Entonces
              cont<-cont+1;
         FinSi
     FinPara
    
     Escribir "Número ",k," aparece ",cont," veces";

FinProceso




lunes, 20 de octubre de 2014

Algoritmo Ecuación de segundo grado con una incógnita FORMULA GENERAL

 Definición y algoritmo


  Una ecuación de segundo grado o ecuación cuadrática de una variable es una ecuación que tiene la forma de una suma algebraica de términos cuyo grado máximo es dos, es decir, una ecuación cuadrática puede ser representada por un polinomio de segundo grado o polinomio cuadrático. 

La expresión canónica general de una ecuación cuadrática de una variable es:




  Donde x representa la variable y a, b y c son constantes; a es el coeficiente cuadrático (distinto de 0), b el coeficiente lineal y c es el término independiente. Este polinomio se puede representar mediante una gráfica de una función cuadrática o parábola. Esta representación gráfica es útil, porque la intersección de esta gráfica con el eje horizontal coincide con las soluciones de la ecuación (y dado que pueden existir dos, una o ninguna intersección, esos pueden ser el número de soluciones reales de la ecuación).

Algoritmo:


Proceso Ecuacion2grado
Definir A,B,C,c1,b2 Como Entero;
Definir opArit Como Texto;
Definir solucion1,solucion2,igualadoA,raizz,resta,ac4 Como Real;
raizz<-0;
c1<-0;
b2<-0;
opArit<-" + ";

Escribir "Coeficiente de X^2:";
Leer A;
Escribir "Coeficiente de X^1:";
Leer B;
Escribir "Coeficiente de (X^0=1):";
Leer C;
Escribir "Igualdad de Ecuacion:";
Leer igualadoA;
Escribir "";
Escribir "Forma de la Ecuacíon: ",A,"X^2 + ",B,"X^1 + ",C,"X^0 = ",igualadoA;
Escribir "";
c1<-C;
C<-C-igualadoA;
igualadoA<-0;
Escribir "Al igualar con 0 tenemos: ",A,"X^2 + ",B,"X^1 + (",C,"X^0) = ",igualadoA;
b2<-B^2;
resta<-0;
ac4<-4*A*c1;
resta<-b2-ac4;

si(resta>=0)Entonces
solucion1<- ((-B+raiz(resta))/(2*A));
solucion2<- ((-B-raiz(resta))/(2*A));
Escribir "";
Escribir "Solución 1: X = ",solucion1;
Escribir "Solución 2: X = ",solucion2;
Sino
Escribir "";
Escribir "Sin Solución raiz negativa....";
FinSi
FinProceso



lunes, 13 de octubre de 2014

Calcular que dia de la semana es cualquier fecha dada año-mes-dia Algoritmo Zeller

Un poco de historia:


  Dado que el calendario gregoriano fue adoptado en diferentes momentos en diferentes partes del mundo, la ubicación de un evento es significativa a la hora de determinar el día de la semana correcto de una fecha que tuvo lugar durante este periodo de transición.

Algoritmo de Zeller en PSeint:


Proceso diaDeXA
                Definir dia,t,semana,mes,ano Como Entero;
                Definir n Como Texto;
                Dimension t[12];
                Dimension n[7];
                t[0]<-0;                                              
                t[1]<-3;
                t[2]<-2;
                t[3]<-5;
                t[4]<-0;
                t[5]<-3;
                t[6]<-5;
                t[7]<-1;
                t[8]<-4;
                t[9]<-6;
                t[10]<-2;
                t[11]<-4;
                n[0]<-"Domingo";
                n[1]<-"lunes";
                n[2]<-"martes";
                n[3]<-"miercoles";
                n[4]<-"jueves";
                n[5]<-"viernes";
                n[6]<-"sabado";
                Escribir "Año:";
                Leer ano;
                Escribir "Mes:";
                Leer mes;
                Escribir "Día:";
                Leer dia;
                si((dia>=1 && dia<=31)&&(mes>=1 && mes<=12))entonces
                               si(mes<3)Entonces
                                               ano<-ano-1;
                               FinSi
                               semana<-(ano+trunc(ano/4)-trunc(ano/100)+trunc(ano/400)+t[mes-1]+dia)%7;
                               Escribir n[semana];
                FinSi

FinProceso


Zeller:


  Zeller fue un importante representante del método histórico-crítico. En Teología, trató cuestiones del paleocristianismo. En Filosofía, inicialmente se orientó en la línea de Hegel, pero, posteriormente, se acercó más a Kant. Es uno de los primeros representantes del neokantismo y del neocriticismo. Además, es uno de los más importantes historiadores de la filosofía griega antigua. Su obra en varios tomos Die Philosophie der Griechen in ihrer geschichtlichen Entwicklung (La filosofía griega en su evolución histórica) ha experimentado, hasta la fecha (2009), numerosas ediciones y reimpresiones y ha sido traducida a diferentes lenguas. En el campo de la filosofía sistemática, en 1862 fue pionero en esbozar, en su escrito Über Bedeutung und Aufgabe der Erkenntnistheorie, los objetos específicos y el concepto de una Teoría del conocimiento