Beruflich Dokumente
Kultur Dokumente
CAPITULO
La programacin de ordenadores
Un ordenador, en general, slo es capaz de realizar tres operaciones bsicas: 1. Sumar, restar, multiplicar y dividir dos valores numricos. 2. Comparar dos valores (comprobar si son iguales, si el primero es mayor que el segundo, etc; estos valores pueden ser numricos o alfabticos). 3. Almacenar o recuperar informacin. Con estas pocas operaciones utilizadas y combinadas de forma adecuada, mediante lo que llamamos programa de ordenador, se pueden llegar a realizar tareas increblemente complejas que aporten la solucin a un determinado problema, ya sea de gestin, tcnico o de cualquier otro tipo. La potencia de clculo de un ordenador se deriva de las caractersticas fsicas que posee: Rapidez, Precisin y Memoria. Nuestro objetivo es, para un problema dado, disear una solucin que pueda ser realizada por un ordenador. Para ello necesitaremos, en primer lugar, un lenguaje o notacin para expresar la solucin obtenida. Tal solucin deber estar adaptada a las particularidades del ordenador, aunque en una primera fase, para su diseo, podremos utilizar una notacin intermedia entre el lenguaje natural y el del ordenador; pero posteriormente, ser preciso escribirla en un lenguaje comprensible por la mquina, como, por ejemplo, en VISUAL BASIC.
-1-
Metodologa de la Programacin
-2-
Metodologa de la Programacin
INICIO
SW = 0 A CU = 0 LEER NUM
NUM <> 3 NO
S I
SW = 1 SW = 1 I = -1 I = -1 I=I+1 I=I+1 LEER NOT A S(I) ACU = A CU + NOT A S(I) NO I >= 9 NO S I I >= 9 S I E SCRIBIR A CU / 10
A CU = 0
SW = 0
LEER OP CION
-3-
Metodologa de la Programacin
Figura 1 Fase de anlisis Consiste en el examen y descripcin detallada de los siguientes aspectos relativos al problema: Equipo a utilizar (ordenador, perifricos, soportes, material auxiliar, etc.). Personal informtico. Estudio de los datos de entrada (INPUT). Estudio de los datos de salida o resultados (OUTPUT). Relacin entre la salida y la entrada. Descomposicin del problema en mdulos.
El resultado de esta fase es lo que se denomina especificacin del problema, formada por el conjunto de documentos elaborados para los aspectos citados. Fase de programacin Consiste en el diseo de la solucin al problema planteado en forma de algoritmo. Se debe abordar de forma sistemtica, esto es, aplicando explcitamente un conjunto de tcnicas, como son las de programacin estructurada y diseo descendente. El resultado es un algoritmo o descripcin del conjunto de acciones que debern ser realizadas por el ordenador. Para su representacin se utilizan diferentes notaciones como ordinogramas, pseudocdigos, etc. Fase de codificacin En esta fase se transcribe el algoritmo resultante de la fase anterior a un lenguaje de programacin concreto. Al resultado se le denomina programa.
-4-
Metodologa de la Programacin
Escritura del programa fuente en la memoria del ordenador, grabndolo en algn soporte permanente. Fase de compilacin Traduccin del programa fuente a lenguaje mquina cuyo resultado es el programa objeto. Para ello se dispone de programas compiladores o intrpretes, que adems comprueban la correcta sintaxis del programa. Fase de montaje En los programas compilados es necesario aadir al programa objeto algunas rutinas del sistema o, en algunos casos, subprogramas externos que se hayan compilado separadamente. De ello se encarga el programa montador (linker). Fase de ejecucin Consiste en probar el programa con datos de prueba, para asegurar el correcto funcionamiento del mismo.
Figura 2
Atributos de un objeto
Todo objeto tiene tres atributos:
-5-
Metodologa de la Programacin
Nombre: Es el identificador del mismo. Tipo: Conjunto de valores que puede tomar. Valor: Elemento del tipo que se le asigna.
Constantes
Son objetos cuyo valor permanece invariable a lo largo de la ejecucin de un programa. Una constante es la denominacin de un valor concreto, de tal forma que se utiliza su nombre cada vez que se necesita referenciarlo. Ejemplos: PI = 3.151592 E = 2.718281
Variables
Son objetos cuyo valor puede ser modificado a lo largo de la ejecucin de un programa. Ejemplos: X=0 X=X+1 X es una variable de tipo numrico.
Expresiones
Se define una expresin de la siguiente forma: 1. Un valor es una expresin. Ejemplos: 1.25,
JUAN
2. Una constante o variable es un expresin. Ejemplos: PI, E, X 3. Una funcin es una expresin.
-6-
Metodologa de la Programacin
Ejemplos:
COS(X),
SQR(25)
4. Una combinacin de valores, constantes, variables, funciones y operadores cumpliendo unas determinadas reglas de construccin es una expresin. Ejemplos: COS(PI * X) + 1.25 2 * PI * X N = JUAN
Tipos de expresiones
Las expresiones, segn el resultado que producen, se clasifican en: Numricas Son las que producen resultados de tipo numrico. Se construyen mediante los operadores aritmticos. Ejemplo: PI * SQR(X) Alfanumricas Son las que producen resultados de tipo alfanumrico. Se construyen mediante los operadores alfanumricos. Ejemplo: Don + N Booleanas Son las que producen resultados CIERTO o FALSO. Se construyen mediante los operadores relacionales y lgicos. Ejemplo: A > 0 AND B <= 5
Operadores
Para la construccin de expresiones se pueden utilizar de forma general, los siguientes: Tipo Aritmticos Operador ^ * / + Nombre Potencia Producto Divisin Suma Resta
-7-
Resultado 36 12 3 8 4
Metodologa de la Programacin
Alfanumricos Relacionales
+ = < <= > >= <> Lgicos NOT AND OR * Ver tablas de verdad
Concatenacin Igual a Menor que Menor o igual que Mayor que Mayor o igual que Distinto a Negacin Conjuncin Disyuncin
A OR B F C C
Metodologa de la Programacin
La evaluacin de operadores de igual orden se realiza siempre de izquierda a derecha. Este orden de evaluacin tiene algunas modificaciones en determinados lenguajes de programacin.
-9-
Metodologa de la Programacin
CAPITULO
Durante el diseo de un programa, y en sus fases de anlisis y programacin, surge la necesidad de representar de una manera grfica los flujos que van a seguir los datos manipulados por el mismo, as como la secuencia lgica de las operaciones para la resolucin del problema.
Esta representacin grfica debe tener las siguientes cualidades: Sencillez en su construccin. Claridad en su comprensin. Normalizacin en su diseo. Flexibilidad en sus modificaciones.
En la prctica se suelen utilizar indistintamente los trminos diagrama de flujo, organigrama y ordinograma para referenciar cualquier representacin grfica de los flujos de datos o de las operaciones de un programa. Es importante diferenciarlos porque no corresponden a las mismas fases del diseo de los programas. Aunque utilicen algunos smbolos comunes, el significado de stos no es el mismo. En la Figura 3 se puede ver la secuencia de aparicin de los diagramas de flujo.
- 10 -
Metodologa de la Programacin
Figura 3
En su representacin se siguen las siguientes reglas: En el centro del organigrama figurar el smbolo de proceso correspondiente al programa. En la parte superior, los soportes de entrada. En la parte inferior, los soportes de salida. Al mismo nivel que el smbolo de proceso y a ambos lados, los soportes de entrada y salida.
Smbolos de SOPORTE
Representan los soportes fsicos donde se encuentran los datos de entrada y donde van a ser registrados los resultados.
- 11 -
Metodologa de la Programacin
Tarjeta Perforada
Cinta de Papel
Impresora
Teclado
Pantalla
Tambor Magntico
Disco Magntico
Soporte Secuencial
Disco Flexible
Soporte Genrico
Figura 4
Smbolos de PROCESO
Proceso
Operacin Auxiliar
Figura 5
- 12 -
Metodologa de la Programacin
Lneas de FLUJO
Figura 6
- 13 -
Metodologa de la Programacin
Ejemplos:
El organigrama de una aplicacin que tome nmeros perforados en fichas y realice alguna operacin con ellos, dando los resultados por impresora, es:
DATOS
PROCESO
RESULTADOS
Figura 7
- 14 -
Metodologa de la Programacin
El organigrama de una aplicacin de actualizacin de un archivo soportado en disco, con entrada de datos por teclado, consulta de datos por pantalla y salida de datos modificados por impresora es:
ENTRADA DE DATOS
ACTUALIZACION
ARCHIVO
LISTADO DE ACTUALIZACIONES
VISUALIZACION DE DATOS
Figura 8
- 15 -
Metodologa de la Programacin
El organigrama de una aplicacin para crear un archivo de ventas en cinta, extradas de un determinado documento base en papel, con un listado por impresora de dichas ventas y consultas por pantalla es:
DOCUMENTOS BASE
ENTRADA DE DATOS
LISTADO DE VENTAS
VISUALIZACION DE DATOS
ARCHIVO DE VENTAS
Figura 9
- 16 -
Metodologa de la Programacin
En la representacin de ordinogramas, es conveniente seguir las siguientes reglas: El comienzo del programa figurar en la parte superior del ordinograma. Los smbolos de comienzo y fin debern aparecer una nica vez. El flujo de las operaciones ser, siempre que sea posible, de arriba abajo y de izquierda a derecha, en cuyo caso pueden omitirse las puntas de flecha. Se debe guardar una cierta simetra en la representacin de bifurcaciones y bucles, as como en el conjunto total del ordinograma. Se evitarn siempre los cruces de lneas de flujo utilizando conectores.
- 17 -
Metodologa de la Programacin
El uso de comentarios estar restringido al mnimo imprescindible; al contrario que en la codificacin, en la que son mucho ms recomendables. Si en un ordinograma se ha separado una parte de otra por medio de un conector, las posibles conexiones que puedan aparecer desde esta ltima a la anterior, se harn igualmente con conectores, evitando el uso de lneas de flujo directas.
Smbolos de OPERACION
OPERACION GENERAL
SUBPROGRAMA
Figura 10
El smbolo de OPERACIN DE E/S EN GENERAL, indica que la misma se realiza desde un dispositivo estndar de E/S. En la prctica, se utilizan los smbolos de soporte de organigramas para los ordinogramas en los casos que es necesario especificar el tipo de soporte utilizado.
Smbolos de COMENTARIOS
COMENTARIO
Figura 11
- 18 -
Metodologa de la Programacin
Smbolos de DECISIN
Figura 12
Smbolos de CONEXION
REAGRUPAMIENTO
n.
n.
Figura 13
- 19 -
Metodologa de la Programacin
CAPITULO
Un programa puede considerarse como una secuencia de acciones (instrucciones) que manipulan un conjunto de objetos (datos). Contendr, por lo tanto, dos bloques para la descripcin de los dos aspectos citados. Bloque de declaraciones: En l se especifican todos los objetos que utiliza el programa (constantes, variables, tablas, registros, archivos, etc.). Bloque de instrucciones: Constituido por el conjunto de operaciones que se han de realizar para la obtencin de los resultados deseados.
En algunos lenguajes de programacin no figura explcitamente el bloque de declaraciones (FORTRAN, BASIC), pero, en general, es necesario declarar todos los objetos que se van a usar. La ejecucin de un programa consiste en la realizacin secuencial del conjunto de instrucciones, desde la primera a la ltima, de una en una. Este orden de realizacin nicamente ser alterado mediante instrucciones denominadas de ruptura de secuencia. Las instrucciones de un programa consisten, en general, en modificaciones sobre los objetos del programa, que constituyen su entorno, desde un estado inicial hasta otro final que contendr los resultados del proceso.
- 20 -
Metodologa de la Programacin
Entrada de datos
La constituyen todas aquellas instrucciones que toman datos de un dispositivo externo, almacenndolos en la memoria central para que puedan ser procesados. Tambin se consideran dentro de este apartado las instrucciones de depuracin de los datos de entrada, es decir, aquellas que se encargan de comprobar la correccin de los mismos.
DATOS DE ENTRADA
MEMORIA CENTRAL
Figura 14
Proceso o algoritmo
Est formado por las instrucciones que modifican los objetos a partir de su estado inicial hasta el estado final, dejando stos disponibles en la memoria central.
- 21 -
Metodologa de la Programacin
Salida de resultados
Conjunto de instrucciones que toman los datos finales de la memoria central y los envan a los dispositivos externos.
MEMORIA CENTRAL
DATOS DE SALIDA
Figura 15
Instrucciones de declaracin
Se utilizan en aquellos lenguajes de programacin que no tienen declaracin explcita de los objetos. Su misin consiste en indicar al procesador que reserve espacio en la memoria para un objeto del programa, indicando asimismo su nombre, tipo y caractersticas. Ejemplo: En BASIC se declara una variable, NOMBRE, de tipo entera, mediante la instruccin:
DIM NOMBRE AS INTEGER
Los distintos tipos admitidos por BASIC son: Para nmeros enteros: INTEGER y LONG. Para nmeros reales: SINGLE y DOUBLE.
- 22 -
Metodologa de la Programacin
Instrucciones primitivas
Son aquellas que ejecuta el procesador de modo inmediato. Las principales son asignacin, entrada y salida. Instruccin de asignacin Consiste en calcular el valor de una expresin y almacenarlo en una variable. Ejemplo: Asignacin del valor numrico entero 29 a la variable EDAD.
EDAD = 29
Instruccin de entrada Toma un dato de un dispositivo de entrada y lo almacena en un objeto. Ejemplo: Entrada del dato numrico 29 a la variable EDAD.
INPUT EDAD
Instruccin de salida Toma el valor de una expresin u objeto y lo lleva a un dispositivo externo. Ejemplo: Salida del dato almacenado en la variable EDAD.
PRINT EDAD
Instrucciones de control
Son aquellas encargadas de controlar la ejecucin de otras instrucciones.
- 23 -
Metodologa de la Programacin
Instruccin alternativa Controla la ejecucin de unas u otras instrucciones segn una condicin.
Alternativa simple
SI
CONDICION
NO
ACCION
Figura 16
Alternativa doble
SI
CONDICION
NO
ACCION A
ACCION B
Figura 17
- 24 -
Metodologa de la Programacin
Ejemplo: Instruccin que visualiza el valor de A si se cumple que A > B, y en caso contrario visualiza B.
IF A > B THEN PRINT A ELSE PRINT B ENDIF
Instruccin repetitiva Hace que se repitan una o varias instrucciones un nmero determinado o indeterminado de veces. Instruccin PARA (FOR): El nmero de repeticiones est fijado de antemano.
Donde: Vc = Valor del Contador. Generalmente se usa la variable I como valor del contador. Vi = Valor inicial. In = Incremento.
Vc = Vi - In
Vc = Vc + In
ACCIONES
NO
Vc >= Vf
SI
Figura 18
Metodologa de la Programacin
Instruccin MIENTRAS (WHILE): El nmero de repeticiones viene determinado por una condicin que se ha de verificar antes de cada nueva repeticin.
CONDICION
NO
SI
ACCIONES
Figura 19
Ejemplo: Lectura y visualizacin de N nmeros introducidos por teclado. WHILE N > 0 INPUT NUMERO PRINT NUMERO N=N-1 WEND
- 26 -
Metodologa de la Programacin
Instruccin ITERAR (LOOP): La terminacin del bucle depende del cumplimiento de una condicin de salida que se evala despus de cada repeticin.
ACCIONES
NO
CONDICION
SI
Figura 20
ITERAR MIENTRAS:
DO acciones LOOP WHILE condicin
- 27 -
Metodologa de la Programacin
Contadores
Un contador es un campo de memoria cuyo valor se incrementa en una cantidad fija, positiva o negativa, generalmente asociado a un bucle. Se utiliza en los siguientes casos: Para contabilizar el nmero de veces que es necesario repetir una accin (variable de control de un bucle). Para contar un suceso particular solicitado por el enunciado del problema (asociado a un bucle o independientemente).
Un contador toma un valor inicial (0 en la mayora de los casos) antes de comenzar su funcin, posteriormente, y cada vez que se realiza el suceso a contar, incrementa o disminuye su valor (1 en la mayora de los casos).
Acumuladores
Un acumulador es un campo de memoria cuyo valor se incrementa sucesivas veces en cantidades variables. Se utiliza en aquellos casos en que se desea obtener el total acumulado de un conjunto de cantidades, siendo preciso inicializarlo con el valor 0. Tambin en las situaciones en que hay que obtener un total como producto de distintas cantidades se utiliza un acumulador, debindose inicializar con el valor 1.
Interruptores (Switches)
Tambin se denominan conmutadores. Un interruptor es un campo de memoria que puede tomar dos valores exclusivos (0 y 1, -1 y 1, FALSO y CIERTO, etc.).
- 28 -
Metodologa de la Programacin
Se utiliza para: Recordar en un determinado punto de un programa la ocurrencia o no de un suceso anterior, para salir de un bucle o para decidir en una instruccin alternativa qu accin realizar. Para hacer que dos acciones diferentes se ejecuten alternativamente dentro de un bucle.
- 29 -
Metodologa de la Programacin
EJERCICIOS
RESUELTOS
- 30 -
Metodologa de la Programacin
1. Programa que lee un nmero que corresponde al radio de una circunferencia, calcula y visualiza la longitud de la misma y el rea del circulo correspondiente.
INICIO
PI = 3.141592
Leer RADIO
LONGITUD = 2 * PI * RADIO
AREA = PI * RADIO ^ 2
FIN
CONST PI = 3.141592 DIM RADIO AS SINGLE DIM LONGITUD AS SINGLE DIM AREA AS SINGLE INPUT Introduzca el RADIO: ; RADIO LONGITUD = 2 * PI * RADIO AREA = PI * RADIO ^ 2 PRINT La longitud de la circunferencia es: ; LONGITUD PRINT El rea del crculo es: ; AREA
- 31 -
Metodologa de la Programacin
2. Programa que lee dos nmeros del teclado, calcula y visualiza su suma, resta, producto y divisin.
INICIO
Leer N1, N2
SUMA = N1 + N2
RESTA = N1 - N2
PROD = N1 * N2
DIV = N1 / N2
FIN
DIM N1 AS INTEGER DIM N2 AS INTEGER DIM SUMA AS INTEGER DIM RESTA AS INTEGER DIM PROD AS INTEGER DIM DIV AS SINGLE INPUT Introduzca el primer nmero: ; N1 INPUT Introduzca el segundo nmero: ; N2 SUMA = N1 + N2 RESTA = N1 N2 PROD = N1 * N2 DIV = N1 / N2 PRINT La suma es: ; SUMA PRINT La resta es: ; RESTA PRINT El producto es: ; PROD PRINT La divisin es: ; DIV
- 32 -
Metodologa de la Programacin
Otra posibilidad de codificacin: DIM N1 AS INTEGER DIM N2 AS INTEGER INPUT Introduzca el primer nmero: ; N1 INPUT Introduzca el segundo nmero: ; N2 PRINT La suma es: ; N1 + N2 PRINT La resta es: ; N1 N2 PRINT El producto es: ; N1 * N2 PRINT La divisin es: ; N1 / N2
- 33 -
Metodologa de la Programacin
3. Programa que lee un nmero del teclado, comprueba y visualiza si dicho nmero es nulo, positivo o negativo.
INICIO
Leer N
SI
N=0
NO
SI
N>0
NO
ESCRIBIR "NULO"
Escribir "POSITIVO"
Escribir "NEGATIVO"
FIN
DIM N AS INTEGER INPUT Introduzca un nmero: ; N IF N = 0 THEN PRINT NULO ELSE IF N > 0 THEN PRINT PROSITIVO ELSE PRINT NEGATIVO ENDIF ENDIF
- 34 -
Metodologa de la Programacin
4. Programa que nos permita introducir por teclado un ao y nos indique si es o no bisiesto.
Para saber si un ao es bisiesto, solo tenemos que comprobar si es divisible por 4. Por tanto debemos obtener el resto de dividir el ao entre 4. En BASIC podemos obtenerlo mediante el operador MOD.
INICIO
Leer ANNO
SI
RESTO = 0
NO
FIN
DIM ANNO AS INTEGER DIM RESTO AS SINGLE INPUT Introduzca el ao: ; ANNO RESTO = ANNO MOD 4 IF RESTO = 0 THEN PRINT El ao ; ANNO; es bisiesto ELSE PRINT El ao ; ANNO; no es bisiesto ENDIF
- 35 -
Metodologa de la Programacin
Leer ANNO
SI
(ANNO MOD 4) = 0
NO
FIN
DIM ANNO AS INTEGER INPUT Introduzca el ao: ; ANNO IF (ANNO MOD 4) = 0 THEN PRINT El ao ; ANNO; es bisiesto ELSE PRINT El ao ; ANNO; no es bisiesto ENDIF
- 36 -
Metodologa de la Programacin
5. Programa que lea 3 nmeros y los visualice ordenados ascendentemente. Los nmeros se leen sobre 3 variables A, B, C, visualizndolas en el orden que corresponda.
INICIO
Leer A, B, C
SI
A>B
NO
SI
B>C
NO
SI
B>C
NO
SI
A>C
NO
SI
A>C
NO
ESCRIBIR C, B, A
ESCRIBIR B, C, A
ESCRIBIR B, A, C
ESCRIBIR C, A, B
ESCRIBIR A, C, B
ESCRIBIR A, B, C
FIN
- 37 -
Metodologa de la Programacin
DIM A AS INTEGER DIM B AS INTEGER DIM C AS INTEGER INPUT Introduzca el primer nmero: ; A INPUT Introduzca el segundo nmero: ; B INPUT Introduzca el tercer nmero: ; C IF A > B THEN IF B > C THEN PRINT El orden es: ; C; ; B; ; A ELSE IF A > C THEN PRINT El orden es: ; B; ; C; ; A ELSE PRINT El orden es: ; B; ; A; ; C ENDIF ENDIF ELSE IF B > C THEN IF A > C THEN PRINT El orden es: ; C; ; A; ; B ELSE PRINT El orden es: ; A; ; C; ; B ENDIF ELSE PRINT El orden es: ; A; ; B; ; C ENDIF ENDIF
- 38 -
Metodologa de la Programacin
6. Programa que lee una calificacin entre 0 y 10 y la transforma en nota alfabtica segn la siguiente tabla: Nota numrica 0 <= Nota < 3 3 <= Nota < 5 5 <= Nota < 6 6 <= Nota < 7 7 <= Nota < 9 9 <= Nota <= 10 Nota alfabtica M.D. Ins. Suf. Bien Not. Sob.
INICIO
Leer NOTA
SI
NOTA < 6
NO
SI
NOTA < 5
NO
SI
NOTA < 7
NO
SI
NOTA < 3
NO
SI
NOTA < 9
NO
ESCRIBIR "M.D."
ESCRIBIR "INS."
ESCRIBIR "SUF."
ESCRIBIR "BIEN"
ESCRIBIR "NOT."
ESCRIBIR "SOB."
FIN
- 39 -
Metodologa de la Programacin
DIM NOTA AS SINGLE INPUT Introduzca la nota: ; NOTA IF NOTA < 6 THEN IF NOTA < 5 THEN IF NOTA < 3 THEN PRINT M.D. ELSE PRINT INS. ENDIF ELSE PRINT SUF. ENDIF ELSE IF NOTA < 7 THEN PRINT BIEN ELSE IF NOTA < 9 THEN PRINT NOT. ELSE PRINT SOB. ENDIF ENDIF ENDIF
- 40 -
Metodologa de la Programacin
7. Programa que lea 100 nmeros y cuente cuntos de ellos son positivos. Se utilizan dos contadores, el primero I contabiliza la cantidad de nmeros ledos, y el segundo POSITIVO cuenta el resultado pedido.
INICIO
POSITIVO = 0
I=0
I=I+1
LEER NUM
NUM > 0
SI
NO
POSITIVO = POSITIVO + 1
NO
I = 100
SI
ESCRIBIR POSITIVO
FIN
- 41 -
Metodologa de la Programacin
DIM NUM AS INTEGER DIM POSITIVO AS INTEGER DIM I AS INTEGER POSITIVO = 0 FOR I = 1 TO 100 INPUT Introduzca un nmero: ; NUM IF NUM > 0 THEN POSITIVO = POSITIVO + 1 ENDIF NEXT PRINT Ha introducido ; POSITIVO; nmeros positivos
- 42 -
Metodologa de la Programacin
FAC = 1
LEER NUM
I=0
I=I+1
FAC = FAC * I
NO
I >= NUM
SI
ESCRIBIR FAC
FIN
DIM FAC AS INTEGER DIM NUM AS INTEGER DIM I AS INTEGER FAC = 1 FOR I = 1 TO NUM FAC = FAC * I NEXT PRINT El factorial de ; NUM; es: ; FAC
- 43 -
Metodologa de la Programacin
9. Programa que obtenga el producto de dos nmeros enteros positivos mediante sumas sucesivas.
INICIO
LEER N1, N2
SI
N1 > N2
NO
I=0
I=0
I=I+1
I=I+1
PROD = PROD + N1
PROD = PROD + N2
NO
I >= N2
NO
I >= N1
SI
SI
ESCRIBIR PROD
FIN
- 44 -
Metodologa de la Programacin
DIM N1 AS INTEGER DIM N2 AS INTEGER DIM PROD AS LONG DIM I AS INTEGER INPUT Introduzca el primer nmero: ; N1 INPUT Introduzca el segundo nmero: ; N2 IF N1 > N2 THEN FOR I = 1 TO N2 PROD = PROD + N1 NEXT ELSE FOR I = 1 TO N1 PROD = PROD + N2 NEXT ENDIF PRINT El producto es: ; PROD
- 45 -
Metodologa de la Programacin
10. Programa que calcule y visualice la suma y el producto de los nmeros pares comprendidos entre el 10 y el 20 (ambos inclusive). Se utilizan dos acumuladores SUMA y PROD que totalizan los dos resultados pedidos.
INICIO
SUMA = 0
PROD = 1
I=8
I=I+2
SUMA = SUMA + I
PROD = PROD * I
NO
I = 20
SI
FIN
- 46 -
Metodologa de la Programacin
DIM SUMA AS INTEGER DIM PROD AS INTEGER SUMA = 0 PROD = 1 FOR I = 10 TO 20 STEP 2 SUMA = SUMA + I PROD = PROD * I NEXT PRINT La suma es: ; SUMA PRINT El producto es: ; PROD
- 47 -
Metodologa de la Programacin
11. Programa que lea una secuencia de nmeros no nulos y obtenga el nmero mayor. El programa debe finalizar cuando se lea un 0.
INICIO
LEER NUM
NUM <> 0
SI
NO
NO
SI MAYOR = NUM
LEER NUM
ESCRIBIR MAYOR
FIN
- 48 -
Metodologa de la Programacin
DIM MAYOR AS INTEGER DIM NUM AS INTEGER INPUT Introduzca un nmero: ; NUM WHILE NUM <> 0 IF NUM > MAYOR THEN MAYOR = NUM ENDIF INPUT Introduzca un nmero: ; NUM WEND PRINT El nmero mayor es: ; MAYOR
- 49 -
Metodologa de la Programacin
12. Programa que sume independientemente los pares y los impares de los nmeros comprendidos entre 1 y 100.
INICIO
PAR = 0
IMP = 0
SW = - 1
I=0
I=I+1
SW = - SW
SI
SW = 1
NO
IMP = IMP + I
PAR = PAR + I
NO
I = 100
SI
FIN
- 50 -
Metodologa de la Programacin
DIM PAR AS INTEGER DIM IMP AS INTEGER DIM SW AS INTEGER DIM I AS INTEGER PAR = 0 IMP = 0 SW = - 1 FOR I = 1 TO 100 SW = - SW IF SW = 1 THEN IMP = IMP + I ELSE PAR = PAR + I ENDIF NEXT PRINT La suma de los pares es: ; PAR PRINT La suma de los impares es: ; IMP
- 51 -
Metodologa de la Programacin
EJERCICIOS
PROPUESTOS
- 52 -
Metodologa de la Programacin
Realizar los ordinogramas y programas siguientes: 13. Programa para resolver una ecuacin de primer grado:
Y = Ax + B En primer lugar se leen los coeficientes A, B y, a continuacin, se leen 2 valores de la variable x, obteniendo como resultado las coordenadas cartesianas X, Y de 2 puntos, que nos permitirn representar la recta correspondiente a la ecuacin.
14. Programa para resolver la ecuacin de segundo grado:
Ax2 + Bx + C = 0 Se leen los coeficientes A, B, C y, a partir de ellos, se dan las races de la ecuacin. Representamos la raz cuadrada como la elevacin a la potencia 0.5.
15. Programa que calcule la suma de los N primeros nmeros mayores que cero. 16. Programa que obtenga la lista de los divisores de un nmero N entero positivo. 17. Programa que calcule los nmeros perfectos menores que 1000. Un nmero es perfecto si la suma de sus divisores excepto l mismo es igual al propio nmero. 18. Programa que obtenga el cociente y el resto de dos nmeros enteros positivos mediante restas. 19. Programa que lea una secuencia de nmeros no nulos, terminada con la introduccin de un 0, y obtenga el mayor, visualizando un mensaje de si se ha ledo algn nmero negativo.
El programa consiste en un bucle de lectura, cuya condicin de terminacin es la lectura del nmero 0. Utiliza un interruptor que cambia de valor al detectarse el primer nmero negativo.
20. Programa que determine si dos nmeros enteros positivos son amigos. Dos nmeros son amigos si la suma de los divisores del primero excepto l mismo es igual al segundo y viceversa.
- 53 -
Metodologa de la Programacin
21. Programa que lee un nmero X y otro entero positivo N y calcula la N-sima potencia de X mediante multiplicaciones sucesivas. 22. Programa que genere una lista de los N primeros nmeros primos. El nmero N ser introducido por teclado. 23. Se introducen por teclado una secuencia de informaciones, cada una de ellas compuesta por un nombre y 6 nmeros, correspondientes al nombre de un alumno y las calificaciones que ha obtenido en sus 6 asignaturas. La secuencia termina al introducir el nombre FIN.
Se desea un programa que imprima un listado de calificaciones, en el que ha de figurar el nombre del alumno seguido de su nota media. Finalmente se imprimir la nota media del grupo.
24. Programa que obtenga y visualice la lista de inters producido y capital acumulado anualmente, por un capital inicial C, impuesto con un rdito R durante N aos a inters compuesto.
El inters anual obtenido se calcula mediante la frmula: I = (C * R) / 100 El capital se incrementa cada ao con los intereses producidos en el mismo.
25. Programa que calcule el producto de dos nmeros enteros positivos mediante el denominado algoritmo ruso del producto.
El algoritmo consiste en duplicar el primer factor y dividir (cociente entero) por 2 el segundo, obteniendo un producto equivalente, salvo si el segundo factor es impar, en cuyo caso es necesario acumular previamente el primero en donde se va a obtener el resultado. El proceso termina cuando el segundo factor se hace 0. Ejemplo: 25 * 6 = 150
PRIMER FACTOR 25 50 100 200 SENGUNDO FACTOR 6 3 1 0 ACUMULADOR 0 50 150 150
- 54 -
Metodologa de la Programacin
26. Programa que lea 100 datos, compuesto cada uno de ellos por un nombre de persona y su sueldo neto mensual, y obtenga e imprima el nombre y sueldo de la persona que ms cobra y de la que menos. Si hay varias se imprime la primera que aparezca en la secuencia de entrada. 27. Realizar el ordinograma cclico para calcular volmenes de esfera, realizando en cada ciclo la lectura del radio y la visualizacin del volumen. Al final, indicar cuantos volmenes se han hallado. El programa debe finalizar cuando se introduzca un 0 por teclado.
Leer edades hasta que se introduzca un 0. Contar y sumar los menores de 20 aos. Contar y sumar los que tienen entre 20 y 40 aos. Contar y sumar los que tienen mas de 40 aos. Al final escribir la edad media de cada grupo y del total, el total de edades ledas y la suma total de todas las edades.
29. En BASIC, existe la instruccin SLEEP, la cual permite detener la ejecucin del programa un nmero determinado de segundos. Por ejemplo, para detener la ejecucin durante un segundo, pondramos SLEEP 1. Realizar un programa que simule el funcionamiento de un cronometro. El cronometro tendr una autonoma mxima de 24 horas. 30. Programa que obtenga el total a cobrar por cada uno de los 5 empleados de la empresa Y. La nomina se calcular mediante el siguiente criterio:
Los empleados cobran por horas y semanalmente. Por cada hora trabajada cobraran 1150 pesetas. Por cada hora extra (aquellas que excedan de 40 semanales) cobraran 1675 pesetas.
- 55 -
Metodologa de la Programacin
- 56 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 13
INICIO
LEER A, B, X1, X2
Y1 = A * X1 + B
Y2 = A * X2 + B
FIN
DIM A AS INTEGER DIM B AS INTEGER DIM X1 AS INTEGER DIM X2 AS INTEGER DIM Y1 AS INTEGER DIM Y2 AS INTEGER INPUT Introduzca el coeficiente A: ; A INPUT Introduzca el coeficiente B: ; B INPUT Introduzca el primer valor de X: ; X1 INPUT Introduzca el segundo valor de X: ; X2 Y1 = A * X1 + B Y2 = A * X2 + B PRINT Las coordenadas cartesianas XY son: PRINT X1: ; X1; Y1: ; Y1 PRINT X2: ; X2; Y2: ; Y2
- 57 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 14
INICIO
LEER A, B, C
RAIZ = B^2-4*A*C
SI
RAIZ = 0
NO
SI
RAIZ > 0
NO
X1 = -B/(2*A) X2 = X1
X1 = (-B+RAIZ^0.5)/(2*A) X2 = (-B-RAIZ^0.5)/(2*A)
ESCRIBIR X1, X2
FIN
- 58 -
Metodologa de la Programacin
DIM A AS INTEGER DIM B AS INTEGER DIM C AS INTEGER DIM RAIZ AS SINGLE DIM X1 AS SINGLE DIM X2 AS SINGLE INPUT Introduzca el coeficiente A: ; A INPUT Introduzca el coeficiente B: ; B INPUT Introduzca el coeficiente C: ; C RAIZ = B ^ 2 4 * A * C IF RAIZ = 0 THEN X1 = - B / (2 * A) X2 = X1 PRINT El valor de X1 es: ; X1 PRINT El valor de X2 es: ; X2 ELSE IF RAIZ > 0 THEN X1 = (- B + RAIZ ^ 0.5) / (2 * A) X2 = (- B RAIZ ^ 0.5) / (2 * A) PRINT El valor de X1 es: ; X1 PRINT El valor de X2 es: ; X2 ELSE PRINT RAICES COMPLEJAS ENDIF ENDIF
- 59 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 15
INICIO
SUMA = 0
LEER N
SI N>0
NO I=0
I=I+1
SUMA = SUMA + I
NO I >= N
SI
ESCRIBIR SUMA
FIN
- 60 -
Metodologa de la Programacin
DIM SUMA AS INTEGER DIM I AS INTEGER DIM N AS INTEGER INPUT Introduzca un nmero: ; N IF N > 0 THEN FOR I = 1 TO N SUMA = SUMA + 1 NEXT ENDIF PRINT La suma es: ; SUMA
- 61 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 16
INICIO
LEER N
MITAD = N / 2
I=0
I=I+1
N MOD I = 0
SI
NO
NO
I >= N
SI FIN
- 62 -
Metodologa de la Programacin
DIM MITAD AS INTEGER DIM I AS INTEGER DIM N AS INTEGER INPUT Introduzca un nmero: ; N MITAD = N / 2 FOR I = 1 TO N IF (N MOD I) = 0 THEN PRINT I ENDIF NEXT
- 63 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 17
INICIO
I=0
I=I+1
SUMA = 0
MITAD = I / 2
J=0
J=J+1
I MOD J = 0 NO
SI
SUMA = SUMA + J
NO
J >= MITAD SI SI
SUMA = I NO
NO
- 64 -
Metodologa de la Programacin
DIM I AS INTEGER DIM J AS INTEGER DIM SUMA AS INTEGER DIM MITAD AS INTEGER I=I FOR I = 1 TO 999 SUMA = 0 MITAD = I / 2 FOR J = 1 TO MITAD IF (I MOD J) = 0 THEN SUMA = SUMA + J ENDIF NEXT IF SUMA = I THEN PRINT I ENDIF NEXT
- 65 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 18
INICIO
LEER A, B
COCIENTE = 0
A<B
NO
SI A=A-B
COCIENTE = COCIENTE + 1
COCIENTE, A
FIN
DIM A AS INTEGER, B AS INTEGER, COCIENTE AS INTEGER INPUT Introduzca el primer nmero: ; A INPUT Introduzca el segundo nmero: ; B WHILE A < B A=AB COCIENTE = COCIENTE + 1 WEND PRINT El cociente es: ; COCIENTE PRINT El resto es: ; A
- 66 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 19
INICIO
LEER NUM
MAX = NUM
NUM < 0
NO
SI SW = 1 SW = 0
NUM <> 0
SI
SW = 1
NO
SI
NO
SI ESCRIBIR "HAY NEG." ESCRIBIR "NO HAY NEG." MAX = NUM SI NUM <> 0 NO
SW = 1
FIN
- 67 -
Metodologa de la Programacin
DIM NUM AS INTEGER DIM MAX AS INTEGER DIM SW AS INTEGER INPUT Introduzca un nmero: ; NUM MAX = NUM IF NUM < 0 THEN SW = 1 ELSE SW = 0 ENDIF WHILE NUM <> 0 INPUT Introduzca un nmero: ; NUM IF NUM > MAX THEN MAX = NUM ELSE IF NUM < 0 THEN SW = 1 ENDIF ENDIF WEND PRINT El nmero mayor es: ; MAX IF SW = 1 THEN PRINT Hay nmeros negativos ELSE PRINT No hay nmeros negativos ENDIF
- 68 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 20
INICIO LEER N1, N2 N1 > 0 AND N2 > 0 SI MITAD = N1 / 2 I=0 I=I+1 N1 MOD I = 0 SI SUMA1 = SUMA1 + I NO NO
NO
NO
FIN
- 69 -
Metodologa de la Programacin
DIM N1 AS INTEGER DIM N2 AS INTEGER DIM MITAD AS INTEGER DIM SUMA1 AS INTEGER DIM SUMA2 AS INTEGER DIM I AS INTEGER INPUT Introduzca el primer nmero: ; N1 INPUT Introduzca el segundo nmero: ; N2 IF (N1 > 0) AND (N2 > 0) THEN MITAD = N1 / 2 FOR I = 1 TO MITAD IF (N1 MOD I = 0) THEN SUMA1 = SUMA1 + I ENDIF NEXT MITAD = N2 / 2 FOR I = 1 TO MITAD IF (N2 MOD I = 0) THEN SUMA2 = SUMA2 + I ENDIF NEXT IF (SUMA1 = N2) AND (SUMA2 = N1) THEN PRINT SON AMIGOS ELSE PRINT NO SON AMIGOS ENDIF ELSE PRINT LOS NUMEROS DEBEN SER POSITIVOS ENDIF
- 70 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 21
INICIO
LEER X, N
NO
P=1
N <> 0
NO
SI
ESCRIBIR P
P=P*X
N=N-1
FIN
- 71 -
Metodologa de la Programacin
DIM X AS INTEGER DIM N AS INTEGER DIM P AS INTEGER INPUT Introduzca X: ; X INPUT Introduzca N: ; N P=1 IF (X > 0) AND (N > 0) THEN WHILE N <> 0 P=P*X N=N1 WEND PRINT La potencia es: ; P ELSE PRINT Los nmeros no son positivos ENDIF
- 72 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 22
INICIO NUMERO = 0 DIVISORES = 1 LEER N
PRIMOS < N SI
NO
NUMERO = NUMERO + 1
I=0
I=I+1
NUMERO MOD I = 0 SI
NO
DIVISORES = DIVISORES + 1
NO
I >= NUMERO SI
NO
DIVISORES = 2 SI NUMERO
PRIMOS = PRIMOS + 1
DIVISORES = 0
FIN
- 73 -
Metodologa de la Programacin
DIM NUMERO AS INTEGER DIM DIVISORES AS INTEGER DIM PRIMOS AS INTEGER DIM N AS INTEGER DIM I AS INTEGER NUMERO = 0 DIVISORES = 1 INPUT Introduzca un nmero: ; N WHILE PRIMOS < N NUMERO = NUMERO + 1 FOR I = 0 TO NUMERO IF (NUMERO MOD I) = 0 THEN DIVISORES = DIVISORES + 1 ENDIF NEXT IF DIVISORES = 2 THEN PRINT NUMERO PRIMOS = PRIMOS + 1 ENDIF DIVISORES = 0 WEND
- 74 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 23
INICIO
NUMALUMNOS = 0
NO
NUMALUMNOS = NUMALUMNOS + 1
SUMA = 0
ESCRIBIR MEDIAGRUPO
LEER NOTA
NO
LEER NOMBRE
- 75 -
Metodologa de la Programacin
DIM NOMBRE AS STRING DIM NOTA AS SINGLE DIM NUMALUMNOS AS INTEGER DIM MEDIA AS SINGLE DIM SUMAMEDIA AS SINGLE DIM SUMA AS SINGLE DIM I AS INTEGER CLS NUMALUMNOS = 0 SUMAMEDIA = 0 INPUT Introduzca un nombre: ; NOMBRE WHILE NOMBRE <> FIN NUMALUMNOS = NUMALUMNOS + 1 SUMA = 0 FOR I = 1 TO 6 INPUT Introduzca nota: ; NOTA SUMA = SUMA + NOTA NEXT MEDIA = SUMA / 6 SUMAMEDIA = SUMAMEDIA + MEDIA PRINT Nombre: ; NOMBRE PRINT Media: ; MEDIA INPUT Introduzca un nombre: ; NOMBRE WEND MEDIAGRUPO = SUMAMEDIA / NUMALUMNOS PRINT Media del grupo: ; MEDIAGRUPO
- 76 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 24
INICIO
LEER C, R, N
A=0
A=A+1
INTERES = C * R / 100
C=C+1
ESCRIBIR A, INTERES, C
NO
A=N
SI FIN
DIM C AS INTEGER DIM R AS SINGLE DIM N AS INTEGER DIM I AS INTEGER DIM INTERES AS DOUBLE FOR I = 1 TO N INTERES = C * R / 100 C=C+1 PRINT Ao: ; I; Inters: ; INTERES; Capital: ; C NEXT
- 77 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 25
INICIO
LEER PF, SF
NO
SF <> 0
NO
SI
NO
SF MOD 2 <> 0
ESCRIBIR AC
SI AC = AC + PF
FIN
PF = PF * 2
SF = SF / 2
- 78 -
Metodologa de la Programacin
DIM PF AS INTEGER DIM SF AS INTEGER INPUT Introduzca el primer factor: ; PF INPUT Introduzca el segundo factor: ; SF IF (PF > 0) AND (SF > 0) THEN AC = 0 WHILE SF <> 0 IF SF MOD 2 <> 0 THEN AC = AC +PF ENDIF PF = PF * 2 SF = SF \ 2 WEND PRINT El producto es: ; AC ELSE PRINT Los factores deben ser positivos ENDIF
- 79 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 26
INICIO
LEER NOMBRE, SUELDO NMAX = NOMBRE SMAX = SUELDO NMIN = NOMBRE SMIN = SUELDO
I=1
I=I+1
NO
NO
NO
FIN
- 80 -
Metodologa de la Programacin
DIM NOMBRE AS STRING DIM SUELDO AS LONG DIM NMAX AS STRING DIM SMAX AS LONG DIM NMIN AS STRING DIM SMIN AS LONG DIM I AS INTEGER INPUT Nombre: ; NOMBRE INPUT Sueldo: ; SUELDO NMAX = NOMBRE SMAX = SUELDO NMIN = NOMBRE SMIN = SUELDO FOR I = 2 TO 100 INPUT Nombre: ; NOMBRE INPUT Sueldo: ; SUELDO IF SUELDO > SMAX THEN NMAX = NOMBRE SMAX = SUELDO ELSE IF SUELDO < SMIN THEN NMIN = NOMBRE SMIN = SUELDO ENDIF ENDIF NEXT PRINT Cobra ms: ; NMAX; con ; SMAX; pts PRINT Cobra menos: ; NMIN; con ; SMIN; pts
- 81 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 27
INICIO
CONTADOR = 0 PI = 3.141592
LEER RADIO
RADIO <> 0
NO
SI
FIN ESCRIBIR V
LEER RADIO
CONS PI = 3.141592 DIM CONTADOR AS INTEGER DIM RADIO AS SINGLE DIM V AS SINGLE CONTADOR = 0 INPUT Introduzca el Radio: ; RADIO WHILE RADIO <> 0 V = (4 * PI * R ^ 3) / 3 CONTADOR = CONTADOR + 1 PRINT El volumen es: ; V INPUT Introduzca el Radio: ; RADIO WEND PRINT Se han introducido ; CONTADOR; volmenes
- 82 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 28
INICIO
LEER EDAD
EDAD <> 0
NO
SI
EDAD >= 0 AND EDAD < 20 SI ACU1 = ACU1 + EDAD CONT1 = CONT1 + 1
FIN EDAD >= 20 AND EDAD <= 40 SI ACU2 = ACU2 + EDAD CONT2 = CONT2 + 1 ACU3 = ACU3 + EDAD CONT3 = CONT3 + 1 NO
LEER EDAD
- 83 -
Metodologa de la Programacin
DIM ACU1 AS INTEGER, ACU2 AS INTEGER, ACU3 AS INTEGER DIM CONT1 AS INTEGER, CONT2 AS INTEGER, CONT3 AS INTEGER DIM EDAD AS INTEGER ACU1 = 0 ACU2 = 0 ACU3 = 0 CONT1 = 0 CONT2 = 0 CONT3 = 0 INPUT Introduzca la edad: ; EDAD WHILE EDAD <> 0 IF (EDAD >= 0) AND (EDAD < 20) THEN ACU1 = ACU1 + EDAD ELSE IF (EDAD >= 20) AND (EDAD <= 40) THEN ACU2 = ACU2 + EDAD CONT2 = CONT2 + 1 ELSE ACU3 = ACU3 + EDAD CONT3 = CONT3 + 1 ENDIF ENDIF INPUT Introduzca la edad: ; EDAD WEND PRINT Media de los menores de 20: ; ACU1 / CONT1 PRINT Media de los que tienen entre 20 y 40: ; ACU2 / CONT2 PRINT Media de los que tienen mas de 40: ; ACU3 / CONT3 PRINT Media total: ; (ACU1 + ACU2 + ACU3) / (CONT1 + CONT2 + CONT3) PRINT Total de edades ledas: ; CONT1 + CONT2 + CONT3 PRINT Suma total de todas las edades: ; ACU1 + ACU2 + ACU3
- 84 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 29
INICIO
H = -1
H=H+1
M = -1
M=M+1
S = -1
S=S+1
SLEEP 1
BORRAR PANTALLA
NO
S = 59 SI
NO
M = 59 SI
NO
H = 23 SI FIN
- 85 -
Metodologa de la Programacin
DIM H AS INTEGER DIM M AS INTEGER DIM S AS INTEGER FOR H = 0 TO 23 FOR M = 0 TO 59 FOR S = 0 TO 59 SLEEP 1 CLS PRINT H; :; M; :; S NEXT NEXT NEXT
- 86 -
Metodologa de la Programacin
SOLUCION AL EJERCICIO 30
INICIO
I=0
I=I+1
HORAS > 40
NO
NO
I=5
SI
FIN
- 87 -
Metodologa de la Programacin
DIM NOMBRE AS STRING DIM SUELDO AS INTEGER DIM HORAS AS SINGLE FOR I = 1 TO 5 INPUT Introduzca el nombre: ; NOMBRE INPUT Introduzca horas: ; IF HORAS > 40 THEN SUELDO = (HORAS 40) * 1675 + 40 * 1150 ELSE SUELDO = HORAS * 1150 ENDIF PRINT El empleado ; NOMBRE; tiene un sueldo de ; SUELDO NEXT
- 88 -
Metodologa de la Programacin
CAPITULO
Hasta ahora, los datos manejados en los programas han sido los denominados datos simples (numricos o alfanumricos). En un gran nmero de problemas es necesario manejar un conjunto de datos, ms o menos grande, que estn relacionados entre s, de tal forma que constituyen una unidad para su tratamiento. Por ejemplo, si se quiere manipular una lista de 100 nombres de personas, es conveniente tratar este conjunto de datos de forma unitaria en lugar de utilizar 100 variables, una para cada dato simple. Un conjunto de datos homogneos que se tratan como una sola unidad se denomina estructura de datos. Si una estructura de datos reside en la memoria central del ordenador, se denomina estructura de datos interna. Recprocamente si reside en un soporte externo, se denomina estructura de datos externa. La estructura de datos interna ms importante desde el punto de vista de utilizacin es la tabla, que existe en la prctica totalidad de los lenguajes de programacin. Esta estructura se corresponde con los conceptos matemticos de vector, matriz y poliedro.
- 89 -
Metodologa de la Programacin
Conceptos y definiciones
Una tabla consiste en un nmero fijo, finito y ordenado de elementos, todos del mismo tipo y bajo un nombre comn para todos ellos. Se denominan componentes a los elementos de una tabla. La posicin de cada componente dentro de la tabla viene determinada por uno o varios ndice. A cada componente se puede acceder de forma directa indicando sus ndices y el nombre de la tabla. Una tabla se puede estructurar en una, dos o ms dimensiones segn el nmero de ndices necesarios para acceder a sus elementos. Por lo tanto, la dimensin de una tabla es el nmero de ndices que utiliza.
Longitud o tamao de una tabla es el nmero de componentes que contiene.
El tipo de una tabla es el tipo de sus componentes. Las componentes de una tabla se utilizan de la misma forma que cualquier otra variable de un programa, pudiendo por tanto intervenir en instrucciones de asignacin, entrada/salida, etc.
Ejemplo:
Figura 21
TABLA: La estructura de datos representada. NOMBRE DE LA TABLA: ALUMNOS. COMPONENTES: ALUMNOS(1), ALUMNOS(2), ALUMNOS(3), ALUMNOS(4). INDICE: Los nmeros del 1 al 4 que direccionan cada componente. DIMENSION: Una. LONGITUD: Cuatro. TIPO: Alfanumrica. En los diferentes lenguajes de programacin hay que declarar las tablas antes de su utilizacin.
- 90 -
Metodologa de la Programacin
Hay que tener en cuenta que los valores de los ndices pueden variar de un lenguaje a otro, es decir, existen lenguajes de programacin donde el primer valor del ndice es el 0 y existen otros lenguajes donde el primer valor del ndice es el 1.
Ejemplo:
Para aquellos lenguajes donde el valor del primer ndice es 0, los componentes de la tabla del ejemplo anterior sera: ALUMNOS(0) = LUIS ALUMNOS(1) = JOSE ALUMNOS(2) = ROSA ALUMNOS(3) = JUAN Para aquellos lenguajes donde el valor del primer ndice es 1, los componentes de la tabla del ejemplo anterior sera: ALUMNOS(1) = LUIS ALUMNOS(2) = JOSE ALUMNOS(3) = ROSA ALUMNOS(4) = JUAN En BASIC y VISUAL BASIC, el valor del primer ndice en las tablas, comienza en el valor 0. As, la declaracin de la tabla del ejemplo sera la siguiente:
DIM ALUMNOS(3) AS STRING
Tipos de tablas
Las tablas se clasifican segn su dimensin en: Unidimensionales. Bidimensionales. Multidimensionales.
Tablas unidimensionales
Son tablas de una dimensin. Tambin se denominan vectores.
- 91 -
Metodologa de la Programacin
Tienen un solo ndice. Cada componente del vector se direcciona mediante su nombre seguido del nmero correspondiente al ndice entre parntesis. El ejemplo anterior nos muestra una tabla de este tipo, en la cual la componente tercera que contiene el valor ROSA se denota por:
ALUMOS(3)
Si queremos intercambiar los contenidos de las componentes primera y segunda, lo haremos utilizando una variable alfanumrica auxiliar AUX de la siguiente manera:
AUX = ALUMNOS(1) ALUMNOS(1) = ALUMNOS(2) ALUMNOS(2) = AUX
Tablas bidimensionales
Son tablas de dos dimensiones. Tambin se denominan matrices. Tienen dos ndices, por lo cual cada componente de la matriz se direcciona mediante su nombre seguido de los dos ndices separados por coma y entre parntesis.
Ejemplo:
Matriz de 4 filas y 8 columnas conteniendo el nmero de alumnos matriculados en cada grupo de un centro docente por asignatura. Las filas corresponden a los grupos y las columnas a las asignaturas.
MATRICULA 1 2 3 4 35 40 25 33 1 30 33 23 33 2 32 40 26 33 3 32 37 21 32 4 34 36 24 34 5 35 39 24 30 6 34 40 25 32 7 28 29 15 20 8
Figura 22
- 92 -
Metodologa de la Programacin
NOMBRE DE LA TABLA: MATRICULA COMPONENTES: MATRICULA(1,1), MATRICULA(1,2), ..., MATRICULA(4,7), MATRICULA(4,8). INDICE: Los nmeros del 1 al 4 para las filas y los nmeros 1 al 8 para las columnas. DIMENSION: Dos. LONGITUD: 6 * 8 = 48 TIPO: Numrica entera. La componente MATRICULA(4, 6) almacena el nmero de alumnos matriculados en el grupo nmero 4 en la asignatura nmero 6, que en el ejemplo representado son 30 alumnos. En BASIC y VISUAL BASIC, el valor del primer ndice en las tablas, comienza en el valor 0. As, la declaracin de la tabla del ejemplo sera la siguiente:
DIM MATRICULA(3, 7) AS INTEGER
Para las filas, las declaramos con valor 3, aunque el nmero de componentes es 4, y para las columnas, las declaramos con valor 7, aunque el nmero de componentes es 8.
Tablas multidimensionales
Son tablas de tres o ms dimensiones. Tambin se les denominan poliedros. Este tipo de tablas no son de uso frecuente, no obstante es una herramienta til para un determinado nmero de problemas. La mayora de los lenguajes de programacin admiten estas estructuras, aunque cada uno de ellos tiene una limitacin con respecto al nmero mximo de dimensiones permitidas.
- 93 -
Metodologa de la Programacin
EJERCICIOS
RESUELTOS
- 94 -
Metodologa de la Programacin
31. Realizar el ordinograma y la codificacin en BASIC, de una aplicacin que realice los siguiente: 1 Debemos visualizar un men de opciones: MENU DE OPCIONES 1. Introducir notas. 2. Realizar la media de las notas. 3. Salir Seleccione una opcin 2 El programa deber seguir en ejecucin hasta que seleccionemos la opcin nmero 3. 3 En la opcin nmero 1, debemos introducir 10 notas de exmenes y las almacenaremos en un vector. 4 En la opcin nmero 2, debemos realizar la media de las notas previamente introducidas en el vector. Debemos tener en cuenta la posibilidad de que el usuario, no haya introducido ninguna nota, en cuyo caso, visualizaremos un mensaje de advertencia y por tanto, no realizara la media. NOTAS: - Las opciones del men, debern ser controladas mediante SELECT CASE. - Una vez realizada cualquiera de las dos primeras opciones, el men deber volver a visualizarse.
- 95 -
Metodologa de la Programacin
INICIO
SW = 0 A CU = 0 LEER NUM
NUM <> 3 NO
S I
SW = 1 SW = 1 I = -1 I = -1 I=I+1 I=I+1 LEER NOT A S(I) ACU = A CU + NOT A S(I) NO I >= 9 NO S I I >= 9 S I E SCRIBIR A CU / 10
A CU = 0
SW = 0
LEER OP CION
- 96 -
Metodologa de la Programacin
DIM NUM AS INTEGER DIM NOTAS AS SINGLE DIM I AS INTEGER DIM ACU AS INTEGER DIM SW AS INTEGER SW = 0 ACU = 0 PRINT MENU DE OPCIONES PRINT 1. Introducir notas PRINT 2. Realizar La media de las notas PRINT 3. Salir INPUT Seleccione una opcin:; NUM WHILE num <> 3 SELECT CASE num CASE 1 SW = 1 FOR I = 0 TO 9 INPUT Introduce la nota:; NOTAS(I) NEXT CASE 2 IF SW = 1 THEN FOR I = 0 TO 9 ACU = ACU + NOTAS(I) NEXT PRINT La nota media es: ; ACU / 10 ELSE PRINT Introduce antes las notas END IF CASE ELSE PRINT Opcin no correcta END SELECT PRINT MENU DE OPCIONES PRINT 1. Introducir notas PRINT 2. Realizar La media de las notas PRINT 3. Salir INPUT Seleccione una opcin:; NUM WEND
- 97 -
Metodologa de la Programacin
32. Programa que lee una secuencia de 10 nmeros almacenndolos en un vector llamado NUMEROS y los visualiza en orden inverso al de entrada.
INICIO
I = -1
I=I+1
LEER NUMEROS(I)
NO
I >= 9
S I I = 10
I=I-1
ESCRIBIR NUMEROS
NO
I <= 0
S I FIN
- 98 -
Metodologa de la Programacin
DIM I AS INTEGER DIM NUMEROS AS INTEGER FOR I = 0 TO 9 INPUT Introduce un nmero: ; NUMEROS(I) NEXT PRINT El orden inverso de entrada es: FOR I = 9 TO 0 STEP 1 PRINT NUMEROS(I) NEXT
- 99 -
Metodologa de la Programacin
33. Se introduce por teclado una secuencia de calificaciones (nmeros ENTEROS entre 0 y 10). La secuencia se termina cuando se introduce un nmero menor que 0 o mayor que 10. Disear un programa que obtenga y visualice la lista de frecuencias (nmero de repeticiones) de cada una de las notas.
INICIO
LEER NUM
S I
I=I+1
LEER NUM
NO
I >= 10
S I
FIN
- 100 -
Metodologa de la Programacin
DIM NUM AS INTEGER DIM NOTA AS INTEGER DIM I AS INTEGER INPUT Introduce la nota (0-10): ; NUM WHILE (NUM >= 0) AND (NUM <= 10) NOTA(NUM) = NOTA(NUM) + 1 INPUT Introduce la nota (0-10):; NUM WEND FOR I = 0 TO 10 PRINT La nota ; I; ha sido introducida ; NOTA(I); veces NEXT
- 101 -
Metodologa de la Programacin
34. Con la misma tabla del ejercicio anterior, disear un programa que obtenga y visualice los siguientes datos estadsticos: media aritmtica, y moda. Media Aritmtica: Es el cociente entre la suma de valores por su frecuencia y la suma de frecuencias. Moda: Valor de mxima frecuencia.
- 102 -
Metodologa de la Programacin
INICIO
LE E R NUM
SI
I = -1
MA Y OR = NOT A S (NUM)
NOT A (I) = MA Y OR
NO
SI
LE E R NUM
NOT A (I)
NO
I >= 10
SI
FIN
- 103 -
Metodologa de la Programacin
DIM NUM AS INTEGER DIM NOTA(10) AS INTEGER DIM I AS INTEGER INPUT Introduce la nota (0-10): ; NUM WHILE (NUM >= 0) AND (NUM <= 10) NOTA(NUM) = NOTA(NUM) + 1 IF NOTA(NUM) > MAYOR THEN MAYOR = NOTA(NUM) END IF INPUT Introduce la nota (0-10): ; NUM WEND FOR I = 0 TO 10 SUMAF = SUMAF + NOTA(I) SUMAM = SUMAM + (NOTA(I) * I) IF NOTAS(I) = MAYOR THEN PRINT I; es el valor de mayor frecuencia con ; NOTA(I); veces END IF NEXT PRINT La media aritmtica es: ; SUMAM / SUMAF
- 104 -
Metodologa de la Programacin
35. Programa que recibe como dato un nmero entero positivo, correspondiente a una cantidad de dinero, calcula y visualiza el mejor desglose de moneda (mnimo nmero de unidades monetarias). Las unidades monetarias existentes son: 10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 2, 1 El programa almacenar estas cantidades ordenadas en un vector y desglosar la cantidad en orden decreciente de las componentes del vector.
- 105 -
Metodologa de la Programacin
INICIO
CANTIDAD = 0
CARGAR VECTOR
LEER NUM
I = -1
I=I+1
CANTIDAD<>0 SI
NO
ESCRIBIR CANTIDAD
CANTIDAD = 0
I >= 12 SI FIN
NO
- 106 -
Metodologa de la Programacin
DIM MONEDA(12) AS INTEGER DIM NUM AS INTEGER DIM I AS INTEGER DIM CANTIDAD AS INTEGER MONEDA(0) = 10000 MONEDA(1) = 5000 MONEDA(2) = 2000 MONEDA(3) = 1000 MONEDA(4) = 500 MONEDA(5) = 200 MONEDA(6) = 100 MONEDA(7) = 50 MONEDA(8) = 25 MONEDA(9) = 10 MONEDA(10) = 5 MONEDA(11) = 2 MONEDA(12) = 1 INPUT Introduce la cantidad: ; NUM FOR I = 0 TO 12 CANTIDAD = NUM \ MONEDA(I) IF CANTIDAD <> 0 THEN NUM = NUM MOD MONEDA(I) PRINT CANTIDAD billetes / monedas de ; MONEDA(I); pesetas CANTIDAD = 0 END IF NEXT Con WHILE DIM MONEDA(12) AS INTEGER DIM NUM AS INTEGER DIM I AS INTEGER DIM CANTIDAD AS INTEGER MONEDA(0) = 10000 MONEDA(1) = 5000 MONEDA(2) = 2000 MONEDA(3) = 1000 MONEDA(4) = 500 MONEDA(5) = 200 MONEDA(6) = 100 MONEDA(7) = 50 MONEDA(8) = 25 MONEDA(9) = 10 MONEDA(10) = 5 MONEDA(11) = 2 MONEDA(12) = 1 INPUT Introduce la cantidad: ; NUM WHILE NUM <> 0 CANTIDAD = NUM \ MONEDA(I) IF CANTIDAD <> 0 THEN NUM =NUM MOD MONEDA(I) PRINT CANTIDAD billetes / monedas de ; MONEDA(I); pesetas I=I+1 END IF WEND
- 107 -
Metodologa de la Programacin
36. En BASIC, podemos cargar automticamente un vector de la siguiente manera ... ... ... DATA 1, 8, 9, 0, 3, 2, 5, 2 FOR I = 0 TO 7 READ COMPONENTE VECTOR(I) = COMPONENTE NEXT ... ... ... La lnea DATA contiene los valores de cada componente y la lnea READ lee los valores de cada componente. Luego la componente leda, se almacena en el vector que recibe el nombre de VECTOR. Programa que lea 20 nmeros enteros sobre un vector existente en memoria y obtenga cules son el mayor y el menor nmero almacenado, y cuntas veces se repiten ambos.
- 108 -
Metodologa de la Programacin
INICIO
I = -1
I=I+1
NO
NO
NO
CONTA = CONTA + 1
MAYOR = VECTOR(I)
MENOR = VECTOR(I) SI
CONTA = CONTA + 1
CONTAM = CONTAM + 1
CONTAM = CONTAM + 1
NO
I <= 19 SI
FIN
- 109 -
Metodologa de la Programacin
DIM VECTOR(19) AS INTEGER DIM I AS INTEGER DIM MAYOR AS INTEGER DIM MENOR AS INTEGER DIM CONTA AS INTEGER DIM CONTAM AS INTEGER DATA 8, 3, 5, 1, 4, 7, 25, 34, 1, 2, 0, 34, 60, 120, 5, 2, 1, 0, 2, 0 FOR I = 0 TO 19 READ COMPONENTE VECTOR(I) = COMPONENTE NEXT MAYOR = VECTOR(0) MENOR = VECTOR(0) FOR I = 0 TO 19 IF VECTOR(I) >= MAYOR THEN IF VECTOR > MAYOR THEN CONTA = 0 MAYOR = VECTOR(I) CONTA = CONTA + 1 ELSE CONTA = CONTA + 1 END IF ELSE IF VECTOR(I) < MENOR THEN CONTAM = 0 MENOR = VECTOR(I) CONTAM = CONTAM + 1 ELSE IF VECTOR(I) = MENOR THEN CONTAM = CONTAM + 1 END IF END IF END IF NEXT PRINT MAYOR; es el nmero mayor. Se repite ; CONTA; vez/veces PRINT MENOR; es el nmero menor. Se repite ; CONTAM; vez/veces
- 110 -
Metodologa de la Programacin
37. Programa que carga una matriz de 5 filas y 3 columnas con nmeros enteros, visualizando los valores mximo y mnimo, y sus posiciones dentro de la tabla.
- 111 -
Metodologa de la Programacin
INICIO
MAYOR = 0 MENOR = 0
CARGAR MATRIZ
I = -1
I=I+1
J = -1
J=J+1
NO
NO
NO
J >= 2
SI NO I >= 4
FIN
- 112 -
Metodologa de la Programacin
DIM MATRIZ(4, 2) AS INTEGER DIM MAYOR AS INTEGER DIM MENOR AS INTEGER DIM I AS INTEGER DIM J AS INTEGER DIM MAYORPOSI AS INTEGER DIM MAYORPOSJ AS INTEGER DIM MENORPOSI AS INTEGER DIM MENORPOSJ AS INTEGER DATA 3, 7, 8, 1, 32, 105, 20, 60, 25, 3, 2, 20, 1, 105, 15 FOR I = 0 TO 4 FOR J = 0 TO 2 READ COMPONENTE MATRIZ(I, J) = COMPONENTE NEXT NEXT MAYOR = MATRIZ(0,0) MENOR = MATRIZ(0,0) FOR I = 0 TO 4 FOR J = 0 TO 2 IF MATRIZ(I, J) > MAYOR THEN MAYOR = MATRIZ(I, J) MAYORPOSI = I MAYORPOSJ = J ELSE IF MATRIZ(I, J) < MENOR THEN MENOR = MATRIZ(I, J) MENORPOSI = I MENORPOSJ = J END IF END IF NEXT NEXT PRINT MAYOR; es el nmero mayor. Posicin (; MAYORPOSI; ,; MAYORPOSJ; ) PRINT MENOR; es el nmero menor. Posicin (; MENORPOSI; ,; MENORPOSJ; )
- 113 -
Metodologa de la Programacin
38. Programa que genere y visualice una matriz unitaria de orden N. Una matriz unitaria de orden N es la que tiene N filas y N columnas con todas sus componentes a 0 excepto las de su diagonal principal, que estn a 1.
- 114 -
Metodologa de la Programacin
INICIO
I = -1
I=I+1
J = -1
J=J+1
SI
I=J
NO
MATRIZ(I, J) = 1
MATRIZ(I, J) = 0
ESCRIBIR 1
ESCRIBIR 0
NO
J >= N
SI
NO I >= N SI
FIN
- 115 -
Metodologa de la Programacin
39. Programa que cargue un vector de 10 elementos. Una vez cargados, se deber rotar todas sus componentes un lugar hacia su derecha, teniendo en cuenta que la ltima componente se ha de desplazar al primer lugar.
- 116 -
Metodologa de la Programacin
INICIO
CARGAR VECTOR
AUX = VECTOR(9)
I = 10
I=I-1
VECTOR(I) = VECTOR(I - 1)
NO
I <= 1
SI VECTOR(0) = AUX
I = -1
I=I+1
ESCRIBIR
NO I <= 1
SI
FIN
- 117 -
Metodologa de la Programacin
DIM VECTOR(9) AS INTEGER DIM I AS INTEGER DIM AUX AS INTEGER DATA 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 FOR I = 0 TO 9 READ VECTOR(I) NEXT AUX = VECTOR(9) FOR I = 9 TO 1 STEP 1 VECTOR(I) = VECTOR(I 1) NEXT VECTOR(0) = AUX FOR I = 1 TO 9 PRINT VECTO(I) NEXT
- 118 -
Metodologa de la Programacin
40. Dado un vector numrico de 10 componentes, obtener la posicin que ocupa el primer nmero negativo, si existe.
INICIO
CARGAR VECTOR
SW = 0 I=0
NO
NO VECTOR(I) < 0 SW = 1
NO
SI
SI
SW = 1
I=I+1
FIN
- 119 -
Metodologa de la Programacin
DIM I AS INTEGER DIM VECTOR(9) AS INTEGER DATA 3, 8, 1, -4, 10, 34, -7, 16, -9, 10 FOR I = 0 TO 9 READ VECTOR(I) NEXT SW = 0 I=0 WHILE (SW = 0) AND (I <= 9) IF VECTOR(I) < 0 THEN SW = 1 END IF I=I+1 WEND IF SW = 1 THEN PRINT El primer nmero negativo es ; VECTOR(I 1); en la posicin ; (I 1) ELSE PRINT No hay nmeros negativos END IF
- 120 -