Sei sulla pagina 1di 87

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


Í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

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.

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).

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:

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:

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

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.

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)

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.

10
Signos operatorios aritméticos



Signos operatorios relacionales


11
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

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.

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

13
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

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.

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.

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.

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

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

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):

17
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.

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:

Diagrama de flujo Pseudocódigo

comienza

sentencia 1

sentencia 2

sentencia n

termina

19
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

20
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

21
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

22
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

23
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

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

Diagrama de flujo Pseudocódigo

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

Entradas: Calificaciones (3)


Salidas: Promedio y la frase APROBADO si el promedio es mayor o igual a 7

Diagrama de flujo

26
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

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

Entradas: Los dos números introducidos por el usuario


Salidas: El mayor de los dos números

Diagrama de flujo

28
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

29
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

30
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

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

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

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.

Entradas: Pago por hora, horas trabajadas


Salidas: Pago total

Diagrama de flujo

33
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

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

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

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

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

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)

Diagrama de flujo Pseudocódigo

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)

Diagrama de flujo Pseudocódigo

comienza
repite
sentencia 1
sentencia 2
sentencia n
hasta (expresión = V)
termina

43
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

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

Entradas: Número introducido por el usuario


Salidas: 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

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

48
Ejemplo 3.- Realice el ejemplo anterior con la estructura de control REPITE

Diagrama de flujo

49
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

50
Ejemplo 4.- Realice el ejemplo 2 con la estructura de control PARA

Diagrama de flujo

51
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

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.

Si la expresión lógica es falsa


La condición lógica en un bucle se vuelve a repetir el bucle y se
mientras debe ser modificada por ejecutan todas las sentencias.
una sentencia en el cuerpo del
bucle, en caso contrario el bucle es
Si la expresión lógica es falsa
infinito.
se sale del bucle y se ejecuta la
siguiente sentencia después de la
Es posible que el cuerpo del instrucción hasta.
bucle no se ejecute nunca. Esto
sucederá si la condición lógica es
falsa la primera vez que se evalúa.

53
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

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:

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.

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.

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.

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.

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

57
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];
}

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:

 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

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

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

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:

 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

70
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}

71
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

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

*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

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

/* 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

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.

Diagrama de estructura de módulos

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.

¿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.

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

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).

79
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.

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()

4.- Función que Si regresa un valor y Si tiene argumentos


Variable1← Nombre_Funcion(var2 , var3,.., var4)

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.

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

82
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

83
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

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.

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.

87

Potrebbero piacerti anche