Está en la página 1de 74

*Con el F_ALUM realizar un ordinograma que visualice la nota media obtenida

por los alumnos de 3 ESO. y la edad media de los alumnos de 2 BACH.. Indicar las
variables utilizadas.
Inicio

Abrir
F_ALUM

Med2º=0

Medcou=0

Cont2º=0

Contcou=0

Sum2=0

Med2º=sum2º/cont2º

Leer
F_ALUM Medcou=sumcou/contcou

SI Med2º
FF Medcou Cerrar Fin
F_ALUM

SI
AL_CUR=2ºbup
SI
Sum2º=sum2º+AL_NO
AL_CUR=cou
T
Sumcou=sumcou+edad
Cont2º=cont2º+1

Contcou=contcou+1

Leer
F_ALUM
Creacion de la tabla de F_ALUM
Create table F_ALUM (AL_NOM c(40), AL_DIR c(40), AL_EDAD N(3), AL_NOT N(3), AL_CUR
c(4), AL_ALT N(3))

INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;


VALUES (“Iñaki Bordas”,”Barakaldo”, 16, 7, “2ESO”,167)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Adrian AGRA”,”Portugalete”, 15, 5, “2ESO”,167)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Janire Parra”,”Sestao”, 16, 7, “2ESO”,168)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Gorka Rivero”,”Santurtzi”, 15, 7, “2ESO”,157)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Alberto Sandino”,”Galdakano”, 16, 8, “2ESO”,175)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Ander Aparicio”,”Barakaldo”, 15, 5, “1ESO”,165)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“David Afonso”,”Portugalete”, 15, 5, “1ESO”,164)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Andrés Fernandez”,”Sestao”, 14, 7, “1ESO”,168)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Iñigo Fuentes”,”Santurtzi”, 13, 7, “1ESO”,156)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Leire Gallareta”,”Galdakano”, 12, 8, “1ESO”,175)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Asier Barco”,”Barakaldo”, 16, 7, “2ESO”,167)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Alejandro Bertran”,”Portugalete”, 15, 5, “2ESO”,167)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“James Brothers”,”Sestao”, 16, 7, “3ESO”,168)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Luis Casero”,”Santurtzi”, 16, 7, “3ESO”,157)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Asier Cornejo”,”Galdakano”, 16, 8, “3ESO”,175)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Victor Gamarra”,”Barakaldo”, 16, 5, “3ESO”,165)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Aitor Gonzalez”,”Portugalete”, 16, 5, “3ESO”,164)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Xabier Gorostegui”,”Sestao”, 17, 7, “3ESO”,168)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Paul Guerrero”,”Santurtzi”, 18, 7, “3ESO”,156)
INSERT INTO F_ALUM (AL_NOM, AL_DIR, AL_EDAD, AL_NOT, AL_CUR, AL_ALT) ;
VALUES (“Jagoba Lara”,”Galdakano”, 17, 8, “3ESO”,175)

Realizar los siguientes programas


1.- Programa que contabilice el número de registros de la tabla F_alum.
2.- Programa que visualice el nombre de los alumnos y su dirección numerados a partir del 1.
3.- Programa que visualice la nota media
4.- Programa que visualice la estatura máxima y cómo se llama el alumno.
5.- Programa que visualice la edad del más joven.
6.- Contabilizar cúantos son de “1ESO”, “2ESO”, “3ESO” Y “4ESO”
7.- Calcular la edad media de los alumnos de “2ESO” mayores de 160 cm.
SOLUCIONES

* Con el fichero FALUM, se quiere realizar un ordinograma para calcular y visualizar el


nombre y la edad del primer alumno que siendo de 2º ESO, con una nota no inferior a 7
y teniendo una estatura superior a 180 cm sea el más joven. Indicar las variables
utilizadas.
7

* Una empresa guarda los datos de sus empleados en un fichero secuencial


(FEMPLE) cuyos registros se componen de los siguientes campos:

F_EMPLE EM_NOM EM_DIR EM_TEL EM_SUEL EM_NHIJ EM_ANT

F_SALIDA SA_NOM SA_DIR SA_TEL SA_SUEL SA_NHIJ SA_ANT

A(30) X(30) 9(7) 9(6) 9(2) 9(3)


Siendo el campo EM_ANT el número de meses que lleva el empleado en dicha
empresa.
1.- Se pretende obtener un fichero de salida (FSALIDA) que contendrá un registro por
cada empleado que llevando más de dos años en la empresa y teniendo al menos 2 hijos,
gane un sueldo inferior a 700 euros.
2.- Además se desea visualizar los nombre y sueldos de los empleados sin hijos.

Nota: Debemos empezar por la condición más excluyente.

Create table F_EMPLE (EM_NOM c(40), EM_DIR c(40), EM_TEL N(9), EM_SUEL N(10,3),
EM_NHIJ N(3), EM_ANT N(3))
Create table F_SALIDA (SA_NOM c(40), SA_DIR c(40), SA_TEL N(9), SA_SUEL N(10,3), SA_NHIJ
N(3), SA_ANT N(3))

INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;


VALUES ("Iñaki Bordas","Barakaldo", 3657984, 458, 3,20)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Adrian AGRA","Portugalete", 1578469, 900, 4,10)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Janire Parra","Sestao", 5678890, 2000, 2,20)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Gorka Rivero","Santurtzi", 5789454, 700, 0,10)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Alberto Sandino","Galdakano", 6785467, 456, 0,50)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Ander Aparicio","Barakaldo", 5764567, 300, 15,20)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("David Afonso","Portugalete", 3789675, 1234, 24,50)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Andrés Fernandez","Sestao", 8374612, 289, 2,90)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Iñigo Fuentes","Santurtzi", 8493483, 849, 0,50)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Leire Gallareta","Galdakano", 5487692, 2332, 10,25)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Asier Barco","Barakaldo", 837492, 873, 5,10)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Alejandro Bertran","Portugalete", 8479243, 583, 0,20)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("James Brothers","Sestao", 5678888, 2000, 2,122)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Luis Casero","Santurtzi", 8765456, 456, 4,120)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Asier Cornejo","Galdakano", 4674567, 200, 0,10)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Victor Gamarra","Barakaldo", 4636789, 3000, 3,12)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Aitor Gonzalez","Portugalete", 5746767, 200000, 4,84)
INSERT INTO F_EMPLE (EM_NOM, EM_DIR, EM_TEL, EM_SUEL, EM_NHIJ, EM_ANT) ;
VALUES ("Xabier Gorostegui","Sestao", 5674656, 400, 6,20)
En foxpro
Control de un menú
*Utilizando como fichero de entrada F_ALUM realizar un ordinograma para obtener
dos ficheros secuenciales de salida. Uno de los alumnos aprobados y otro de alumnos
suspensos. Indicar las variables utilizadas. Contabilizar cuántos eran de cada.
F_ALUM AL_NOM AL_DIR AL_EDAD AL_NOT AL_CUR AL_ALT

A(30) X(30) 9(2) 9(2) X(4) 9(3)


F_APRO AP_NOM AP_DIR AP_NOT AP_CUR

F_SUSP SU_NOM SU_DIR SU_NOT SU_CUR

X(30) X(30) 9(2) X(4)

Inicio

Abrir
F_ALUM

Abrir
F_APRO

Abrir
F_SUSP

Leer
F_ALUM

no Cerrar
¡ EOF() F__APRO Fin
F_ALUM F_SUSP
F_ALUM

NO SI
AL_NOT > =5

SU_NOM=AL_NOM AP_NOM=AL_NOM
SU_CUR=AL_CUR AP_CUR=AL_CUR
SU_DIR=AL_DIR AP_DIR=AL_DIR
SU_NOT=AL_NOT AP_NOT=AL_NOT

Grabar Grabar
F_SUSP F_APRO

Leer
F_ALUM
*Una empresa pretende primar la antigüedad de sus empleados con una
gratificación obtenida de la siguiente forma:
1.- A los empleados que lleven al menos un año se les gratificara con 12
euros cada seis meses.
2.- Si lleva más de tres años se le gratifica con 120 euros.
F_EMPLE EM_NOM EM_DIR EM_TEL EM_SUEL EM_NHIJ EM_ANT

X(30) x(30) x(10) 9(7)v9(2) 9(2) 9(4)


Utilizando el fichero anterior se desea calcular e imprimir:
1.-Numero de empleados en la empresa.
2.-Nombre y gratificación de cada empleado.
3.-Sueldo máximo de los que llevan más de tres años.
4.-Sueldo medio de los que tengan al menos dos hijos.
Inicio
cont=cont2=sum=max=grat=media=0
Abrir F_EMPLE
Leer F_EMPLE
Mientras !eof
SI EM ANT>=36 entonces
Grat= 120
SI Em_Suel>max
max=Em_Suel
FINSI
SINO
SI Em_Ant >=12
Grat=(Em_Ant/6)*12
SINO
Grat=0
FINSI
Visualizar Em_nom
Visualizar Grat
SI Em_Nhij>=2
sum=sum+em_suel
cont2=cont2+1
FINSI
Cont=Cont+1
Leer F_EMPLE
Fin Mientras
SI cont!=0
Visualizar= "No hay empleados"
SINO
med=sum/cont2
VIsualizar med
FINSI
Si max=0
Visualizar= "No hay empleados"
SINO
Visualizar max
FINSI
Cerrar F_Emple
Fin
Inicio

Cont=cont2=sum=max=grat=med=0

Abrir
F_EMPLE
Cerrar
F_EMPLE
Fin
Leer
F_EMPLE

med;cont;
Med=sum/cont2 max
¡EOF
Comprobar cont2

NO SI
EM_ANT>=36

Grat=120

SI SI
EM_ANT EM_SUEL
>=12 >max

Grat=0 Grat=(EM_ANT/6)*12 Max=EM_SUEL

Visualizar
EM_NOM
GRAT

EM_NHIJ
>=2
Sum=sum+EM_SUEL
Cont2=cont2+1

Leer Cont=cont+1
F_EMPLE
Ejercicio para pensar.

Un Ayuntamiento tiene almacenada las multas que impone a los vehículos de su


municipio en un archivo secuencial (MULTAS.DAT). Por cada multa, se almacena un
identificador único por cada denuncia, la matrícula del vehículo, el DNI del conductor y
la fecha de la denunia (en formato aaaammdd) y está ordenado por el identificador de
la denuncia. Mensualmente se genera otro archivo secuencial con las denuncias
realizadas (MULTAS_MES.DAT) con los mismos campos y ordenado por la fecha de
la denuncia.
Un ayuntamiento tiene almacenado las multas que impone a los vehículos
de su municipio. Por cada multa se almacenada: un identificador de
multa, la matrícula del vehículo, DNI conductor, día/mes/año de la
multa, tipo de multa

MU_ID - 9(9)
MU_MATR- X(9)
MU_DNI - X(9)
MU_DÍA - 9(2)
MU_MES - 9(2)
MU_ANIO - 9(4)
MU_TIPO - 9(2) 01. Aparcamiento (100)
02. Velocidad (110)
03. Semáforo (150)
04. Paso de cebra (70)

Realizar: Nº de multas. DNI e importe de la multa. Visualizar cuales


hay de cada tipo. Total de importes para multas de velocidad. Nº de
multas en Agosto de tipo paso de cebra. Cual fue el tipo de multa que
más se realiza

Diseñar un programa que permita añadir el archivo MULTAS_MES.DAT al archivo MULTAS.DAT. Tenga
en cuenta que ambos archivos están ordenados por campos distintos. Si es necesario puede realizar la
ordenación utilizando un array auxiliar.

Periódicamente, también se genera un archivo con los recursos admitidos a las


denuncias (RECURSOS.DAT). En dicho archivo se almacena únicamente el
identificador de la denuncia. Diseñar un programa que permita eliminar del archivo
MULTAS.DAT todos los recursos admitidos. Tenga en cuenta, que por error puede
que haya recursos que ya hayan sido borrados previamente. En esos casos aparecerá
un mensaje advirtiendo del error. ( Diseñar un programa que permita eliminar todos los
recursos admitidos del archivo MULTAS.DAT

Rápido tutorial de Foxpro

http://www.cs.trinity.edu/~thicks/Tutorials/FoxPro-D-ProceduresScreenForms/FoxProD.html
TEORÍA BÁSICA FORMULARIOS

Para empezar, crearemos un formulario con el comando “create form”.

Dentro de nuestro menú del formulario podemos encontrar para hacer un “label”
(ETIQUETA) o un botón de comando.
A cada botón o label le podemos cambiar el texto desde la opción “Caption”. (Lo que
el usuario vera.

Para dar una referencia del label o el comando iremos a la opción “name”. Cada uno
deberá tener el suyo propio.
Al pulsar sobre los objetos nos saldrá una nueva hoja de comando en la cual podemos
jugar con los elementos.

Ejemplo:
thisform.lbltexto.Fontsize= thisform.lbltexto.Fontsize+1
(CADA VEZ QUE APRETEMOS EL BOTÓN LA LETRA SE HARA MAS GRANDE)
thisform.lbltexto.Fontsize=24 (EN EL BOTÓN REINICIAR QUE DEBEREMOS CREAR
CON ANTERIORIDAD). Al apretar este botón volverá al tamaño original
thisform.Release (para finalizar el programa)

También tenemos cajas de texto donde el usuario final podrá introducir datos. El resto
de datos los modificamos desde la opción caption, en este caso iremos a la propiedad
“text”

If empty(thisform.txtnombre.value)
Messagebox (“Porfavor escribe su nombre”)
Else
Messagebox (“HOLA” + thisform.txtnombre.value)
endif

thisform.imgImagen.picture=”LEON.JPG” (VISUALIZAR IMÁGEN, LA FOTO DEBE DE ESTAR


GUARDADA EN LA MISMA CARPETA QUE EL PROGRAMA)

Si en el caption delante ponemos \<SALIR. En el botón la primera letra saldrá subrayada y no hara falta
el uso del ratón, podremos pulsarlo con “control+s”
Listbox y combobox
https://comunidadvfp.blogspot.com/2006/06/imagenes-en-controles-listbox-y-
combobox.html
5.- Programación modular y estructurada.

5.1.- Introducción. Razones para una programación estructurada.

(1.- programas cuyo tiempo de ejecución no fuese excesivo.


2.- no importa el tiempo de ejecución pero sí el coste del programador.
3.- modificación de los programas)

La tendencia actual es conseguir, ante todo, programas simples y claros, que puedan ser
mantenidos y actualizados fácilmente. Para conseguir dichos propósitos se establecieron
dos criterios generales de programación, conocidos con el nombre de nombre de
Programación Modular y Programación Estructurada.

5.2. Modular  Consiste en dividir un programa en partes bien diferenciadas


logicamente, llamadas modulos y que pueden ser analizadas y programadas por
separado. Un modulo se puede definir como un conjunto formado por una o varias
instrucciones logicamente enlazadas. A cada modulo se le asigna un nombre que elige el
programador. Cuando en un punto de un programa se referencia un modulo, el
programa le cede el control para que se ejecuten todas sus instrucciones. Finalizado el
mismo, el control se devuelve al punto del programa donde se llamo al modulo y se
continua con la ejecución de la instrucción siguiente a la que realizo la llamada.

Programacion principal Modulo1


(nominas) (calculo nominas)
Sentencia_1 sentencia_A
Sentencia_2
Sentencia_3 (Ejecu) modulo_2
Modulo_1
Sentencia_4 sentencia_z

Modulo2
(gratificación)
Sentencia_A
(Ejecutar)

Sentencia_Z

Si un modulo es lo suficientemente grande y complicado puede subdividirse en otros


módulos. Debe existir 1 programa principal que es el encargado de controlar y
relacionar a todos los demás.
Ventas
(programa principal)

Clientes (modulo1) Vendedores (modulo2)

Productos vendidos Estadísticas


(modulo3) ventas (modulo4)

Calculo gratificaciones
(modulo5)

La programación modular es una técnica que se basa en el desarrollo de programas de lo


general a lo particular llamado TOP-DOWN. Se comienza considerando qué funciones
debe realizar el programa desde un punto de vista muy general, dándolas como resueltas
y dejando su diseño (cómo) para un paso posterior. De esta manera se avanza hasta
llegar a un máximo nivel de detalle.

No hay una norma fija para dividir un programa en módulos, se hace a criterio
del programador, sin embargo se deben de seguir unas normas mas o menos
generalizadas:

1.- Cada modulo solo puede tener un punto de entrada y uno de salida.
2.- El modulo principal debe ser conciso mostrando claramente los módulos que
lo componen.
3.- Los módulos deben tener la máxima independencia entre ellos.
4.- Un modulo debe representar por si mismo una estructura lógica, coherente y
resolver una parte bien definida del problema.

La programación modular aporta una serie de ventajas:

1.-Los programas son mas sencillos de escribir y de depurar pues se


pueden hacer pruebas parciales con cada uno de sus módulos.
2.-La corrección o modificación de un modulo se hace mas cómoda y en
general no tiene porque afectar al resto de los módulos.
3.-Un programa se puede diseñar fácilmente con solo diseñar los nuevos
módulos necesarios.
4.-Un mismo modulo escrito solo una vez puede ser referenciado desde
varios puntos del programa evitando la reproducción de repeticiones de
instrucciones ya escritas.
Estructurada Para aumentar la eficacia de la programación se necesita que
los programas tengan una estructura fácil de interpretar, de modo que los haga más
comprensibles, manejables, modificables y fiables. La programación estructurada es un
criterio que dice que cualquier programa puede ser escrito utilizando únicamente tres
tipos de estructuras de control: Estructura secuencial; Estructura condicional; Estructura
repetitiva.
Cualquier programa largo y complejo siempre se puede desarrollar mediante el
anidamiento apropiado de estos tres tipos de estructura.
La programación modular y la programación estructurada no son criterios
contrapuestos, sino complementarios. El primero tiende a dividir un programa en partes
más pequeñas llamadas módulos, y el segundo se encarga de desarrollar
estructuradamente cada una de estas partes.
Existen tres razones para que mejore la programación estructurada:
1.-Adaptarse fácilmente a las modificaciones.
2.-Propiciar una puesta a punto mas rápida.
3.-Posibilitar una cómoda interpretación de los programas por diferentes
programadores.

5.2.-Pseudocodigo.

Hasta ahora hemos utilizado los ordinogramas para hacer descripciones gráficas
de algoritmos. Este procedimiento es útil cuando los algoritmos son sencillos pero a
medida que se complican aumenta también la dificultad para representarlos
gráficamente ya que el tamaño de los ordinogramas crecen desmesuradamente y sus
líneas de conexión se complican en exceso. Por esta razón surge una nueva forma de
descripción de algoritmos, llamada pseudocodigo.
5.2.1.-Reglas generales del pseudocodigo.

1.-Todo seudocodigo comienza con la palabra inicio y termina con la


palabra fin.
2.-Cada instrucción se debe escribir en una línea.

3.-Para su descripción se utiliza una serie de palabras reservadas, usadas en


el idioma del país respectivo. Por ejemplo: inicio, fin, si, entonces, si no,
son palabras reservadas.
4.-Debe escribirse indentado (tabulado) para mostrar claramente las
dependencias de control dentro de los módulos.
5.-Cada estructura utilizada tendrá un solo punto de comienzo y solo un
punto de fin de estructura.
6.-Se escribirá en minúscula excepto aquellos nombres que elige el
programador como son las variables, nom_fichero, etc.,que se escribirán
con mayúsculas.
7.-Para diferenciar un modulo se especifica simplemente su nombre entre
los símbolos < >.
5.2.2.-Descripcion de estructuras básicas en pseudocodigo.

 Estructura secuencial.

Pseudocodigo
Accion_1
Accion_1
Accion_2
Accion_3
Accion_2

Accion_3

Ejercicios
*Introducir dos números diferentes por teclado A y B. Visualizar su producto y su
suma.
Pseudocodigo
Inicio
Inicio.
Introducir A B.
Leer A B
SUM=A+B
PROD=A*B
SUMA=A+B
Imprimir SUM PROD.
Fin.

PROD=A*B

Imprimir
SUM PROD

Fin

*Introducir un numero por teclado y si es mayor que 15 visualizarlo por pantalla.


Pseudocodigo
Inicio
Inicio.
Introducir A.
Leer A Si A > 15 entonces
Visualizar A.
NO SI Fin_si.
A>15 Fin .

Visualizar
A

Fin
*Introducir dos valores diferentes A y B por teclado y visualizar el
mayor.
Inicio
Pseudocodigo

Leer A B Inicio.
Introduce A B.
Si A>B
A>B
SI entonces
Imprimir A.
Si_no
Visualizar Visualizar
B A Imprimir B.
Fin_si.
Fin.

Estructura condicional múltiple.

Pseudocodigo

Según VAR hacer


VAR
=1 Accion_1
=2 Accion_2

=1 =2 …. =n clq otro
Accion_1 Accion_2 Accion_n Accion_x
=n Accion_n.
Clq otro
Accion_x
Fin_según.

(Codigo en C y foxpro más abajo)


Ejercicio

Introducir por teclado el valor numérico asociado a un mes y visualizar el


nombre del mes que le corresponda. En caso de no ser un número entre 1 y 12 visualiza
mensaje de error

Inicio

Leer NUM

NUM

=1 =2 =3 =4 =5

“Enero” “Febrero” “Marzo” “Abril” “Mayo”


“Diciembre”

Fin

Pseudocodigo

Inicio.
LEER NÚM.
Según NUM hacer
=1 Imprimir “Enero”. BREAK
=2 Imprimir “Febrero”.
=3 Imprimir “Marzo”.
=4 Imprimir “Abril”.
=5 Imprimir “Mayo”.
=6 Imprimir “Junio”.
=7 Imprimir “Julio”.

=12 Imprimir “Diciembre”.


= clq otro Visualizar “Número de mes no válido”
Fin_según.
Fin.
Switch (num) { Do case
Case 1: printf(“Enero”); break; Case num=1
Case 2: printf(“Febrero”); break; ? “Enero”
Case 3: printf(“Marzo”); break; Case num=2
Case 4: printf(“Abril”); break; ? “Febrero”
Case 5: printf(“Mayo”); break; ….
…. Otherwise
Default: printf(“Dato no valido”); ?” Dato no valido”
} endcase

En C: En fox
int num; Numero=0
Printf (“Dame un número”); @10,10 say “Dame numero”
Scanf(“%d”,&num); @10,25 get numero pict “99”
Switch (num){ Read
Case 1: printf(“Enero”);break; Do case
Case 2: printf(“Febrero”);break; Case numero=1
…. @12,10 say “Enero”
Default: printf (“Número Case numero=2
incorrecto”); @12,10 say “Febrero”
} …
otherwise
@12,10 say “numero no valido”
endcase
Programa que contabilice cuantos trabajadores tienen 0 , 1, 2, 3.. hijos.

CLOSE TABLES
USE F_EMPLE IN 0
cont0 = 0
cont1 = 0
cont2 = 0
cont3 = 0
DO WHILE !EOF()
DO CASE
case em_nhij=0
cont0=cont0+1
case em_nhij=0
cont1=cont1+1
case em_nhij=0
cont2=cont2+1
case em_nhij=0
cont3=cont3+1
ENDcase
skip
ENDDO
texto = " con 0 hijos son" +STR(cont0)+CHR(13)
texto = " con 1 hijos son" +STR(cont1)+CHR(13)
texto = " con 2 hijos son" +STR(cont2)+CHR(13)
texto = " con 3 hijos son" +STR(cont3)+CHR(13)
messagebox(texto)
CLOSE tables
Ejercicio

Introducir 10 números y visualizar aquellos que sean mayores que 5.

Inicio Pseudocodigo

Cont=0 Inicio.
Introducir NÚM.
Cont=0
Cont<=10 Mientras cont <> 10
Fin
Si cont>5 entonces
SI Visualizar NUM
Leer fin_si.
NUM Cont=cont+1.
Introducir NÚM.
SI fin_mientras.
NUM>5 Fin.

Imprimir
NUM

Cont=cont+1

 E.R.tipo hasta.

Pseudocodigo

Repetir
Accion_1
Accion_1

Accion_n.
Hasta condición.
Accion_n

SI
COND
NO
Ejercicio

Introducir 10 números y visualizar aquellos mayores de 5.

Inicio
Pseudocodigo
Inicio.
Cont=0.
Cont=0 Repetir
Introducir NÚM.
Cont=cont+1.
Leer Si NUM>5 entonces
NUM Visualizar NÚM.
Fin_si.
Cont=cont+1 Hasta cont=10.
Fin.

NUM>5

Imprimir
NUM

SI
Cont=10 Fin
 E.R.tipo para.

Si el numero de iteraciones es fijo o se conoce de antemano se puede utilizar una


estructura de tipo para, en lugar de utilizar una estructura de tipo mientras. La estructura
“para” ejecuta las acciones de un bucle un número específico de veces y controla
automáticamente el número de repeticiones. Para dicho control hay que definir dentro
de la estructura el nombre de una variable numérica, su valor inicial, su valor final y un
incremento fijo. Es la propia estructura la que se encarga de inicializar la variable con
un valor inicial, incrementarla en cada iteración y cuando sobrepasa el valor final
especificado termina la repetición del bucle. La evaluación de la condición de salida se
hace al comienzo de cada iteración.
Toda estructura “para” puede realizarse con una estructura de tipo “mientras”; la
diferencia fundamental entre los dos tipos de estructura radica en que la estructura
mientras tiene que realizar mediante instrucciones la inicialización de la variable que
controla el bucle, así como su incremento. En la estructura “para” esto se hace
automáticamente; por lo tanto toda estructura “para” se puede escribir como estructura
mientras, pero no toda la estructura “mientras” se pueden escribir como estructura
“para”, tan solo aquellas cuya condición de salida venga determinada por una variable
numérica con incremento fijo.

Pseudocodigo

Repetir SI
VAR
V1, V2, V3

Accion_1

Accion_n

Ejercicio

En un video-club tenemos las 40 películas mas vendidas. Introducir el


número de películas vendidas y contar cuantas películas han superado las 100 ventas.
(Hacer de los tres tipos de estructura).
Tipo mientras.

Inicio

Cont=0

ContA=0

Fin
Cont<=40 contA

Leer
PELI

PELI>100 SI

ContA=contA+1

Cont=cont+1

Tipo hasta.
Inicio
Pseudocodigo
Cont=0 Inicio.
Cont=0.
ContA=0.
ContA=0 Repetir
Introducir PELI.
Si PELI>100 entonces
Leer PELI
ContA=contA+1.
Fin_si.
PELI>100 SI Cont=cont+1.
Hasta cont=40.
ContA=contA+1 Visualizar contA
Fin.

Cont=cont+1

Cont=40 contA Fin


Tipo para.+

Pseudocodigo
Inicio.
ContA=0.
Inicio
Para cont = 1 mien <40 inc.1
Visualizar “n ventas”.
ContA=0
Leer PELI
Si PELI>100 entonces
ContA=contA+1.
Fin_si

Repetir SI Fin_para.
cont contA Visualizar contA.
Fin
1, 40, 1.

Leer PELI
Fin.
NO SI
PELI>100

ContA=contA+1

En C.. En fox
Int cont, num,contA;
contA=0 For cont=0 to 40
For (cont=0; cont<40;cont++){ @10,10 say “N ventas” get num pict “9999”
Printf(“Dame n de ventas”); read
Scanf(“%d”,&num); if num>100 then
If (num>100){ contA=contA+1
contA++;
}
endif
} next
Printf(“numero de películas con +100 @12,10 say “fueron “+str(conta,3)
%d”,contA);
Ejercicio
Introducir 20 números por teclado, del 10 al 39 y decir cuantos son de
cada decena y la suma de todos ellos.
Pseudocodigo
Inicio Inicio.
Cont=0.
Cont=0; cont1ª=0; cont2ª=09; Cont1ª=0.
cont3ª=0; sum=0 Cont2ª=0.
Cont3ª=0.
Sum=0.
Leer NÚM.
SI Cont, cont1ª, mientras cont<>20
Cont<=20 cont2ª ,cont3ª, Fin
sum
Si NUM>10 entonces
Leer NUM Si NUM>20entonces
NO Si NUM>30entonces
NUM>10
SI cont3ª=cont3ª+1
Si_no
SI cont2ª=cont2ª+1
NUM>20 Fin_si
SI Si_no
Cont1ª=cont1ª+1 Cont1=cont1ª+1
NUM>30
Fin_si.
Cont2ª=cont2ª+1 Cont3ª=cont3ª+1 Fin_si.
Fin_mientras.
Ejercicio
Introducir 20 números por teclado y visualizar su tabla de multiplicar del 0 al 10.
Pseudocodigo
Inicio Inicio.
NAT=0.
PROD=0.
NAT=0
Mientras NAT<>20 hacer
CONT=0.
PROD=0 Leer A.
Mientras CONT<=10 hacer
SI PROD=CONT*A.
NAT=20 Fin CONT=CONT+1.
Imprimir PROD.
Fin_mientras.
CONT=0 NAT=NAT+1.
Fin_mientras.
Fin.
Leer A

CONT>10

NO NAT=NAT+1
PROD=CONT*A

CONT=CONT+1

Visualizar
PROD
Ejercicios
En un zoo de 100 animales se quiere obtener la edad del animal mas
joven, del mas viejo y la edad media de los animales del zoológico.
Inicio

SUM=0

MAX=0

MIN=100

MED=0

CONT=0

SI MAX
CONT=100 MIN Fin
MED=SUM / CONT
MED
NO

Leer Pseudocodigo
EDAD Inicio.
SUM=0.
SUM=SUM+EDAD MAX=0
MIN=100.
NO SI MED=0.
MAX<EDAD CONT=0.
Mientras CONT<>100
MAX=EDAD Leer EDAD.
SUM=SUM+EDAD.
Si MAX<EDAD entonces
NO SI MAX=EDAD.
MIN>EDAD Fin_si.
Si MIN>EDAD entonces
MIN=EDAD
MIN=EDAD.
Fin_si.
CONT=CONT+1.
CONT=CONT+1 Fin_mientras.
MED=SUM / CONT.
Visualizar MAX MIN MED.
Fin.
PREGUNTAS DE EXAMEN.
*PASOS NECESARIOS PARA RESOLVER UN PROGRAMA
*DATOS, DEFINICIONES Y TIPOS
*TIPOS DE INSTRUCCIONES
*DIAGRAMAS DE FLUJO: 2 TIPOS
*CONTADORES, ACUMULADORES, MAXIMOS Y MINIMOS
*FICHEROS:
QUE SON?
VENTAJAS Y DESVENTAJAS
CAMPO Y REGISTRO
**TIPOS DE INSTRUCCIONES REPETITIVAS: 4
* ESTRUCTURA CONDICIONAL MULTIPLE Y FOR
**JAVA: EXPLICA COMO SE COMPILA Y EJECUTA
Rupturas de control de ficheros secuenciales
Los registros de un fichero estén grabados en posiciones físicamente contiguas, sin tener
en cuenta para su disposición el contenido de ninguno de sus campos.
Sin embargo en ocasiones es interesante ordenar un fichero secuencial por un
determinado campo. Se dice entonces que el fichero esta ordenado por un campo.

Esta clasificación resulta imprescindible cuando existen varios registros pertenecientes a


una misma entidad y se desea realizar el proceso de los mismos uno a continuación de
los otros.

Para poder reconocer que varios registros pertenecen a una misma entidad, el contenido
de alguno de sus campos debe ser común en todos ellos, y a su vez, diferir del resto de
los registros. Este sería el campo por el que debería ordenarse el fichero. A dicho campo
se le llama campo de control y al conjunto de registros cuyo contenido coincide se le
llama bloque de control.

Cuando se está recorriendo un fichero secuencialmente y se lee un registro cuyo


contenido del campo de control difiere del que tenía el registro anterior, se dice
entonces que se ha producido una ruptura de control.

P.e.: Un fichero de ventas por vendedor.

Puede suceder también que un fichero este ordenado por un cierto campo y dentro de él
por otro diferente. Se dice entonces que hay dos campos de control y consecuentemente
puede producirse dos rupturas de control.

Metodología.

Para saber si el campo de control del registro recién leído tiene el mismo contenido que el del
registro anterior, será necesario haber guardado en una variable auxiliar el contenido del campo de
control del primer registro del bloque.

Tras producirse una ruptura, se deben realizar las operaciones relacionadas con la
finalización de dicho bloque. Tras ello se deben reinicializar el valor de la variable
auxiliar con el contenido del campo de control del nuevo registro para poder utilizarla
como referencia en el bloque siguiente. También debemos reinicializar las variables
utilizadas para cada bloque.

La repetición del conjunto de operaciones relativas a los registros pertenecientes al


mismo bloque se realiza mediante una estructura mientras, cuya condición de salida será
que el campo de control del registro recién leído difiera del contenido de la variable
auxiliar. Se deduce que, en procesos de éste tipo habrá al menos tantas estructuras
Mientras como rupturas de control existan.
P.e. por país, por provincia, por municipio => bucles por cada uno.
Todas las consideraciones anteriores permiten establecer la metodología más eficaz en
la resolución de problemas con rupturas de control. Las normas que gobiernan dicho
tratamiento:
Habrá una repetitiva general cuya condición de salida será la finalización del fichero.
Como siempre, se tendrá que realizar un operación de lectura antes de entrar en dicha
repetitiva.
Previamente a éste bucle se inicializarán también los acumuladores y contadores que se
van a utilizar para hallar los totales generales.

Por cada campo de control:


.- se inicializarán las variables relacionadas con el comienzo de cada bloque de control
justo antes de entrar a su repetitiva asociada.

.- se efectuarán las operaciones necesarias relativas a la finalización de un bloque de


control (impresión de totales, acumulación de éstos sobre los de la rutina anterior) justo
después de salir del bucle.

.- Además de la primera operación de lectura que se hace al comienzo de la repetitiva


general, el resto de las lecturas se debe hacer como última instrucción del bucle más
interno, ya que en éste bucle se permanecerá hasta que se lea un registro en el que algún
campo de control difiera respecto de los del registro anterior.

Pseudocódigo:

Inicio
Abrir Fichero
<INIC-GEN>
Leer FICHERO
Mientras no fin fichero
<INIC-RUPT1>
Mientras (no cambie campo de control y no fin fichero)
<PROC-RUP1>
Leer FICHERO
Fin mientras
<FIN-RUPT1>
<PROC-GEN>
fin _mientras
<FIN-GEN>
Cerrar FICHERO
FIN
Problemas propuestos:

• El ministerio de Educación y Ciencia dispone de un fichero secuencial, FROF, con


algunos de los datos de sus profesores/as. Su descripción es la siguiente:

FPROF PF_PROV PF_ASIG PF_ANT PF_NOM PF_EDAD PF_SEX

X(2) X(3 ) 9(4) A(30) 9(2) X(1)


Donde PF_PROV es el código de la provincia en la que está destinado el profesor,
PF_ASIG, el código de la asignatura que imparte, PF_ANT, el año en que aprobó la
oposición y PF_SEX su sexo, que podrá ser una ‘M’ o ‘H’.
Este fichero está ordenado por PF_PROV.
Se desea visualizar:
1.- El nombre y la edad de los profesores/as de cada una de las provincias.
2.- El número de profesoras de cada provincia con una edad superior a 55 años.
3.- El código de la provincia con mayor número de profesores/as.

• El Censo dispone de un fichero secuencial FHABIT con determinados datos de los


habitantes de España. La descripción de sus registros es la siguiente:

FHABIT HT_COM HT_PROV HT_LOC HT_NOM HT_ECIV HT_EDAD

X(7) X(7 ) X(20) X(30) X(1) 9(2)


Siendo HT_COM la comunidad Autónoma, HT_PROV la provincia, HT_LOC la
localidad, HT_ECIV el estado civil (Casado, Soltero o Viudo).
El fichero se supone ordenado por el campo HT_RPOV.
Se desea calcular y visualizar:
1.- Número de habitantes por provincia
2.- Provincia con menos habitantes.
3.- Provincia con más habitantes.
4.- Número de habitantes de España.

Utilizando el fichero PFPROV, y suponiéndolo ordenado por el campo PF_PROV y


dentro de cada provincia por el campo PF_ASIG, se desea visualizar:
• Número de profesoras y número de profesores por asignatura en cada provincia.
• Por cada una de las provincias, la edad media de los profesores/as que imparten cada
asignatura.
• Por cada provincia, el código de la asignatura con una edad media de profesorado
más alta.
• Número total de profesores/as del Ministerio de Educación y Ciencia.
EJERCICIOS PROPUESTOS
1.- Cierto almacén creó un fichero secuencial de ventas con las ventas que se realizaron
durante el año anterior:
F_Ventas: VT_VEND, VT_IMP, VT_DIA, VT_MES
X(5) 9(7) 9(2) 9(2)
El fichero se supone ordenado por el campo VT_EMP. Cada empleado tendrá pues
tantos registros consecutivos como ventas haya realizado, se desea:
a) .- Visualizar para cada vendedor su código y el valor total de las ventas
efectuadas
b) .- Visualizar el total de la empresa.
c) .- Nº de vendedores de la empresa.

2.- Con el fichero de ventas anterior:


a) .- Visualizar el código del vendedor y su total vendido sólo en caso de que
dicho total supere 500.000 pts.
b) .- Visualizar la venta media de cada vendedor
c) .- Visualizar la venta total media de la empresa por vendedor.

3.- Utilizando de nuevo el fichero de ventas se pide:


a) .- Visualizar por cada vendedor su código y el total vendido por este durante
el mes de Julio.
b) .- Visualizar en qué quincena la empresa efectuó un mayor número de ventas
o si se realizó igual número en ambas.
c) .- Suponiendo que no existan dos vendedores cuyo total vendido coincida,
visualizar el código y el total del vendedor que más vendió

4.- Una fábrica de piezas de laboratorio almacena en un fichero secuencial los pedidos
realizados por los clientes de las diferentes provincias, la descripción de los campos es
la siguiente:
F_CLIENTES CL_PRO, CL_COD, CL_NOM, CL_PIEZ, CL_CANT, CL_PREC
X(2) X(5) A(30) X(3) 9(4) 9(6)
El fichero está ordenado por el campo provincia y dentro de cada provincia por el
campo código de cliente; cada cliente tendrá tantos registros como pedidos haya
realizado. Se desea:
a) .- Visualizar el total comprado por cada cliente de cada provincia.
b) .- Visualizar el total comprado en cada provincia.
c) .- Visualizar el total comprado en la empresa.
5.- Un centro de enseñanza posee un fichero de alumnos con las notas obtenidas por
estos durante el curso anterior; la descripción de los campos de sus registros son las
siguientes

F_ALUM ALCUR, AL_ALUM, AL_ASIG, AL_NOT


X(4) 9(2) X(15) 9(2)

El fichero está ordenado por el campo curso y dentro de cada curso por el grupo
alumno. Se desa:
a) Grabar en un fichero de salida denominado de notas medias (FnotMed) el código de
curso, el número de lista del alumno, y la nota media obtenida por este.
F_NOT_MED NM_CUR, NM_ALUM, NM_NOT
X(4) 9(2) 9(2)
b) .- Visualizar el número de lista de cada alumno y el número de suspensos que
obtuvo.
c) .- Visualizar la nota media de cada curso.
d) .- Visualizar el número de alumnos de cada curso con todas las notas aprobadas.

6.- Para el fichero de clientes se solicita:


a).- Visualizar el código, el nombre, y el número de pedidos del cliente de cada
provincia que más pedidos haya realizado.
b) .-Visualizar el código de la provincia que más vendió y la cantidad, suponiendo
que no existen dos provincias con el mismo total.
c).-Visualizar la venta media de la empresa por provincia
Solución al ejercicio 1 de rupturas
a) .- Visualizar para cada vendedor su código y el valor total de las ventas
efectuadas
b) .- Visualizar el total de la empresa.
c) .- Nº de vendedores de la empresa.

INICIO TE: Total de la empresa


Abrir Fventas NVEND: Número de vendedores
Leer Fventas de la empresa
TE=0 TVEND: Total de Vendedor
NVEND=0 AUX_EMP: variable auxiliar que
controla la ruptura por vendedor
Mientras no EOF
Aux_emp=VT_EMP
TVEND=0
Mientras no EOF y Aux_emp= VT_EMP
TVEND=TVEND+VT_IMP
Leer Fventas
Fin_mientras
Visualizar TVEND, Aux_emp
TE=TE+TVEND
NVEND=NVEND+1
Fin_mientras
Visualizar TE
Visualizar NVEND
Cerrar Fventas
FIN
Solución al ejercicio 2 de rupturas

a) .- Visualizar el código del vendedor y su total vendido sólo en caso de que


dicho total supere 500.000 pts.
b) .- Visualizar la venta media de cada vendedor
c) .- Visualizar la venta total media de la empresa por vendedor.

INICIO TE: Total de la empresa


Abrir Fventas NVEND: Número de vendedores de la
Leer Fventas empresa
TE=0 TVEND: Total de Vendedor
NVEND=0 CVENT: Contador de ventas de vendedor
AUX_EMP: variable auxiliar que controla la
Mientras no EOF ruptura por vendedor
Aux_emp=VT_EMP
TVEND=0
CVENT=0
Mientras no EOF y Aux_emp= VT_EMP
TVEND=TVEND+VT_IMP
CVENT=CVENT+1
Leer Fventas
Fin_mientras
Si TVEND>500.000
Visualizar TVEND, Aux_emp
Fin_si
MEDIA=TVEND/CVENT
Visualizar MEDIA
TE=TE+TVEND
NVEND=NVEND+1
Fin_mientras
Visualizar TE/NVEND
Cerrar Fventas
FIN
Solución al ejercicio 3 de rupturas3
a) .- Visualizar por cada vendedor su código y el total vendido por este durante
el mes de Julio.
b) .- Visualizar en qué quincena la empresa efectuó un mayor número de ventas
o si se realizó igual número en ambas.
c) .- Suponiendo que no existan dos vendedores cuyo total vendido coincida,
visualizar el código y el total del vendedor que más vendió

INICIO TVEND: Suma total de cada vendedor


Abrir Fventas TVEND_JUL: Total de Vendedor en Julio
Leer Fventas CVENT1: Contador de ventas primera quincena
CVENT1=0,CVENT2=0 CVENT2: Contador de ventas segunda quincena
MAX=0 AUX_EMP: variable auxiliar que controla la ruptura
por vendedor.
Mientras no EOF MAX: almacena el mayor importe vendido por un
Aux_emp=VT_EMP vendedor.
TVEND_JULIO=0 CODIGO: almacena el código del que más vende.
TVEND=0
Mientras no EOF y Aux_emp= VT_EMP
IF VT_MES=7
TVEND_JULIO =TVEND_JULIO +VT_IMP
ENDIF
IF VT_DIA<=15
CVENT1=CVENT1+1
ELSE
CVENT2=CVENT2+1
ENDIF
TVEND=TVEND+VT_IMP
Leer Fventas
Fin_mientras
Visualizar TVEND_JULIO, Aux_emp
MEDIA=TVEND/CVENT
Visualizar MEDIA
IF TVEND>MAX
MAX=TVEND
CODIGO=AUX_EMP
ENDIF
Fin_mientras
IF CVENT1=CVENT2
Visualizar “Se realizó el mismo número de ventas
ELSE
IF CVENT1>CVENT2
Visualizar “Se realizó más ventas en la primera quincena”
ELSE
Visualizar “Se realizó más ventas en la segunda quincena”
ENDIF
ENDIF
Visualizar TVEND, CODIGO
Cerrar Fventas
FIN
EJERCICIOS DE REPASO
1.- Realizar un programa que pida la temperatura en grados Celsius y visualice
Fahrenheit considerando que 0º Celsius son 32º Fahrenheit.

2.- Realizar un programa que pida la hora y diga “buenos días” y cuando sean las
14:00 me diga “buenas tardes”.

3.- Realizar un programa que pida la edad y me diga si soy joven, adulto o jubilado
considerando que menor de 30 sea joven, mayor o igual de 30 y menor de 65 sea adulto
y mayor de 65 sea jubilado.

4.- Realizar un programa que contabilice el número de empleados de una empresa,


solicite sus sueldos, los visualice y obtenga la suma.

5.- Realizar un programa que gestione la bascula del pesado de camiones solicitando el
peso de 30 camiones al día e indicar cuantos tiene sobrepeso considerado sobrepeso
mayor de 3.500 kg.

6.- Realizar un programa que solicite la fecha de nacimiento de 10 alumnos e indicar su


signo del zodiaco.

Ejercicios de repaso
Manejo de fechas.

1. Diseñar un programa en el que a partir de una fecha dada con el formato dd, mm, aaaa, se
obtenga la fecha del día siguiente.

2. Leer el valor de un año e indicar si es o no un año bisiesto. Recordar la regla:


"Un año es bisiesto si es divisible por 400, o bien si es divisible por 4 pero no por 100". ((aaaa
mod 4 = 0) y (aaaa mod 100 <> 0) o (aaaa mod 400 = 0)).

3. Solicitar una fecha con el formato dd, mm, aaaa e indicar qué día de la semana es. Tenemos que
saber que el 1 de enero de 1990 fue lunes.

4. Diseñar un programa en el que a partir de dos fechas dadas con el formato dd, mm, aaaa, se
obtenga el número de días que han trasncurrido entre ambas. Ten en cuenta que el año puede ser
bisiesto.
>>> 1.-Calcular el cuadrado de un número X.
>> Algoritmo

1.-Obtener el número .

2.-Realizar la multiplicación del número por el mismo.

3.- El número al cuadrado es el resultado de la multiplicación .

>> Pseudo código

1.- inicio

2.- Escribir("Dame el numero que se va a elevar al cuadrado")

3.-Leer(x)

4.-Calcular(resultado < --- x * x)

5.-Escribir("El cuadrado de",x ,"es",resultado)

6.-Fin.

Código C++

//Desarrollado por: Ing. Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar

int main()
{ //zona de declaración de variables
int x,resultado;
//zona de instrucciones
cout<<"PROG. Q ELEVA AL CUADRADO UN NUMERO"<<endl<<endl;
cout<<"Numero a elevar al cuadrado?? ";
cin>>x;
cout<<endl;
resultado=x*x;
cout<<"El numero "<<x<<" elevado al cuadrado es: "<<resultado<<endl<<endl;
system("PAUSE");
return 0;
}

Download: num_cuadrado.exe

>>> 2.- Dados dos números determinar si uno es divisor del otro.
>>Algoritmo
1.-Obtener el número1 y número 2 .
2.-Realizar la operación Modulo del número1 entre el número 2.
3.- Verificar si el resultado es igual a cero.
4.- Si lo es el número 1 si es divisor del número 2.
5.-Si no lo es número 1 no es divisor de número 2.
>>Pseudo código
1.- inicio
2.- Escribir("Dame los números que se van a comparar?")
3.-Leer(x, y)
4.-Calcular(resultado < --- y mod x)
5.-Si (resultado = 0)
5.a.Escribir("El número ", x ,"si es divisor del número",y )
Si no
5.b.Escribir("El número",x,"no es divisor del número",y)
6.-Fin.
Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar
#include <math.h>

int main()
{ //zona de declaración de variables
int x,y,resultado;
//zona de instrucciones
cout<<"PROG. Q DETERMINA DADOS 2 NUMEROS SI UNO ES DIVISOR DEL OTRO";
cout<<endl<<endl;
cout<<"Primer numero?";
cin>>x;
cout<<endl;
cout<<"Segundo numero?";
cin>>y;
cout<<endl;
resultado= y % x;
if (resultado==0)
{
cout<<x<<" si es divisor de "<<y;
}
else
{
cout<<x<<" no es divisor de "<<y;
}
cout<<endl;
system("PAUSE");
return 0;
}
Download: divisor.exe

>>> 3.-Dados dos números, x e y, calcular por sumas sucesivas x * y.


>>Algoritmo
1.-Obtener el número1 y número 2 .
2.-Asignar a variable valor de 0.
3.-Repetir tantas veces como el valor del número 2 .
3.a.Sumar variable mas numero1 e ir almacenando el resultado.
4.- El resultado es el valor de la variable.
>>Pseudo código
1.- inicio
2.- Escribir("Dame los números que se van a Multiplicar ?")
3.-Leer(x, y)
4.-Asignar (resultado --- >0)
4.-Repetir (desde 1 hasta y veces).
4.a. Calcular(resultado< ---resultado + x).
5.- El resultado de la multiplicación va ser igual al valor final de la variable resultado.
6.- fin.
Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar

int main()
{ //zona de declaración de variables
int i,x,y,resultado;
//zona de instrucciones
cout<<"PROG. Q MULTIPLICA 2 NUMEROS POR SUMAS SUCESIVAS";
cout<<endl;
cout<<endl;
cout<<"Valor del 1er numero a multiplicar:";
cin>>x;
cout<<endl;
cout<<"Valor del 2do numero a multiplicar:";
cin>>y;
cout<<endl;
resultado=0;

for (i=1;i<=y;i++)
resultado=resultado+x;

cout<<"El resultado de "<<x<<"x"<<y<<" Es : "<<resultado;


cout<<endl;
system("PAUSE");
return 0;
}
Download:multi_x_sumsuc

>>> 4.- Dados dos números, x e y, calcular por multiplicaciones


sucesivas x y.
Algoritmo
1.-inicio.
2.-Obtener el número1 y número 2 .
3.-Asignar a variable valor de 1.
4.-Repetir tantas veces como el valor del número 2 .
4.a.Multiplicar variable por numero1 e ir almacenando el resultado.
5.- El resultado es el valor de la variable.
6.-fin.
Pseudo código
1.- inicio
2.- Escribir("Dame el numero y la potencia a la que se elevará ?")
3.-Leer(x, y)
4.-Asignar (resultado --- >1)
4.-Repetir (desde 1 hasta y veces).
4.a. Calcular(resultado=resultado * x).
5.- El resultado de la elevación a la potencia va ser igual al valor final de la variable
resultado.
6.- fin.
Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar

int main()
{ //zona de declaración de variables
int i,x,y,resultado;
//zona de instrucciones
cout<<"PROG. Q ELEVA EL 1er A LA POTENCIA 2doNUMERO POR MULTIPLICACIONES SUCESIVAS";
cout<<endl;
cout<<endl;
cout<<"Valor del 1er numero:";
cin>>x;
cout<<endl;
cout<<"Valor de la potencia :";
cin>>y;
cout<<endl;
resultado=1;

for (i=1;i<=y;i++)
resultado=resultado*x;

cout<<"El resultado de "<<x<<"^"<<y<<" Es : "<<resultado;


cout<<endl;
system("PAUSE");
return 0;
}
Download:pot_x_multisusc.exe
5.- Dados dos números, x e y, calcular por sumas sucesivas x y.
Algoritmo
1.-Obtener el número1 y número 2 .
2.-Repetir tantas veces como el valor del número 2 .
2.a..-Repetir tantas veces como el valor del número 1 .
2.a.i.Sumar una variable1 mas ella misma e ir almacenando el resultado en
variable 2.
2.b. Asignar a variable1 el valor de la sumatoria q se obtuvo en la variable 2.
3.-El resultado del número elevado a la potencia será el valor de la variable 2.
4.-fin.

Pseudo código
1.-inicio.
2.-Escribir("Valor del número a elevar:")
3.-Leer (x)
4.-Escribir("Valor de la potecia:")
5.-Leer(y)
6.-Asignar(acum -- > 1)
6.-Repetir desde 1 hasta y
6.1.Asignar (r-- > 0)
6.2.Repetir delde 1 hasta x
6.2.a.Calcular(r =r +acum )
6.3.-Asignar (acum --> r )
8.-Escribir("El resultado de elevar" x "a la potecia" y "es"acum)
9.-fin

Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar
int main()
{ //zona de declaración de variables
int a,b,i,x,y,r,acum,resultado;
//zona de instrucciones
cout<<"PROG. Q ELEVA EL 1er A LA POTENCIA 2doNUMERO POR SUMAS SUCESIVAS";
cout<<endl;
cout<<endl;
cout<<"Valor del 1er numero:";
cin>>x;
cout<<endl;
cout<<"Valor de la potencia :";
cin>>y;
cout<<endl;
resultado=0;
acum=1;

for (i=1;i<=y;i++)
{
r=0;
for (a=1;a<=x;a++)
{
r=r+acum;
}
acum=r;
resultado=acum;
}
cout<<"El resultado de "<<x<<"^"<<y<<" Es : "<<resultado;
cout<<endl;
system("PAUSE");
return 0;
}

6.-Dado el radio, calcule la longitud de la circunferencia, el área del círculo y el volumen


de la esfera. Longitud =2pR, Area=pR2, Volumen =(4/3)pR3 .
Algoritmo
1.-inicio.
2.-Obtener valor del radio .
3..-Calcular la formula de la longitud y almacenarla en una variable1.
4.-Calcular la formula de área y almacenarla en una variable 2.
5.-Calcular la formula del volumen y almacenarlo variable 3.
6.-El resultado de la longitud es el valor de la variable 1.
6.-El resultado del área es el valor de la variable 2.
6.-El resultado del volumen es el valor de la variable 3.
6.-fin.
Pseudo código
1.- inicio
2.- Escribir("Dame el valor del radio ?")
3.-Leer(x)
4.-Asignar(L--- > 0)
5.-Calcular (L = 2 * pi * radio)
6.-Asignar(A--- > 0)
7.-Calcular (A = 2 * pi * radio^2)
8.-Asignar(V--- > 0)
9.-Calcular (V = 3/4 * pi * radio^3)
10.-El resultado de Longitud, Area y Volumen son las variables L, A, V.
11.-Fin.
Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar
#include <math.h> //uso de func.matematicas

int main()
{ //zona de declaración de variables
double r,l,a,v;
const double pi=3.14159;

//zona de instrucciones

cout<<"PROG. Q CALCULA LONGITUD, AREA Y VOLUMEN DE UN CIRCULO ";


cout<<endl;
cout<<endl;
cout<<"Cual es el valor del radio? ";
cin>>r;
cout<<endl;
l=2*pi*r;

a=2*pi*pow(r,2);
v=0.75*pi*pow(r,3);

cout<<"La longitud es: "<<l<<endl;

cout<<"El area es: "<<a<<endl;


cout<<"El volumen es: "<<v<<endl;
cout<<endl;
system("PAUSE");
return 0;
}

7.- Dados dos números deducir si están en orden creciente o no.

Algoritmo

1.-inicio.

2.-Obtener los dos números.

3.-Comparar si número1 < número 2

3.a.Si lo es los números están en orden creciente.

3.b.Si no loes los números no están en orden creciente.

4.-fin.
Pseudo código
1.- Inicio.
2.- Escribir("Dame dos números :")
3.-Leer(a,b)
4.- Si (a < b) entonces
4.a.Escribir("Los números si están en orden creciente")
Por el contrario
4.b.Escribir("Los números no están en orden creciente"")
5.Fin.
Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar

int main()
{ //zona de declaración de variables
int a,b;
//zona de instrucciones
cout<<"PROG. Q DEDUCE SI DOS NUMEROS ESTAN EN ORDEN CRECIENTE O NO"<<endl<<endl;
cout<<"Primer numero:";
cin>>a;
cout<<endl<<"Segundo numero:";
cin>>b;
if(a < b)
{
cout<<endl<<"Los numeros"<<a<<" y "<<b<<" estan en orden creciente"<<endl;
}
else
{
cout<<"Los numeros"<<a<<" y "<<b<<" no estan en orden creciente"<<endl<<endl;
}
system("PAUSE");
return 0;
}
8.- Algoritmo que sea capaz de realizar la conversión de grados Celsius a Fahrenheit y
viceversa F = (9/5)*C + 32.

Algoritmo

1.-Inicio.

2.-Obtener que tipo de conversión se quiere(Cº --> Fº )o (Fº --> Cº)

3.-Obtener la temperatura q se quiere convertir.

4.-Si el tipo de conversión es Cº a Fº.

4.a. Calcular la formula de conversión y almacenarlo en una variable.


5.-Si el tipo de conversión es Fº a Cº

5.a. Calcular la formula de conversión y almacenarlo en una variable.

6.-El resultado de la conversión es el valor de la variable.

7.-Fin.
Pseudo código
1.-Inicio.
2.-Escribir("tipo de conversión se quiere1: (Cº --> Fº ) o 2: (Fº --> Cº)")
3.-Leer(Opc)
4.-En caso de :
4.a. Opc = 1
4.a.i. Escribir("Temperatura en grados Cº :")
4.a.ii.Leer(C)
4.a.iii.Calcular(F=(9/5) * C + 32)
4.b. Opc = 2
4.b.i.Escribir("Temperatura en grados Fº :")
4.b.ii.Leer(F)
4.b.iii.Calcular(C=(5/9) * (F - 32))
5.-El resultado dependiendo de la conversión es el valor de la variable F o C.
6.-Fin
Código C++
//Desarrollado por:Ing.Tomás Morales Sánchez.

//Directivas del preprocesador


#include <iostream.h> //uso de i/o standar
#include <stdlib.h> //uso de funciones standar

int main()
{ //zona de declaración de variables
int opc;
float c,f;
//zona de instrucciones
cout<<"PROG. Q REALIZA LA CONVERSION DE GRADOS CELSIUS A GRADOS FAHRENHEIT Y
VICEVERSA"<<endl<<endl;
cout<<"@@@CONVERSION DE TEMPERATURAS@@@"<<endl;
cout<<"1.- Celsius --> Fahrenheit "<<endl;
cout<<"2.- Fahrenheit --> Celsius "<<endl;
cout<<" Cual conversion se quiere? ";
cin>>opc;
switch (opc)
{
case 1:
cout<<"Temperatura en grados Celsius :";
cin>>c;
f=1.8*c+32;
cout<<"La Temperatura en Fahrenheit : "<<f<<endl;
break;

case 2:
cout<<"Temperatura en grados Fahrneheit :";
cin>>f;
c=(f-32)*0.5556;
cout<<"La Temperatura en Celsius : "<<c<<endl;
break;
}

system("PAUSE");
return 0;
}
PRACTICAS DE RECUPERACIÓN DE PROGRAMACIÓN.
1.- Un ciclista está recorriendo el camino de Santiago; recorre todos los días “K” kilómetros
durante “D” días. ¿Cuantos km a recorrido?. (Preguntar los días y los kilómetros al usuario).
b.- Si la distancia total es 1500 km indica si llega a su destino.

2.- Un termómetro digital con precisión de dos decimales informa al usuario si “hace calor”, “hace
cálido” o “hace frio” según si la temperatura supera los 30 grados, supera los 20 grados o es inferior.
Solicita al usuario la temperatura.

3.- Un grupo de 6 amigos deciden comprar un regalo con la suma de dinero que cada uno tiene en el
bolsillo. ¿Cuanto suma dicho dinero?. (Solicita el dinero de cada amigo al usuario.
b.- Si el regalo cuesta 18 euros, indica si lo compran o no. Indica cúanto les sobra o les falta.

4.- Jugando con un dado decido sumar los puntos de 3 tiradas. ¿Cuánto suman dichos puntos?. (Solicita al
usuario los puntos de cada tirada).
b.- Si la suma de los puntos mayor de 18 puntos, saca un mensaje diciendo “Me has engañado”.

5.- En el Instituto de Montaña se clasifica la altura de cimas. Indica para la altura introducida es “alta
montaña” más de 3.000 metros, “media montaña” a partir de 1.000 metros y “baja montaña” el resto.

6- Calcula el área de un terreno rectangular de largo L y ancho A. Solicita el largo y el ancho del terreno.
(Area= Largo x Acncho).
b.- Si queremos construir una casa de 90m2 de planta. Indica si tenemos suficiente terreno (Area > 90) y
cúanto nos queda para jardín.

7.- Introducir la altura de Juan ‘J’ y la altura de Luis ‘L’, indicar quíen es más alto o si tienen la misma
altura.

8.- Introducir el día, mes y año DD-MM-AAAA y de la misma fecha pero con el mes en letra. Por
ejemplo: 25-11-2004 => 25 de noviembre de 2004.

9.- Introduce la letra de un deporte y visualizar el nombre completo del deporte y un deportista de dicho
deporte. Los deportes son: f – futbol, b - baloncesto, t - tenis, g - golf

10.- qué valor toma x en cada caso cuando y=15.0;


a) b)
x=25.0 if (y <15.0) {
if (y ¡= (x-10.0)){ if (y>=0.0){
x=x-10.0; x=5 *y ;
}else{ }else{
x=x/2.0; x=2 * y;
} }
}else{
x= 3 * y;
}

11.- Determina la “categoría” del nuevo prototipo de la NASA según su máxima velocidad. Si alcanza
500 km/h diremos que “es un cohete·”. Si alcanza los 300 km/h “es un Fórmula 1”. Si alcanza los 200
km/h “es un Ferrari”. Si alcanza los 100 km/h es “un vehículo rápido” y si no diremos es “más lento que
el carromato de mi abuelo”. Solicita la maxima velocidad del vehículo.

12- Se desea saber la media de goles realizados en la temporada 2003 por el Athletic sabiendo que se
jugaron 10 partidos.

13.- Jugando con un dado decido saber cuantas veces aparece el número 3 en 10 tiradas. (Solicita al
usuario los puntos de cada tirada).

14.- Solicitar una letra al usuario y decir el nombre completo del color (R- rojo, V - verde, A - amarillo, N
negro, B – blanco. Utilizar la sentencia switch.
15. Utilizando una sentencia switch indica los lúmenes en función de los Vatios de una bombilla: 15w –
125 L, 25w – 215 L, 40w – 500 L, 60w – 880 L, 75w – 1000 L, 100w – 1675 L.

16- Realiza el ordinograma en cada caso:

If (x>=0){ If (x>=0){
X=x+1; X=x+1;
}else{ if (x>=1){ }If (x>=1){
X=x+2 X=x+2;
} }

17.- Realiza un programa que pida las edades de los 12 alumnos de clase y te diga la edad del más joven y
la del más mayor.

Introduce las notas de los 12 alumnos de clase de la asignatura de programación y visualiza la nota media
de los alumnos.
b.- ¿cuantos han aprobado?
c.- ¿cuál es el tanto porciento de suspensos?.
d.- calcula la nota media de los aprobados.
**** PROGRAMA QUE CONTABILIZA LOS REGISTROS
CLEAR
USE F_ALUM
MAX=0

NOM_MAX=""
?" ****** RECORRIDO DEL FICHERO ******"
DO WHILE !EOF()
IF AL_ALT>MAX
MAX=AL_ALT
NOM_MAX=AL_NOM
ENDIF
SKIP
ENDDO
TXT="El nombre del mas alto es "+nom_max
TXT= TXT+CHR(13)+" Y SU ALTURA ES "+STR(MAX,3)
?TXT
MESSAGEBOX(TXT)
GO TOP && Me coloco en el primer registro de la base de datos
TXT=""
DO WHILE !EOF()
IF AL_ALT=MAX
TXT=TXT + AL_NOM+CHR(10)
ENDIF
SKIP
ENDDO
?TXT
MESSAGEBOX (TXT)
CLOSE TABLES
PROGRAMA DE GESTIÓN DE USUARIOS DE
TEAMKLENTXO
Empezaremos por crear un proyecto al abrir Vfp9 y crearemos una carpeta
donde guardar el proyecto para tenerlo todo mejor gestionado, una vez
creado el proyecto, abriremos las pestañas del proyecto, veremos que nos
da múltiples opciones como crear una base de datos, tablas libres,
formularios entre ellas.

Empezare
mos creando una “Free Table”, le damos a “New…” y nos dará la opción
de hacer o no con asistente, en este caso la haremos sin asistente, al hacer
esto último se nos abrirá una ventana donde introducir los datos, los
introducim
os y
pasaremos
al siguiente
paso.
Una vez la tabla o tablas creadas, volveremos al menú a la ventana de
proyecto a través de la tecla “ESC” (Escape) o volviendo a abrirlo el
archivo. Esta vez crearemos un formulario, donde crearemos una interfaz
con programas (botones) desde el cual podremos manejar la tabla o base de
datos que hemos creado anteriormente. Una vez el formulario creado se nos
abrirá una ventana como la que mostraré a continuación, entonces, iremos
al menú de arriba al apartado de “Form” y le daremos a “Quick Form…”,
esto nos ayudará a introducir los campos de una manera más rápida y
eficiente al formulario.

Al hacer esto, se nos

introducirán los datos en el


formulario con su respectivo label (Etiqueta) y Textbox (cuadro con el
interactuaremos con el programa). Pero no basta solo con esto, para que
funcione tendremos que añadir una serie de botones con los que haremos
funcional el formulario ya que sino no podremos darle un buen uso.
BOTONES
Para este programa en concreto utilizaremos estos botones (programas) que son
más que suficientes para gestionar la tabla o base de datos.

Página 57
Fecha de impresión 19/10/2023 11:30:00
FRMclientes
NUEVO MODIFICAR
APPEND BLANK REPLACE CLCALLE WITH THISFORM.TXTcalle.VALUE
thisform.TXTid.Value=SPACE(10) REPLACE CLCIUDAD WITH THISFORM.TXTciudad.VALUE
thisform.TXTnombre.Value=SPACE(10) REPLACE CLCODPOS WITH THISFORM.TXTcp.VALUE
thisform.TXTrfc.Value=SPACE(10) REPLACE CLID WITH THISFORM.TXTid.VALUE
thisform.TXTcalle.Value=SPACE(10) REPLACE CLNOMBRE WITH THISFORM.TXTnombre.VALUE
thisform.TXTciudad.Value=SPACE(10) REPLACE CLPAIS WITH THISFORM.TXTpais.VALUE
thisform.TXTcp.Value=SPACE(10) REPLACE CLRFC WITH THISFORM.TXTrfc.VALUE
thisform.TXTpais.Value=SPACE(10) WAIT WINDOW("REGISTRO GUARDADO")NOWAIT

thisform.CMDprimerregistro.Enabled= .F. thisform.CMDprimerregistro.Enabled= .T.


thisform.CMDultimoregistro.Enabled= .F. thisform.CMDultimoregistro.Enabled= .T.
thisform.CMDanterior.Enabled= .F. thisform.CMDanterior.Enabled= .T.
thisform.CMDsiguiente.Enabled= .F. thisform.CMDsiguiente.Enabled= .T.
thisform.CMDborrar.Enabled= .F. thisform.CmDborrar.Enabled= .T.

thisform.Refresh
BORRAR SALIR
IF MESSAGEBOX ("¿DESEA ELIMINAR ESTE IF pconfirma ("¿Desea salir?")=.T.
REGISTRO?",4+48+256)=6 pmensa ("Cerrando programa")
DELETE RELEASE THISFORM
IF !BOF() ELSE
SKIP-1 pmensa ("Volviendo al formulario")
ENDIF ENDIF
thisform.Refresh
ENDIF
REGISTRO ANTERIOR SIGUIENTE REGISTRO
IF !BOF () IF !EOF ()
SKIP-1 SKIP+1
WAIT WINDOW("REGISTRO WAIT WINDOW("SIGUIENTE
ANTERIOR")NOWAIT REGISTRO")NOWAIT
IF BOF() IF EOF()
WAIT WINDOW("¡YA ESTÁS EN SKIP-1
EL PRIMER REGISTRO!")NOWAIT WAIT WINDOW("¡YA ESTAS EN EL
ENDIF ULTIMO REGISTRO!")NOWAIT
ELSE ENDIF
WAIT WINDOW("¡YA ESTAS EN EL ENDIF
PRIMER REGISTRO!")NOWAIT thisform.Refresh
ENDIF
thisform.Refresh
PRIMER REGISTRO ULTIMO REGISTRO
GO TOP GO BOTTOM
thisform.Refresh thisform.Refresh
WAIT WINDOW("PRIMER REGISTRO")NOWAIT WAIT WINDOW("ULTIMO REGISTRO")NOWAIT

.INIT UNLOAD
SET DELETED ON SELECT Tclientes
USE Tclientes USE
thisform.MinButton= .F.
thisform.MaxButton= .F.
thisform.WindowState= 0
thisform.Autocenter= .T.
thisform.WindowType= 1
thisform.BorderStyle= 0
thisform.Closable= .F.
thisform.Movable= .F.

SET PROCEDURE TO PRGgeneral.prg

Página 58
Fecha de impresión 19/10/2023 11:30:00
Nº REGISTROS CRÉDITOS
USE TCLIENTES EXCLUSIVE DO FORM FRMCREDITOS
PACK
USE TCLIENTES SHARED
THIS.Caption='Registros:'+STR
(RECCOUNT())
Thisform.Refresh

FRMcreditos
CERRAR .INIT
RELEASE THISFORM thisform.MinButton= .F.
thisform.MaxButton= .F.
thisform.WindowState= 0
thisform.Autocenter= .T.
thisform.WindowType= 1
thisform.BorderStyle= 0
thisform.Closable= .F.
thisform.Movable= .F.

Formulario FRMmensa tiene un LBLmensa y un


CMDaceptar
FRMmensa.init CMDaceptar
PARAMETERS mensaje thisform.Release

thisform.WindowState= 0
thisform.WindowType= 1
thisform.Autocenter= .T.
thisform.MaxButton= .F.
thisform.MinButton= .F.
thisform.Closable= .F.
thisform.BorderStyle= 0
thisform.Movable= .F.
thisform.LBLmensa.Caption= mensaje
Formulario FRMconfirma tiene un LBLmensa CMDsi y
CMDno
FRMconfirma.init FRMconfirma.unload

Página 59
Fecha de impresión 19/10/2023 11:30:00
PARAMETERS pregunta IF THISFORM.TAG="S"
RETURN (.T.)
thisform.WindowState= 0 ELSE
thisform.WindowType= 1 RETURN (.F.)
thisform.Autocenter= .T. ENDIF
thisform.MaxButton= .F.
thisform.MinButton= .F.
thisform.Closable= .F.
thisform.BorderStyle= 0
thisform.Movable= .F.
thisform.LBLmensa.caption=pregunta

CMDsi CMDno
thisform.Tag="S" thisform.Tag="N"
RELEASE thisform RELEASE thisform
PRGgeneral.prg
PROCEDURE pmensa (mensa)
DO FORM FRMmensa WITH mensa

PROCEDURE Pconfirma (pregunta)


LOCAL dev
DO FORM FRMconfirma WITH pregunta TO dev
RETURN (dev)

1. Pantalla de Inicio

Página 60
Fecha de impresión 19/10/2023 11:30:00
2. Pantalla de Créditos

3. Formulario Clientes

Página 61
Fecha de impresión 19/10/2023 11:30:00
4. Formulario Productos

5. Formulario Componentes

Página 62
Fecha de impresión 19/10/2023 11:30:00
6. Formulario Precios

Página 63
Fecha de impresión 19/10/2023 11:30:00
Página 64
Fecha de impresión 19/10/2023 11:30:00
Ejemplo Código Formulario Productos
• Botón Añadir

• Botón Nuevo/Limpiar

• Botón Borrar

• Botón Borrar Todo

Página 65
Fecha de impresión 19/10/2023 11:30:00
• Botón Primer Registro

• Botón Anterior

• Botón Siguiente

• Botón Último Registro

BOTÓN ACEPTAR IDENTIFICAR USUARIO

Página 66
Fecha de impresión 19/10/2023 11:30:00
LOCAL lNOMBRE, lPASS
LNOMBRE=thisform.txt_nombre.Value
LPASS=thisform.txt_pass.value

IF EMPTY(thisform.txt_nombre.Value)
pmensa("Nombre Obligatorio")
RETURN
ENDIF
IF EMPTY(thisform.txt_pass.value)
pmensa ("Contraseña Obligatoria")
RETURN
ENDIF
USE TUSUARIOS
DO WHILE !EOF()
WAIT WINDOW (USUNOMBRE+ " "+ LNOMBRE+ " " +USUPASS+ " "+ LPASS)
IF USUNOMBRE=LNOMBRE .AND. USUPASS=LPASS
PMENSA("eNCONTRADO")
EXIT && Salgo del bucle
ENDIF
SKIP
ENDDO
IF !EOF()
THISFORM.TAG="S"
ELSE
THISFORM.TAG="N"
ENDIF
RELEASE THISFORM

BOTÓN ACEPTAR ALTA USUARIO

IF EMPTY(thisform.txt_nombre.Value)
pmensa("Nombre Obligatorio")
RETURN
ENDIF
IF EMPTY(thisform.txt_pass.value) .and. EMPTY(thisform.txt_repass.Value)
pmensa ("Contraseña Obligatoria")
RETURN
ENDIF
IF EMPTY(thisform.txt_email.Value)
pmensa("Email Obligatorio")
RETURN
ENDIF
IF AT("@",thisform.txt_email.value)=0 .or. ;
AT(".",thisform.txt_email.value)=0
pmensa("email incorrecto")
RETURN
ENDIF
USE TUSUARIOS
APPEND BLANK
REPLACE USUNOMBRE WITH THISFORM.TXT_NOMBRE.Value
REPLACE USUPASS WITH THISFORM.TXT_PASS.Value
REPLACE USUEMAIL WITH THISFORM.TXT_EMAIL.Value
PMENSA("REGISTRO GUARDADO")
USE
RELEASE THISFORM

INICIO PROGRAMA
*SET PATH TO D:\SOMORROSTRO\PROGRAMACIÓN\1ª EVALUACION\examen fox\foxpro2

Página 67
Fecha de impresión 19/10/2023 11:30:00
SET DELETED ON

REGISTRAR_ACCESSO()
REGISTRAR_USUARIO()

PROCEDURE PMENSA (MENSAJE)


DO FORM FRMMENSA WITH MENSAJE

PROCEDURE PCONFIRMA (pregunta)


LOCAL DEV
DO FORM FRMCONFIRMA WITH PREGUNTA TO DEV
RETURN (DEV)

PROCEDURE REGISTRAR_ACCESSO()
USE TREGISTROS
APPEND BLANK
REPLACE RE_FECHADT WITH DATETIME()
REPLACE RE_FECHA WITH DTOC (DATE())
REPLACE RE_HORA WITH TIME()
USE &&&CIERRA LA TABLA
WAIT WINDOW "REGISTRADO"NOWAIT

PROCEDURE REGISTRAR_USUARIO
LOCAL DEV
DO FORM FRMIDENTIFICARUSUARIO TO DEV
IF DEV==.T.
DO FORM CLIENTES
ELSE
PMENSA("NO ACEPTADO")
ENDIF

Página 68
Fecha de impresión 19/10/2023 11:30:00
CALCULADORA
BOTONES PARA LAS OPERACIONES MATEMATICAS

BOTONES DE LA MEMORIA

Página 69
Fecha de impresión 19/10/2023 11:30:00
Página 70
Fecha de impresión 19/10/2023 11:30:00
Conversor de monedas de euros a dólares. Teniendo en cuenta que un dólar es 1.02 euros.
Formulario-> frmEurosDolares. (Un euro -> 0.98 dolares)

Página 71
Fecha de impresión 19/10/2023 11:30:00
Utilizando un optionButton

Página 72
Fecha de impresión 19/10/2023 11:30:00
Descomposición en billetes

swcantidad=thisform.txtcantidad.Value
div200=INT(swcantidad/200)
resto200= MOD(swcantidad,200)
* Calcular los de l00
div100=INT(resto200/100)
resto100=MOD(resto200,100)
*
div50=INT(resto100/50)
resto50=MOD(resto100,50)
*
div20=INT(resto50/20)
resto20=MOD(resto50,20)
*
div10=INT(resto20/10)
resto10=MOD(resto20,10)
IF (resto10!=0)
MESSAGEBOX("No hay monedas"+
STR(resto10,3))
endif

thisform.txtCONT200.Value=div200
thisform.txtCONT100.Value=div100
thisform.txtCONT50.Value=div50
thisform.txtCONT20.Value=div20
thisform.txtCONT10.Value=div10

Página 73
Fecha de impresión 19/10/2023 11:30:00
Calculadora IMC

Mi primer login

Fichero
FUSERS
USUNOM X(20)
USUPASS X(20)

Página 74
Fecha de impresión 19/10/2023 11:30:00

También podría gustarte