miércoles, 14 de marzo de 2018
prog valida:
import sys from Tkinter import * import tkMessageBox def validar(): if len(ent_usuario.get()) < 6 : tkMessageBox.showerror('Error', 'El usuario debe tener al menos 6 caracteres') if (ent_usuario.get()).isalnum() == FALSE : tkMessageBox.showerror('Error', 'El usuario debe tener solo numeros o letras') if len(ent_usuario.get()) > 12 : tkMessageBox.showerror('Error', 'El usuario no puede tener mas de 12 caracteres') if len(ent_usuario.get()) > 5 and len(ent_usuario.get()) < 12 and (ent_usuario.get()).isalnum() == TRUE: tkMessageBox.showinfo('usuarios aceptado', 'El usuario es correcto') ventana= Tk() ventana.title('Validar Password') ventana. geometry('600x400') vp = Frame(ventana) #estamos utilizando el objeto framevp.grid(column=0, row=0, padx =(50,50), pady=(10,10)) vp.columnconfigure(0, weigh=1) vp.rowconfigure(0, weight =1) etiqueta = Label(vp,text='Ingrese el nombre de Usuario: ') etiqueta.grid(row=2, column=4, padx=(20,20), pady=(20,20)) usuario = ""ent_usuario = Entry(vp, width=12, textvariable=usuario) ent_usuario.grid(row=2, column=5) Boton = Button(vp, text='Validar usuario', command= validar) Boton.grid(row=2, column=6, padx=(20,20), pady=(20,20)) #etiqueta2 = Label(vp, text='Ingrese el Password: ')#etiqueta2.grid(row=4, column=4, padx=(20, 20), pady=(20, 20)) #password = ""#ent_pass = Entry(vp, width=10, show="*", textvariable=password)#ent_pass.grid(row=4, column=5) #Boton2 = Button(vp, text='Validar passw:', command=valida2)#Boton2.grid(row=4, column=6, padx=(20, 20), pady=(20, 20)) ventana.mainloop()
martes, 13 de marzo de 2018
2.1.2 Estructuras Físicas de la base de datos:
Este Articulo lo tome de Scrib, y complementa lo que estamos estudiando.... de aquí pueden sacar la tarea pendiente para hoy:
https://drive.google.com/open?id=17gribyWrnTk7csrPlA41en8d40SF4TJQ
https://drive.google.com/open?id=17gribyWrnTk7csrPlA41en8d40SF4TJQ
lunes, 12 de marzo de 2018
Aportación de Jonnatan Guzman J. programa de colores en Turbo....
BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H
TEXTO EQU 3
PILA SEGMENT STACK
DB 64 DUP('PILA ')
PILA ENDS
DATOS SEGMENT
assume ds:DATOS,SS:PILA,cs:codigo
TITULO DB 'YO Y MI PAREJA '
colores db 5bh
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DATOS ENDS
codigo segment
COLO PROC FAR
mov AX, DATOS
mov ds,ax
mov ax,texto
int bios
mov cx,16
xor si,si
bucle:
push cx
mov dx,si
add dx,35
mov dh,12
call coloca
mov al,[si+offset titulo]
mov bl,[si+offset colores]
call color
pop cx
inc si
loopnz bucle
mov ah,8
int dos
xor dx,dx
call coloca
mov ax,fin
int dos
colo endp
color proc
mov ah,9
xor bh,bh
int bios
ret
color endp
coloca proc
mov ah,2
xor bx,bx
int bios
ret
coloca endp
codigo ends
end colo
DOS EQU 21H
FIN EQU 4C00H
TEXTO EQU 3
PILA SEGMENT STACK
DB 64 DUP('PILA ')
PILA ENDS
DATOS SEGMENT
assume ds:DATOS,SS:PILA,cs:codigo
TITULO DB 'YO Y MI PAREJA '
colores db 5bh
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DB 5FH
DB 5BH
DB 5FH
db 5BH
DATOS ENDS
codigo segment
COLO PROC FAR
mov AX, DATOS
mov ds,ax
mov ax,texto
int bios
mov cx,16
xor si,si
bucle:
push cx
mov dx,si
add dx,35
mov dh,12
call coloca
mov al,[si+offset titulo]
mov bl,[si+offset colores]
call color
pop cx
inc si
loopnz bucle
mov ah,8
int dos
xor dx,dx
call coloca
mov ax,fin
int dos
colo endp
color proc
mov ah,9
xor bh,bh
int bios
ret
color endp
coloca proc
mov ah,2
xor bx,bx
int bios
ret
coloca endp
codigo ends
end colo
Aportación Emmanuel Horta, Lourdes Brito.....programa de colores...
BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H
.DATA
TITULO DB 'Agnax & Alizz '
COLORES DB 5BH
DB 5FH
DB 5BH
DB 5FH
DB 5BH
DB 00H
DB 0F0H
DB 00H
DB 09CH
DB 09FH
DB 09CH
DB 09FH
DB 09CH
DB 00H
DB 0CH
.CODE
INICIO PROC NEAR:
MOV AX, @DATA
MOV DS, AX
;Esta parte de aqui no es necesaria
INT BIOS
MOV CX, 15
BUCLE:
;Ponemos esto para no agarrar basura
MOV DX,SI
ADD DX,35 ;columna
MOV DH, 12 ;renglon
CALL COLOCA
MOV AL, [SI+OFFSET TITULO]
MOV BL, [SI+OFFSET COLORES]
CALL COLOR
INC SI
LOOPNZ BUCLE
MOV AH, 0
INT DOS
CALL COLOCA
MOV AX, FIN
INT DOS
COLOR PROC
MOV AH, 9
INT BIOS
RET
COLOCA PROC
MOV AH,2
INT BIOS
RET
END INICIO
DOS EQU 21H
FIN EQU 4C00H
.DATA
TITULO DB 'Agnax & Alizz '
COLORES DB 5BH
DB 5FH
DB 5BH
DB 5FH
DB 5BH
DB 00H
DB 0F0H
DB 00H
DB 09CH
DB 09FH
DB 09CH
DB 09FH
DB 09CH
DB 00H
DB 0CH
.CODE
INICIO PROC NEAR:
MOV AX, @DATA
MOV DS, AX
;Esta parte de aqui no es necesaria
INT BIOS
MOV CX, 15
BUCLE:
;Ponemos esto para no agarrar basura
MOV DX,SI
ADD DX,35 ;columna
MOV DH, 12 ;renglon
CALL COLOCA
MOV AL, [SI+OFFSET TITULO]
MOV BL, [SI+OFFSET COLORES]
CALL COLOR
INC SI
LOOPNZ BUCLE
MOV AH, 0
INT DOS
CALL COLOCA
MOV AX, FIN
INT DOS
COLOR PROC
MOV AH, 9
INT BIOS
RET
COLOCA PROC
MOV AH,2
INT BIOS
RET
END INICIO
Programa Usuario en Python:
import sys from Tkinter import * import tkMessageBox def valida(): #long = len(ent_usuario.get()) # NOS CONTARA EL LARGO DE LA CADENA #Y= (ent_usuario.get()).isalnum() #VERDADERO SI CUMPLE, FALSE SI TIENE CARACTERES ESPECIALES #print(long) #print(Y) if len(ent_usuario.get()) < 6 : tkMessageBox.showerror('Error', 'El usuario debe tener al menos 6 caracteres') if (ent_usuario.get()).isalnum() == FALSE : tkMessageBox.showerror('Error', 'El usuario debe tener solo numeros o letras') if len(ent_usuario.get()) > 12 : tkMessageBox.showerror('Error', 'El usuario no puede tener mas de 12 caracteres') if len(ent_usuario.get()) > 5 and len(ent_usuario.get()) < 12 and (ent_usuario.get()).isalnum() == TRUE: tkMessageBox.showinfo('usuarios aceptado', 'El usuario es correcto') #else: # tkMessageBox.showinfo("usuario correcto", 'TIENE USTED ACCESO') # if ent_usuario.get() == 'YOLANDA' and ent_pass.get() == '123': # tkMessageBox.showinfo("usuario correcto",'TIENE USTED ACCESO') # else: # tkMessageBox.showerror('Error', 'NO TIENE ACCESO') #except ValueError: #tkMessageBox.showerror('Error', 'introduzca un numero')ventana= Tk() ventana.title('Validar Password') ventana. geometry('400x400') vp = Frame(ventana) #estamos utilizando el objeto framevp.grid(column=0, row=0, padx =(50,50), pady=(10,10)) vp.columnconfigure(0, weigh=1) vp.rowconfigure(0, weight =1) etiqueta = Label(vp,text='Ingrese el nombre de Usuario: ') etiqueta.grid(row=2, column=4, padx=(20,20), pady=(20,20)) etiqueta2 = Label(vp,text='Ingrese el Password: ') etiqueta2.grid(row=4, column=4 , padx=(20,20), pady=(20,20)) usuario=""
ent_usuario = Entry(vp, width= 12, textvariable=usuario) ent_usuario.grid(row=2, column=5) password=""
ent_pass = Entry(vp,width =10, show="*", textvariable=password) ent_pass.grid(row=4,column=5 ) Boton = Button(vp, text='Validar', command= valida) Boton.grid(row=50, column=5, padx=(20,20), pady=(20,20)) ventana.mainloop()
domingo, 11 de marzo de 2018
Ralizar programa: (q mult números mas grandes...
.model small ;Modelo de memoria m?s utilizado
.stack
.data ;definición de datos(variables), donde se almacenara información
.code
chr1 db ?
chr2 db ?
chr3 db ?
r1 db ?
r2 db ?
ac db 0
.startup
;cls
mov ah,00h ;Function(Set video mode)
mov al,03 ;Mode 80x25 8x8 16
int 10h ;Interruption Video
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;ajustamos valores
mov chr1,al ;[chr1].chr2 * chr3 = ac.r1.r2
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Ajustamos valores
mov chr2,al ;chr1.[chr2] * chr3 = ac.r1.r2
mov ah,02h ;Function(character to send to standard output)
mov dl,'*' ;Character to show
int 21h
mov ah,01h ;Function(Read character)
int 21h ;Interruption DOS Functions
sub al,30h ;Transform(0dec = 30hex)
mov chr3,al ;chr1.chr2 * [chr3] = ac.r1.r2
mov ah,02h ;Character to send to standar output
mov dl,'=' ;
int 21h ;Interruption DOS functions
;Realizamos operaci?n
mov al,chr3 ;al = chr3
mov bl,chr2 ;bl = chr2
mul bl ;AL = chr3*chr2 (BL*AL)
mov Ah,0h ;
AAM ;ASCII Adjusment
mov ac,AH ;ac = AH (Acarreo)
mov r2,AL ;r2 = AL (Unidad del resultado)
mov al,chr3 ;AL = chr3
mov bl,chr1 ;BL = chr1
mul bl ;AL = chr1*chr3 (BL*AL)
mov r1,al ;r1 = AL (Decena del resultado)
mov bl,ac ;BL = Acarreo anterior
add r1,bl ;r1 = r1+ac (r1 + Acarreo)
mov ah,00h ;
mov al,r1 ;AL = r1 (Asignaci?n para el ajust)
AAM ;ASCII Adjustment
mov r1,al ;r1 = AL
mov ac,ah ;ac = AH (Acarreo para la Centena del resultado)
;Mostramos resultado
mov ah,02h
mov dl,ac
add dl,30h
int 21h ;Mostramos ac (Centena)
mov ah,02H
mov dl,r1
add dl,30h
int 21h ;Mostramos r1 (Decena)
mov ah,02H
mov dl,r2
add dl,30h
int 21h ;Mostramos r2 (Unidad)
.exit
end
.stack
.data ;definición de datos(variables), donde se almacenara información
.code
chr1 db ?
chr2 db ?
chr3 db ?
r1 db ?
r2 db ?
ac db 0
.startup
;cls
mov ah,00h ;Function(Set video mode)
mov al,03 ;Mode 80x25 8x8 16
int 10h ;Interruption Video
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;ajustamos valores
mov chr1,al ;[chr1].chr2 * chr3 = ac.r1.r2
mov ah,01h ;Function(character read)
int 21h ;Interruption DOS functions
sub al,30h ;Ajustamos valores
mov chr2,al ;chr1.[chr2] * chr3 = ac.r1.r2
mov ah,02h ;Function(character to send to standard output)
mov dl,'*' ;Character to show
int 21h
mov ah,01h ;Function(Read character)
int 21h ;Interruption DOS Functions
sub al,30h ;Transform(0dec = 30hex)
mov chr3,al ;chr1.chr2 * [chr3] = ac.r1.r2
mov ah,02h ;Character to send to standar output
mov dl,'=' ;
int 21h ;Interruption DOS functions
;Realizamos operaci?n
mov al,chr3 ;al = chr3
mov bl,chr2 ;bl = chr2
mul bl ;AL = chr3*chr2 (BL*AL)
mov Ah,0h ;
AAM ;ASCII Adjusment
mov ac,AH ;ac = AH (Acarreo)
mov r2,AL ;r2 = AL (Unidad del resultado)
mov al,chr3 ;AL = chr3
mov bl,chr1 ;BL = chr1
mul bl ;AL = chr1*chr3 (BL*AL)
mov r1,al ;r1 = AL (Decena del resultado)
mov bl,ac ;BL = Acarreo anterior
add r1,bl ;r1 = r1+ac (r1 + Acarreo)
mov ah,00h ;
mov al,r1 ;AL = r1 (Asignaci?n para el ajust)
AAM ;ASCII Adjustment
mov r1,al ;r1 = AL
mov ac,ah ;ac = AH (Acarreo para la Centena del resultado)
;Mostramos resultado
mov ah,02h
mov dl,ac
add dl,30h
int 21h ;Mostramos ac (Centena)
mov ah,02H
mov dl,r1
add dl,30h
int 21h ;Mostramos r1 (Decena)
mov ah,02H
mov dl,r2
add dl,30h
int 21h ;Mostramos r2 (Unidad)
.exit
end
miércoles, 7 de marzo de 2018
Aportacion de Eduardo Silva----- uso de Loop
Eduardo Silva
;Emu8086
pila segment stack 'stack'
db 100h dup (?)
pila ends
datos segment ;texto e instrucciones.
av db 13,10,' Presione 1 o 2 ',13,10,'$'
msj db 13,10,' Lenguaje ensamblador ',13,10,'$'
m db 13,10,' Lenguaje de Interfaz ',13,10,'$'
datos ends
codigo segment ;segmento de codigo
assume cs:codigo, ss:pila, ds:datos
inicio:
mov ax, datos
mov ds, ax
lea dx,av
mov ah,9h
int 21h
mov ah,08 ;pausa y captura datos 08 espera que el usuario presione una tecla
int 21h
cmp al,49 ;verifica si presiono 1
je pOpcion
cmp al,50 ;verifica si presiono 2
je sOpcion
jmp fin ;finaliza en caso de no recibir respuesta de enter o 2
fin:
mov ax,4c00h
int 21h
pOpcion:
CALL PO
sOpcion:
CALL SO
PO PROC NEAR
mov ah, 9h
lea dx, msj
mov cx, 12
print_LOOP:
int 21h
loop print_LOOP
mov ax,4c00h
int 21h
RET
PO ENDP
SO PROC NEAR
mov ah, 9h
lea dx, m
mov cx, 12
pLOOP:
int 21h
loop pLOOP
mov ax,4c00h
int 21h
RET
SO ENDP
codigo ends
end inicio
;Emu8086
pila segment stack 'stack'
db 100h dup (?)
pila ends
datos segment ;texto e instrucciones.
av db 13,10,' Presione 1 o 2 ',13,10,'$'
msj db 13,10,' Lenguaje ensamblador ',13,10,'$'
m db 13,10,' Lenguaje de Interfaz ',13,10,'$'
datos ends
codigo segment ;segmento de codigo
assume cs:codigo, ss:pila, ds:datos
inicio:
mov ax, datos
mov ds, ax
lea dx,av
mov ah,9h
int 21h
mov ah,08 ;pausa y captura datos 08 espera que el usuario presione una tecla
int 21h
cmp al,49 ;verifica si presiono 1
je pOpcion
cmp al,50 ;verifica si presiono 2
je sOpcion
jmp fin ;finaliza en caso de no recibir respuesta de enter o 2
fin:
mov ax,4c00h
int 21h
pOpcion:
CALL PO
sOpcion:
CALL SO
PO PROC NEAR
mov ah, 9h
lea dx, msj
mov cx, 12
print_LOOP:
int 21h
loop print_LOOP
mov ax,4c00h
int 21h
RET
PO ENDP
SO PROC NEAR
mov ah, 9h
lea dx, m
mov cx, 12
pLOOP:
int 21h
loop pLOOP
mov ax,4c00h
int 21h
RET
SO ENDP
codigo ends
end inicio
lunes, 5 de marzo de 2018
Aportación de Eduardo Aquino, programa con Loop
; programa en emu8086
org 100h
.model small
.stack 64
.data
mensaje db 10,13 ,"Dame un numero",10,13,"$"
mensaje2 db 10,13 ,"Dame un la potencia",10,13,"$"
n1 db 0
n2 db 0
n3 db 0
.code
inicio: ;función inicio
mov ax,@data ;Movemos el segmento data a ax
mov ds,ax ; Movemos lo que esta en ax a ds
mov dx,offset mensaje ;Imprimimos el primer mensaje parte 1
mov ah, 09h ;Imprimimos el primer mensaje parte 2
int 21h ;Imprimimos el primer mensaje parte 3
mov ah,01 ;pausa y espera a que el usuario presione una tecla
int 21h ;interrupción para capturar
sub al,30h ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero
mov n1,al ;Movemos lo que esta en al a la variable n1
mov n3,al ;Movemos lo que esta en al a la variable n3
mov ah, 09h ;imprimimos el mensaje 2 parte 1
mov dx,offset mensaje2 ;imprimimos el mensaje 2 parte 2
int 21h ;imprimimos el mensaje 2 parte 3
mov ah,01 ;pausa y espera a que el usuario presione una tecla
int 21h ;interrupcion para capturar
sub al,30h ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero
mov n2,al ;Guardamos lo que el usuario preciono el n2
mov cl,al ; movemos lo que esta en al a cl para decirle al ciclo cuantas vueltas va a dar
sub cl,1 ;le restamos 1 para que no de una vuelta de mas
call ciclo ;llamada a ciclo
ciclo: ;Funcion
call ciclo1 ;llamada el procediemto 1
ciclo1 proc near : ;procedimiento ciclo
mov al,n1 ;potencia parte 1
mov bh,n3 ;potencia parte 2
mul bh ;potencia parte 3
mov n1,al
loop ciclo1 ;loop a la funcion ciclo
mov ax,4c00h ;fin parte 1
int 21h; fin parte 2
fin: ;funcion fin
mov ax,4c00h ;funcion que termina el programa
int 21h
end inicio
Aportación David Maldonado, programa Loop de Armando Monrreal...
;Turbo
.model small
.stack 64
datos segment
mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"
datos ends
codigo segment
assume cs:codigo, ds:datos
inicio:
mov ax,datos
mov ds, ax
mov dx,offset mensaje
mov ah,09h
int 21h
MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas
codigo ends
end inicio
.model small
.stack 64
datos segment
mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"
datos ends
codigo segment
assume cs:codigo, ds:datos
inicio:
mov ax,datos
mov ds, ax
mov dx,offset mensaje
mov ah,09h
int 21h
MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas
codigo ends
end inicio
Aportación de David Mendoza, LOOP en emu8086
;EMU8086
.model small .stack 64 .data mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$' repetir db 13,10,"Repitiendo el ciclo $" .code inicio proc far mov ax, @data mov ds, ax mov ah, 09 lea dx, mensaje int 21h mov ah, 01 int 21h sub al, 30h mov cl, al ciclo: mov ah, 09 lea dx, repetir int 21h loop ciclo mov ax,4c00h int 21h inicio endp end
Aportación de David Mendoza, programa Loop (turbo Assembler)
;Turbo Assembler
.model small
.stack 64
datos segment
mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
repetir db 13,10,"Repitiendo el ciclo $"
datos ends
codigo segment
assume cs:codigo, ds:datos
inicio:
mov ax, datos
mov ds, ax
mov ah, 09
lea dx, mensaje
int 21h
mov ah, 01
int 21h
sub al, 30h
mov cl, al
ciclo:
mov ah, 09
lea dx, repetir
int 21h
loop ciclo
mov ax,4c00h
int 21h
codigo ends
end inicio
Aportación de Loop Armando Monrreal
Programa en EMU8086---- PASAR A TURBO ASSAMBLER
org 100h
.data
mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"
.code
inicio:
mov ax,@data
mov ds, ax
mov dx,offset mensaje
mov ah,09h
int 21h
MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas
ret
jueves, 1 de marzo de 2018
Programa con loopz
Programa en EMU8086 -- pasar a TURBO ASSEMBLER
; uso del LOOPZ, REPETICION BASADA EN
;COMPARACION SI ES IGUAL A 0
; INTERRUPCION PARA LEER DEL TECLADO ES LA INT16H
; CUANDO USAMOS LA INT16H , EL PARAMETROA USAR ES AH = 0
; Y EL CARACTER LEIDO QUEDARA EN AL= CARACTER LEIDO
.model small
.stack 64
.data
;mensaje1 db "instrucciones de repeticion
.code
inicio:
mov al,'>' ; caracter inicial
mov cx,10 ;numero de veces a repetir el ciclo
leer_car:
mov ah,0EH ;FUNCION PARA IMPRIMIR EL CARACTER AL
int 10h ;llama al BIOS
mov ah,08 ;pausa y espera a que el usuario precione una tecla
int 21h ;interrupcion para capturar
cmp al,'S'; el caracter leeido int 16h lo guarda en al
loopz leer_car ;toma en cuenta la comparacion del cmp si se cumple continua
; coloco el fin de la linea para que baje una linea y lo baje
mov ah,0EH ; FUNCION DEL BIOS PARA IMPRIMIR CARACTER
mov al,10
int 10h
MOV AL,13
INT 10H
mov ah,04ch ;Al terminar finaliza el programa.
int 21h
end inicio
Pasos para el Ejemplo 2....
Nota: tenemos tipos de campo int, int() checar eso!!!
https://drive.google.com/open?id=18hg4fVua9khlyOkQn9RBhcRjyIDV_mgW
Suscribirse a:
Entradas (Atom)