Skip to content
This repository has been archived by the owner on Oct 23, 2018. It is now read-only.

Commit

Permalink
Merge pull request #4159 from naekkeoya/master
Browse files Browse the repository at this point in the history
Merged by aniket965
  • Loading branch information
Aniket965 committed Oct 17, 2018
2 parents a9db31b + 08fa8b9 commit d3e75dd
Show file tree
Hide file tree
Showing 2 changed files with 344 additions and 0 deletions.
166 changes: 166 additions & 0 deletions ASM_NASM_X86/hex-dec.asm
@@ -0,0 +1,166 @@
org 100h

include 'emu8086.inc'

call PTHIS ;Llamamos la funcion PTHIS
db 13,10, 'Introduce un numero en hexadecimal:',0 ;La funcion imprime la cadena
call PTHIS ;Llamamos la funcion PTHIS
db 13,10, 'Hexadecimal:',0 ;La funcion imprime la cadena
MOV DX,5 ;Asignamos el no. max de caracteres aceptados
MOV [SI],0h ;Inicializamos los primeros registros con 0
MOV [SI+1],0h ;Inicializamos los primeros registros con 0
MOV [SI+2],0h ;Inicializamos los primeros registros con 0
MOV [SI+3],0h ;Inicializamos los primeros registros con 0
CALL GET_STRING ;Se llama a la funcion GETSTRING
CMP [SI+1],0h ;Comparamos si+1 con 0 para saber la cant de caracteres
JZ char1 ;Si es 0 entonces hay un caracter
CMP [SI+2],0h ;Comparamos si+2 con 0 para saber la cant de caracteres
JZ char2 ;Si es 0 entonces hay dos caracteres
CMP [SI+3],0h ;Comparamos si+3 con 0 para saber la cant de caracteres
JZ char3 ;Si es 0 entonces hay tres caracteres
CALL convert ;Llamamos a la siguiente funcion
convert:
MOV AX,0 ;Inicializamos AX=0
MOV BL,[SI] ;Ponemos en BL lo que hay en la dir de memoria de SI
CMP BL,'A' ;Comparamos BL con 'A'
JAE letterAF ;Si es una letra salta a letterAF
SUB BL,48 ;Si no, convierte el ascii a numero en hex
MOV [result+si], BL ;Ponemos en [result+SI] lo que obtuvimos en BL
JMP continue ;Saltamos a continue

letterAF: ;Convertimos letra a numero
SUB BL,55 ;Convertimos el ascii de la letra a numero hex
MOV [result+SI],BL ;Ponemos en [result+SI] lo que obtuvimos en BL
continue: ;Continuamos con la conversion
OR AL,BL ;Limpiamos AL
INC cont ;Incrementamos cont (nuestro contador)
INC SI ;Incrementamos tambien SI
CMP [SI],0 ;Comparamos SI con 0
JNZ convert ;Si es 0 quiere decir que ya no hay mas por convertir


hex: ;Empezamos a convertir a decimal
LEA SI,[cont] ;Ponemos en SI la direccion de memoria del contador
CMP [SI],4 ;Comparamos lo que hay en SI con 4
JZ po4 ;SI=4 quiere decir que se introdujeron 4 caracteres
CMP [SI],3 ;Comparamos lo que hay en SI con 3
JZ po3 ;SI=3 quiere decir que se introdujeron 3 caracteres
CMP [SI],2 ;Comparamos lo que hay en SI con 2
JZ po2 ;SI=2 quiere decir que se introdujeron 2 caracteres
CMP [SI],1 ;Comparamos lo que hay en SI con 1
JMP suma ;SI=1 quiere decir que ya terminamos y pasamos a suma

;Para la conversion tenemos que:
;16^3 = 4096 º 16^2=256 º 16^1=16 º 16^0=1

po4: ;Estamos en el 4to caracter (de der a izq)
MOV CH, 10h ;Ponemos en CH 10h
MOV CL,00h ;Ponemos en CL 00 , asi CX = 4096
LEA SI,[result] ;Ponemos en SI la dir de result
MOV AL, result ;Ponemos en AL lo que hay en result
MUL CX ;Multiplicamos: AX=AX*CX
MOV [rpo4],AH ;Movemos a rpo4 lo que hay en AH
MOV [rpo4+1],AL ;Movemos a rpo4+1 lo que hay en AL para no perder los 16 bits
DEC cont ;Decrementamos contador
JMP hex ;Saltamos a hex para ver si hay mas por convertir

po3: ;Estamos en el 3er caracter (de der a izq)
MOV CH,01h ;Ponemos en CH 01h
MOV CL,00h ;Ponemos en CL 00 y asi CX = 256
LEA SI,[result+1] ;Ponemos en SI lo que hay en result+1
MOV AL, result+1 ;En al ponemos lo que hay en result+1
MUL CX ;Mutiplicamos AX=AX*CX
MOV [rpo3],AH ;Ponemos en rpo3 lo que hay en AH
MOV [rpo3+1],AL ;Ponemos en rpo3+1 lo que hay en AL para no perder bits
DEC cont ;Decrementamos el contador
JMP hex ;Saltamos a hex para ver si hay mas por convertir

po2: ;Estamos en el 2do caracter (de der a izq)
MOV CH,00h ;CH = 0
MOV CL,10h ;Ponemos en ch 10h y asi en cx = 16
LEA SI,[result+2] ;Ponemos en si lo que hay en result+2
MOV AL, result+2 ;Ponemos en al lo que hay en result+2
MUL CL ;Multiplicamos AX=AX*CX
MOV [rpo2],AH ;Ponemos en rpo2 lo que hay en ah
MOV [rpo2+1],AL ;Ponemos en rpo2+a lo que hay en al para no perder bits
DEC cont ;Decrementamos el contador
JMP hex ;Saltamos a hex para ver si hay mas por convertir

suma: ;Funcion para imprimir
LEA SI,[rpo4] ;Ponemos en SI la direccion de rpo4
MOV BH,[SI] ;Ponemos en BH lo que hay en SI
MOV BL,[SI+1] ;Ponemos en BL lo que hay en SI+1
LEA SI,[rpo3] ;Ponemos en SI la direccion de rpo3
MOV AH,[SI] ;Ponemos en AH lo que hay en SI
MOV AL,[SI+1] ;Ponemos en AL lo que hay en SI
ADD AX,BX ;Sumamos AX = AX + BX
LEA SI,[rpo2] ;Ponemos en SI la direccion de rpo2
MOV BH,[SI] ;Ponemos en BH lo que hay en si
MOV BL,[SI+1] ;Ponemos en BL lo que hay en si+1
ADD AX,BX ;Sumamos AX = AX + BX
MOV BH,00h ;Ponemos en BH 00h
MOV BL,[result+3] ;Ponemos en BL lo que hay en result+3
ADD AX,BX ;Sumamos AX = AX + BX
CALL print

char1: ;Se introdujo un caracter, y lo moveremos al final
MOV SI, 0 ;Ponemos en SI 0
MOV BL, [SI] ;Ponemos en BL el caracter que esta en SI
MOV [SI],30h ;Limpiamos SI
MOV [SI+1],30h ;Limpiamos SI+1
MOV [SI+2],30h ;Limpiamos SI+2
MOV [SI+3],BL ;Ponemos en SI+3 el caracter que esta en SI
CALL convert ;Llamamos la siguiente funcion

char2: ;Se introdujeron 2 caracteres, los moveremos al final
MOV SI, 0 ;Ponemos en SI=0
MOV BL, [SI] ;Ponemos en BL el caracter que esta en SI
MOV [SI+2],BL ;Ponemos en SI+2 lo que hay en BL
MOV BL, [SI+1] ;Ponemos en BL el caracter que esta en SI
MOV [SI+3],BL ;Ponemos en SI+3 lo que hay en BL
MOV [SI],30h ;Limpiamos SI
MOV [SI+1],30h ;Limpiamos SI+1
CALL convert ;Llamamos la siguiente funcion
char3: ;Se introdujeron 3 caracteres, los movemos una posicion
MOV SI, 0 ;Ponemos en SI=0
MOV BL, [SI] ;Ponemos en BL el caracter que esta en SI
MOV [SI], 30h ;Limpiamos SI
MOV AL, [SI+1] ;Ponemos en AL el caracter que esta en SI+1
MOV [SI+1], BL ;Ponemos en SI+1 lo que guardamos en BL
MOV BL, [SI+2] ;Ponemos en BL el caracter que esta en SI+2
MOV [SI+2], AL ;Ponemos en SI+2 lo que guardamos en AL
MOV [SI+3], BL ;Ponemos en SI+3 lo que guardamos en BL
CALL convert ;Llamamos la siguiente funcion

print:
CALL PTHIS ;Llamamos la funcion PTHIS
db 13,10, 'Numero convertido exitosamente!',0 ;La funcion imprime la cadena
CALL PTHIS ;Llamamos la funcion PTHIS
db 13,10, 'Decimal:',0;La funcion imprime la cadena
CALL PRINT_NUM_UNS ;Llamamos la funcion PRINT_NUM_UNS
;Imprime lo que tenemos en AX
INT 20H ;Cerramos el programa con la INT 20
DEFINE_PTHIS
DEFINE_GET_STRING
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM_UNS
cont db 0

result db 0,0,0,0

rpo4 db 0,0
rpo3 db 0,0
rpo2 db 0,0
END




178 changes: 178 additions & 0 deletions C++/gato.cpp
@@ -0,0 +1,178 @@
#include <iostream>
#include <ctime>
#include <ctype.h>
#include <cstdio>
#include <cstdlib>
using namespace std;

void iniciarcasillas(char gato[3][3]);
void imprimirgato(char gato[3][3]);
int validacasilla(int fila, int columna);
int validaganador(char jugador);
int validaempate(int contador, int ganador);

void iniciarcasillas(char gato[3][3])
{
gato[0][0]= '-';
gato[1][0]= '-';
gato[2][0]= '-';
gato[0][1]= '-';
gato[1][1]= '-';
gato[2][1]= '-';
gato[0][2]= '-';
gato[1][2]= '-';
gato[2][2]= '-';
}

void imprimirgato(char gato[3][3])
{
char lv=179, lh=196;
int i=0, j=0;
gato[3][3]=gato[j][i];
cout<<"\n\n"<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<endl;
for (j=0; j<3; j++)
{
cout<<lv;
for (i=0; i<3; i++)
{
cout<<gato[j][i]<< " " ;
}
cout<<""<<lv<<endl;
}
cout<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<lh<<"\n\n"<<endl;

}

int validacasilla (int fila, int columna, char gato[3][3])
{
int valido;
system("cls");
if (gato[fila][columna]=='O' || gato[fila][columna]=='X')
{
valido=0;
cout <<"Casilla ocupada, intentalo de nuevo. :c" <<endl;
}
else
{
valido=1;
}
if ((fila>3 || fila<0) || (columna>3 || columna<0))
{
cout<<"Casilla fuera de rango >:c "<<endl;
valido=0;
}
return valido;
}
int validaganador (char jugador, char gato[3][3])
{

int ganador=0;
if (
//Casos horizontales
(gato[0][0]==jugador && gato[0][1]==jugador && gato[0][2]==jugador) ||
(gato[1][0]==jugador && gato[1][1]==jugador && gato[1][2]==jugador) ||
(gato[2][0]==jugador && gato[2][1]==jugador && gato[2][2]==jugador) ||
//casos verticales
(gato[0][0]==jugador && gato[1][0]==jugador && gato[2][0]==jugador) ||
(gato[0][1]==jugador && gato[1][1]==jugador && gato[2][1]==jugador) ||
(gato[0][2]==jugador && gato[1][2]==jugador && gato[2][2]==jugador) ||
//casos diagonales
(gato[0][0]==jugador && gato[1][1]==jugador && gato[2][2]==jugador) ||
(gato[0][2]==jugador && gato[1][1]==jugador && gato[2][0]==jugador))
{
ganador=1;
system("cls");
cout <<"El ganador es... " <<jugador<<endl;
}
return ganador;
}
int validaempate (int contador, int ganador)
{
if (contador==9 && ganador==0)
{
cout<<"Juego empatado... o-o"<<endl;
return 1;
}
return 0;
}

int main ()
{
char jugador1, jugador2;
int ganador=0, empate=0;
char caracteres[2]= {'O', 'X'};
char gato[3][3];
int inicia;
int contador=0;
//Esta funcion es para elige quien inicia, si X o O ^^
iniciarcasillas(gato);

srand(time(NULL));
inicia=rand()%2;
if (inicia==0)
{
jugador1=caracteres[0];
jugador2=caracteres[1];
}
else if (inicia==1)
{
jugador1=caracteres[1];
jugador2=caracteres[0];
}
cout <<"G A T O: Como ingresar jugadas *u*"<<endl;
cout <<"Para ingresar una jugada, selecciona una fila y una columna"<<endl;
cout <<"Ejemplo: fila 0, columna 2. ^^)/"<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout <<"Empieza el jugador: " <<jugador1<< " :)"<<endl;
cout <<"... ¡¡¡¡¡¡ H O R A D E J U G A R !!!!! (-w-)9 "<<endl;
cout<<" " <<endl;
while (ganador==0 && empate==0)
{
int fila, columna;
int valido=0;
while (valido==0)
{
imprimirgato(gato);
cout <<"Turno del jugador: " <<jugador1<<endl;
cout <<"Dame la fila; usa 0, 1, o 2 ^^"<<endl;
cin>>fila;
cout <<"Dame columna; usa 0, 1, o 2 ^^"<<endl;
cin>>columna;
valido=validacasilla(fila, columna, gato);

}
gato[fila][columna]=jugador1;
ganador=validaganador(jugador1, gato);
valido=0;
contador++;
empate=validaempate(contador, ganador);
while (valido==0)
{
if (ganador==0 && empate==0)
{
imprimirgato(gato);
cout <<"Turno del jugador: " <<jugador2<<endl;
cout <<"Dame la fila; usa 0, 1, o 2 ^^"<<endl;
cin>>fila;
cout <<"Dame columna; usa 0, 1, o 2 ^^"<<endl;
cin>>columna;
valido=validacasilla (fila, columna, gato);

}
else
{
valido=1;
}
}
if (ganador==0 && empate==0)
{
gato[fila][columna]=jugador2;
ganador=validaganador(jugador2, gato);
contador++;
empate=validaempate(contador, ganador);
}
}
imprimirgato(gato);
cin.get();
return 0;
}

0 comments on commit d3e75dd

Please sign in to comment.