Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programación. Mostrar todas las entradas

sábado, 24 de marzo de 2007

¿ Microsoft liberando bajo licencia Open Source ?



Comienzan a circular rumores de que el gigante del software está planteándose liberar el gestor de bases de datos FoxPro bajo licencia Open Source.

Porciones del núcleo del gestor de bases de datos FoxPro serán publicadas en abierto en la comunidad de desarrolladores CodePlex.

Daryl Taft, responsable del equipo de desarrollo de FoxPro ha confirmado la noticia a eWEEK, aunque según parece aún no han decidido el tipo de licencia que emplearán.

"Creemos que trabajando con la comunidad nos permitirá continuar mejorando la tecnología de FoxPro y ayudaremos a los desarrolladores que actualmente tienen proyectos bajo FoxPro".

Fuente: eWeek

viernes, 23 de marzo de 2007

Microsoft y de Google se unen para el desarrollo de OpenAjax


Microsoft y Google se han unido a OpenAjax Alliance, sumando así la calidad de 72 organizaciones, con 32 compañías dedicadas a desarrollar y a ampliar la técnica de programación de openajax.

“Microsoft se está aliando con el OpenAjax para colaborar con otros líderes de industria para ayudar al desarrollo del Ajax ” dijo a Keith Smith, encargado de producto del grupo en Microsoft.

La realidad de que OpenAjax proporciona ventajas a la comunidad por su integración dentro del uso de la web, es uno de los motivos principales para unirse a este proyecto. Otra de las ventajas incluyen mayor certeza sobre opciones y confiabilidad del producto, costes más bajos de formación y desarrollo, y una entrega más rápida de las innovaciones del Web 2.0.

“Después de solo 10 meses esta organización ha alcanzado unos niveles significativos en definir los estándares de su integración a la industria,” dijo David Boloker, presidente del comité de dirección de OpenAjax.

“El grupo también ha establecido un sistema para investigar las áreas posibles referente a la seguridad, la integración del IDE, la integración del servidor y las comunicaciones con el cliente.

“Nuestra meta con todas estas actividades es aumentar la adopción del ajax y proporcionar un software fiable en frentes técnicos y de comercialización. ”

viernes, 9 de marzo de 2007

Análisis de código fuente: Cscope y SilentBob


Linux.com publica hoy un minitutorial sobre dos herramientas de código libre que permiten analizar código fuente.

Cscope es un clásico, que puede utilizarse con Emacs o Vim. Bajo KDE está disponible KScope, un front-end que facilita su uso. También puede utilizarse en Windows NT y 2000 mediante Cygwin. Su territorio natural es C. Por su parte SilentBob soporta C, C++, Python y Perl.

martes, 6 de marzo de 2007

Suma de dos numero en Fox en una ventana

aki les dejo este codigo es igual al posteado hace unos dias con la diferencia d que ahora los resutados salen en una ventana tipo form

* PROGRAMA DE PRUEBA POR MOYO
SET TALK OFF
CLEAR
* DECLARACION DE VARIABLE
STORE 0 TO NUM1, NUM2, TOTAL
*VENTANA PARA WINDOW
DEFINE WINDOW ENTRADA FROM 2,1 TO 15,80 TITLE 'PROGRAMA PARA SUMAR' ;
CLOSE FLOAT GROW SHADOW ZOOM
ACTIVATE WINDOW ENTRADA
* ENTRDA DE DATO
@ 2,2 SAY "ESCRIBA UN NUMERO:" GET NUM1
READ
* BUCLE
DO WHILE NUM1<=0 THEN
=MESSAGEBOX ("NO SE ACEPTAN NUMEROS MENORES QUE CERO")
@ 2,2 SAY "ESCRIBA UN NUMERO:" GET NUM1
READ
ENDDO
* ENTRADA DEL SEGUNDO DATO
@ 4,3 SAY "ESCRIBA OTRO NUMERO:" GET NUM2
READ
*BUCLE
DO WHILE NUM2<=0 THEN
=MESSAGEBOX ("NO SE ACEPTAN NUMEROS MENORES QUE CERO")
@ 4,3 SAY "ESCRIBA OTRO NUMERO:" GET NUM2
READ
ENDDO
* SUMATORIA
TOTAL = NUM1 + NUM2
* RESPUESTA
CLEAR
@ 2,3 SAY "LA RESPUESTA ES:" +STR(TOTAL)

domingo, 25 de febrero de 2007

Suma de dos numero en Fox pro 6.0

*Programa hecho por Moyo
*es la simple suma d dos numeros, para q aprendan el uso de la
*entradas y salidas d datos como lo es GET, SAY, READ, y el comando
*Store q sirve para asignar un solo valor a las demas variables

*PROGRAMA PRUEBA
SET TALK OFF
CLEAR
*DECLRACION DE VARIABLE
Store 0 to num1, num2, total
@ 2,2 say 'escriba el primer numero' get num1
read
@ 2,2 say 'escriba el segundo numero' get num2
read
total = num1 + num2
clear
@ 2,3 say 'la respuesta es:' +str (total)

sábado, 24 de febrero de 2007

Jugando con Colores delphi

Bueno aqui les dejo un ultimo programalla q he hecho en delphi, una tarea d mi profesor.

se trata d elejir un colo de un radiogroup y que le pongamos un checke en el checkbox donde queramos q aparesca el color en un panal llamados BOXA yBOXB.

aqui les dejo el codigo.

unit assignment1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
RadioGroup1: TRadioGroup;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
ColorToPrint : Tcolor;

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject); {boton para hacer blancos ls paneles}
begin
panel1.color := clwhite;
panel2.color := clwhite;
end;


procedure TForm1.Button1Click(Sender: TObject); {boton para aplicar el color en los paneles}
begin
if checkbox1.Checked then
panel1.color := ColorToPrint;

if checkbox2.Checked then
panel2.color := ColorToPrint;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject); {radiogroup donde asigno los colores}
begin
Case RadioGroup1.ItemIndex of
0 : ColorToPrint := Tcolor($0000A5FF);
1 : ColorToPrint := clYellow;
2 : ColorToPrint := clBlue;
3 : ColorToPrint := clGreen;
4 : ColorToPrint := clRed;
end;

checkbox1.enabled := true;
checkbox2.enabled := true;
end;

procedure TForm1.FormCreate(Sender: TObject); {eventos del form}
begin
panel1.color := clwhite;
panel2.color := clwhite;
checkbox1.enabled := false;
checkbox2.enabled := false;
end;

end.


espero entiendan.

salu2

miércoles, 21 de febrero de 2007

Encriptar cadenas en C#

Saludos internautas!
Ya tenía algún tiempo sin publicarme en este blog, pero de eso se habían encargado mi compadre MoYo y mi brother Kurt.
En esta ocasión les traigo una transcripción de un texto que puede servir de gran apoyo para aquellos que siguieron la entrada de Encriptación simple en VB. El texto, que MoYo fue quien me envió el enlace, lo saqué del sitio www.devjoker.com y su autor es Pedro Herrarte Sánchez.
Espero y les sirva a los recién iniciados en C#, un lenguaje bastante sencillo y poderoso. Si no... pregúntenle a mig16. :-P
Bueno... aquí tienen la transcripción:

Una clase sencilla para encriptar cadenas en C#


Uno de los problemas clásicos con los que nos enfrentamos los programadores es el de encriptar los datos. La cantidad de situaciones en las que necesitamos encriptar los datos es incontable.

Normalmente los datos se almacenan en una base de datos, y esta suele ser segura, pero las claves de conexión se encuentran en archivos de texto planos, XML ... Incluso hay muchas bases de datos en las que la información de las claves con las que los usuarios se conectan a los sistemas corporativos estan sin encriptar, con lo que además podemos llegar a comprometer la seguridad de todo nuestro sistema.

Existen complejos algoritmos que permiten la encriptación de datos y que garantizan matemáticamente que nadie los puede desencriptar, como es el caso de MD5, utilizado para emitir certificados de seguridad en sistemas SSL. Tambien existen componentes de software que realizan el trabajo de encriptación por nosotros.

Estas soluciones tienen su parte negativa, por un lado los algoritmos seguros no se pueden desencriptar, por lo que no siempre son utiles. Por otro lado los componentes de software desarrollados por compañias pueden llegar a ser muy caros y además es necesario instalarlos en el los servidores, cosa que no siempre es posible.

La solución son los sistemas de clave pública-privada. Son sistemas en los que la encriptación se basa en un par de claves, con una clave se encriptan los datos y sólo se pueden desencriptar si se conoce la otra.

Nuestra clase esta basada en esta idea. Vamos a desarrollar una clase que escripta cadena basandose en un patrones. La clase está escrita en VB.NET, pero al utilizar unicamente tipos comunes podemos exportarla facimente a cualquier otro lenguaje.

Lo primero que vamos a hacer es crear la clase a la que vamos a llamar Encriptador.

Public Class Encriptador

End Class


La idea de esta clase es definir dos patrones, cada uno con todos los caracteres del idioma, de la A-Z en mayúscula y minuscula, los numeros ... y cada uno en un orden diferente y aleatorio. Después aplicaremos un sencillo algoritmo que nos haga correcponder cada elemento de un patrón con otro.

Lo primero que necesitamos definir los patrones,para ello tecleamos el abecedario y los números en una cadena de texto como esta:

ABCDEFGHIJKLMNÑROPQRSTVWXYZabcdefghijklmnñropqrstvwxyz1234567890

Y ahora la desordenamos hasta que quede ilegible. Asignamos estas cadenas a nuestras cadena de patrón. Definimos las cadenas a nivel de instancia.

Tambien declaramos dos métodos, uno para encriptar la cadena y otro para encriptar una única letra, que además recibe otros dos parámetros, uno denominado variable, que representa la longitud de la cadena a encriptar y otro a_indice, que representa el índice del caracter dentro de la cadena. Con ellas construiremos un sencillo algoritmo, que evitará que alguien pueda establecer una relación del tipo de "la a es la j encriptada" y que hará que cada letra se encripte de modo diferente dependiendo de la longitud de la cadena y de donde esté situada dentro de ella.

Public Class Encriptador

Private patron_busqueda As String = "0ABIZ2ÑebDNOEcwGl6oSñixq1..."
Private
Patron_encripta As String = "vQÑO8dk1VgIPZxAR3UsLD6XBz..."
'Los patrones están aquí sin terminar por falta de espacio.


Public Function EncriptarCadena (ByVal cadena As String) As String

End Function

Private Function
EncriptarCaracter (ByVal caracter As String, ByVal variable As Integer, _
ByVal
a_indice As Integer) As String

End Function

End Class


Ahora escribimos el código para EncriptarCadena, que sencillamente recorre la cadena letra a letra invocando al método de encriptar caracter, pasandole como parémetros el caracter, la longitud de la cadena y el índice de la iteración. El código es muy sencillo.

Public Function EncriptarCadena (ByVal cadena As String) As String

Dim
idx As Integer
Dim
result As String
For
idx = 0 To cadena.Length - 1
result += EncriptarCaracter(cadena.Substring(idx, 1), cadena.Length, idx)

Next
Return
result

End Function


Ahora tenemos que escribir el método EncriptarCaracter, como hemos visto al declarar el método, recibe tres parámetros, el caracter que queremos encriptar, un entero variable (que será la longitud de la cadena a encriptar) y el indice que ocupa el caracter a encriptar dentro de la cadena que queremos encriptar. Esto nos va a permitir escribir un sencillo algoritmo para devolver el índice que le va a corresponder a nuestro caracter dentro del patron encriptado.

Private Function EncriptarCaracter (ByVal caracter As String, ByVal variable As Integer, _
ByVal
a_indice As Integer) As String
Dim
caracterEncriptado As String, indice As Integer

If patron_busqueda.IndexOf(caracter) <> -1 Then
indice = (patron_busqueda.IndexOf(caracter) + variable + a_indice)
Mod patron_busqueda.Length
Return Patron_encripta.Substring(indice, 1)
End If

Return caracter

End Function


La función busca el índice de mi caracter en la cadena denominada patron_busqueda, si lo encontramos (recordar que tenemos todas las letras y números), lo encriptamos, si no lo encontramos devolvemos el mismo caracter que hemos recibido como parámetro.

La encriptación en muy sencilla, ¡pero muy efectiva!, encontramos el lugar que ocupa dentro del patron de busqueda el caracter, le sumamos la longitud de la cadena y le sumamos por último el lugar que ocupa el caracter que estamos encriptando dentro de ella. Obtenemos el caracter correspondiente al índice calculado dentro del patron_encriptado. De este modo conseguimos que el mismo caracter se encripte de forma diferente en cada cadena, y que una pequeña modificación en la cadena cambie totalmente la encriptación.

Este algoritmo plantea un problema, ¿que ocurre cuando la suma de estos tres parámetro es superior a la longitud de los patrones?. Estariamos intentando estraer un elemento que supera los límites de las cadenas patrón. Para solucionar este problema trabajamos con módulos matemáticos. La operación módulo devuelve el resto de la división entera entre dos números. De este modo cuando nuestro índice supera los limites de la cadena, volvemos a la posición inicial.

Ejemplos con operaciones de modulos

15 Mod 20 ==> devuelve 15;

20
Mod 20 ==> devuelve 0

21
Mod 20 ==> devuelve 1

45
Mod 20 ==> devuelve 5


Ya tenemos nuestra clase que encripta cadenas, vamos a escribir una pequeña aplicación de consola que pruebe nuestra clase.

Module Encriptador_Test

Sub Main()

Dim cadena As String
Dim
enc As Encriptador
enc =
New Encriptador()
Do
Console.WriteLine("Introducca la cadena que quiera encriptar:")
cadena = Console.ReadLine()
Console.WriteLine( " ==> " + enc.EncriptarCadena(cadena))
Loop While cadena <> ""

End Sub

End Module


Vamos a ejecutar nuestro programa, y probamos a encriptar varias cadenas.

C:\VB.net\Encriptar\Encriptar\bin>encriptar.exe

Introducca la cadena que quiera encriptar:
Hola mundo! ==> 9QPz hpKIZ!

Introducca la cadena que quiera encriptar:
www.Devjoker.com ==> feo.Frfxy¥hb.jii

Introducca la cadena que quiera encriptar:
La misma letra varia aaaaaaaa! ==> YB WMb¤I JC¥yH Q¥CgP v7Ky8qj4!


Ahora necesitamos escribir lo métodos para desencriptar. Las declaraciones son parecidas.

Public Function DesEncriptarCadena(ByVal cadena As String) As String

End Function

Private Function
DesEncriptarCaracter(ByVal caracter As String, ByVal variable As Integer, _
ByVal
a_indice As Integer) As String

End Function


La implementación de los métodos tambien es sencilla, si bien el método de desencriptar caracter es algo más complicado, debido a la posibilidad de encontrar índices negativos. Aún así resultan faciles de comprender.

Public Function DesEncriptarCadena(ByVal cadena As String) As String

Dim
idx As Integer
Dim
result As String

For
idx = 0 To cadena.Length - 1
result+=DesEncriptarCaracter(cadena.Substring(idx, 1),cadena.Length,idx)

Next
return
result
End Function


Private Function
DesEncriptarCaracter(ByVal caracter As String, _
ByVal
variable As Integer, _
ByVal
a_indice As Integer) As String

Dim
indice As Integer

If Patron_encripta.IndexOf(caracter) <> -1 Then
If (Patron_encripta.IndexOf(caracter) - variable - a_indice) > 0 Then
indice = (Patron_encripta.IndexOf(caracter) - variable - a_indice)
Mod Patron_encripta.Length
Else
'La línea está cortada por falta de espacio
indice = (patron_busqueda.Length) + ((Patron_encripta.IndexOf(caracter)
- variable - a_indice)
Mod Patron_encripta.Length)
End If
indice = indice
Mod Patron_encripta.Length
Return patron_busqueda.Substring(indice, 1)
Else
Return
caracter
End If

End Function


Con esto ya tenemos escrito todo el código necesario. Como vereis no se trata de un sistema excesivamente seguro, pero para poder desencriptar nuestras cadenas es necesario conocer dos patrones de 64 caracteres, que además han sido generadas de forma aleatoria. Además este código es facilmente portable a cualquier plataforma, dado que se basa completamente en tipos sencillos, cadenas de caracteres, por lo que reescribir el codigo para una clase Java es muy facil.

El código necesario para que nuestra aplicación de consola desencripte es trivial, por lo que no lo comentaremos.

Bueno, espero que os haya parecido interesante el articulo, saludos y hasta la proxima.


Fuente: www.devjoker.com

No se olviden de visitar nuestro sitio!! Que ya fue lanzado en su primera versión BETA. www.shadowsecurity.8888mb.com (en un servidor temporal).

Saludos!

sábado, 16 de diciembre de 2006

Creación de un keygenerator en Visual Basic .Net

Después de algunos días de ausencia en los que el blog se sintió bastante olvidado (pero no lo estaba)... volvemos a compartir más datos con todos los internáutas que nos visitan.

Para aquellos interesados en crear sus propios generadores de claves o llaves (keygen) para cualquier programa de su preferencia, en esta entrada les muestro un ejemplo de un keygen programado en VB .Net por su servidor para el programa My Drivers v3.11.

Un keygen no es un programa que cuenta con una lista larga de seriales o claves válidas para un programa, sino que en su estructura cuenta con el algoritmo descifrado de las claves utilizadas por la aplicación.
La complejidad de los algoritmos varía de aplicación en aplicación. Se pueden utilizar conversiones de sistemas numéricos, sustitución de caracteres, codificaciones en base 64, sólo por citar algunas.

En esta ocasión, les mostraré un ejemplo de un algoritmo bastante simple utilizado por el programa de rippeado y respaldo de controladores, My Drivers en su versión 3.11.

Primero que nada, para poder hacer un keygen necesitan descifrar el algoritmo del programa.
Mi recomendación es que utilizen varios seriales válidos para la misma versión del programa, y utilizen su ingenio para descifrar el algoritmo... les recuerdo, hay algoritmos de alta complejidad, por lo que no se frustren si no consiguen descubrirlo a la primera.

El algoritmo de My Drivers serial no es nada más que convertir los caracteres del nombre de usuario utilizado a su valor ASCII y luego a hexadecimal.

Al principio del serial se ponen unos caracteres que no cambian (WDW2222), seguido del número de caracteres con que cuenta el nombre del usuario, y le sumas 22.
Por ejemplo:
KobraSoft = 9 caracteres + 22 = 31
Después añades un guión medio (-) y luego empiezas con la conversión del nombre a hexadecimal.

Caracter - ASCII - HEX
---K--- ---75--- ---4B---
---o--- ---111--- ---6F---
---b--- ---98--- ---62---
---r--- ---114--- ---72---
---a--- ---97--- ---61---
---S--- ---83--- ---53---
---o--- ---111--- ---6F---
---f--- ---102--- ---66---
---t--- ---116--- ---74---

Unimos todo eso, y nos queda un serial:
Nombre de usuario:KobraSoft
Serial: WDW222231-4B6F627261536F6674

Si fuera "Shadow Security" el serial sería así:
WDW222237-536861646F77205365637572697479

Una vez descifrado, hay que implementarlo en código.
Aquí les pongo el código de ejemplo en VB.Net:

'Creamos la variable que medirá la longitud de caracteres
'de los nombres de usuario

Dim L As Integer = 0
L = Len(txtname.Text.Trim)

'Verificamos que el nombre de usuario tenga más de 2
'caracteres
puesto que el programa no acepta uno
'tan pequeño


If L <= 2 Then
txtserial.Text = "Use un nombre más largo"
txtname.Focus()

'Pasada la verificación de longitud, vamos a convertir
'la cadena
a su valor ASCII y luego a Hexadecimal

Else
Try

'Variable que contendrá la clave convertida
Dim ser As String = ""
'Variable que nos servirá como numerador posicional
Dim x As Integer = 1
'Variable utilizada para convertir cada caracter
Dim characteres(L) As String

'Iniciamos un ciclo FOR que recorrerá cada caracter
'para la conversión

For x = 1 To L

'Se toma la posición del caracter
characteres(x) = Mid(txtname.Text.Trim, x, 1)
'Convertimos en ASCII y luego en HEX
characteres(x) = (Hex(Asc(characteres(x))))
'Concatenamos los valores
ser = ser & characteres(x)

Next x
Catch

'Sólo en caso de que se ingrese un caracter no válido
'en el nombre,
nos prevenimos con un mensaje de error
'(opcional)


MessageBox.Show("Insertó un caracter no válido. Favor de intentar de nuevo", _
"Error de código", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

End Try

'Creamos la estructura del serial
txtserial.Text = "WDW2222" & (22 + L) & "-" & ser

End If

Con este ejemplo, pueden imaginarse lo sencillo que puede ser crear un generador de claves, lo complicado sería el descifrado del algoritmo... pero eso queda en la cabeza de cada uno de ustedes.


"Lo que una mente crea... otra la destruye."

KobraSoft® 2006

lunes, 27 de noviembre de 2006

Quick sort en pascal

Aqui les dejo el codigo de el quick sort para pascal, este codigo yo lo hice

PROGRAM quicksortin;

{ MoYo }

USES CRT;

CONST

elementsinuse = 10; { number of elements in the array }

TYPE

thearraytype = array [1..elementsinuse] OF INTEGER; { the array type }

VAR

thearray : thearraytype; { the array declared }
first, last : integer; { the lower and upper value}
temp : integer;

{**********************************************************}

PROCEDURE swap (VAR x, y : integer); { procedure to switch the numbers }

VAR

temp : integer;

BEGIN

temp := x;
x := y;
y := temp;

END;

{**********************************************************}

{ the procedure to get the data or the quick sort }

PROCEDURE qsort(VAR thearray : thearraytype; first : integer;
last : integer);

VAR

right, left : integer;
midpoint : integer;

BEGIN { qsort }

midpoint := thearray[(first + last) div 2]; { get the midpoint }
right := first; { set left to lower }
left := last; { set right to upper }

REPEAT { begin repeat }

WHILE (thearray[right] <>
right := right + 1; { add to 1 to left }

WHILE (thearray[left] > midpoint) DO { is thearray[right] > midpoint}
left := left - 1; {set right minus 1 }

IF (right <= left) THEN { is left <>
BEGIN
swap (thearray[right], thearray[left]);
right := right + 1; {set left + 1 }
left := left - 1; {set right - 1}
END;

UNTIL right > left; { end repeat }

IF (first <>
qsort (thearray, first, left);
IF (right <>
qsort(thearray, right, last);

END;

{ procedure for the quick sort }

PROCEDURE quicksort(thearray : thearraytype ; elementsinuse : integer);

VAR

first : integer;

BEGIN

first := 1;
last := elementsinuse;

IF first <>

qsort(thearray, first, last) { the quick sort process, call the qsort procedure }

END;

BEGIN { main }

thearray[1] := 4;
thearray[2] := 15;
thearray[3] := 54;
thearray[4] := 64;
thearray[5] := 84;
thearray[6] := 5;
thearray[7] := 24;
thearray[8] := 1;
thearray[9] := 8;
thearray[10] := 9;

quicksort(thearray, elementsinuse)

END. {main }

jueves, 23 de noviembre de 2006

Bubble sort en pascal

bueno aqui les dejo el codigo de el bubble sort en pascal, yo lo hice.

BUBBLE SORT CODE

PROGRAM bubblesorting;

{ MoYo }

USES CRT;

CONST

elementsinuse = 10;

TYPE

thearraytype = array [1..10] OF INTEGER;

VAR

currentindex, currentpass : integer;
tempvalue : integer;
thearray : thearraytype;

PROCEDURE bubble (thearray : thearraytype; elementsinuse : integer);

BEGIN

IF elementsinuse > 1 THEN
FOR currentpass := 1 to elementsinuse - 1 DO
FOR currentindex := 1 to elementsinuse - 1 DO
IF (thearray[currentindex + 1 ] <>

martes, 21 de noviembre de 2006

Tutoriales de muchos programas

bueno aqui les dejo un link de una pagina donde les enseñaran mucho codigos con ejemplos de como usarlos en diferentes lenguajes, esta muy buena la pagina y tiene los mejores programas como JAVA, C, C++,VBNET, PHYTON,PHP entre otros.

Ver pagina

Tutorial de phyton

aki les dejo un buen tutorial para los interesados en apreder phyton.

Ver Tutorial

Codigo para encontrar primer dia del año en pascal

Bueno ya q me dejaron hacer un calendario en pascal y para ubicar el primer dia del año tuve q usar la conguencia d zeller , pero ya q la congruencia d zeller solo encuentra los dias desde los 1753 en adelante por una modificacion q hubo en el calendario tube que usar otro metodo para encotrar el dia . rango año 1400 en adelante.

aqui dejo la formula para la congruencia d zellers

Z:= (700 + ((26*MES) -2) DIV 10 + DIA + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;

usaremos esta parte para encontrar si el año es bisiesto o no lo es

((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0)

aqui les dejo el codigo

PROGRAM ZELLER;

{ MoYo }

USES CRT;

VAR


Y, Z, A, B, C, M : INTEGER ;


{ N, J, O, P, R, Q, S : INTEGER; }

BEGIN

CLRSCR;


REPEAT

WRITE ('THE YEAR (1400 .. 2600):'); READLN (Y);
WRITELN;


UNTIL (Y > 1400) AND (Y <>=3) THEN

A:= 1-2;
B:= Y MOD 100;
C:= Y DIV 100;

Z:= (700 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;

{ this part is the same of gettin the data for Z

N:= 26*A;
J:= B DIV 4;
O:= C DIV 4;
P:= 2*C;
R:= N-2;
Q:= R DIV 10;
S:= 700+Q+D+B+D+J+O-P;
Z:= S MOD 7; }


IF Y = 1400 THEN

BEGIN

Z := 5;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;

END;
{*****************************************************************}

IF (Y >= 1401) AND (Y <= 1500) THEN BEGIN Z := (702 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7; IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN


Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;


END;

END;



{******************************************************************}

IF (Y >= 1501) AND (Y <= 1700) THEN BEGIN Z := (703 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7; IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN


Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;


END;

END;

{*********************************************************}


IF (Y >= 1701) AND (Y <= 1751) THEN BEGIN Z := (704 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7; IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN


Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

Z := Z-1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;



END;

END;

{********************************************************}

IF Y = 1748 THEN
BEGIN

Z:= 6 ;


CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;

END;


{********************************************************}

IF Y = 1752 THEN
BEGIN

Z:= 4 ;


CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;

END;

{*************************************************************}

IF (Y >= 1753) AND (Y <= 2600) THEN BEGIN { BEGIN LEAPYEAR } IF ((Y MOD 4) = 0) AND ((Y MOD 100) <> 0) OR ((Y MOD 400) = 0) THEN

{ IF ((Y MOD 4) = 0)
THEN
WRITELN ('THE YEAR IS A LEAP YEAR')
ELSE
BEGIN
IF ((Y MOD 100) <> 0)
THEN
WRITELN ('THE YEAR IS NOT A LEAP YEAR');
END; }

{ END LEAPYEAR }

{ PRINT DAYS }

Z:= Z - 1;

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

ELSE

CASE Z OF

2 : WRITE ('MONDAY');
3 : WRITE ('TUESDAY');
4 : WRITE ('WEDNESDAY');
5 : WRITE ('THURSDAY');
6 : WRITE ('FRIDAY');
0 : WRITE ('SATURDAY');
1 : WRITE ('SUNDAY');

END;


{ END PRINT DAYS }


WRITELN;

END;

END;

END;

READKEY

END.

hay otras formas mas faciles d encontrar el dia pero yo lo hice d esta forma y salio largo el proceso.

Sorting en pascal

bueno ense;are aki un metodo d sorting en pascal, (metodo de ordenamiento) espero les sea d mucha ayuda.

SELECTING SORTING

PROGRAM pruebasorting; { nombre del programa}

{ made by MoYo }
USES CRT;

CONST { usaremos la constante numberofelementsinuse = el numero de elementos en el array
que son 10}

numberofelementsinuse = 10;

TYPE { declaramos el array con los 10 elementos }

thearraytype = array [1..10] of byte;

VAR {declaramos las variables q usaremos }

currentindex, leftmostindex, locationoflowestvalue : integer; {currentindex = numeroenuso , lefmosindex = numero menos, locationflowestvalue = localizacion de el numero menor}
lowestvalue : integer; {numero mas bajo}
thearray : thearraytype; {el array}

{iniciamos una procedure}
PROCEDURE sorting (VAR thearray : thearraytype;
numberofelementsinuse : integer);

VAR {declaramos las variables q seran usadas en la procedure}

currentindex, leftmostindex, locationoflowestvalue : integer;
lowestvalue : integer;


BEGIN


IF (numberofelementsinuse >= 2) THEN
BEGIN
leftmostindex := 1;

REPEAT
lowestvalue := thearray[leftmostindex];
locationoflowestvalue := leftmostindex;

FOR currentindex := leftmostindex + 1 TO numberofelementsinuse DO

IF (thearray[currentindex] < style="color: rgb(51, 51, 255);"> BEGIN
lowestvalue := thearray[currentindex];
locationoflowestvalue := currentindex;
END;

thearray[locationoflowestvalue] := thearray[leftmostindex];
thearray[leftmostindex] := lowestvalue;
INC (leftmostindex);

UNTIL (leftmostindex = numberofelementsinuse);

END;

END;


BEGIN

thearray[1] := 1;
thearray[2] := 7;
thearray[3] := 8;
thearray[4] := 6;
thearray[5] := 10;
thearray[6] := 15;
thearray[7] := 45;
thearray[8] := 23;
thearray[9] := 2;
thearray[10] := 14;

sorting(thearray, numberofelementsinuse) ;

END.

lunes, 20 de noviembre de 2006

Funcionamiento de los compiladores

Hola a todos!!!! Bueno viendo que mis compañeros han empezado con programación ya, yo voy a hacer un pequeño articulo sobre el funcionamiento de los compiladores. Este es mi primer texto, así que no seáis demasiado crueles con las críticas.

Vamos a empezar definiendo lo que es un compilador. Según google es:
Programa que traduce instrucciones escritas en un lenguaje de alto nivel, a un lenguaje de máquina.
El lenguaje máquina está compuesto por 1 y 0, y para nosotros es ininteligible.
Vamos a ir por partes. Un lenguaje de bajo nivel es por ejemplo ensamblador, es un lenguaje que esta próximo a la maquina. Los lenguajes de alto nivel son aquellos que se parecen mas a nuestro idioma, para que nos resulte más fácil programar en ellos, como c++, Basic, pascal, html, php…
Pero el problema es que la maquina no entiende este lenguaje, por lo que necesitamos "algo" que nos traduzca este código que nosotros hemos escrito a un lenguaje que entienda el ordenador. Aquí es donde entra en juego el compilador, que actúa como traductor. De esta manera es posible que la máquina entienda el código que hemos escrito.
Pero el código fuente (código que nosotros hemos escrito) antes de llegar al compilador tiene que pasar por el preprocesador, que es el encargado de incluir los archivos necesarios para que eso funcione (por ejemplo las librerías .h en c y c++). Luego pasa por el compilador, que lo transforma en lenguaje ensamblador. Y finalmente llega al linkador, que crea un ejecutable con el código.


Weno espero no haberos aburrido demasiado con este texto (aunque está muy resumido), y haberos enseñado algo mejor como funciona la programación. Para cualquier corrección y/o ampliación, escribir un correo a drayfe@forohack.com


Un saludo!!!

Uso de Sockets y Threads en aplicaciones Cliente-Servidor en Java

Aquí les traigo un código de una sencilla aplicación cliente-servidor hecho en Java.

La aplicación maneja la comunicación por sockets y usa multihilos (threads) igual de forma remota. Aunque el programa en sí no tiene un uso muy práctico en la realidad, les puede dar una base de lo que es la comunicación por sockets y el uso de los threads.

La aplicación consta del programa cliente y el programa servidor. El servidor recibe las ordenes del cliente para ejecutar movimientos de 2 figuras en 4 direcciones
Se necesita depurar el servidor primero para que funcione, y el cliente tiene que compilarse y luego depurar el applet.

Éste es el código del servidor:

import java.io.*;
import java.applet.Applet;
import java.awt.*;
import java.net.*;
public class Servidor extends Frame
{
int x=180,y=300,i;
int m=180,n=360,s;
boolean flag=false;
Button b1,b2,b3,b4,b5,b6,b7,b8;
TextArea area;
ServerSocket serverSocket=null;
Socket clientSocket=null;
PrintWriter out;
BufferedReader in;
String entrada;
Receive R;
public Servidor()
{
super("Servidor para uso de Sockets y Threads");
setLayout(new FlowLayout());
add(area=new TextArea(15,35));
resize(400,450);
show();
repaint();
connect();
R=new Receive();
R.start();
}
public void connect()
{
showText("Estado: Conectando...");
try
{
serverSocket = new ServerSocket(80);
clientSocket = serverSocket.accept();
out = new PrintWriter(clientSocket.getOutputStream(),true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}
catch(Exception e)
{
if (flag=false)
{
showError(e.toString());showError(e.toString());
}
flag=true;
}
showText("Estado: Conectado");
}
public void disconnect()
{
showText("Estado: Desconectando...");
try
{
out.close();
in.close();
clientSocket.close();
serverSocket.close();
flag=false;
}
catch(Exception e)
{
if (flag=false)
{
showError(e.toString());
}
flag=true;
}
showText("Estado: Desconectado");
}
public void showError(String S)
{
area.appendText("Estado: Desconectado..."+"\n"+"Vuelva a cargar el cliente y el servidor..."+"\n");
}
public void showText(String S)
{
area.appendText(S+"\n");
}
public class Receive extends Thread
{
public void run()
{
while (true)
{
try
{
if ((entrada = in.readLine())!=null);
{
showText(entrada);
if (entrada.equals("Cuadro arriba"))
n=n-30;
if (entrada.equals("Círculo arriba"))
y=y-30;
if (entrada.equals("Cuadro abajo"))
n=n+30;
if (entrada.equals("Círculo abajo"))
y=y+30;
if (entrada.equals("Cuadro izquierda"))
m=m-30;
if (entrada.equals("Círculo izquierda"))
x=x-30;
if (entrada.equals("Cuadro derecha"))
m=m+30;
if (entrada.equals("Círculo derecha"))
x=x+30;
if (entrada.equals("Adiós!!!"))
break;
repaint();
}
}
catch(Exception e)
{
showError(e.toString());
}
}
}
}
public void send(String a)
{
out.println(a);
showText("Local: "+a);
}
public void paint( Graphics g ) {
g.setColor(Color.red);
g.fillOval(x,y,50,50);
g.setColor(Color.blue);
g.fillRect(m,n,50,50);
}
public static void main (String args [])
{
new Servidor();
}
}

Y el código del cliente:

import java.io.*;
import java.applet.Applet;
import java.awt.*;
import java.net.*;
public class Cliente extends Applet
{
int r=120,c=120,i;
Button b1,b2,b3,b4,b5,b6,b7,b8,b9;
Button Connect,Send,Exit;
TextArea area;
TextField text;
Socket kkSocket=null;
PrintStream out = null;
DataInputStream in = null;
String entrada;
Receive R;
public void connect()
{
showText("Estado: Conectando...");
try
{
kkSocket = new Socket("LocalHost",80);
out = new PrintStream(kkSocket.getOutputStream());
in = new DataInputStream(kkSocket.getInputStream());
}
catch(Exception e)
{
showError(e.toString());
}
showText("Estado: Conectado");
}
public void disconnect()
{
showText("Estado: Desconectando...");
try
{
out.close();
in.close();
kkSocket.close();
}
catch(Exception e)
{
showError(e.toString());
}
showText("Estado: Desconectado");
}
public void showError(String S)
{
area.appendText("Estado: Desconectado..."+"\n"+"Inicie el programa servidor \n"+"y vuelva a cargar el cliente..."+"\n");
}
public void showText(String S)
{
area.appendText(S+"\n");
}
public class Receive extends Thread
{
public void run()
{
while (true)
{
try
{
if ((entrada = in.readLine())!=null);
{
showText(entrada);
}
}
catch(Exception e)
{
showError(e.toString());
}
}
}
}
public void send(String a)
{
out.println(a);
showText(a);
}
public void exit()
{
out.println("Adiós!!!");
showText("Desconectado...");
text.setText("");
if (R.isAlive())
{
R.stop();
}
disconnect();
System.exit(0);
}
public void init() {
setLayout(new FlowLayout());
add(area=new TextArea(15,35));
Dimension d = size();
repaint();
b1 = new Button( "Cuadro arriba" );
b2 = new Button( "Cuadro abajo" );
b3 = new Button( "Cuadro izquierda" );
b4 = new Button( "Cuadro derecha" );
b5 = new Button( "Círculo arriba" );
b6 = new Button( "Círculo abajo" );
b7 = new Button( "Círculo izquierda" );
b8 = new Button( "Círculo derecha" );
b9 = new Button( "Adiós!!!" );
this.add( b1 );
this.add( b5 );
this.add( b2 );
this.add( b6 );
this.add( b3 );
this.add( b7 );
this.add( b4 );
this.add( b8 );
this.add( b9 );
connect();
R=new Receive();
R.start();
}
public void paint( Graphics g ) {
g.drawRect(r,c,50,50);
}
public boolean handleEvent(Event e) {
if (e.id == Event.WINDOW_DESTROY)
{
exit();
}
return super.handleEvent(e);
}
public boolean action( Event evt,Object obj ) {
if ( evt.target.equals( b1 ) )
send("Cuadro arriba");
if ( evt.target.equals( b2 ) )
send("Cuadro abajo");
if ( evt.target.equals( b3 ) )
send("Cuadro izquierda");
if ( evt.target.equals( b4 ) )
send("Cuadro derecha");
if ( evt.target.equals( b5 ) )
send("Círculo arriba");
if ( evt.target.equals( b6) )
send("Círculo abajo");
if ( evt.target.equals( b7 ) )
send("Círculo izquierda");
if ( evt.target.equals( b8 ) )
send("Círculo derecha");
if ( evt.target.equals( b9 ) )
send("Adiós!!!");
repaint();
return true;
}
}

Les dejo la descarga de la aplicación completa lista para depurarse.

Descarga la aplicación

Espero que sea de utilidad para alguien.

KobraSoft®

domingo, 19 de noviembre de 2006

Código simple de encriptación en VB

Aquí les va este código, que a pesar de ser sencillo es muy útil para encriptar bases de datos de seguridad baja.

El código se puede ingresar en un módulo para tener una rápida referencia a él.

public function encriptar()

Dim indice As Integer = 1
Dim longitud As Integer = 0
Dim valornumerico As Integer = 1
Dim encryptar As String = ""

longitud = Len(Trim(TextBox1.Text))
Dim caracteres(longitud) As String
For indice = 1 To longitud
caracteres(indice) = Mid(TextBox1.Text, x, 1)
caracteres(indice) = Chr(Asc(caracteres(indice)) + valornumerico)
encryptar = encryptar & caracteres(indice)
Next indice
Return encryptar

end function

El código para desencriptar es igual, pero la variable "valornumerico" en lugar de agregarse se resta.

public function desencriptar()

Dim indice As Integer = 1
Dim longitud As Integer = 0
Dim valornumerico As Integer = 1
Dim desencryptar As String = ""


longitud = Len(Trim(TextBox2.Text))
Dim caracteres(longitud) As String
For indice = 1 To longitud
caracteres(indice) = Mid(TextBox2.Text, x, 1)
caracteres(indice) = Chr(Asc(caracteres(indice)) - valornumerico)
desencryptar = desencryptar & caracteres(indice)
Next indice
Return desencryptar

end function

El código lo único que hace es tomar el valor en ASCII de cada caracter dentro del textbox y le suma una cantidad determinada, devolviendo los valores convertidos en una cadena encriptada.
El valor que necesitan cambiar es el de la variable "valornumerico" que es el que determinará el valor que se agregará al caracter.

Recomiendo que tengan una tabla ASCII al lado a la hora de incrustar este código en su sistema, ya que si le dan un valor demasiado grande a "valornumerico" terminará marcando un error de desbordamiento. El valor convertido (caracter ASCII + variable) no debe sobrepasar el valor de 255, que es el máximo de la tabla ASCII.

Este es el código completo como puede incrustarse dentro del módulo (con sus ligeras correciones para mi uso personal).

Dim x As Integer = 1
Dim l As Integer = 0
Dim c As Integer = 37
Public crypt, dcrypt, txtbox1, txtbox2 As String
Public flag1 As Boolean = False
Public Function encrypt()
x = 1
Try
flag1 = False
crypt = ""
l = Len(txtbox1.Trim)
Dim caracteres(l) As String
For x = 1 To l
caracteres(x) = Mid(txtbox1, x, 1)
caracteres(x) = Chr((Asc(caracteres(x)) - c) * 3)
crypt = crypt & caracteres(x)
Next x
Return crypt
Catch
MessageBox.Show("Insertó un caracter no válido. Favor de intentar de nuevo", _
"Error de código", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
flag1 = True
End Try
End Function
Public Function decrypt()
x = 1
l = (txtbox2.Trim.Length)
Dim caracteres(l) As String
dcrypt = ""
For x = 1 To l
caracteres(x) = Mid(txtbox2, x, 1)
caracteres(x) = Chr((Asc(caracteres(x)) / 3) + c)
dcrypt = dcrypt & caracteres(x)
Next x
Return dcrypt
End Function

Desde cualquier formulario se puede hacer llamada a la función encrypt o decrypt (según sea el caso). La cadena a encriptar sólo se necesitan agregar a la variable txtbox1 y la que se va a desencriptar se agrega a txtbox2. En este caso el valor que utilice para alterar el caracter ASCII fue 37, haciendo la pequeña modificación al código para que en lugar de sólo sumar o restar éste ahora además se multiplique o divida por 3 para dar la cadena final.

Como ven, el código se puede modificar fácilmente a gusto del programador para que tenga mayores niveles de encriptación, o simplemente sea un código personalizado.

El código fue 100% programado por su servidor, y lo pongo a disposición de cualquiera que guste utilizarlo o modificarlo a su antojo. Sólo pido que si va a ser publicado en otro lado se respete la fuente.


KobraSoft® 2006

viernes, 17 de noviembre de 2006

Descarga Visual Studio 2005 en español completo (2 CD's)

Aquí les dejo un aporte hecho por su servidor.

Hagan click en el vínculo que está al final para ir al post en ForoHack.com donde se encuentran todas las descargas desde megaupload.
En total son 9 descargas (6 CD1, 3 CD2), se unen las partes con el WinRAR para crear las 2 imágenes en formato .NRG que pueden quemarse con el Nero o el Alcohol 120%, o pueden realizar la instalación cargando las imágenes desde una unidad virtual de CD.

El paquete es el estudio completo (nada de versiones express) y totalmente en español.
Incluye las herramientas para los lenguajes Visual Basic, C#, C++, J# y Web Developer. También cuenta con el CrystalReports, SQL Server 2005 Express x86 y demás herramientas necesarias para crear sus sistemas.

La instalación completa ocupa unos 3.2 GB de espacio en su disco duro.

Vínculo a las descargas en ForoHack.com

jueves, 16 de noviembre de 2006

"hola mundo" en batch

@echo off
echo hola mundo batch



este kodigo, kopialo y pegalo en kualkier editor de texto, pero guardarlo kon extencion ".bat"

ya ke lo hayas guardado, llevalo a la unidad C:\ "Disco Duro" y ejekutalo desde la konsola de esta forma:



C:\>el_nombre_de_tu_bat.bat

hola mundo batch

C:\>



ahora veremos para ke sirve kada komando ke escribimos o kopiaron..

@echo off /*este komando sirve para ke solo se muestre la salida de los komandos, no se muestran los komandos*/

echo /*este comando, imprime en la pantalla lo ke pongamos, komo en el anterior programa ke imprimia "hola mundo batch*/



ahora haremos ke los komandos tmb se impriman en la pantalla de esta forma:



@echo on

echo hola mundo batch



guardamos el kodigo de fuente y lo volvemos a ejekutar de la anterior forma, y nos imprimira esto:



C:\>el_nombre_de_tu_bat.bat

echo hola mundo batch

C:\> 

Crear una barra q simule q carga el programa en Quick Basic

Bueno ya aki les dejo algo sencillo hecho en quick basic, es un codigo q display una barra q esta cagarngando, al teminar la carga pueden proceder a continuar con el codigo del programa.


Color 15, 9
LOCATE 10, 24: Print "programa cargando espere un momento"
LOCATE 12, 21: Print "╔═════════════════════════┐"
LOCATE 13, 21: Print " ▌ ▌"
LOCATE 14, 21: Print "╚═════════════════════════╝"
For r = 22 To 59
LOCATE 13, r: Print "█"
SLEEP 0.1
Next r


con este peuqe;o codigo ya tiene una idea, despues lo pueden ir mejorando, esto se puede usar en otros lenguajes.

 

Visitante número:
ContactosPensionesTiendasCampingPracticas