Date post: | 03-Jul-2015 |
Category: |
Documents |
Upload: | marigelcontreras |
View: | 384 times |
Download: | 1 times |
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO
FACULTAD DE INGENIERÍA
DIVISIÓN DE MATERIAS PROPEDÉUTICAS
PROGRAMACIÓN BÁSICA Notas de complementación para el curso
INGENIERÍA CIVIL PLAN F2
Créditos: 8
Docentes:
M. en I. MARIA DE LOS ÁNGELES CONTRERAS FLORES
Mtra. LETICIA PALMA ROSALES
2
ÍNDICE Contenido
I.- Introducción
II.- Unidad I (Definiciones) …………………………………………………………………………………………………………………………………………………………………………….. 4
III.- Unidad II (Estructuras de control) ……………………………………………………………………………………………………………………………………………………… 19
III.I.- Secuenciación …………………………………………………………………………………………………………………………………………………………………………………………. 19
III.II.- Selección (Simple, compuesta y múltiple) ……………………………………………………………………………………………………………………………………….. 26
III.III.- Iteración ……………………………………………………………………………………………………………………………………………………………………………………………… 43
IV.- Unidad III Vectores y Matrices ………………………………………………………….……………………………………………………………………………………..……….. 55
V.- Unidad IV Funciones (Modularidad) ……………………………………………………………………………………………………………………………………..………………… 76
VI.- Bibliografía …………………………………………………………………………………………………………………………………………………………………………………………….. 87
3
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.
4
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.
Finito: Un algoritmo debe de terminar después de una serie de pasos
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).
5
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.
6
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:
0011 0110 0001
1010 1111 0101
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:
7
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
8
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
9
No se puede utilizar una palabra reservada
Identificadores válidos (ejemplos)
nombre
letras
CONT
A_B_C
nombre_apellido
Identificadores no válidos (ejemplos)
Fox&Horas contiene un carácter no válido (&)
F Bar contiene un espacio en blanco
7Cont contiene un número al inicio
Año contiene un carácter no válido (ñ)
único contiene un acento
7.- Constantes y Variables
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.
10
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)
Acumulador: Es una variable que se incrementa en una cantidad variable.
Ejemplo:
suma ←suma + x (si x vale 7 y Suma 40, el nuevo valor de Suma será 47)
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.
11
Signos operatorios aritméticos
Signos operatorios relacionales
12
Signos operatorios lógicos
Reglas básicas de precedencia
Las expresiones se evalúan de izquierda a derecha
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
13
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.
El formato más común para la especificación de un comentario es: /* esto es un comentario*/
11.- Diagramas de flujo
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).
Símbolos más usados para los diagramas de flujo
Para indicar el inicio y fin de un algoritmo
Para indicar un proceso (cualquier operación)
Para entradas o salidas
14
Para unir un diagrama de flujo en la misma página (primero), o en otra página (segundo). Se les conoce como
conectores
Llamada a un procedimiento o función
Para la toma de decisiones
12.- Metodología de la programación
Ciclo de vida del desarrollo de un programa
15
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.
Desarrollo del algoritmo de solución.- Se deben tener tres aspectos en cuenta:
Obtener un método computacional que permita resolver el problema
Obtener la especificación jerárquica funcional del problema mediante la definición de módulos y refinamientos sucesivos
Obtener las estructuras de datos a utilizar para resolver el problema
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.
16
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.
13.- Tipos de datos
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.
Ejemplo de la declaración de una variable:
Lenguaje in formal
nombre_variable : <tipo de dato> variable1 : entero , variable2 : float , variable3 : char
17
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
15.- Programación modular
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.
Ejemplo de la programación modular (estructura):
18
16.- Programación estructurada
La programación estructurada significa escribir un programa de a cuerdo a las siguientes reglas:
El programa tiene un sentido modular
Los módulos son diseñados de modo descendente
Cada modulo se codifica utilizando las tres estructuras de control básicas: secuencia, selección e iteración.
19
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:
Diagrama de flujo Pseudocódigo
comienza
sentencia 1
sentencia 2
…
sentencia n
termina
20
Ejemplo 1: Calcular el área de un polígono en forma de L c
Entradas: Tamaño de cada uno de los lados del polígono
Salidas: El área total del polígono
Diagrama de flujo
21
Pseudocódigo
a,b,c,area1,area2,area3 : entero (int) /* indica que son variables de tipo entero*/
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
22
Ejemplo 2.- Elaborara un algoritmo que sume dos números
Entradas: Los dos números enteros a y b
Salidas: El resultado de la suma de los números introducidos
Diagrama de flujo
23
Pseudocódigo
a,b,sum: entero (int)
comienza
escribe “Dame 2 numeros”
lee a,b
sum ← a+b
escribe a , “+” , b , ”=”, sum
termina
Prueba de escritorio
24
Ejemplo 3.- Escribir el algoritmo que calcule el volumen de una esfera dando un valor para el radio
Entradas: El radio de la esfera
Salidas: El volumen de la esfera
Diagrama de flujo
Pseudocódigo
r,v : Real (float)
comienza
escribe “Introduce el valor del radio”
lee r
v ← 4 / 3 * 3.1416 * r ^ 3
escribe “El volumen de la esfera es : ”, v termina
25
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
Diagrama de flujo Pseudocódigo
comienza
si (expresión= Verdad) entonces
sentencia 1
sentencia 2
…
sentencia n
fin si termina
26
Ejemplo 1.- Elaborar un algoritmo que obtenga el promedio de 3 calificaciones y muestre “APROBADO” si el promedio es
mayor o igual a 7
Entradas: Calificaciones (3)
Salidas: Promedio y la frase APROBADO si el promedio es mayor o igual a 7
Diagrama de flujo
27
Pseudocódigo
c1,c2,c3,prom : Real (float)
comienza
escribe “Introduce las tres calificaciones”
lee c1,c2,c3
prom ← (c1+c2+c3) / 3
escribe “Promedio = ”, prom
si ( prom >= 7.0 ) entonces
escribe “APROBADO”
fin si termina
Prueba de escritorio
28
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
Entradas: Los dos números introducidos por el usuario
Salidas: El mayor de los dos números
Diagrama de flujo
29
Pseudocódigo
num1, num2, max : Entero (int)
comienza
escribe “Introduce los dos números”
lee num1,num2
max ← num1
si (num2 > max) entonces
max ← num2
fin si
escribe “El máximo es:”, max
termina
Prueba de escritorio
30
Ejemplo 3.- Elaborar un algoritmo convierta de °C a °F solo si los °C están entre 0 y 100
Entradas: Los °C introducidos por el usuario
Salidas: Su respectivo valor en °F
Diagrama de flujo
31
Pseudocódigo
grados, gf : Real (float)
comienza
escribe “Introduce los grados centígrados”
lee grados
si (grados >= 0 Y grados <=100) entonces
gf ← 9/5 * grados +32
escribe “ °F = ”, gf
fin si
termina
Prueba de escritorio
32
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
Diagrama de flujo Pseudocódigo
comienza
si (expresión= v) entonces
sentencia 1a
sentencia 1a
sentencia na
otro
sentencia 1b
sentencia 1b
sentencia nb
finsi
termina
33
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.
Entradas: Pago por hora, horas trabajadas
Salidas: Pago total
Diagrama de flujo
34
Pseudocódigo
horas, ph, total : Entero(int)
comienza
escribe “Introduce el total de horas trabajadas y el pago por hora”
lee horas, ph
si (horas >= 40)entonces
total ← (horas * ph)*2
otro
total ← horas * ph
finsi
escribe “El total a pagar es : ” , total
termina
Prueba de escritorio
35
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
36
Pseudocódigo
promedio : Real (float)
comienza
escribe “Introduce el promedio”
lee promedio
si (promedio >= 8.5) entonces
escribe “EXCELENTE”
otro
si (promedio<=7.0)
escribe “REGULAR”
otro
escribe “MALO”
finsi
finsi
termina
Prueba de escritorio
37
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
38
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
39
c). Selección múltiple: En este tipo de selección se pueden realizar diferentes tareas dependiendo de la selección que se realiza
Diagrama de flujo Pseudocódigo
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
40
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
41
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
42
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)
Diagrama de flujo Pseudocódigo
comienza
mientras (expresión = V)
Sentencia 1
Sentencia 2
Sentencia n
finmientras termina
43
II. Repite (Por lo menos se ejecuta una vez la sentencia no importando la expresión)
Diagrama de flujo Pseudocódigo
comienza
repite
sentencia 1
sentencia 2
sentencia n
hasta (expresión = V) termina
44
III. Para
Diagrama de flujo Pseudocódigo
comienza
para ( i ← Vi , Vf , Inc/Dec)
sentencia 1
sentencia 2
sentencia n
finpara
termina
Incremento o decremento
45
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
Entradas: Número introducido por el usuario
Salidas: Mensaje de bienvenida
Diagrama de flujo
46
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
47
Entradas: Números introducidos por el usuario
Salidas: Suma total
Diagrama de flujo
48
Pseudocódigo
Contador , Suma , Numero , Total : Entero (int)
comienza
escribe “¿Cuantos números deseas sumar?”
lee Total
Contador ← 0
Suma ← 0
mientras (Contador < Total)
escribe “Introduce el numero ”, Contador+1
lee Numero
Suma ← Suma + Numero
Contador ← Contador+1
finmientras
escribe “La suma es ”, Suma
termina
Prueba de escritorio
49
Ejemplo 3.- Realice el ejemplo anterior con la estructura de control REPITE
Diagrama de flujo
50
Pseudocódigo
contador , suma , numero , total : entero (int)
comienza
escribe “¿cuántos números deseas sumar?”
lee total
contador ← 0
suma ← 0
repite
escribe “introduce el numero”, contador+1
suma ← suma+1
contador ← contador+1
hasta (contador = total)
escribe “la suma es:”, suma
termina
51
Ejemplo 4.- Realice el ejemplo 2 con la estructura de control PARA
Diagrama de flujo
52
Pseudocódigo
contador, suma , numero , total : entero (int)
comienza
escribe “¿cuántos números deseas sumar?”
lee total
para (contador ← 0, contador < total, 1) /* el numero 1 significa que se incrementa i de uno en uno */
lee numero
suma ← suma + numero
finpara
termina
53
Precauciones al hacer uso de la
estructura de control MIENTRAS
La condición lógica en un bucle
mientras debe tener un valor la
primera vez que se evalúa, en caso
contrario el programa abortara (se
detendrá) al ejecutarse mientras.
La condición lógica en un bucle
mientras debe ser modificada por
una sentencia en el cuerpo del
bucle, en caso contrario el bucle es
infinito.
Es posible que el cuerpo del
bucle no se ejecute nunca. Esto
sucederá si la condición lógica es
falsa la primera vez que se evalúa.
Reglas de funcionamiento al hacer
uso de la estructura de control
REPITE
La condición se evalúa al final
del bucle después de ejecutarse
todas las sentencias.
Si la expresión lógica es falsa
se vuelve a repetir el bucle y se
ejecutan todas las sentencias.
Si la expresión lógica es falsa
se sale del bucle y se ejecuta la
siguiente sentencia después de la
instrucción hasta.
54
REGLAS DE SELECCIÓN DE LAS ESTRUCTURAS DE CONTROL
1. Si el número de iteraciones se conoce por adelantado se debe utilizar la estructura de control
PARA
2. Si el número de iteraciones es indeterminado y el bucle no se debe ejecutar cuando la condición
es falsa la primera vez se debe utilizar MIENTRAS
3. Si el número de iteraciones es indeterminado y el bucle se debe ejecutar siempre al menos una
vez se debe utilizar REPITE
55
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:
Almacenar: Poner un elemento
Eliminar: Quitar un elemento
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.
56
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.
Clasificación de las estructuras de datos
La estructuras de datos se dividen en dos tipos en función de cómo utilizan la memoria.
Estructuras de datos Estáticas
Ocupan una cantidad fija de memoria en tiempo de compilación, a este grupo pertenecen todas las estructuras de datos
suministradas en C.
Estructuras de datos Dinámicas
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).
ARRAYS UNIDIMENSIONALES (VECTORES)
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.
57
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.
SINTAXIS DE LA FUNCIÓN DE ACCESO Nombre_Vector[indice]
Nombre_Vector: Es un identificador que representa la colección de objetos.
índice: Es un valor comprendido entre 0 y n-1
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
58
DECLARACIÓN
Tipo Nombre_Vector [tamaño];
Tipo. Tipo de datos de los elementos
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];
}
59
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.
60
Sentencias en las que se puede usar un vector:
Entrada: lee datos [i]
Salida: escribe datos [i]
Asignación: datos [i]←116
datos [i]← datos [i+1]
numero← datos [i+1]
Control: si(datos datos [i]>=0) entonces
EJEMPLOS
Elabore un algoritmo que pida un número al usuario y después llene un vector con datos dados por el usuario.
Entradas: Tamaño del vector, elementos del vector.
Salidas: Ninguna
61
Diagrama de flujo
62
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
63
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
64
65
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
66
Prueba de escritorio
67
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
68
Pseudocódigo
i, j, N, aux : entero (int)
comienza
/*iniciaizacion del vector*/
vec [] = {6,4,2,1,8}
para (i←1, i<N, i++)
para (j←i+1, j<=N, j++)
si (vec[i]>=vec[j]) entonces
aux ← vec[i]
vec[i]← vec[j]
vec[j]←aux
finsi
finpara
finpara
escribe “Vector ordenado ”
para (k←1, k<N, k++)
escribe vec[k]
finpara
termina
Prueba de escritorio
69
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.
70
Operaciones.
Para manejar un arreglo, las operaciones a efectuarse son:
Declaración del arreglo,
Creación del arreglo,
Inicialización de de los elementos del arreglo, y
Acceso a los elementos del arreglo.
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
71
Sintaxis de la función de acceso
Nombre _Matriz [indice1][indice2]
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
MaxMin [15][1]=10 /*MaxMin es el nombre de la colección, 15 y 1 es la referencia al
elemento 16 de la 2º columna del array para almacenar el
entero 10*/
lee MaxMin [15][1] /*Se almacena en el elemento 16 el valor leído por el
teclado*/
var = MaxMin [15][1] /*Asignar el valor del elemento 15,1 de la estructura a la
variable var*/
Declaración
En pseudocódigo se agrega a la lista de variables el tipo, nombre y tamaño del array según el siguiente formato.
tipo Nombre_Matriz [filas][columnas]
tipo Nombre_Matriz [filas][columnas]={lista de elementos}
72
tipo: Puede ser cualquier tipo de datos básico o definidos por el usuario
nombre_Matriz: Identificador que hace referencia a la estructura matriz
filas: Cantidad de filas de la colección
columnas: Cantidad de columnas de la colección
lista de elementos: Elementos que contendrá la matriz , cara valor deberá estar separado por una coma.
Recorrido un arreglo bidimensional
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
para (i←0 mientras i<filas, i++) /*i es el índice de filas*/
para (j←0 mientras j<columnas, i++) /*i es el índice de columnas*/
lee matriz[i][j]
finpara
finpara
73
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
*Usando ambas formas de recorrido se ha accedido para su proceso al mismo elemento*
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
Entradas: Elementos de la matriz A y B
Salida: Elementos de la matriz A, B y Matriz resultante
74
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
/* en esta parte se ingresan los datos de la matriz b*/
/*limpia pantalla*/
para (i←0,i<ren, i++)
para (j←0,j<col, j++)
escribe “dame elemento”, i ,”,”,j
lee matrizB[i][j]
finpara
finpara
/* calcular la suma entre a y b y guardarlo en la matriz r*/
para (i←0,i<ren, i++)
para (j←0,j<col, j++)
matrizR[i][j] ← matrizA[i][j] + matrizB[i][j]
finpara
finpara
75
/*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
76
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.
Diagrama de estructura de módulos
77
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.
¿Cómo dividir un programa en módulos?
Se afronta la división de la misma forma en que se afronta la resolución de grandes problemas en la vida cotidiana.
Pasar un tiempo pensando en el problema globalmente
Escribir los pasos principales, especificando tanto la estructura principal del programa como los módulos que requiera.
Examinar cada uno de los pasos anteriores completando los detalles.
Si no se sabe realizar una determinada tarea, se da un nombre y se pasa a la realización de la tarea siguiente, teniendo en cuenta
que habrá que ocuparse de ella más adelante para resolverla
El proceso continua tantas veces como sea necesario, hasta completar el diseño.
Conceptos básicos de la programación modular
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.
78
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
79
Paso de parámetros por valor y por referencia
Paso por valor
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.
Paso por referencia
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).
80
FUNCIONES Y PROCEDIMIENTOS
Según el valor de retorno los subprogramas se pueden dividir en PROCEDIMIENTOS Y FUNCIONES
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.
Para hacer uso de una función es se requieren de dos cosas
Definir a la función Llamar a la función
DECLARACION
tipo Nombre_Funcion(tipos _datos_parametros)
Nombre_Funcion: Identificador que referencia a la función.
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.
81
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()
4.- Función que Si regresa un valor y Si tiene argumentos
Variable1← Nombre_Funcion(var2 , var3,.., var4)
82
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.
Forma general de un programa modular
ENTORNO
constantes variables
/*declaración de las funciones*/
funciones
tipoa nombre_funcion(lista tipos)
/*programa principal*/
comienza
....……..…
/*declaracion de variables locales del programa principal*/
tipoA var
var ← nombre _funcion(lista_parametros_actuales)
……………
Termina
83
DECLARACIONES DE SUBPROGRAMAS
/*cabecera del subprograma función*/
nombre_funcion(lista_declaracion_parametros_formales)
comienza
/*declaración de variables u objetos locales*/
tipoA nombre_variable
regresa (nombre_variable) /*valor devuelto al programa principal*/
termina
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
84
funcion presenta() /* encabezado de la función o subprograma*/
comienza
escribe”**programa que suma dos números**”
termina
*Función que no regresa un valor y no tiene parámetros
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
85
*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
86
*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
87
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.
3. Criado, Ma.A . (2006). Programación en lenguajes estructurados. RaMa: Madrid España
4. Gallego, I. y Medina, M. (2000). Algorítmica y programación para ingenieros. Edición UPC.
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.
7. Joyánes, Aguilar L. (1993). Programación en turbo Pascal. 2ª. Edición. MacGraw-Hill.