Professional Documents
Culture Documents
FACULTAD DE INGENIERÍA
DIVISIÓN DE MATERIAS PROPEDÉUTICAS
PROGRAMACIÓN BÁSICA
Notas de complementación para el curso
Docentes:
I.- Introducción
2
INTRODUCCIÓN
El presente trabajo tiene como objetivo apoyar a los alumnos de la materia de programación básica proporcionando los conocimientos
básicos en el área de programación, de la misma forma se busca que el alumno refuerce los conocimientos que han sido adquiridos en
clase.
El contenido del trabajo está dividido en cuatro unidades principales en las cuales se abordan desde los fundamentos teóricos hasta su
aplicación en la elaboración de algoritmos para su implementación en los sistemas, la primera unidad define los conceptos básicos de la
programación y su correspondiente uso, por otra parte en la segunda unidad se da una descripción general de lo que son las estructuras
de control utilizadas al momento de realizar un programa; esta sección cuenta con una serie de ejemplos que hacen que el funcionamiento
de estas estructuras sea entendido de una mejor forma, además se dan algunas recomendaciones al querer hacer uso de estas
estructuras.
En la tercera unidad se aborda el tema de las estructuras estáticas más utilizadas al momento de realizar un programa, su
funcionamiento es descrito con el desarrollo ejemplos y recomendaciones útiles.
Finalmente en la cuarta unidad se describe de forma general el uso de la programación modular, especificando y detallando el manejo e
implementación de cada uno de sus componentes, utilizando para ello un ejemplo que permite esquematizar su funcionamiento.
3
UNIDAD I
DEFINICIONES
1.- Algoritmo
Es una manera formal y sistemática de representar la descripción de un proceso se caracteriza por hacerlo mediante una serie de pasos.
Características de un algoritmo
Definido: Todas las acciones deberán estar rigurosamente especificadas por medio de un lenguaje formalmente definido.
Preciso: siempre debe de tener el mismo orden en la ejecución de cada uno de los pasos
Eficiente: Todas las operaciones a ejecutar deberán ser ejecutadas por cualquier persona en cualquier tiempo finito.
Tiene entradas: Un algoritmo tiene cero o más entradas que son usadas mediante la ejecución.
Tiene salidas: Un algoritmo tiene una o más salidas que son producidas como resultado de su ejecución.
2.- Pseudocódigo
Es la descripción del algoritmo realizada en un lenguaje informal es decir un lenguaje que sea neutro (independiente del mecanismo en el
que se solucionara el problema) y completo (que cuente con la capacidad de representar cualquier idea).
4
3.- Programa
Es la descripción de un algoritmo en un lenguaje de programación, que sea capaz de optimizar cada uno de los pasos del algoritmo para
que sea entendido por la computadora.
Existen diversos tipos de programas, dependiendo del objetivo y del lenguaje que se utilice para realizar un programa:
Fuente: Es el programa escrito por el programador tomando como base el algoritmo realizado, es el primero que se introduce en
la computadora para que realice las instrucciones deseadas, además de ser independiente de la computadora donde lo ingresemos
ya que se introduce en un programa “editor”, o IDE.
Objeto: Es el producido desde el programa fuente por medio de un proceso que se denomina compilación, en este proceso cada
uno de los pasos (instrucciones) que el programador introduce en el programa fuente son traducidos a operaciones que la
computadora interpreta directamente.
Ejecutable (binario): Es el producido mediante el programa objeto que se genera en un proceso llamado “montaje”, este proceso
es realizado en un programa montador o linker, en este proceso se realiza una especie de liga que une al programa objeto con
código que se encuentra dentro de la biblioteca del sistema (System Library) y que ayuda para la realización de las operaciones
que son necesarias para que el programa funcione correctamente algunas de estas funciones son: la lectura del teclado, escritura
en la pantalla, la realización de operaciones aritméticas entre otras.
De utilidad: Son programas que son utilizados por cualquier aplicación (programa), son de uso general, algunos ejemplos de estos
programas son: compiladores, editores, montadores, etc.
5
4.- Lenguaje de programación
Es el lenguaje utilizado por el programador para ingresar las instrucciones a la computadora para la ejecución correcta del algoritmo, y
que a su vez genera el código fuente.
Existen diversos lenguajes de programación que se clasifican de acuerdo a las instrucciones y gramática que servirá para la codificación
del algoritmo. Los lenguajes se clasifican en tres grandes grupos:
Lenguaje maquina: Son los lenguajes entendibles directamente por la computadora, las instrucciones en este lenguaje son expresados
en términos de la unidad más pequeña (bit) es decir en ceros y unos, algunos ejemplos de instrucciones de este lenguaje son:
Este lenguaje es muy complicado para entenderse por un programador pero muy fácil para una computadora.
Lenguajes de bajo nivel (ensambladores): Son lenguajes generalmente dependientes de la maquina, este tipo de lenguajes simplifica
en gran manera la interpretación del lenguaje maquina ya que asocia a cada grupo de bits una instrucción a ser realizada por la
computadora estas instrucciones son conocidas como nemónicos o nemotécnicos algunos ejemplos son: ADD (suma), SUB (resta), MPY
(multiplicar), etc. Un ejemplo más completo seria:
6
Después que el programa ha sido escrito en un lenguaje ensamblador se necesita de un programa llamado ensamblador que lo traduzca a
código máquina.
Lenguajes de alto nivel: Son lenguajes en donde las instrucciones son escritas en lenguaje parecido al de los humanos, en general al
lenguaje inglés, esto facilita mucho la lectura y escritura de programas. Algunos ejemplos de instrucciones son: IF, ELSE,
THEN, WHILE, REPEAT, etc. ADA, BASIC, COBOL, FORTRAN, C, PASCAL entre otros, son ejemplos de algunos de estos lenguajes.
En general se puede ver la acción de un programador en la siguiente imagen
7
5.- Sentencia
Es la unidad mínima o elemental de un lenguaje e indica una norma procesal, para la forma específica de trato de un elemento en una
operación. La precisión de las sentencias determina la precisión de la ejecución del programa y para conseguirla deben ajustarse a una
sintaxis muy concreta. En general, las sentencias se clasifican en ejecutables (especifican operaciones de cálculos aritméticos y
entrada/salida de datos) y no ejecutables (no realizan acciones concretas, ayudan a la legibilidad del programa, pero no afecta en la
ejecución del programa).
Sentencia de entrada.- Es aquella que permite el ingreso de datos, para el caso del lenguaje informal su sintaxis es:
lee nombre_variable
Sentencia de salida.- Es aquella que permite mostrar en un dispositivo de salida un mensaje y/o un valor de una variable, para el
caso de lenguaje informal su sintaxis es:
escribe [“texto”] ó [“texto” , variable] ó [variable , “texto”]
Sentencia de asignación.- Es aquella que permite guardar un valor constante o el resultado de una expresión en un identificador
de variable, para el lenguaje informal la sintaxis es:
variable ← constante ó expresión (la variable toma el valor de la constante o expresión)
Sentencia de control.- Es aquella que define el flujo de acciones a ser realizadas por el procesador
6.- Identificador
El nombre de un elemento dentro de un programa, si el nombre hace referencia a una variable se le conoce como identificador de
variable, los identificadores representan los objetos de un programa (constantes, variables, tipos de datos, procedimientos, funciones,
unidades, programas, etc.). Un identificador se caracteriza por estas reglas:
Debe comenzar con una letra (A a Z, mayúsculas o minúsculas) y no puede contener espacios en blanco
Letras, dígitos y caracteres subrayados ( _ ) están permitidos después del primer carácter
8
No se puede utilizar una palabra reservada
nombre
letras
CONT
A_B_C
nombre_apellido
Una constante es un valor que no puede cambiar durante la ejecución del programa, recibe un valor en el momento de la compilación del
programa y este valor no puede ser modificado
Las variables son objetos de un programa cuyo valor puede cambiar durante la ejecución del programa. El cambio se produce mediante
sentencias ejecutables.
9
8.- Contador y Acumulador
Contador: Un contador es un variable que se incrementa, cuando se ejecuta, en una unidad o en una unidad constante.
Ejemplo:
contador ←25
contador ←Contador + 1 (el valor final de contador será 26)
9.- Expresiones
Se denomina expresión a toda combinación de símbolos, números y signos operatorios. Según la naturaleza de estos signos operatorios
las expresiones se clasifican en: algebraicas, relacionales y lógicas. La mayoría de los signos operatorios son binarios esto es requieren
de 2 operandos. Las expresiones se evalúan de izquierda a derecha y de acuerdo a la precedencia de los signos operatorios. La
precedencia de un signo operatorio es la que indica el orden de realización de cada operación dentro de una expresión.
10
Signos operatorios aritméticos
Signos operatorios relacionales
11
Signos operatorios lógicos
1. Un operando entre dos signos operatorios de diferente precedencia es afectado por el de mayor precedencia
2. Un operando entre dos signos operatorios de igual precedencia es afectado por el que está a la izquierda
3. Las expresiones entre paréntesis son evaluadas antes que cualquier expresión
Nota: El valor de precedencia que tiene cada uno de los signos se muestra en los rectángulos que están en la parte izquierda de cada tabla
12
10.- Comentarios
La legibilidad de los programas aumenta considerablemente utilizando comentarios. Los comentarios es un texto explicativo, situado en el
programa e ignorado por el compilador. Los comentarios no se consideran (son invisibles) en la fase de compilación y ejecución, pero es de
gran importancia en la fase de análisis, y mantenimiento. Los comentarios son una parte importante de la documentación de un programa
ya que ayuda al programador a entender y comprender el programa.
Un diagrama de flujo (flowchart) es una representación grafica del algoritmo y muestra como fluye este de principio a fin. Los símbolos
utilizados han sido normalizados por el Instituto Norteamericano de Normalización (ANSI).
13
Para unir un diagrama de flujo en la misma página (primero), o en otra página (segundo). Se les conoce como
conectores
14
Fase de solución.- En base a los requerimientos de un usuario se crea o se busca un método computacional de solución
Inicio.- Todo problema surge debido a las necesidades de un usuario de automatizar procesos que involucran el manejo masivo de
información.
Planteamiento del problema.- Consiste en plantear formalmente el problema a través de una especificación detallada de las entradas a
procesar, las principales funciones de procesamiento a efectuar y las salidas a producir. Definir además las condiciones de excepción que
deberán satisfacer las entradas y como serán tratadas dichas excepciones.
Pruebas del algoritmo.- Permiten determinar el grado de corrección del algoritmo y verificar la satisfacción de las necesidades del
usuario.
Fase de Implantación.- Una vez definido el método computacional de solución, se determina el lenguaje de programación a utilizar de
acuerdo al mecanismo en el que será resuelto el problema
Codificación del algoritmo.- Es la traducción del algoritmo escrito en lenguaje informal a su equivalente en lenguaje de programación.
Consiste en capturar la codificación y guardarla en algún medio de almacenamiento de la computadora generándose el programa fuente
Pruebas del programa.- Es una actividad computarizada iterativa de revisión sintáctica del programa fuente, que involucra su entrada al
compilador y la corrección de errores hasta que el programa sea sintácticamente valido generándose el programa objeto o ejecutable
equivalente.
15
Programa en operación.- Consiste en instalar el programa y sus archivos en la institución representada por el usuario que solicitó la
aplicación.
Retroalimentación.- Una vez evaluado el funcionamiento del programa mediante el cumplimento de objetivos, utilidad, consumo de
recursos y oportunidad de servicio el usuario manifiesta nuevas necesidades.
Cuando se declara una variable se especifica tanto su nombre como el tipo al que pertenece. El nombre sirve para distinguirla de
cualquier otra variable y el tipo indica la forma en que debe almacenarse el valor de la variable en la computadora, de la cual dependerá el
rango de valores que ésta podrá tomar así como su precisión.
16
14.- Estructuras de control
Las estructuras de control de un lenguaje de programación son métodos de especificar el orden en que las instrucciones de un algoritmo
se ejecutarán. El orden de ejecución de las sentencias (lenguaje) o instrucciones determinan el flujo de control. Las estructuras de
control básicas son:
Secuenciación
Selección (simple y doble)
Iteración
Es uno de los métodos más flexibles y potentes para mejorar la productividad de un programa. En esta programación el programa se
divide en módulos, en donde cada uno de ellos se ejecuta una tarea en específico y se programan de forma independiente de otros
módulos.
Cada programa contiene un módulo llamado programa principal que es el que controla todo lo que sucede, este transfiere el control a los
diferentes submódulos para que estos puedan ejecutar sus tareas correspondientes, y habiendo terminado regresar el control al
programa principal, puede darse el caso de que un módulo contenga a otro modulo sin embargo cada módulo debe eventualmente devolver
al módulo del cual se recibe originalmente el control.
17
16.- Programación estructurada
18
UNIDAD II
ESTRUCTURAS DE CONTROL
1.- Secuenciación
Se refiere a la capacidad de agrupar una secuencia de sentencias básicas formando una estructura compuesta. Esta estructura justifica
y garantiza que el flujo de control dentro de los módulos sea de arriba hacia abajo. Sus representaciones son:
comienza
sentencia 1
sentencia 2
…
sentencia n
termina
19
Ejemplo 1: Calcular el área de un polígono en forma de L c
Diagrama de flujo
20
Pseudocódigo
comienza /*se recomienda dejar sangría para tener una mayor legibilidad del programa */
escribe “Dame el valor de a, b y c”
lee a,b,c
area1← b * c /*en este caso la base es diferente a la altura*/
area2 ←a * a /* en este caso la base es igual a la altura*/
area3 ←area1 + area2 /*El resultado es la suma de las áreas obtenidas y se guarda en la variable area3 */
escribe “El área total es : ”, area3
termina
Prueba de escritorio
21
Ejemplo 2.- Elaborara un algoritmo que sume dos números
Diagrama de flujo
22
Pseudocódigo
lee a,b
sum ← a+b
escribe a , “+” , b , ”=”, sum
termina
Prueba de escritorio
23
Ejemplo 3.- Escribir el algoritmo que calcule el volumen de una esfera dando un valor para el radio
Diagrama de flujo
Pseudocódigo
24
2.- Selección
Es la especificación de la transferencia de control hacia una de las 2 localizaciones de una o mas sentencias dependiendo de la veracidad
o falsedad de una expresión booleana
a). Selección simple: Solo se definen sentencias para cuando la expresión booleana es verdadera, es decir, su falsedad no importa
comienza
si (expresión= Verdad) entonces
sentencia 1
sentencia 2
…
sentencia n
fin si
termina
25
Ejemplo 1.- Elaborar un algoritmo que obtenga el promedio de 3 calificaciones y muestre “APROBADO” si el promedio es
mayor o igual a 7
Diagrama de flujo
26
Pseudocódigo
Prueba de escritorio
27
Ejemplo 2.- Elaborar un algoritmo que muestre el máximo de dos números dados, es decir, si los números introducidos son:
125 , 158 se muestre en la pantalla el número 158
Diagrama de flujo
28
Pseudocódigo
Prueba de escritorio
29
Ejemplo 3.- Elaborar un algoritmo convierta de °C a °F solo si los °C están entre 0 y 100
Diagrama de flujo
30
Pseudocódigo
Prueba de escritorio
31
b). Selección doble: En este caso se definen sentencias para cuando la expresión booleana es verdadera y también para cuando es falsa
comienza
si (expresión= v) entonces
sentencia 1a
sentencia 1a
sentencia na
otro
sentencia 1b
sentencia 1b
sentencia nb
finsi
termina
32
Ejemplo 1.- Elaborar un algoritmo que obtenga el pago por hora de un trabajador que si es mayor o igual a 40 recibe
doble pago por hora.
Diagrama de flujo
33
Pseudocódigo
Prueba de escritorio
34
Ejemplo 2.- Diseñar un algoritmo que valide si la situación de un alumno es: EXCELENTE, REGULAR, MALO, tomando en
cuenta la siguiente escala: Excelente > = 8.5 , 7.0 <= Regular < 8.5, Malo <7.0
Entrada: Promedio
Salida: Situación del alumno
Diagrama de flujo
35
Pseudocódigo
Prueba de escritorio
36
Ejemplo 3.- Diseñar un algoritmo que determine si un número es mayor menor o igual a 0, si es menor que mande el
mensaje de NEGATIVO, si es mayor a cero que escriba POSITIVO, y si es igual a cero que escriba CERO
Entradas: Número
Salidas: Mensaje POSITIVO NEGATIVO o CERO
Diagrama de flujo
37
Pseudocódigo
num : Entero(int)
comienza
escribe “Ingresa un numero”
lee num
si (num > 0) entonces
escribe “POSITIVO”
otro
si (num < 0) entonces
escribe “NEGATIVO”
otro
escribe “CERO”
finsi
finsi
termina
Prueba de escritorio
38
c). Selección múltiple: En este tipo de selección se pueden realizar diferentes tareas dependiendo de la selección que se realiza
comienza
caso (expresion)
valor 1: sentencia 1A
sentencia 2A
sentencia nA
valor 2: sentencia 2B
sentencia 2B
sentencia nB
valor n: sentencia 1N
sentencia 2N
sentencia nN
fincaso
termina
39
Ejemplo 1.- Diseñe un algoritmo que muestre en pantalla el día de la semana según un número introducido por el usuario
(1-7)
Entradas: Número introducido por el usuario
Salidas: Día de la semana
Diagrama de flujo
40
Pseudocódigo
numero: Entero(int)
comienza
escribe “Introduce un numero”
lee numero
caso (numero)
1: escribe “DOMINGO”
2: escribe “LUNES”
3: escribe “MARTES”
4: escribe “MIERCOLES”
5: escribe “JUEVES”
6: escribe “VIERNES”
7: escribe “SABADO”
fincaso
termina
Prueba de escritorio
41
3.- Iteración
Es la especificación de la ejecución de una(s) sentencia(s) en forma repetida dependiendo de la veracidad o falsedad de una expresión
booleana
I. Mientras (No se ejecuta ninguna sentencia si la expresión no es verdadera)
comienza
mientras (expresión = V)
Sentencia 1
Sentencia 2
Sentencia n
finmientras
termina
42
II. Repite (Por lo menos se ejecuta una vez la sentencia no importando la expresión)
comienza
repite
sentencia 1
sentencia 2
sentencia n
hasta (expresión = V)
termina
43
III. Para
comienza
para ( i ←Vi , Vf , Inc/Dec)
sentencia 1
sentencia 2
sentencia n
finpara
termina
Incremento o decremento
44
Ejemplo 1.- Diseñar un algoritmo que valide un número introducido por el usuario, es decir, si es menor a cero o mayor a
7 se le vuelva a pedir el número al usuario, en otro caso despliegue el mensaje de bienvenida
Diagrama de flujo
45
Pseudocódigo
num: Entero(int)
comienza
escribe “Introduce un numero”
lee num
mientras (num < 0 O num >7)
escribe “Solo entre 1 y 7”
lee num
finmientras
escribe “BIENVENIDO”
termina
Prueba de escritorio
Ejemplo 2.- Realizar un algoritmo que sume una serie de números enteros introducidos por el usuario
46
Entradas: Números introducidos por el usuario
Salidas: Suma total
Diagrama de flujo
47
Pseudocódigo
Prueba de escritorio
48
Ejemplo 3.- Realice el ejemplo anterior con la estructura de control REPITE
Diagrama de flujo
49
Pseudocódigo
50
Ejemplo 4.- Realice el ejemplo 2 con la estructura de control PARA
Diagrama de flujo
51
Pseudocódigo
52
Precauciones al hacer uso de la Reglas de funcionamiento al hacer
estructura de control MIENTRAS uso de la estructura de control
REPITE
La condición lógica en un bucle
mientras debe tener un valor la La condición se evalúa al final
primera vez que se evalúa, en caso del bucle después de ejecutarse
contrario el programa abortara (se todas las sentencias.
detendrá) al ejecutarse mientras.
53
REGLAS DE SELECCIÓN DE LAS ESTRUCTURAS DE CONTROL
54
UNIDAD III
VECTORES Y MATRICES
En la resolución informática de algoritmos, a veces surge la necesidad de expresar las relaciones que existen entre distintas variables y
bien almacenarlas o hacer referencia a ellas.
Una estructura de datos es un conjunto de componentes cuya organización se caracteriza por las funciones de acceso que se usan para
almacenar y suprimir elementos individuales del grupo. Por ejemplo suponga que se disponen de un ente llamado ladrillo que permite
formar una estructura con ellos llamada pared, por lo tanto pared es un conjunto de ladrillos colocados en filas en posición vertical, esta
estructura tiene sus propias funciones de acceso:
Abstracción de datos
Los datos se representan físicamente en memoria de distintas formas, dependiendo en primer lugar del tipo de datos, pero aun
tratándose del mismo tipo pueden representarse también con distintos métodos.
55
La abstracción entonces puede definirse como la separación que existe entre la representación interna de los datos y sus funciones de
acceso además de las aplicaciones que utilizan estos datos a nivel lógico.
Son aquellas que utilizan una cantidad variable de memoria en función de los requerimientos en tiempo de ejecución, en C no se
facilitan estas estructuras sin embargo el lenguaje proporciona las herramientas necesarias para que sean incorporadas por el
programador (tipo y funciones para su manipulación).
Un array es una estructura de datos incorporada en C y en la mayoría de los lenguajes de propósito general. Considerando las distintas
formas de observar una estructura de datos se analizaran en tres perspectivas.
Nivel Lógico
Desde el punto de vista abstracto se defina un array unidimensional como una estructura de datos formada por una colección finita de
de elementos homogéneos (elementos del mismo tipo), ordenados (indica que hay un primer elemento, segundo elemento, etc), finito
(significa que hay un último elemento) que se referencian con un nombre común, esta colección de elementos forma una estructura
estática, lo que supone que el tamaño del array deberá ser conocido.
56
Función de acceso: El acceso es directo es decir puede accederse a cualquier elemento sin necesidad de acceder primero a los
elementos que lo preceden, el acceso a un elemento en especifico se realiza mediante el nombre del array y un índice que permite
especificar cuál es el elemento deseado.
Para referenciar a cada uno de los elementos del vector se usa el operador [ ] escribiendo el nombre del vector seguidos del índice entre
los corchetes
57
DECLARACIÓN
Tipo Nombre_Vector [tamaño];
Ejemplo de declaración
int vector_enteros[20];
Se tiene un vector de 20 enteros referidos como vector_enteros[0], vector_enteros[1],.., vector_enteros[20] sabremos la dirección de
memoria donde se encuentra cada elemento.
Ejemplo
# include <stdio.h>
main()
{
int vector[10];
int i ;
int suma;
for (i=0; i<10; i++)
vector[i]=i;
for (i=0; i<10; i++)
suma=suma+vector[i];
}
58
En este programa se declara un vector de enteros, el primer for rellena cada uno de los 10 elementos con números del 0 al 9 y
posteriormente calcula su suma.
Se puede definir el tamaño del vector como una constante de substitución simbólica.
# include <stdio.h>
# define TAM 10;
main()
{
int vector[TAM];
int i
int suma;
for (i=0; i<TAM; i++)
vector[i]=i;
for (i=0; i<TAM; i++)
suma=suma+vector[i];
}
Cuando en una declaración se especifican los valores de los elementos de un vector no es necesario indicar el tamaño del vector entre
corchetes
float datos [] = {1.0, 2.0, 6.0, 4.0, 3.0}; // datos será un vector de 5 elementos.
59
Sentencias en las que se puede usar un vector:
EJEMPLOS
Elabore un algoritmo que pida un número al usuario y después llene un vector con datos dados por el usuario.
60
Diagrama de flujo
61
Pseudocódigo
comienza
entero : tam, i
escribe “introduce tamaño del vector”
lee tam
i←1
mientras (i<=tam)
escribe “Dame elemento ”, i
lee vector[i]
i←i+1
finmientras
termina
Prueba de escritorio
62
Ejemplo 2 .Elabore un algoritmo que sume dos vectores y coloque en el resultado en un 3 vector, se asume que los
vectores ya existen y son de tamaño N. se debe mostrar en pantalla la siguiente salida:
Vector 1 __ __ __ __ __
Vector 2 __ __ __ __ __
Suma __ __ __ __ __
Entradas: Ninguna
Salidas:
Vector 1 __ __ __ __ __
Vector 2 __ __ __ __ __
Suma __ __ __ __ __
Diagrama de flujo
63
64
Pseudocódigo
comienza
i←1
repite
SUMA[i]←V1[]+V1[]
i←i+1
hasta (i>n)
escribe “Vector 1 ”
para (i=1,i<=n,1++)
escribe V1[i] /*sin cambio de linea*/
finpara
/* cambio de linea*/
escribe “Vector 2”
para (i=1,i<=n,1++)
escribe V2[i] /*sin cambio de linea*/
finpara
/*sin cambio de linea*/
escribe “Suma ”
para (i=1,i<=n,1++)
escribe SUMA[i] /*sin cambio de linea*/
finpara
termina
65
Prueba de escritorio
66
Ejemplo 3.- Elabore un algoritmo que ordene los elemento de menor a mayor y muestre el vector ordenado, el vector
debe estar inicializado con valores cualesquiera.
Entradas: Ninguna
Salidas: Vector ordenado
Diagrama de flujo
67
Pseudocódigo
Prueba de escritorio
68
ARRAYS BIDIMENSIONALES (MATRICES)
Un arreglo bidimensional es una estructura natural para almacenar la información que se puede representar de manera lógica como una
matriz, visualizándose de forma abstracta como una rejilla con filas y columnas, de manera que cada elemento se referencía por el
numero de fila y columna donde se encuentra.
Un arreglo bidimensional tiene dos dimensiones y es un caso particular de los arreglos multidimensionales. En C#, las dimensiones se
manejan por medio de un par de corchetes, dentro de los que se escriben, separados por comas, los valores de las dos dimensiones.
69
Operaciones.
Para manejar un arreglo, las operaciones a efectuarse son:
Función de Acceso
El mecanismo para acceder a un determinado componente es directo es decir, no hay necesidad de visitar a los elementos que lo
preceden. Cada elemento esta ordenado en dos dimensiones por lo tanto el acceso se realiza mediante el nombre del array y usando un
par de índices que indican que el elemento de la colección se desea acceder, el primer índice referencia la posición del elemento en la
primera dimensión llamada fila y el segundo indica la posición del elemento en la segunda dimensión llamada columna.
Representación grafica
70
Sintaxis de la función de acceso
Nombre _Matriz: Es un indicador que representa el nombre asociado a la colección de elementos de la estructura.
indice1: Es un valor comprendido entre 0 y n-1 siendo n el numero de filas de la estructura
indice2: Es un valor comprendido entre 0 y n-1 siendo n el numero de columnas de la estructura
Así bien el número de elementos vendrá dado por el producto de filas por columnas.
Ejemplo
En pseudocódigo se agrega a la lista de variables el tipo, nombre y tamaño del array según el siguiente formato.
71
tipo: Puede ser cualquier tipo de datos básico o definidos por el usuario
lista de elementos: Elementos que contendrá la matriz , cara valor deberá estar separado por una coma.
El recorrido se hace principalmente para leer, escribir, inicializar o procesar todos los elementos del array, el recorrido se puede hacer
por filas o columnas, el hecho de hacer el recorrido de una u otra forma no influye en el proceso que en ese momento se realiza con los
elementos.
Pseudocódigo
72
para (i←0 mientras i<columnas, i++) /*i es el índice de filas*/
para (j←0 mientras j<filas, i++) /*i es el índice de columnas*/
lee matriz[i][j]
finpara
finpara
Ejemplo 1.- Dadas las matrices A y B elabore un programa que calcule la suma de ambas matrices y al final muestre en
pantalla las matrices A y B y la suma de ambas, el programa deberá seguir el siguiente formato:
Matriz A
8 9 5
6 3 2
Matriz B
7 1 4
5 0 3
Matriz Resultante
15 10 9
11 3 2
73
Pseudocódigo
comienza
i,j, col, ren: enteros (int)
/*en esta parte se ingresan lso datos de la matriz a*/
/*limpia pantalla*/
para (i←0,i<ren, i++)
para (j←0,j<col, j++)
escribe “dame elemento”, i ,”,”,j
lee matrizA[i][j] /*se lee dato del teclado y se almacena en la posición i,j*/
finpara
finpara
74
/*mostrar en pantalla el contenido de las 3 matrices*/
escribe “matriz a”
para (i←0,i<ren, i++)
para (j←0,j<col, j++)
escribe matriza[i][j]
finpara
/*Cambio de linea*/
finpara
escribe “Matriz B”
para (i←0,i<ren, i++)
para (j←0,j<col, j++)
escribe matrizb[i][j]
finpara
/*Cambio de linea*/
finpara
escribe “Matriz Resultante”
para (i←0,i<ren, i++)
para (j←0,j<col, j++)
escribe matrizari][j]
finpara
/*Cambio de linea*/
finpara
termina
75
UNIDAD IV
MODULARIDAD
Diseño modular
El diseño modular es una metodología del desarrollo de programas que surge de la necesidad de abordar un problema complejo
dividiéndolo en otros más sencillos, que se pueden llamar subproblemas, consiguiendo así comprender y abordar mejor el problema
completo , de esta forma después de resolver todos los problemas se obtiene la solución del problema global.
Módulos. Diagramas Jerárquicos
Consiste en comenzar dividiendo el problema en un conjunto de subproblemas, a continuación se dividen estos en otros más sencillos y así
sucesivamente, de esta forma se crea una estructura jerárquica de problemas y subproblemas llamados módulos funcionales, la
representación grafica se muestra a continuación.
76
Ventajas de la programación modular.
Facilita que la resolución del problema la lleven a cabo diferentes programadores, gracias a la división del problema en distintos
módulos.
Eleva el grado de legibilidad de los algoritmos
Favorece el mantenimiento y modificación de los módulos ya diseñados, en consecuencia de los programas.
Variable global: Es aquella variable cuyo valor puede ser usado o modificado en el programa principal y en cualquier módulo.
Variable local: Su valor solo puede usado o modificado sólo dentro del módulo en que se declara.
Argumento formal
Representan la forma en que se comunican el subprograma y el módulo que los llama, los parámetros formales son variables.
77
Aparecen declarados en la cabecera del subprograma entre los paréntesis que siguen al nombre y son fijos para cada programa.
Ejemplo:
/* num es la variable de enlace del subprograma suma y se comporta como variable local del subprograma*/
suma (num) comienza
…
fin
Argumento actual
Son variables enviadas en cada llamada a un subprograma desde el programa o subprograma que los llama
Estos parámetros aparecen listados (escritos) en la llamada a un subprograma.
Ejemplo
/*El programa principal llama a un subprograma*/
PROGRAMA PRINCIPAL
inicio
…
sum (num)
…
fin
/*subprograma que llama a otro subprograma*/
/* llamada al subprograma potencia donde base y 3 son los parámetros actuales*/
modulo_m (…)
inicio
…
potencia(base,3)
…
Fin
78
Paso de parámetros por valor y por referencia
Se utiliza para suministrar datos de entrada a un subprograma desde el programa principal o subprograma que lo llama de modo que el
valor del parámetro actual se copie en el parámetro formal correspondiente.
El programa al que se le pasa un parámetro por valor trabaja con una copia de este por lo tanto el parámetro real no podrá ser
modificado por el subprograma, si el parámetro modifica el parámetro pasado se cambiara tan solo la copia pero no el parámetro real de
la llamada.
Se usa indistintamente para suministrar datos de entrada y recibir datos de salida. El programa principal manda al subprograma la
referencia en memoria del parámetro actual al correspondiente parámetro formal.
El subprograma que utiliza la variable pasada por referencia lo hace como si fuese propiamente suya por lo tanto puede modificarla a
conveniencia.
Cuando un parámetro es pasado por referencia se debe especificar en el programa o subprograma que este parámetro será pasado de
esta forma (ref).
79
FUNCIONES Y PROCEDIMIENTOS
Un Procedimiento no tiene valor asociado al nombre o lo que es lo mismo no devuelve ningún valor al programa o subprograma que lo llama.
Una función tiene un valor asociado a su nombre es decir devuelven un valor al programa que lo llama.
DECLARACION
tipo: Es el tipo de valor que devuelve la función y que puede ser cualquier tipo de datos básico definidos por el usuario.
tipos_datos_parametros: Son los tipos de datos de los parámetros formales, si hay más de uno se separan con comas indicando el tipo de
dato de cada uno.
80
Modalidades de una función.
1.- Función que No regresa un valor y No tiene argumentos, la forma para llamar a este tipo de función es:
Nombre_Funcion( )
2.-Función que No regresa un valor y Si tiene argumentos, la forma general de llamar a la función de este modo es:
Nombre_Funcion (var1 var2,…, varN)
3.- Función que Si regresa un valor y No tiene argumentos, la forma de llamada es:
Variable1← Nombre_Funcion()
81
DISEÑO DEL ALGORITMO
Programa principal generalizado: Dará una visión clara de la estructura general del programa, si es iterativo, si contiene distintas
opciones, si estas también son iterativas, etc. El pseudocódigo generalizado incluye básicamente las llamadas a los módulos de primer
nivel.
ENTORNO
constantes
variables
/*programa principal*/
comienza
....……..…
82
DECLARACIONES DE SUBPROGRAMAS
Ejemplo
*Función que no regresa un valor y no tiene parámetros
Elabore un algoritmo que sume dos números y tenga una función que muestre en pantalla el resultado.
Entradas: primer número (num1), segundo número (num2).
Salida: num1, num2, suma.
Pseudocódigo
comienza
num2,num2 , suma : enteros (int)
presenta() /*llamada al subprograma*/
escribe ”introduce dos numeros”
lee num 1, num2
suma← num1+num2
escribe num1, ”+”, num2, ”=”, suma
termina
83
funcion presenta() /* encabezado de la función o subprograma*/
comienza
escribe”**programa que suma dos números**”
termina
Elaborar un algoritmo que tenga una función que muestre el resultado y que utilice la función de presentación anterior.
comienza
num1,num2 , suma : enteros (int)
presenta()
escribe ”introduce dos numeros”
lee num 1, num2
suma← num1+num2
muestra (num1,num2,suma) /*llamada al subprograma*/
termina
funcion muestra(a,b,c: enteros) /* encabezado de la función o subprograma*/
comienza
escribe a, ”+”, b, ”=”, c
termina
84
*Función que si regresa un valor y no tiene parámetros
Elaborar una función para leer el numero y regresar el numero leído, utilizar las funciones hechas anteriormente
comienza
num1,num2 , suma : enteros (int)
presenta()
num1← lee_dato( ) /*llamada al subprograma*/
num2← lee_dato ( )
suma← num1+num2
muestra (num1,num2,suma)
termina
entero lee_dato( ) /* encabezado de la función o subprograma*/
comienza
escribe “Introduce numero”
lee num
regresa(num) /*regresa el valor leído*/
termina
85
*Función que si regresa un valor y si tiene parámetros
Elabore una función que reciba los números leídos y regrese la suma de estos
comienza
num1,num2 , suma : enteros (int)
presenta()
num1← lee_dato( )
num2← lee_dato ( )
suma← sumar_numeros(num1,num2) /*llamada al subprograma*/
muestra (num1,num2,suma)
termina
entero sumar_numeros ( a,b: enteros) /*encabezado de la función o subprograma*/
comienza
c: entero (int)
c←a+b
regresa(c) /*regresa el resultado de la suma entre a y b*/
termina
86
BIBLIOGRAFÍA
1. Cairó Battistuti O. (2006), Fundamentos de Programación, Piensa en C. 1ª. Edición. Pearson.
2. Corona Nakamura A. y Ancona Valdez María de los Ángeles. (2011), Diseño de Algoritmos y su Codificación en Lenguaje C. 1ª.
Edición. México. McGrawHill.
5. Joyánes Aguilar L. y Zahonero Martínez I. (2003), Programación Orientada a Objetos. 2ª. Edición. Madrid. McGrawHill.
6. Joyánes Aguilar L. y Zahonero Martínez I. (2010), Programación en C, C++, Java y UML. 1ª. Edición. México. McGrawHill.
87