Mostrando entradas con la etiqueta Algoritmos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Algoritmos. Mostrar todas las entradas

Algoritmo tiempo mas corto y al azar en C#

En esta ocasión les quiero compartir este trabajo que me toco hacer como requisito en la materia de Sistemas Operativos 1. consiste en desarrollar un simulador o cualquier aplicación que implemente estos algoritmos para funcionamientos. yo lo que hice fue desarrollar un reproductor multimedia que utiliza estos dos algoritmos, claro algo sencillo pero es chevere.

La funcionalidad de estos algoritmos se basa en lo siguiente:

  • Algoritmo Tiempo mas corto: lo que hace es mirar entre todos los procesos y ver cual tiene menor tiempo de duración entonces ira ejecutando el que tenga menor tiempo de duración.  para un reproductor que implementa esta funcionalidad solo consiste en leer el tiempo de duración de la canción que se selecciono (Lista de canciones)cada una de esta representa un proceso luego lo que hago es ordenarlos de menor a mayor y listo voy reproduciendo.
  • Algoritmo al Azar: este algoritmo es sencillo  entre todas las canciones seleccionadas (procesos) va reproduciendo al azar.
Capturas de la aplicación.

En la siguiente pantalla se seleccionan las canciones a reproducir.


las canciones quedaran cargadas en la ventana de configuración (Si alguna no les carga el tiempo. hacer clic en la fila para que capture el tiempo de la canción).


luego hacer clic en el botón inferior simular tiempo mas corto. y el sistema organizara las canciones según el algoritmo de planificación q se halla seleccionado para este caso tiempo mas corto.

Panel izquierdo (Procesos en estado esperando). Panel Central (Procesos en Ejecución  y Panel derecho (Procesos Terminados).


A continuación podrán descargar el proyecto, esta desarrollado en Visual Studio 2010 Profesional


Algoritmo:Convertir número décimal a hexadecimal en Java

Hola…   En este post quiero os  regalar un algoritmo (de mi autoría) que he realizado en pseudocódigo a lápiz y papel, pero se los regalaré en un lenguaje en el cuál aún no estoy acostumbrado a programar, Java.
El Algoritmo es fácil y sencillo, espero te sirva de ayuda:
método (ó función):    firstHex(int dec): Recibe como parámetro un numero décimal menor que 16. Sirve para convertir los numeros del 10 al 15 a su equivalente en Hexadecimal (A,B,C,D,E ó F).  Si es un numero menor que 10 devuelve el mismo número.
1 public String firstHex(int dec) {
  2         String numeroHex=""; 
  3         if(dec<16) {
  4             switch(dec) { 
  5                     case 10:
  6                     numeroHex="A"; 
  7                     break; 
  8                     case 11:
  9                     numeroHex="B"; 
 10                     break; 
 11                     case 12:
 12                     numeroHex="C"; 
 13                     break; 
 14                     case 13:
 15                     numeroHex="D"; 
 16                     break; 
 17                     case 14:
 18                     numeroHex="E"; 
 19                     break; 
 20                     case 15:
 21                     numeroHex="F"; 
 22                     break; 
 23                     default: 
 24                     numeroHex=Integer.toString(dec); 
 25                     break; 
 26                 } 
 27             return numeroHex; 
 28         } else { 
 29         return "false";
 30         } 
 31     }
método (ó función):   toHex(int dec): Recibe como parámetro un numero décimal cualquiera (menor, igual o mayor que 16).  Su función es de convertir totalmente el número en Hexadecimal.  Hace uso defirstHex(int dec).




  1 public String toHex(int dec) {
  2         int cociente=16, residuo=0;
  3         String numeroHex="", numeroHex1="";
  4         if(dec<16)
  5          {
  6              numeroHex=firstHex(dec);
  7          } else 
  8            {
  9              do 
 10               {
 11                cociente=dec/16;
 12                residuo=dec%16;
 13                dec=cociente;
 14                numeroHex1=firstHex(residuo);
 15                numeroHex=numeroHex1+numeroHex;
 16                dec=cociente;         
 17               } while (dec&gt;=16);
 18         numeroHex1=firstHex(dec);
 19         numeroHex=numeroHex1+numeroHex;
 20         }
 21         return numeroHex;
 22     }

Por ultimo sólo es llamar el método (o función) toHex(int dec). Ejemplo:  Queremos convertir el número 349.



  1 String numeroHexadecimal;
  2 numeroHexadecimal=toHex(349);

matriz a vector incluye metodo burbuja

para los que no saben o se les ha olvidado les recuerdo que el metodo burbuja consiste en la organizacion de datos ascendente o descendentemente, cuando lo ahcemos ascendentemente se llama conejos y cuando lo hacemos descendentemente se llama tortuga.

el ejercisio es basico:

/////////////
cargar una matriz de n*n con numeros, despues de cargada pasarla toda a un vector, dentro del vector ordenarla en forma ascendente y luego regresar los valores ordenados a la matriz.

Nota: ahora que coloque las comas pueden observar qeu lo anterior a cada coma en un problema lo que nos lleva a implemntar el concepto de divide y venceras
/////////////EXPLICASION
tenemos una matriz de 4 *4 es esta hay 16 posciones cierto, de ahi deducimos que el vector debe ser de 16 posiciones ya teniendo implementado eso solo es oranizar enviar y recibir.

Inicio
pos,i,j,n,a,cambio=0
leer n
defina f(n,n)
tamv=n*n
dfina v(tamv)
i=1
mq i<=n haga
j=1
mq j<=n haga
//aqui lo boy a cargar
leer f(i,j)
j=j+1
///aqui lo puedo ir enviando al vector
pos=pos+1
v(pos)=f(i,j)
fin mq
i=i+1
fin mq

//////organizo el vector
i=1
mq i<=tamv haga
a=i+1
mq a<=tamv haga
   //lo que boy a comparar aqui es que si l aposicion posterior es mayor que la anterios hace un       
   //cambio de posiciones dejando de primero el valor menor y de segundo el valor mayor
 si v(i)>v(a) entonces
    cambio=v(i)
     v(i)=v(a)
    v(a)=cambio
    fin si
    a=a+1
fin mq
i=i+1
fin mq


///ahor alo paso del vecto a la matriz
pos=0,i=1
mq i<=n haga
j=1
mq j<=n haga
pos=pos+1
f(i,j)=v(pos)
j=j+1
fin mq
i=i+1
fin mq

////////ya estan los datos dentyro de la matriz (esta cargada ahora imprimamola)
i=1
mq i<=n haga
j=1
mq j<=n haga
imprima f(i,j)
j=j+1
fin mq
i=i+1
fin mq

FIN

algorimto de gauss-yordan by clipto

este es muy facil de hacer solo consiste en saber hacer el procedimiento.


lo puse en un pdf aqui esta el link de descarga
http://rapidshare.com/files/151322852/gaussbyclipto.pdf.html
la contraseña es: "colombia">>>sin las comillas

bueno me disen que tal! 

numeros primos y no primos

defina los numeros entre 1 y 100 colocando al frente primo o no primo

primero que todo are la explicasion sobre lo que es mod, yo no sabia que significaba ni como funcionaba asi que si alguien tiene el mismo problema lo explicare

consiste en hacer diviciones exactas donde el resultado es (1 u 0) asi:

4 |_2_ 5 |_2_
(0) 2 (1) 2

como pueden notar los primos se caracterizan porque su divicion es exacta donde el resultado es 0 y los no primos porque su resultado es 1 , la forma de hacer esta operacion en algoritmo es

a= 5 mod 2
despues de haber espesificado todo esto escribire el algoritmo

INICIO
n,i,k,j=0

n=1

mq n<=100 haga
k=0
i=2
mq i<=n/2 and k=0 haga
j=n mod i
si j=0 entonces
k=1
fin si
i=i+1
fin mq
si k=0 entonces
imprima n, "primo"
sino
imprima n, "no primo"
fin si
n=n+1
fin mq
FIN

encontrar X

pues este algoritmo consiste en encontrar el numero que se encuentre de esta forma a
un ejemplo 456, si nos basamos en la sigueinte forma a

645 X sigue siendo 5,

//////////////////////////////////////////////////////////////////////
OPCIONES PLANTEADAS

5,(6),7 // (6),5,7 // 7,5,(6) >>>>estas son las posibles organizaciones de los numero
7,(6),5 // (6),7,5 // 5,7,(6) para poder hallar X,

algoritmo: imprimir el valor de x (teniendo en cuenta que los numeros digitados son diferentes entre si)

INICIO

a,b,c =0

leer a,b,c

si (b>a) and (c>b) and (c>a) or (a>b) and (b>c) and (a>c) entonces

imprima "el valor de X es: ", b

sino

si (a>b) and (c>a) and (c>b) or (a>c) and (b>a) and (b>c) entonces
imprima "el valor de X es: ", a

sino
si ( a>b) and (cb) or (ac) and (b>a) entonces
imprima "el valor de X es: ", c
fin si
fin si
fin si


FIN

numero capicua

como ustedes saben los numeros capicuas son aquellos que se leen de igual manera de izquierda a derecha como de derecha a izquierda algunso ejmeplos son:

111 (por los dos lados es siempre 111)
101 (por los dos lados es siempre 101)
202
303
333
77
10001
11111
444444
555555555
11 (por los dos lados es siempre 11)

en fin espero hallan entendido la idea, bueno ahora aqui presentaremos un seudocodigo de este numero haremos el ejemplo como los numeros de tres sifras.

///////////////////////////////////////SEUDOCODIGO
INICIO

d=0
b=1
MQ (b<=9) haga
c=0
MQ(c<=9) haga
d= b* 100+c*10+b
imprima d, "es un numero capicua de tres sifras"
c=c+1
fin MQ
b=b+1
fin MQ

FIN
//////////////////////////////////////////////////////////////////////////////

ahora una brebe explicasion
MQ=(mientras que)

los numeros capicuas de tres sifras se hallan de la sigueinte forma
1*100 + 0 *10 +1 = 101
1*100 + 2 *10 + 1 =121
.
.
.
9*100 + 9 *10 +9=999


bueno creo que quedo claro...Xd y sino pueden reguntar y resolver sus dudas.

PD: mi profesor es fidel lopez y solo he visto como desarrollar los algoritmos por seudocodigo de la forma que acaban de ver, ahora si alguien quiere puede plantear el problema con diagrama de flujo 

factorial con sumas

pues consiste en un algoritmo q aga el factrial de un numero n, pero en ves de factroail use puras sumas. pues miren yo he usado dos siclos for y un contador

int numero = 1;
            int b,n;
            n = Convert.ToInt16(Console.ReadLine());
            for (int i=1;i<=n;i++)
            {

                b = 0;
                for (int a = 1; a <= i; a++)
                {
                    b += numero;
                }
                numero = b;
                
            }

            Console.WriteLine("\n"+ "aplicando el factorial sumando el resultado es: "+ numero);


bueno el codigo esta en C# pero supongo q es bastante entendible

Multiplicasion algebraica de matrices

en fin es sencilla despeus de analisar que es lo que debe hacer, lo poste en uns foros como reto peor nunca lo contestaron, bueno este lo probe fue en uns egundo esque me pase toda la noche haciendo varios ejercisios y tenia parcial en la mañanita ya se imagina lo cansao que estaba asi que ustedes veanlo y saquen sus propias conclusiones

aqui una imajen de como se debe multiplicar para lo que recien empiezan recuerden qeu la algebra lineal del 1er semestre nos ayuda mucho

si aun quedas con duda tienes dos opcuiones preguntarnos proque estamos dispuestos a responder tus dudad o investigar por ti mismo en libros o en internet como les sea mas facil. aqui les faciltiamos un link
http://es.wikipedia.org/wiki/Producto_de_matrices

///ahora si el ejercisio
esa hoja me la arrancaron del cuaderno pero creo que dise asi
leer una matriz de (n*m) una de (m*p) y multiplicarlas mostrando el resultado en una matriz de (n*p)

Inicio
mq (n<=1) and (m<=1) and (p<=1) haga
Leer n,m,p
fin mq

Defina a(n,m), b(m,p), c(n,p)

///cargar la 1era matriz
mq i<=n haga
j=1
mq  j<=m haga
leer a(i,j)
j=j+1
fin mq
i=i+1
fin mq

///cargar la segunda matriz
i=1

mq i<=m haga
j=1
mq j<=p haga
leer b(i,j)
j=j+1
fin mq
i=i+1
fin mq

///hacer la multiplciasion
i=1
mq i<=n haga
j=1
       mq j<=p haga
       mult=0, h=1
            mq h<=m haga
            a(i,h)*b(h,j)+ mult =mult
            h=h+1
            fin mq
      c(i,j)=mult
      j=j+1
      fin mq
i=i+1
fin mq


FIN


listo a provarlo muchachos(as) y me cuentan

sencillo operaciones entre matrices

bueno esto es uno de los ejemplos d eintroduccion con los que abarcamos el team el ejerciso plantea lo sigueinte:

///ejercisio
cargar dos matrices de N*N en una tercera la suma, y en una cuarta la multiplicasion, en una quinta la resta en una sexta la divicion imprima la matrices con su respectivo signo
//////////

en fin solo boy a colocar la operacion de la uma porque como saben las otras serian lo mismo solo seria cambairle el signo

Inicio
j,i,n=0
Leer n 
defina a(n,n), b(n,n), c(n,n) 

i=1
mq i<= n haga
j=1
mq j<=n haga
c(i,j)= a(i,j) + b(i,j)
imprima a(i,j) " + " b(i,j) " = " c(i,j)
 
j=j+1
fin mq
i=i+1
fin mq

Fin

matriz trampuesta

pues miren lo que boy hacer es cargar una matriz tranpuesta solo un pequeño ejemplo y se daran cuenta de como adaptarlo a cualquier situacio como leer una matriz e imprimir la tranpuesta etc



INICIO

n,m,z,i,j=0

leer n,m
defina f(n,m)
i=1
mq i<=n haga
j=1
mq j<=m haga
z=z+1
f(j,i)=z
j=j+1
fin mq
i=i+1
fin mq

FIN


Negrita

**********prueba a de escritorio
i j z
-------
1 1 1
2 2
3 3
------- 
2 1 4
2 5
3 6
-------
3 1 7
2 8
3 9


vista de la matriz tranpuesta


como ven los numeros son positivos aumentan de uno en uno pero su organizacion es tranpuesta...XD

matriz de M*N que genera segunda matriz


bueno pues el el titulo del mensaje no me supe explicar bien asi que aqui les coloco la informacion que necesitan, el ejercisio consiste en cargar una matriz de N*M con numeros, y en una segunda matriz colocar el mensaje primo o no primo segun sea el caso, y pues segun lo que yo entendi deberia ser algo as como se muestra en la imagen
ahora si empesemos con el codigo pero recuerden pruebenlo aber si funciona antes de que caigamos todos en el error, y si tienen dudas pregunten, aqui estamso encantados de responderles
INICIO

n,m,i,j,z,a,h,cont =0

leer n,m

defina f(n,m), defina A(n,m)


mq i<= n haga
j=1
mq j<=m haga
leer z
f(i,j)=z
j=j+1
fin mq
i=i+1
fin mq

///ahora ago el proceso de verificasion

mq i<=n haga
j=1
mq j<=m haga
z=f(i,j)
a=1, cont=0
h= z mod a

si h=0 entonces
cont=cont +1
fin si
a=a+1
fin mq

si cont<=2 haga
A(i,j)="primo"
sino
A(i,j)= "no primo"
fin si
j=j+1

fin mq
i=i+1
fin mq

FIN

triangular superior de una matriz


el ejercisio es el siguiente:

en una matriz de N*N en la triangular superior colocar los numeros positivos en el resto colocar ceros

NOTA: ten go una gripa mas peye asi que solo colocare el algorimto, si tiene dudas pidan explicasion y si creen que esta malo argumenten y den solucion es mejor que me corrijan antes del parcial  ;D

INICIO

i,j=1
z,h,k=0

Leer n
defina A(n,n)

mq i<= n haga
j=1, h=1

mq j<=n haga
si h<=k entonces
mq h<=k  haga
A(i,j)=0
h=h+1, j=j+1
fin mq
sino
z=z+1
A(i,j)=z
j=j+1
fin si

fin mq
i=i+1
k=k+1
fin mq
imprima "algoritmo creado by clipto"

FIN


***************prueba de escritorio


I j h k z n
********************************
1 1 1 0 0 4
                                   1
2 2
3 3
4 4
----------------------------------------------
2 1 1 1 4 4
2 (2 falla 1) 5
3 6
4 7
---------------------------------------------   
3 1 1 2 7 4
2 2 2
3        (3 falla  2) 8
4 9
--------------------------------------------- 
4 1 1 3 9 4
2 2 3
3 3 3
4 (3 falla 4) 10
*********************************


lo siguiente es una iamgen de la triangular superior espero que se peuda apreciar bien

100 numeros

el algoritmo consiste en leer 100 numeros y decir cual es el mayor, hasta el moemnto solo lo he echo mentalmente primera ves que lo boy a escribir pero si tengo un error no duden en corregirme

Explicasio: si tubieramos tres numeros a b c deberiamso validar cual de estos es el mayor, y si es algo tedisos validad tres numeros imaginense validar 100 o un numero n que no conosen, mi punto consisitio enque deberia haber una forma de no validar tanto porque hacer validacioens de 100numeros me tardaria mucho y serian demasiadas hojas y no seria la forma ya que mi profesor siempre nos dise que pasemos al tablero hacer el algoritmo y el tablero seria muy poco espacio.....espero hallan entendido mi idea

entonces lo que hise fue leer un numero inicialmente y validarlo con todos los que lea, todos estos dentro de un siclo asi
************************************************************
INICIO

mayor=0
n=1
mq n<=100 haga
leer numero

si (numero>mayor) entonces
mayor=numero
fin si
n=n+1
fin mq

imprima "el numero mayor es: ", mayor

FIN
*********************************************************

PRUEBA DE ESCRITORIO
******************
|mayor numero n|
|*******************
|0 5 1|
|5 4 2|
|5 0 3|
|5 -5 4|
|5 8 5|
|8 25 6| 
|25 2 7|
|25 . .|
******************


como ven si el numero que se lee es mayor a mi numero almacenado (mayor) este toma el valor del numero mayor, espero les halla gustado y sobre todo que si funcione jeje...Xd

fibonacci

la serie de fibonacci esta dada por: (0,1,1,2,3,5,8,13,21.......N)

como pueden ver: 0+1=1, 1+1=2, 2+1=3, 2+3=5, 3+5=8, 5+8=13 y asi sucesivamente

alo que se quiere llegar esq el fibonacci se obtien de suma del numero anterior con el numero actual

////////////////////

INICIO

Nante=-1, Nactual=1
z=1

MQ z<=10 haga
c=Nante+Nactual
Nante=Nactual
Nactual=c
imprima c

z=z+1

fin MQ


FIN