CEBA DEL IPEC CENTRO DE EDUCACIÓN BÁSICA ALTERNATIVA PARA JÓVENES Y ADULTOS DEL INSTITUTO PERUANO DE LA CIENCIA Y LA CULTURA CEBA DEL IPEC R.D. Nº 002655-2010/DREC31-08-2010 PRACTICA 1 VISUAL FOXPRO PROGRAMACIÓN LINEAL FUENTE: Libro “Diseño de Aplicaciones de Escritorio en Visual Foxpro 6.0”, de César A. Bustamante Gtz., Editorial GrapPerú Editores 1. Crear un programa que permita convertir una fecha en formato texto con la referencia de día de la semana. Modificar este programa para que se pida el ingreso de la fecha por teclado. Fecha.PRG Fecha2.PRG ?cDia({12/05/98}) clear FUNCTION cDia cDia=space(8) PARAMETERS dFecha @5,1 say "Ingrese una fecha: (MM/DD/AA) " get cDia cRpta=”Lima, ”+CDOW(dFecha)+STR(DAY(dFecha),2)+; read “ de ”+CMONTH(dFecha)+; dFecha=(ctod(cDia)) “ de ”+STR(YEAR(dFecha,4) cRpta="Lima,"+CDOW(dFecha)+STR(DAY(dFecha),2)+; RETURN cRpta " de "+CMONTH(dFecha)+; " de "+STR(YEAR(dFecha),4) @7,1 say cRpta 2. Crear un programa que convierta un número entero en letras. ?Monto2Letra(256925) laUnidades(10) = "DIEZ laDecenas(4) = "CUARENTA" laUnidades(11) = "ONCE" laDecenas(5) = "CINCUENTA" FUNCTION Monto2Letra laUnidades(12) = "DOCE" laDecenas(6) = "SESENTA" LPARAMETERS tyMonto, tlDolares laUnidades(13) = "TRECE" laDecenas(7) = "SETENTA" LOCAL lyEntero, lyCentavos, lnNumeroBloques, ; laUnidades(14) = "CATORCE" laDecenas(8) = "OCHENTA" lnPrimerDigito, lnSegundoDigito, lnTercerDigito, ; laUnidades(15) = "QUINCE" laDecenas(9) = "NOVENTA lcBloque, lnBloqueCero, lcLetra laUnidades(16) = "DIECISEIS" laCentenas(1) = "CIENTO" laUnidades(17) = "DIECISIETE" laCentenas(2) = "DOSCIENTOS" DIMENSION laUnidades(29), laDecenas(9), laCentenas(9) laUnidades(18) = "DIECIOCHO" laCentenas(3) = "TRESCIENTOS" laUnidades(19) = "DIECINUEVE" laCentenas(4) = "CUATROCIENTOS" tyMonto = ROUND(tyMonto, 2) laUnidades(20) = "VEINTE" laCentenas(5) = "QUINIENTOS" lyEntero = INT(tyMonto) laUnidades(21) = "VENTIUN" laCentenas(6) = "SEISCIENTOS" lcLetra = IIF(lyEntero = 0, "CERO", "") laUnidades(22) = "VEINTIDOS" laCentenas(7) = "SETECIENTOS" lyCentavos = (tyMonto - lyEntero) * 100 laUnidades(23) = "VEINTITRES" laCentenas(8) = "OCHOCIENTOS" laUnidades(24) = "VEINTICUATRO" laCentenas(9) = "NOVECIENTOS" laUnidades(1) = "UN" laUnidades(25) = "VEINTICINCO" laUnidades(2) = "DOS" laUnidades(26) = "VEINTISEIS" lnNumeroBloques = 1 laUnidades(3) = "TRES" laUnidades(27) = "VEINTISIETE" laUnidades(4) = "CUATRO" laUnidades(28) = "VEINTIOCHO" DO WHILE lyEntero > 0 laUnidades(5) = "CINCO" laUnidades(29) = "VEINTINUEVE" lnPrimerDigito = 0 laUnidades(6) = "SEIS" lnSegundoDigito = 0 laUnidades(7) = "SIETE" laDecenas(1) = "DIEZ" lnTercerDigito = 0 laUnidades(8) = "OCHO"" laDecenas(2) = "VEINTE" lcBloque = "" laUnidades(9) = "NUEVE" laDecenas(3) = "TREINTA"" lnBloqueCero = 0 FOR i = 1 TO 3 lnDigito = MOD(lyEntero, 10) IF lnDigito <> 0 THEN DO CASE CASE i = 1 lcBloque = " " + laUnidades(lnDigito) lnPrimerDigito = lnDigito CASE i = 2 IF lnDigito <= 2 THEN lcBloque = " " + laUnidades((lnDigito * 10) + lnPrimerDigito) ELSE lcBloque = " " + laDecenas(lnDigito) + IIF(lnPrimerDigito <> 0, " Y", "") + lcBloque ENDIF lnSegundoDigito = lnDigito CASE i = 3 lcBloque = " " + IIF(lnDigito = 1 AND lnPrimerDigito = 0 AND lnSegundoDigito = 0, "CIEN", ; laCentenas(lnDigito)) + lcBloque lnTercerDigito = lnDigito ENDCASE ELSE lnBloqueCero = lnBloqueCero + 1 ENDIF lyEntero = INT(lyEntero / 10) Página 1 de 2 Prof. Julio H PEÑA REYES CEBA DEL IPEC CENTRO DE EDUCACIÓN BÁSICA ALTERNATIVA PARA JÓVENES Y ADULTOS DEL INSTITUTO PERUANO DE LA CIENCIA Y LA CULTURA CEBA DEL IPEC R.D. Nº 002655-2010/DREC31-08-2010 IF lyentero = 0 THEN EXIT FOR ENDIF ENDFOR DO CASE CASE lnNumeroBloques = 1 lcLetra = lcBloque CASE lnNumeroBloques = 2 lcLetra = lcBloque + IIF(lnBloqueCero <> 3, " MIL", "") + lcLetra CASE lnNumeroBloques = 3 lcLetra = lcBloque + IIF(lnPrimerDigito = 1 AND lnSegundoDigito = 0 AND lnTercerDigito = 0, ; " MILLON", " MILLONES") + lcLetra ENDCASE lnNumeroBloques = lnNumeroBloques + 1 ENDDO lcLetra = ALLTRIM(lcLetra) 3. RETURN lcLetra ENDFUNC Crear el siguiente programa y analizar su funcionamiento. *Programa basado en el uso de objetos *Crea un formulario frmNumeros=CREATEOBJECT("Form") *Agrega controles basados en clases personalizadas frmNumeros.AddObject("lblTitulo1","miLblTitulo") frmNumeros.AddObject("lblTitulo2","miLblTitulo") frmNumeros.AddObject("txtValor","miTxtValor") frmNumeros.AddObject("txtRpta","miTxtValor") frmNumeros.AddObject("cmdCalcular","miBtnCalcular") frmNumeros.AddObject("cmdSalir","miBtnSalir") *Hacer visibles los controles frmNumeros.lblTitulo1.Visible=.T. frmNumeros.lblTitulo1.Caption="Numero:" frmNumeros.lblTitulo1.Top=10 && Fila de la etiqueta frmNumeros.lblTitulo2.Visible=.T. frmNumeros.lblTitulo2.Caption="Seno:" frmNumeros.lblTitulo2.Top=50 && Fila de la etiqueta frmNumeros.txtValor.Visible=.T. frmNumeros.txtValor.Top=10 && Fila de la etiqueta frmNumeros.txtRpta.Visible=.T. frmNumeros.txtRpta.Top=50 frmNumeros.cmdCalcular.Visible=.T. &&Muestrael formulario frmNumeros.cmdSalir.Visible=.T. && Inicia procedimiento de eventos frmNumeros.SHOW READ EVENTS DEFINE CLASS miLblTitulo AS label Left=50 & Columna de la etiqueta Height=25 && Altura de la etiqueta AutoSize=.T. ENDDEFINE Página 2 de 2 DEFINE CLASS miTxtValor AS TextBox Left=170 Height=25 Value=0 && Valor inicial ENDDEFINE * Crea un boton de comando DEFINE CLASS miBtnCalcular AS COMMANDBUTTON Caption="Calcular" && Titulo del boton Left=50 Top=100 Height=25 PROCEDURE Click nValor=Seno(frmNumeros.txtValor.Value) frmNumeros.txtRpta.Value=nValor frmNumeros.Refresh ENDDEFINE * Crea un boton de comando DEFINE CLASS miBtnSalir AS COMMANDBUTTON Caption="Salir" Left=150 Top=100 Height=25 PROCEDURE Click * cierra el formulario CLEAR EVENTS ENDDEFINE FUNCTION Seno PARAMETER nGrados nRad=nGrados*PI()/180 nSen=nRad nDif=nRad nRep=1 DO WHILE ABS(nDif)>=0.000000000001 nDif=(nDif*-(nRad^2))/((2.0*nRep)*((2.0*nRep)+1.0)) nSen=nSen+nDif nRep=nRep+1 ENDDO RETURN nSen Prof. Julio H PEÑA REYES