100% encontró este documento útil (1 voto)
327 vistas205 páginas

Programación Módulo I - 206 Páginas

Este documento presenta un manual de prácticas para el módulo I de un programa de apoyo didáctico. El módulo se enfoca en desarrollar software de aplicación utilizando programación estructurada y almacenamiento persistente de datos. El manual contiene dos submódulos, donde el primero cubre el desarrollo de software mediante programación estructurada y el segundo cubre bases de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
327 vistas205 páginas

Programación Módulo I - 206 Páginas

Este documento presenta un manual de prácticas para el módulo I de un programa de apoyo didáctico. El módulo se enfoca en desarrollar software de aplicación utilizando programación estructurada y almacenamiento persistente de datos. El manual contiene dos submódulos, donde el primero cubre el desarrollo de software mediante programación estructurada y el segundo cubre bases de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 205

PROGRAMA DE APOYO

DIDÁCTICO 0 2 2
O 2
J U LI
O -
MANUAL DE PRÁCTICAS BR E R
FE

GICO
Ó
N OL
TEC
ERATO
ILL
A CH
B

PROGRAMACIÓN
MÓDULO I: Desarrolla software de aplicación con
programación estructurada.
NUESTROS VALORES

• RESPONSABILIDAD

• RESPETO

• COLABORACIÓN

• COMPROMISO

• LIDERAZGO

• SUSTENTABILIDAD

• HONRADEZ
Programación
Módulo I
Submódulo 1
Submódulo 2

Nombre del alumno:_________________________________________

Matrícula:______________________Semestre:______ Grupo: ______

Nombre del Plantel:__________________________________________

Nombre del Maestro:_________________________________________


Indice

Submódulo 1
UNIDAD I

1.1 La computadora y los niveles de datos………………………………….……………......9


1.2 Lenguajes de programación y su clasificación……………………….....……………….12
1.2.1 Programa…………………………………………………………………….…………12
1.2.2 Algoritmos…………………………………………………………………………..….13
1.2.3 Lenguaje de programación…………………………………......……………………...14
1.3 Lógica de programación……………….………………………………………………....14
1.3.1 Naturaleza de los datos………………………………………………………………....14
1.3.2 Operadores……………………………………………...………………………………15
1.3.3 Análisis del problema………………………………………………...………………....17
1.3.4 Algoritmo.................................................................................................................................17
1.3.5 Diagrama……………………………………………………….......…………………....17
1.3.5.1 Introducción a Raptor…………………....……………………………………….…..20
1.3.6 Pseudocódigo…………......……………………………………………………………..28
1.3.6.1 Robot Karel...........................................................................................................................28

UNIDAD II
1.4. Programación..........................................................................................................................36
1.4.1. Ambiente de trabajo (Codeblocks)..................................................................................37
1.4.1.2 Mi primer proyecto...........................................................................................................38
1.4.2 Lenguaje C.............................................................................................................................42
1.4.2.1 Tipos de variables..............................................................................................................48
1.5 Estructuras secuenciales..........................................................................................................53

UNIDAD III
2.Estructuras condicionales.........................................................................................................58
2.1 Simple If...................................................................................................................................58
2.2 Doble If – else..........................................................................................................................59
2.3 Multiple (If anidado)..............................................................................................................60
2.4 Switch (Case)...........................................................................................................................61
3.Estructuras ciclicas....................................................................................................................63
3.1 Estructura while (mientras)...................................................................................................66
3.2 Estructura for (Desde - Hasta)...............................................................................................70
3.3 Estructura do-while (Hacer - Mientras)...............................................................................73
3.4 Arreglos.....................................................................................................................................75
3.4.1 Arreglos numéricos..............................................................................................................75
3.4.2 Arreglos con caracteres (cadenas)......................................................................................77
3.5 Arreglos bidimensionales (matrices)....................................................................................80
Indice

Submódulo 2
UNIDAD I

1.Introducción a las bases de datos............................................................................................86


1.1 Terminología: Tablas, campos y registros...........................................................................86
1.2 Estructura de la Base de Datos..............................................................................................88
1.3 Normalización de una base de datos....................................................................................91

UNIDAD II
2.Bases de datos relacionales.....................................................................................................105
3.Diseño conceptual de una base de datos relacional...........................................................128
3.1 Ambiente del software yED Graph Editor........................................................................132

UNIDAD III
4.Diseño lógico y físico de una base de datos relacional......................................................115
4.1 Ambiente de Software MySQL y Workbench..................................................................115
5.Administra una base de datos...............................................................................................128
ANEXO........................................................................................................................................132
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Técnico en Programación
MÓDULO I: DESARROLLA E INSTALA SOFTWARE
DE APLICACIÓN UTILIZANDO PROGRAMACIÓN
ESTRUCTURADA, CON ALMACENAMIENTO
PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando


programación estructurada

7
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

8
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

1.1 La computadora y los niveles de datos


Computadora
Iniciamos definiendo a un sistema como el conjunto de elementos
interrelacionados entre sí para alcanzar un mismo fin. Podemos definir a
una computadora como un sistema de dispositivos electrónicos,
mecánicos y magnéticos que sirven para procesar y almacenar datos.
Las computadoras reciben nombre comercial dependiendo de su tamaño
o su uso, aunque en esencia son lo mismo.

Tenemos las computadoras de escritorio, las computadoras portátiles, los PDA y


celulares, etc. Una computadora es un sistema, dado que los dispositivos que la
componen trabajan de forma interrelacionada, con el objetivo de apoyar el fin último de la
computadora: procesar y almacenar datos

Tipos de dispositivos

Periférico: Se denomina a las unidades o dispositivos que comunican a la computadora


con el exterior de ésta, así como a los sistemas que almacenan o archivan la información,
sirviendo de memoria auxiliar a la memoria principal. Al conjunto de dispositivos que
permiten realizar operaciones de entrada/salida (E/S) complementarias al proceso de
datos que realiza el CPU (Central Process Unit o Unidad de Procesamiento Central) se
entiende por periférico.

Los Periféricos se clasifican en 4 categorías principales:

Tipo de Periférico Descripción


Captan y envían datos al dispositivo que los
procesará. Existen diversos periféricos de entrada,
Periféricos de entrada:
pero los más importantes son: el teclado y el ratón
(Mouse).
Son dispositivos que muestran o proyectan
información procesada hacia el exterior de la
Periféricos de salida:
computadora perceptible para el usuario, por
ejemplo: el monitor e impresora, etc.
Son dispositivos como su nombre lo dice almacenan
datos e información por tiempo indefinido, ésta es
una razón por lo que la memoria RAM no puede ser
Periféricos de almacenamiento:
considerada en este tipo de periférico por ser volátil
y temporal, ejemplos de estos periféricos son: Disco
Duro (DD), Memoria Portátil, USB, etc.
Son los periféricos que se encargan de comunicarse
con otras máquinas o computadoras, para trabajo en
conjunto (red) o para enviar y recibir información, por
Periféricos de comunicación:
ejemplo: tarjeta de red, tarjeta wireless, Fax-Modem,
etc.

9
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Se llegó al consenso que 28 proporcionaba un juego de caracteres de 256 símbolos, en


los cuales era posible almacenar las letras mayúsculas (A, B, C, etc.), minúsculas (a,
b, c, etc.), y símbolos especiales. Esto al menos en su versión occidental. A cada juego de
256 símbolos se le denominan página de códigos. Las páginas de códigos de un solo
byte contienen un máximo de 256 valores. Una página de códigos con un límite de
256 caracteres no puede adaptarse a todos los idiomas porque para ello sería necesario
utilizar mucho más de 256 caracteres. Por lo tanto, los distintos alfabetos utilizan páginas
de códigos separadas. Hay una página de códigos para el griego, otra para el japonés,
otra para el español, etcétera.

En términos de relevancia

Por valor entendemos la utilidad o deleite que nos proporciona algo, al menos en nuestra
percepción. Somos las personas quienes le otorgamos a los datos el caracter
de valiosos o irrelevantes. Los datos pueden tener diferente nivel de utilidad para las
personas, y esta utilidad generalmente está asociada al significado que tienen para
nosotros. Podemos proponer los siguientes niveles de los datos, en cuanto a la relevancia
que tienen para nosotros:

Dato. Es el conjunto de representaciones simbólicas no significativas, dado que no


tenemos la capacidad de reconocerles un significado más allá del que tienen los
símbolos que componen el dato.

Información. Es el conjunto de datos que en determinada cantidad y forma


aumenta el conocimiento o reduce la incertidumbre respecto a un sujeto, evento o
circunstancia.
La información sólo podrá ser considerada información si tenemos capacidad de
reconocerla.

Conocimiento. Es la información, cuando tenemos capacidad para usarla en


actividades del plano real y limitado. El conocimiento tiene naturaleza práctica.

Imaginación. Es la información, cuando tenemos capacidad para usarla en


actividades del plano irreal e ilimitado. La imaginación tiene naturaleza teórica.

Manipulación de datos

De los niveles de relevancia de los datos, sólo nos interesa la información, ya que los
programas que realicemos generalmente procesarán datos con el fin de almacenarlos o
de producir información. Las acciones que es posible realizar con los datos son los
siguientes:

Recopilación de datos.
Cuando los datos ya existen, sólo se captan para su procesamiento o
almacenamiento. La recopilación puede hacerse preguntándolos al usuario o
tomándolos de archivos. Ejemplo típico de la recopilación puede ser una pantalla
en Internet que nos solicita nuestro correo electrónico.

11
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Procesamiento de datos.
Cuando los datos se someten al uso de operadores aritméticos lógicos, con el fin
de crear datos nuevos o modificar los existentes. Un ejemplo típico de esto es
cuando corregimos nuestra información personal (por ejemplo nuestro nickname)
en un programa de mensajería electrónica.

Generación de datos.
Cuando se generan datos nuevos y desconocidos a partir de datos conocidos
y existentes (datos conocidos procesamiento datos nuevos). Un ejemplo típico de
esta acción es cuando se genera un monto total, como resultado dela suma de los
precios de varios artículos.

Divulgación de datos.
Cuando los datos existen y se hacen llegar a los usuarios que deben tenerlos. En
esta acción no se genera nada nuevo, pues sólo se trata de exposición de datos.
Un ejemplo típico de esto son las páginas web que muestran información a través
de Internet. En las aplicaciones complejas conviven todas las acciones en un
momento determinado. Tome en cuenta por ejemplo una página web en donde se
venden canciones MP3. De inicio se realiza divulgación, dado que muestra la
información de los nuevos discos que están a la venta, si a usted le interesa
alguna de las canciones, la selecciona para comprarla.
La página realiza recopilación de datos al mantener internamente la información de
las canciones que ha seleccionado, y además preguntándole la información de su
tarjeta de crédito. La página también procesa y genera nuevos datos a partir del
precio de las canciones que quiere comprar, calculándole los impuestos y cargos
de envío. Finalmente se procesa información, haciendo el cargo a su tarjeta de
crédito.

Es muy probable que al someter a los datos a cualquiera de las acciones anteriores, éstos
asuman el carácter de información. Recordemos que dicho carácter tiene que ver con el
valor que tienen los datos para nosotros, y no con las acciones que hayamos aplicado
sobre ellos. Las acciones que realizamos con los datos generalmente se llevarán a cabo
con la asistencia de equipo de cómputo, a través de la cual se automatizan de forma
rápida y confiable.

La informática es la ciencia que estudia la forma automatizada en que se recopila,


procesa, genera y divulga la información.

1.2 Lenguajes de programación y su clasificación

1.2.1 Programa

Un programa es una secuencia de instrucciones mediante las cuales se ejecutan


diferentes acciones de acuerdo con los datos que se están procesando. El programa debe
incluir instrucciones para las acciones que deben ejecutarse sobre cada uno de los tipos
de datos admitidos, además de instrucciones que identifiquen los datos erróneos.

12
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Cuando se ejecuta un programa con un tipo de datos específicos, es probable que no se


ejecuten todas las instrucciones sino sólo las que sean pertinentes a los datos en cuestión
Un programa se compone de estructuras de datos, operaciones primitivas elementales y
estructuras de control, como se muestra a continuación:
Programa = estructuras de datos
+ operaciones primitivas elementales
+ estructuras de control

Estructura de datos. Los hechos reales, representados en forma de datos,


pueden estar organizados de diferentes maneras llamadas estructura de datos.
Por ejemplo el nombre, las horas trabajadas y el sueldo por hora son los datos
mediante los cuales se representa un empleado en una situación de nómina

Operaciones primitivas elementales. Son las acciones que se ejecutan sobre los
datos para transformarlos en información. Por ejemplo el sueldo de un empleado
se calcula multiplicando las horas trabajadas por la cuota horaria.

Estructuras de control. Son los métodos que existen para dirigir el flujo de
acciones que la computadora deberá ejecutar sobre los datos manejados por el
programa. Entre las estructuras de control están la capacidad de ejecutar
operaciones secuenciales una tras otra; la selección de alternativas, como ejecutar
una u otra opción de acuerdo con ciertas condiciones y las repeticiones, cómo
realizar varias veces una acción: por ejemplo calcular el sueldo de un empleado,
pero repitiendo el cálculo n veces para n empleados.

Competencia Profesional:
Soluciona problemas.

1.2.2 Algoritmos

De acuerdo con la Real Academia Española, podemos definir a un Algoritmo como un


conjunto ordenado y finito de operaciones que permite hallar la solución de un problema.

En términos de programación, un algoritmo de programación sería un conjunto ordenado


y finito de asignaciones, procesos, cálculos y decisiones que permiten a un programa
satisfacer una unidad de funcionalidad dada.

Si tuviéramos que realizar un programa que calculara el área de un cuadrado y la


desplegara, tendríamos que el algoritmo sería el siguiente:
1. Inicio.
2. Preguntar la medida de un lado.
3. Calcular el área del cuadrado.
4. Desplegar el valor del área.
5. Fin.

13
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Los algoritmos sirven para validar con el cliente la secuencia de operaciones que nos
permitirán cubrir las unidades de función. Como son proporcionadas al cliente para su
validación, no deben contener términos técnicos. En un algoritmo el cliente puede
hacernos precisiones que nos lleven a cambiar el orden de las operaciones a realizar,
agregar o quitar operaciones, e incluso redimensionar el alcance de las unidades de
función.

1.2.3 Lenguaje de programación

Un lenguaje de programación es el medio a través del cual le comunicamos a la


computadora las instrucciones que debe ejecutar para resolver el problema en cuestión.

Todo lenguaje está compuesto por un alfabeto (conjunto de caracteres), un vocabulario


(léxico) y una gramática (reglas de sintaxis).

El objetivo primordial de un lenguaje de programación es hacernos la vida más sencilla,


proporcionándonos formas humanamente comprensibles de construir secuencias de
números binarios reconocidos por un entorno operativo, a través de símbolos y palabras
equivalentes. Sin la existencia de lenguajes de programación avanzados, sería imposible
la elaboración de programas tan útiles y complejos como Microsoft Word o Microsoft
Excel.
Los millones y millones de secuencias binarias que tendríamos que proporcionar a la
computadora para obtener la funcionalidad que nos dan tales programas excederían
nuestro tiempo de vida.

1.3 Lógica de programación


Competencia Profesional:
Soluciona problemas.

1.3.1 Naturaleza de los datos

En términos computacionales, los valores que pueden ser manejados tienen las
siguientes naturalezas.

Valores numéricos

Son todos aquellos valores con los cuales se pueden realizar cálculos aritméticos. Dentro
de los valores numéricos tenemos diferentes tipos: los números enteros, que son aquellos
que no poseen decimales; tenemos los números decimales, que son aquellos que sí
poseen decimales; estos a su vez pueden tener precisión simple o doble, dependiendo del
número de decimales que soportan. Estos números decimales también varían en cuanto
a su exactitud, ya que hay números decimales que ofrecen exactitud completa,
mientras que otros ofrecen resultados aproximados. El consumo de bytes para almacenar
los valores numéricos depende del tipo de valor numérico y la exactitud
requerida. Los tipos de valores numéricos son de longitud fija.

14
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Valores cadena.

Son todos aquellos valores compuestos por una serie de caracteres, que son tratados
como un solo valor. Internamente, la computadora ve a cada símbolo de una cadena en
forma independiente, sin embargo, los valores de tipo cadena permiten ver al conjunto de
caracteres como un solo valor (‘h’,‘o’,‘l’,‘a’ o “hola”). Los valores de tipo cadena tienen
longitud variable.

Valores fecha.

Son todos aquellos valores que almacenan una fecha de calendario Internamente para la
computadora son números que representan de manera única a cada día calendario. Para
ello se utilizan esquemas estándar, como por ejemplo las fechas julianas. Este tipo de
valores permiten la comparación de fechas y los cálculos basados en tiempo, a través de
representaciones de fecha reconocidas por nosotros (ddmmaahh:mm:ss). Por ser en el
fondo un número, los valores fecha son de longitud fija.

Valores booleanos.

Son valores binarios compuestos por el conjunto 0, 1, llamados así por tener sus
orígenes en el álgebra de Boole. Este tipo de valores permiten manejar pares de valores
mutuamente excluyentes, como Falso Verdadero, Si No, Abierto Cerrado, etcétera. Como
generalmente se utilizan para representar valores Falso Verdadero, suelen conocerse
como valores lógicos.

Valores nulos.

Es la ausencia de valor. Indica que el valor se desconoce; cualquier operación realizada


con valores nulos genera valores nulos, dado que es imposible determinar el resultado
final. Por ejemplo, en la siguiente operación (x = 4 + null), sería null; dado que, como no
sabemos el segundo número de la suma, no podemos saber qué valor asumirá x.

1.3.2 Operadores

Los operadores son los elementos del lenguaje que nos permitirán asignar, calcular y
comparar expresiones, dando lugar a lo que conocemos como procesamiento. Todos los
lenguajes poseen operadores, siendo las clasificaciones más importantes las siguientes:
aritméticos, de asignación, de comparación y lógicos.

Operadores aritméticos

Los operadores aritméticos forman parte de la educación básica de cualquier persona, por
lo cual difícilmente podríamos agregar algo que no sepa con respecto a ellos y lo
que representan. Si en su vida ya ha sumado, restado, multiplicado y dividido.

15
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Operador Nombre
+ Suma
- Resta
* Multiplicación
/ División
^ Exponencial

Operadores de asignación

El operador de asignación es el que permite asignar un valor a una variable. El operador


clásico de asignación es el signo de igual (=).
Variable = Valor
Donde Variable es una variable y Valor, una expresión válida para el tipo de dato de
variable.

Operadores comparativos

Los operadores comparativos son los que permiten comparar expresiones, una en
relación a la otra, proporcionando un valor de falso (False), verdadero (True), o nulo
(Null), dependiendo si la comparación es una verdad o no.

La tabla que sigue describe los operadores comparativos clásicos:

Operador Se lee Resultado


= Igual a Devuelve los registros que coinciden con la condición.
< Menor que Muestra aquellos registros cuyos valores son estrictamente
menores que la condición.
> Mayor que Muestra aquellos registros cuyos valores son estrictamente
mayores que la condición.
<= Menor o igual Devuelve los registros cuyos valores son menores o iguales a
que la condición.
>= Mayor o igual Devuelve los registros cuyos valores son mayores o iguales a la
que condición.
¡= Distinto de Sólo muestra aquellos registros que tienen valores distintos a
la condición.

Operadores lógicos

Los operadores lógicos son aquellos que sirven para unir o negar condiciones,
produciendo un valor lógico. Los operadores lógicos básicos son los siguientes.

Símbolo Definición
AND Verdadero sólo si los dos elementos son verdaderos
OR Verdadero si cualquiera de los elementos es verdadero
XOR Verdadero si cualquiera de las expresiones (pero no ambas) es verdadera
NOT Cambia el valor de Falso a Verdadero y viceversa

16
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

1.3.3 Análisis del problema

Cuando un usuario plantea a un programador un problema que resolver mediante


su ordenador, por lo general ese usuario tendrá conocimientos más o menos amplios
sobre el dominio del problema, pero no es habitual que tenga conocimientos
de informática. Por ejemplo, un contable que necesita un programa para llevar la
contabilidad de una empresa será un experto en contabilidad (dominio del problema), pero
no tiene por qué ser experto en programación.
Del mismo modo, el informático que va a resolver un determinado problema puede ser un
experto programador, pero en principio no tiene por qué conocer el dominio del problema;
siguiendo el ejemplo anterior, el informático que hace un programa no tiene por qué ser
un experto en contabilidad.
Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el
programador necesita de la experiencia del experto del dominio para entender el
problema. Al final, si se quiere llegar a una solución satisfactoria es necesario que:

• El problema esté bien definido con el máximo detalle


• Las especificaciones de las entradas y salidas del problema, deben ser descritas
también en detalle:
• ¿Qué datos son necesarios para resolver el problema?
• ¿Qué información debe proporcionar la resolución del problema?

1.3.4 Algoritmo

Un algoritmo consiste en una especificación clara y concisa de los pasos necesarios para
resolver un determinado problema, pero para poder diseñar algoritmos es necesario
disponer de una notación, que llamaremos ‘notación algorítmica’, que permita:

• Describir las operaciones puestas en juego (acciones, instrucciones, comandos,...)


• Describir los objetos manipulados por el algoritmo (datos/informaciones)
• Controlar la realización de las acciones descritas, indicando la forma en que estas se
organizan en el tiempo
Para poder describir cualquier tipo de acción de las que intervienen en un algoritmo,
diversos autores proponen el uso de un conjunto de construcciones lógicas (secuencia,
decisión e iteración) con las que es posible escribir cualquier programa.

1.3.5 Diagrama

El proceso o pasos que representa el diagrama de flujo pueden ser de cualquier tipo,
desde los pasos para freír un huevo, como luego veremos, hasta los pasos para realizar
un enorme programa informático.

17
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Como hacer un Diagrama de Flujo


Normalmente para realizar un diagrama de flujo primero se hace lo que se llama el
algoritmo. Un algoritmo es una secuencia de PASOS LÓGICOS a seguir para resolver un
problema de forma escrita.

Un ejemplo para cocinar un huevo para otra persona sería:

1. Pregunto si quiere el huevo frito.


2. Si me dice que sí, lo frio, si me dice que no, lo hago hervido.
3. Una vez cocinado le pregunto si quiere sal en el huevo.
4. Si me dice que no, lo sirvo en el Plato, si me dice que sí, le hecho sal y después lo
sirvo en el plato.

Si te fijas los pasos no pueden cambiar su posición. Sería imposible preguntarle si lo


quiere frito después de haberlo hervido, por ejemplo. Es muy importante que los pasos
sean una secuencia lógica y ordenada.

Ahora que ya sabemos todos los pasos, mediante el algoritmo, podemos hacer un
esquema con estos pasos a seguir. Este esquema será el Diagrama de Flujo.

Si uno tiene experiencia puede prescindir del algoritmo escrito pero siempre tendremos
que tenerlo en mente para hacer el diagrama de flujo sin equivocarnos.

18
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

¿Qué son los Diagramas de Flujo y para qué se usan?

Un algoritmo describe una secuencia de pasos escritos para realizar una tarea.
El Diagrama de Flujo es su representación esquemática.

Los diagramas de flujo representan la secuencia lógica o los pasos que tenemos que
seguir para realizar una tarea mediante unos símbolos y dentro de ellos se describen los
pasos a realizar.

Por la tanto son una excelente herramienta para resolver problemas, comprender el
proceso a seguir así como para identificar posibles errores antes del desarrollo final de la
tarea. Se usan para hacer un programa informático, para analizar lo que tiene que hacer
un robot, en los procesos industriales, etc. Un diagrama de flujo es útil en todo aquello
que se necesite una previa organización antes de su desarrollo.

En la realización de un programa informático es imprescindible primero realizar el


diagrama de flujo, independientemente del lenguaje de programación que usemos
después. Una vez que tenemos nuestro diagrama de flujo solo tendremos que conocer las
órdenes del lenguaje que realizan esas tareas que se especifican en el diagrama.

Reglas Básicas Para la Construcción de un Diagrama de Flujo

1. Todos los símbolos han de estar conectados


2. A un símbolo de proceso pueden llegarle varias líneas
3. A un símbolo de decisión pueden llegarle varias líneas, pero sólo saldrán dos (Si
o No, Verdadero o Falso).
4. A un símbolo de inicio nunca le llegan líneas.
5. De un símbolo de fin no parte ninguna línea.

Los símbolos que se usan para realizar los diagramas de flujo son los siguientes:

19
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla diagramas de flujo de algoritmos

1.3.5.1 Introducción a Raptor

Raptor es un lenguaje visual de desarrollo basado en simbologías de


diagramas de flujo. En Raptor, cada símbolo del diagrama representa una
instrucción específica y las líneas de flujo determinan el orden que debe
seguir el programa. Al hacer el diagrama de flujo de un programa,
realmente estamos haciendo un programa que podremos ejecutar y
comprobar su funcionamiento, lo cual nos evita la necesidad de tener que
implementar un diagrama de flujo en un lenguaje de programación.
Raptor es un entorno de programación basado en diagrama de flujo, diseñado
específicamente para ayudar a los estudiantes a visualizar sus algoritmos.
Ventana principal de Raptor
La interfaz de Raptor se compone de dos elementos principales: La ventana principal
(main), y la consola maestra (master console).
Barra de Menú

Barra
Herramientas

Área de Símbolos

Área de Seguimiento

20
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Área de resultados Barra de menú

Botón de limpieza

Línea de comandos

En la interfaz de Main se tienen los siguientes elementos:

Barra de Menú (menú bar)


Permite la selección de comandos disponibles en main. Este elemento es estándar
para todos los programas de interfaz de Windows.

Barra de Herramientas (toolbar)


Permite la selección rápida de los comandos más usuales disponibles en Raptor.
Éste elemento es estándar para todos los programas de interfaz Windows.
Los elementos de la barra de herramientas son:
Ejecutar diagrama
Detener ejecución

Control de velocidad
Terminar ejecución

de la ejecución

Zoom del diagrama


Abrir diagrama existente

Cortar
Copiar
Pegar
Imprimir
Deshacer
Rehacer
Guardar diagrama
Nuevo diagrama

Ejecutar siguiente instrucción

21
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Área de símbolos
Es el área que posee los 6 símbolos primarios de Raptor para la construcción de
programas. Dichos símbolos son los siguientes:
1. Símbolo de asignación
2. Símbolo de llamada
3. Símbolo de entrada
4. Símbolo de salida
5. Estructura de selección
6. Estructura de bucle

Área de seguimiento

Permite ver los valores contenidos en las variables y arreglos en tiempo de


ejecución.

Área de trabajo

Es el área en donde se pueden integrar de manera visual las instrucciones de


Raptor, dando lugar a los programas. En este espacio también se pueden integrar
procedimientos externos que complementen a un programa.

Mientras que en la interfaz de la consola maestra se tienen los siguientes elementos:

Barra de menú

Permite la selección de comandos disponibles en master console. Este elemento


es estándar para todos los programas de interfaz Windows.

Área de resultados

Es el área en el que se mostrarán los resultados de la ejecución del programa.

Línea de comandos

Permite ejecutar comandos directamente desde el master console.

Botón Clear

Limpia el contenido de resultados

Es importante mencionar que master console permanece abierta mientras que Raptor
este abierto, y se cierra sólo al cerrar el Main.

22
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Instrucciones soportadas

En Raptor las instrucciones son símbolos, que pueden ser integrados a un diagrama de
flujo que representa un programa en Raptor. Las instrucciones permitidas se encuentran
en el área de símbolos de la pantalla principal (main).

Símbolo Instrucción y aplicación


Instrucción de asignación: Permite asignar valores a
variables y arreglos. Es el elemento principal para los cambios
de estado de un programa.

Instrucción de llamado: Permite hacer llamados a funciones


de Raptor y a procedimientos externos al programa. En Raptor
es posible agregar subrutinas en forma de diagramas, que
podrán ser llamadas usando ésta instrucción.

Instrucción de entrada: Permite realizar peticiones de datos


al usuario. En esta instrucción es posible integrar el texto de
solicitud (PUT) y el requerimiento del valor solicitado (GET).

Instrucción de salida: Permite realizar la visualización de


datos al usuario

Instrucción de selección: Permite realizar la estructura de


decisión. Dependiendo del valor de una expresión lógica, será
posible aplicar instrucciones, tanto si es verdadero (True) como
si es falso (False). Esta instrucción permite la implementación
de condicionales simples y condicionales complejas

Instrucción de ciclo: Permite realizar una estructura de


control. Al cumplirse la condición por verdadero, el ciclo
termina; como en todos los bucles de comparación al final, se
ejecuta al menos una vez.

Estructura Básica

 Inicia con el símbolo Start

 Ejecuta el programa a través de sentencias/símbolos

 Detiene la ejecución cuando se alcanza el símbolo End

23
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ejemplo:

Construir el Diagrama de Flujo de un programa que calcule el área de un triángulo e


imprima dicha área.

Primero debemos ubicar el icono de Raptor en nuestra computadora.

Es probable que en cualquier momento Raptor le solicite que guarde su programa por
primera vez. Cuando esto suceda, asigne un nombre al programa, en este caso lo
guardaremos como area.rap. Como debe suponer, los programas en Raptor tienen
extensión .rap. Aparecerá la interfaz de Raptor

Observe como entre la instrucciónde inicio (Start) y la instrucción de fin (End), hay una
linea de flujo que posee cabeza de flecha. La linea indica que el sentido del programa es
Top – Down.

Hay dos formas de agregar instrucciones a un programa de Raptor. La primera consiste


en hacer clic sobre alguna de las 6 instrucciones que aparecen en el área de símbolos y
ésta se pondrá en color rojo indicando que es el tipo que se agregará y coloque el puntero
del ratón sobre la linea de flujo que se encuentra entre Start y End, observe como éste
cambia de aspecto luciendo como una pequeña manita, y al hacer clic sobre la linea de
flujo la instrucción se agregará.

La segunda forma de agregar instrucciones es utilizando el menú contextual. Coloque el


puntero del ratón en la linea de flujo, aparecerá el puntero nuevamente en forma de
manita. Presione el botón derecho del ratón y aparecerá el menú contextual con todas las
opciones de agregado de instrucciones. Seleccione la opción de menú contextual que
desea.

24
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Para nuestro caso insertaremos la instrucción input

Damos doble clic en la entrada de datos y aparecerá una ventana el la cual insertaremos
el texto y la variable en la cual se guardara el valor

Se pone el texto entre “ “

Se pone el nombre de la
variable en la cual
guardaremos el dato que
solicitamos

Dar clic en el Botón Done y los datos pasarán al símbolo con el que se esta trabajando.

25
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Solicitamos el valor de la Base y lo


guardamos en la variable Base

Solicitamos el valor de la Altura y lo


guardamos en la variable Altura

Insertamos el símbolo de asignación para poner la fórmula y le damos doble clic


aparecerá la siguiente ventana en la cual pondremos lafórmula que deseamos calcular.

Se escribe el nombre de la variable


en la cual se imprimirá el resultado

Se escribe la fórmula que deseamos


calcular

Se presiona el botón Done y se asignarán los valores al símbolo con el que estamos
trabajando. Por último se agregará el símbolo de salida que es dónde asignamos la
variable que tiene el valor guardado de la operación.

Escribimos el texto que queremos


que aparezca entre “ “, seguido del
signo de + y el nombre de la variable
donde se guardó el resultado de la
operación

Se asigna automáticamente el
nombre de la variable que pusimos
en el recuadro de arriba.
Presionamos el botón Done

26
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Una vez que fueron introducidos todos los datos necesarios para realizar el cálculo del
área de un triángulo presionamos el botón ejecutar programa (execute to completion) y
nos aparecerán los cuadros de diálogos en los cuales nos pedirá el valor de la Base, la
Altura y realizará el cálculo correspondiente.

Ingresamos el valor de la Base


En este caso sería 5

Ingresamos el valor de la
Altura
La cual sera 4

El resultado para este caso es


10
Y nos indica el número de
símbolos evaluados durante la
ejecución que en este caso
fueron 6

27
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Prácticas.
Realiza los programas propuestos por tu maestro en clases y Recuerda que se aprende
a programar programando

Competencia Profesional:
Elabora pseudocódigo de los diagramas de flujo.

1.3.6 Pseudocódigo

1.3.6.1 Robot Karel

Karel es un lenguaje sencillo y divertido que ayuda al aprendizaje de algoritmos y al


desarrollo de la lógica. Karel es un robot virtual que aparece como una pequeña flecha
azul que viaja a través de su mundo. El mundo de Karel es un cuadrado lleno de calles y
avenidas que él puede recorrer, a menos que ésta esté bloqueada.

Karel tiene una mochila donde guarda zumbadores. Los zumbadores son unos objetos
que pueden ser simulados como canicas. Éstos le ayudan a Karel a realizar sus tareas ya
que pueden ser utilizados para muchas cosas como contar, marcar lugares especiales o
caminos importantes, etc.

Para que Karel pueda hacer su trabajo, tú como programador tienes que escribir un
código con órdenes o comandos que Karel obedece. El código tiene que estar correcto,
ya que, lamentablemente, Karel no es un robot listo y necesita toda tu ayuda para poder
funcionar bien.

El programa de Karel
El programa de Karel es una aplicación muy sencilla que sólo tiene cuatro secciones o
ventanillas.

28
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Mundo: Es el lugar en el cual Karel realiza sus tareas y puede ser diseñado como tú
quieras mientras la tarea de Karel pueda ser realizada ahí.

Programa: Aquí es donde tú escribes tu código de instrucciones que Karel va a realizar.


Es la parte más importante del programa porque es lo que hace que Karel funcione. Se
pueden elegir dos tipos de código: Pascal y Java. Nosotros sólo vamos a usar Java.

29
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ejecutar: En esta sección puedes ver a Karel realizar las instrucciones que habías
escrito. Ojo, tu código tiene que estar compilado para que funcione. Esta sección hace
que veas gráficamente el resultado de tu código.

Ayuda: Este botón contiene un pequeño tutorial acerca del uso de Karel y viene la
sintaxis correcta de las instrucciones.

Zumbadores en la mochila: Indica cuantos zumbadores está cargando Karel en ese


momento.

Retardo de ejecución: Indica que tan rápido avanza Karel. Entre menor sea el número
de retardo es mayor la velocidad de Karel.

30
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

El Mundo de Karel
El mundo de Karel está formado por cien avenidas y cien calles. Las avenidas son
verticales y las calles son horizontales. Se pueden agregar y quitar paredes en cualquier
parte del mundo, así como zumbadores, excepto en los límites de éste. Karel solamente
tiene la habilidad de girar hacia su izquierda, y siempre a 90°. Por lo tanto, Karel siempre
va a estar orientado hacia alguno de los puntos cardinales: norte, sur, este y oeste. En el
mundo también se puede definir el número de zumbadores que carga Karel en su
mochila. Existe la opción de que Karel tenga zumbadores ilimitados y nunca se agoten.
Está opción se activa oprimiendo el botón INFINITO en el cuadro de texto del mundo.

Las paredes son obstáculos que se ponen entre las calles que Karel no puede saltar,
bloqueando su paso por completo. Las paredes se ponen simplemente haciendo un clic
con el ratón entre dos calles o dos avenidas. No existen paredes que vallan de una calle a
una avenida, es decir, no hay paredes en diagonal. Para quitarla simplemente se hace un
clic en la pared. Los límites del mundo son considerados como pared.

Se puede establecer con que ubicación inicia Karel el programa y hacia donde está
orientado. Así como agregar y quitar zumbadores en cualquier parte del mundo.

Empezando a Programar
El lenguaje por default es Pascal, para programar en JAVA, selecciona la opción que
viene a la izquierda de los botones. Ahora pulsa en el botón "Nuevo”. Un esqueleto del
programa será creado automáticamente. Se creará un programa inicial. Este programa
inicial contiene los comandos básicos que son necesarios en cada programa. Ahora
deberías ver una ventana como la siguiente.

31
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Este programa inicial contiene los comandos básicos que son necesarios en cada
programa.

Instrucciones Básicas
Karel cuenta con cinco instrucciones básicas para hacer todas sus tareas. Las
instrucciones son las siguientes:

No. Instrucción Descripción


1 move() Karel avanza una cuadra hacia donde esté
orientado. Si hay una pared enfrente, el
programa marcará un error y dejará de
ejecutarse.
2 turnleft() Karel gira hacia la izquierda 90°,
cambiando su orientación.
3 pickbeeper() Karel recoge un zumbador en el lugar
donde está parado. Si no hay zumbador en
ese lugar, el programa marcará error y
termina la ejecución.
4 putbeeper() Karel deja un zumbador en el lugar que
está parado. Si Karel no tiene zumbadores
en la mochila, entonces no podrá dejar el
zumbador y el programa marcará error.
5 turnoff() Finaliza la ejecución del programa. Karel
ya no podrá hacer más cosas porque ya
está apagado.

32
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Toma de Decisiones
Muchas veces, Karel necesita tomar una decisión cuando está en una situación apretada
como cuando está enfrente de una pared y necesita saber si avanza o si no. Las
funciones de condiciones (o funciones booleanas) que Karel puede detectar para poder
hacer su decisión se listan a continuación:

No. Función de Condición Descripción


1 frontIsClear El frente está Despejado
2 frontIsBlocked El frente está Bloqueado
3 leftIsClear El lado izquierdo está Despejado
4 leftIsBlocked El lado izquierdo está Bloqueado
5 rightIsClear El lado derecho está Despejado
6 rightIsBlocked El lado derecho está Bloqueado
7 nextToABeeper Hay zumbador en mi posición
8 notNextToABeeper No hay zumbador en mi posición
9 anyBeepersInBeeperBag Hay zumbador en mi mochila
10 noBeepersInBeeperBag No hay zumbador en mi mochila
11 facingNorth Estoy Orientado hacia el Norte
12 facingSouth Estoy Orientado hacia el Sur
13 facingEast Estoy Orientado hacia el Este
14 facingWest Estoy Orientado hacia el Oeste
15 notFacingNorth No estoy Orientado hacia el Norte
16 notFacingSouth No estoy Orientado hacia el Sur
17 notFacingEast No estoy Orientado hacia el Este
18 notFacingWest No estoy Orientado hacia el Oeste

Decisiones Simples
Hay veces que Karel puede hacer una serie de instrucciones si se cumple una condición
previamente establecida. La condición puede ser cualquiera de las mencionadas
anteriormente.
Por ejemplo:

En las líneas anteriores se muestra una pequeña decisión que va a hacer Karel. Si en
frente de él no hay pared, entonces avanza; si hay pared entonces no hace nada.

33
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Decisiones con otro Caso

En este tipo de decisiones, Karel puede hacer una serie de instrucciones si se cumple la
condición y si no se cumple Karel puede hacer otra serie de instrucciones.
En este caso, si el frente de Karel está libre entonces avanza. Si está bloqueado entonces
gira hacia la izquierda, avanza una cuadra y después gira a la derecha y avanza otra
cuadra.

Programación de casos prácticos usando Karel


Práctica
1. Pista de Carreras.

Consideraciones
• La tarea de Karel es recoger zumbadores a lo largo de una pista de carreras.
• Karel debe dar una vuelta completa y depositar los zumbadores en salida.
• No sabemos hacia donde está orientado Karel.
• Karel no tiene zumbadores en la mochila.
• No importa la orientación ni la posición final de Karel

34
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Mundo Inicial Mundo Final

2. Amontonar zumbadores

Tu tarea consiste en escribir un programa que ayude a Karel a amontonar los zumbadores
de cada columna en un montón en la base de la misma.
Consideraciones

• Inicialmente, Karel se encuentra en la posición (1,1) orientado hacia el norte.


• El cuarto de Karel se encuentra lleno de columnas de zumbadores como se
muestra en el ejemplo.
• Las columnas de zumbadores pueden tener cualquier altura desde 1 hasta 100
zumbadores, y se suceden una a la otra sin dejar espacios.
• Al encontrar la primera columna vacía, Karel sabrá que ha llegado al final del
cuarto.
• Karel no tiene zumbadores en la mochila.
• La cantidad de zumbadores en cada casilla es desconocida.
• No importa la posición ni la orientación final de Karel

Mundo Inicial Mundo Final

35
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

1.4. Programación
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado.

La programación informática es el proceso por


medio del cual se diseña, codifica, limpia y protege
el código fuente de programas computacionales. A
través de la programación se dictan los pasos a
seguir para la creación del código fuente de
programas informáticos. De acuerdo con ellos el
código se escribe, se prueba y se perfecciona.
El objetivo de la programación es la de crear
software, que después será ejecutado de manera
directa por el hardware de la computadora, o a través de otro programa.
La programación se guía por una serie de reglas y un conjunto pequeño de órdenes,
instrucciones y expresiones que tienden a parecerse a una lengua natural acotada. El
lenguaje de programación, son todas aquellas reglas o normas, símbolos y palabras
particulares empleadas para la creación de un programa y con él, ofrecerle una solución a
un problema determinado.
El lenguaje de programación es el responsable de que la computadora siga paso a paso
las órdenes que el programador ha diseñado en el algoritmo. Con esto se entiende que el
lenguaje de programación es una especie de intermediario entre el ordenador y el usuario,
para que este último pueda darle respuesta a los problemas mediante la computadora y
haciendo uso de palabras (funciones), que le interpretan dicho programa al computador
para la realización de ese trabajo.

Ejemplo:
Ahora bien, dependiendo del lenguaje que se elija, se puede hablar del tipo de
programación que se va a realizar. Algunos de ellos son:

• Programación secuencial: son aquellos programas que se diseñan con


directrices que van en secuencia una detrás de la otra.

• Programación estructurada: se considera así, cuando la programación es


diseñada por módulos. Cada módulo realiza una tarea en especial, y cuando se
requiera de esa tarea, sencillamente se le hace el llamado a ese módulo.

• Programación orientada a objetos: son aquellos lenguajes que permiten la


implementación de objetos dentro del diseño del mismo y el usuario podrá pegar a
cada objeto un código de programa.

36
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

• Programación lógica o de lenguaje natural: son aquellos programas que se


diseñan con interfaces, de tal manera que el usuario pueda darle ordenes a la
máquina utilizando un lenguaje simple.

• Programación de inteligencia artificial: son aquellos programas que más se


acercan a la inteligencia humana, ya que tienen la capacidad de desarrollar
conocimiento. Este tipo de lenguaje trabaja de una manera muy semejante a la
mente humana

Practica:
Investiga un ejemplo de lenguaje de programación de cada uno de los tipos y muestra un
ejemplo de programa del mismo (interfaz, código, ambiente, etc)
Prepara un reporte de tu investigación y compartelo con tus compañeros de clase.

1.4.1. Ambiente de trabajo (Codeblocks)

¿Qué es el Codeblocks?
Es un entorno de desarrollo integrado libre y multiplataforma para el
desarrollo de programas en lenguaje C y C++. Está basado en la plataforma
de interfaces gráficas WxWidgets, lo cual quiere decir que puede usarse
libremente en diversos sistemas operativos, y está licenciado bajo la Licencia pública
general de GNU.
Debido a que Dev-C++ es un IDE para los lenguajes C y C++ y está creado en Delphi,
surgió la idea y necesidad de crear un IDE hecho en los lenguajes adecuados: C y C++.
Con esta motivación se creó Code::Blocks.
Ejemplo:
Instalemos el software, toma nota del procedimiento realizado por tu maestro.
Nos dirigimos a la dirección http://www.codeblocks.org/downloads y
descargamos el archivo binario de instalación, elegimos nuestro sistema
operativo http://www.codeblocks.org/downloads/26 o carga el código QR, una
vez descargado lo ejecutamos e iniciamos la instalación. Dejamos las opciones por
defecto.

37
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada


Practica:
Te reto, baja el software e instálalo en tu equipo siguiendo los pasos que tu maestro
realizo previamente. Al final general un documento electrónico con el procedimiento
realizado y explica cada uno de sus pasos con el texto e imágenes necesarias.

1.4.1.2 Mi primer proyecto


Para crear un proyecto requieres seguir el siguiente procedimiento, abrimos el
Code::blocks dando doble clic en el inoco del mismo.

Al abrirse nos aparece una ventana que nos da la bienvenida y nos ofrece la opción de
crear un proyecto nuevo o abrir uno ya existente.
¿Qué es un proyecto?
Para nosotros, un proyecto va a ser un programa, una aplicacion. Para crear un nuevo
Proyecto, en el menú File y en la opción New, elegimos la opción Project, también
podemos elegir la opción que se muestra en la ventana inicial (Create a new project). Al
hacer esto se abrirá la siguiente ventana y seleccionamos la opción Console application y
oprimimos el botos de Go.

38
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ahora configuremos nuestro proyecto. Nos da la bienvenida al asistente, simplemente


oprimimos Next.

Ahora seleccionamos el lengiaje a utlizar, en nuestro caso será C y opimimos Next.

39
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ahora escribe el nombre del proyecto y selecciona la ubicación donde será grabado
orpimiendo el boton Next.

Y en la ultima pantalla seleccionamos el compilador y presionamos la tecla Finish, y listo a


programar…

40
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada


Ejemplo:
Al cargar el proyecto en la parte izquierda te aparecerá tu espacio de trabajo, da clic sobre
Sources y luego sobre main.c para que se cargue la ventana para programar. Se mostrará
enfrente de esta área la pantalla para que escribas el código de tu programa.

Edita el código que aparece y teclea lo que falte para completar el siguiente programa:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hola Programadores!\n");
printf("Bienvenidos al fascinante mundo de la
programación!\n");
printf("Esto es solo una prueba...\n");
printf("Los programadores de verdad no documentan. Si fué
difícil de escribir, debe ser difícil de entender.\n");
return 0;
}

Después de teclear el código ahora de la barra de herramientas oprime Compilar y


después el botón de Ejecutar si todo está bien te deberá mostrar la pantalla con los
resultados de tu primer programa.
Ahora solo ejecuta la orden de guardar.
Practica:
Manos a la obra, ahora haz un programa donde imprimas en líneas diferentes tus datos
personales (nombre completo, domicilio, teléfono, fecha de nacimiento y ocupación),
graba tu programa siguiendo la nomenclatura que tu maestro te indica.
Ahora te toca a ti, realiza una investigación en fuentes confiables a que se refiere el
término “Compilar”, prepara una presentación y compártela con tu clase.

41
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

1.4.2 Lenguaje C.

C es un lenguaje de programación de propósito general asociado, de modo universal, al


sistema operativo UNIX. Sin embargo, la popularidad, eficacia y potencia de C se ha
producido porque este lenguaje no está prácticamente asociado a ningún sistema
operativo, ni a ninguna máquina en especial.
Esta es la razón fundamental por la que C es
conocido como el lenguaje de programación de
sistemas por excelencia. C es un lenguaje de
alto nivel, que permite programar con
instrucciones de lenguaje de propósito general.
También C se define como un lenguaje de
programación estructurado de propósito general;
aunque en su diseño también primó el hecho de fuera especificado como un lenguaje de
programación de sistemas, lo que proporciona una enorme cantidad de potencia y
flexibilidad.
El estándar ANSI C formaliza construcciones no propuestas en la primera versión del
lenguaje C, en especial asignación de estructuras y enumeraciones. Entre otras
aportaciones, se definió esencialmente la biblioteca estándar de funciones otra de las
grandes aportaciones.
En la actualidad, el lenguaje C sigue siendo uno de los más utilizados en la industria del
software, así como en institutos tecnológicos, escuelas de ingeniería y universidades.
Prácticamente todos los fabricantes de sistemas operativos (tomando en cuenta a: UNIX,
Linux, MacOS, Solaris, Windows, entre otros.), soportan diferentes tipos de compiladores
de lenguaje C.
Ventajas del lenguaje C
El lenguaje C tiene una gran cantidad de ventajas sobre otros lenguajes y constituyen
precisamente la razón fundamental de que después de casi dos décadas de uso C siga
siendo uno de los lenguajes más populares, utilizados en empresas, organizaciones y
fábricas de software de todo el mundo.
C se caracteriza por su velocidad de ejecución. En los primeros días de la informática los
problemas de tiempo de ejecución se resolvían escribiendo todo o parte de una aplicación
en lenguaje ensamblador (nemónico).
Debido a que existen muchos programas escritos en el lenguaje C, se han creado
numerosas bibliotecas C para programadores profesionales que soportan gran variedad
de aplicaciones.
Características del lenguaje C
Hay numerosas características que diferencian al lenguaje C de otros, y lo hacen
eficiente, potente, eficaz, rápido, indispensable para todos los programas. Algunas son:

42
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

• Una nueva sintaxis para declarar funciones. Una declaración de función puede
añadir una descripción de los argumentos de la función. Esta información adicional
sirve para que los compiladores detecten más fácilmente lo errores causados por
argumentos que no coinciden.

• Asignación de estructuras (registros) y enumeraciones.

• Preprocesador más sofisticado.

• Una nueva definición de la biblioteca que acompaña a C. Entre otras funciones se


incluyen: acceso al sistema operativo (por ejemplo, lectura / escritura de archivos),
entrada y salida con formato, asignación dinámica de memoria, manejo de
cadenas de caracteres.

• Una colección de cabeceras estándar que proporciona acceso uniforme a las


declaraciones de funciones y tipos de datos.
Practica.
1. Diseña un mapa conceptual con la ayuda del software Cmaps, donde plasmes lo
más importante de la lectura anterior.

2. Intégrate a un equipo de 4 compañeros y visiten el siguiente sitio


web https://www.maestrodelacomputacion.net/historia-de-los-
lenguajes-de-programacion/ y haz una línea de tiempo de los
lenguajes de programación en una hoja de rota folio y compártela
con tu clase..

Estructura del programa


La mejor forma de aprender a programar en cualquier lenguaje es editar, compilar,
corregir y ejecutar pequeños programas descriptivos. Analicemos por lo tanto el primer
ejemplo:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hola Programadores!\n");
printf("Bienvenidos al fascinante mundo de la
programación!\n");
printf("Esto es solo una prueba...\n");
printf("Los programadores de verdad no documentan. Si fué
difícil de escribir, debe ser difícil de entender.\n");
return 0;
}

43
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

La primera línea del programa está compuesta por una directiva: " #include " que implica
la orden de leer un archivo de texto especificado en el nombre que sigue a la misma
(<stdio.h>) y reemplazar esta línea por el contenido de dicho archivo. En este archivo
están incluidas declaraciones de las funciones luego llamadas por el programa (por
ejemplo printf() ) necesarias para que el compilador las procese.
La función main() indica donde empieza el programa, cuyo cuerpo principal es un conjunto
de sentencias delimitadas por dos llaves, una inmediatamente después de la declaración
main() " { ", y otra que finaliza el listado " } ". Todos los programas C arrancan del mismo
punto.
La primera sentencia dentro de dicha función, en este caso printf ("......"). El programa
principal está compuesto por sólo dos sentencias: la primera es un llamado a una función
denominada printf(), y la segunda, return, que finaliza el programa retornando al Sistema
Operativo.

Practica.
El texto nos indica que la primera línea del programa está compuesta por una directiva: "
#include " que implica la orden de leer un archivo de texto especificado en el nombre que
sigue a la misma (<stdio.h>) Pero, ¿qué es esa directiva?
Investiga en sitios web confiable lo siguiente:
¿Qué son las librerías en lenguaje C?
Cita algunas librerías usadas en lenguaje C.
¿Qué funciones componen la librería stdio.h?
Junta y depura la información con tu equipo de trabajo y prepara una exposición para que
la compartas con el resto de la clase.

Sintaxis en C.
La sintaxis de un lenguaje de programación es el conjunto de reglas que debemos seguir
para que el compilador sea capaz de reconocer nuestro programa como un programa C
válido.
El programa más sencillo que se puede escribir en C es el siguiente:
main()
{
}

44
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Como nos podemos imaginar, este programa no hace nada, pero contiene la parte más
importante de cualquier programa C y además, es el más pequeño que se puede escribir
y que se compile correctamente. El nombre de una función C siempre va seguida de
paréntesis, tanto si tiene argumentos como si no. La definición de la función está formada
por un bloque de declaraciones y sentencias, que está encerrado entre llaves. En general,
un programa en C consta de una o varias “funciones” que especifican el algoritmo. En el
ejemplo main es una función. El programador tiene libertad para elegir el nombre que le
da a una función. Sin embargo, main es un nombre especial, indica el lugar de comienzo
de nuestro programa. Un programa algo más complicado pero que hace algo, es el
siguiente:
main() {
printf("Hello World!\n");
}

Con él visualizamos el mensaje Hello World! en el terminal. Uno de los métodos más
comunes de comunicación entre las funciones es a través de los argumentos. Los
argumentos van entre paréntesis. Por ejemplo, main es una función sin argumentos, lo
que se indica por (). La función main incluye una única sentencia que llama a la función
printf. Ésta toma como argumento una cadena de caracteres, delimitada entre comillas
dobles. El símbolo \n indica un cambio de línea. Hay un grupo de símbolos, que son
tratados como caracteres individuales, que especifican algunos caracteres especiales del
código ASCII. Los más importantes son:

Valor ASCII Valor ASCII


Código Significado
(decimal) (hexadecimal)
'\n' nueva línea 10 0x0A
'\r' retorno de carro 13 0x0D
'\f' nueva página (form feed) 2 x0C
'\t' tabulador horizontal 9 0x09
'\b' retroceso (backspace) 8 0x08
'\'' comilla simple 39 0x27
'\"' comillas 4 0x22
'\\ ' barra invertida 92 0x5C
'\? ' interrogación 63 0x3F
'\nnn' cualquier carácter (donde nnn es el código ASCII expresado en octal)
'\xnn' cualquier carácter (donde nn es el código ASCII expresado en hexadecimal)

45
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ejemplo.
Si desearíamos crear un listado por columnas ocuparíamos un código similar al siguiente:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Nombre\t\t");
printf("Domicilio\t");
printf("Telefono\t");
printf("Edad\t");
return 0;
}

Practica.
Trabajando en binas, realiza un pequeño programa donde demuestre el uso de uno de los
símbolos que son tratados como caracteres individuales y compártelos en la clase para
que compartas experiencias y conocimientos.

Comentarios en el código.
La inclusión de comentarios en un programa es una saludable práctica, como lo
reconocerá cualquiera que haya tratado de leer un listado hecho por otro programador o
por sí mismo, varios meses atrás. Para el compilador, los comentarios son inexistentes,
por lo que no generan líneas de código, permitiendo abundar en ellos tanto como se
desee. En el lenguaje C se toma como comentario todo caracter interno a los símbolos: /*
*/. Los comentarios pueden ocupar uno o más renglones, por ejemplo:
/* este es un comentario corto */
/* este otro
es mucho
más largo
que el anterior */

Ejemplo.
Teclea el siguiente código donde muestra el uso de comentarios del programador sin
afectar la ejecución del resto de las sentencias.

46
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

#include <stdio.h> /* esto carga una librería */


#include <stdlib.h>
int main()
{
/* Esta parte del programa imprimirá 5 líneas de
información para comprobar el uso de la función de
salida de impresión de pantalla */
printf("Hola Programadores!\n");
printf("Bienvenidos al fascinante mundo de la
programación!\n");
printf("Esto es solo una prueba...\n");
printf("Los programadores de verdad no documentan.
Si fué difícil de escribir, debe ser difícil de
entender.\n");
return 0;
}
Practica.
Al programa hecho en la práctica anterior agrega comentarios a cada una de las líneas
con la función que realizan y en un comentario al final agrega tus datos personales
(Nombre completo, matricula, grupo, etc.)

Manejo de variables
Si se deseara imprimir los resultados de multiplicar un número fijo por otro que adopta
valores entre 0 y 9, la forma normal de programar esto sería crear una constante para el
primer número y un par de variables para el segundo y para el resultado del producto.
Una variable, en realidad, no es más que un nombre para identificar una (o varias)
posiciones de memoria donde el programa guarda los distintos valores de una misma
entidad. Un programa debe definir todas las variables que utilizará antes de comenzar a
usarlas, a fin de indicarle al compilador de que tipo serán y, por tanto, cuánta memoria
debe destinar para albergar a cada una de ellas. Veamos un ejemplo:
#include <stdio.h>
main()
{
int multiplicador; /* defino multiplicador como
un entero */
int resultado; /* defino resultado como un
entero */

multiplicador = 1000 ; /* le asigno valores */


resultado = 2 * multiplicador ;
printf("Resultado = %d\n", resultado); /*
muestro el resultado */

return 0;
}

47
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

La siguiente figura muestra la salida del programa anterior

Practica
Al declarar una variable debes seguir una serie de reglas del propio lenguaje C, en
equipos de 4 integrantes visiten el siguiente link:
http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/lengua_C/variables.htm y crea
una presentación electrónica para compartirla en clase, en la cual, resuelvas las
siguientes interrogantes.
¿Qué es un identificador?
¿Cuáles tipos de variables existen en cuestión a su alcance?
¿Qué palabras no podemos usar como identificadores de variable y por qué?

1.4.2.1 Tipos de variables

El lenguaje C obliga a declarar una variable antes de ser usada. Es decir, no podríamos
escribir algo del tipo: Mostrar velocidad01, si antes no hemos “dicho” (declarado) que
existe una variable con ese nombre. Declarar una variable no significa que se le asigne
contenido, sino simplemente se indica que la variable existe. ¿Qué nos mostrará si
intentamos mostrar o utilizar la variable si no le hemos asignado contenido? Hay
lenguajes que asignan automáticamente contenido cero, vacío o falso a una variable,
dependiendo de qué tipo sea. Sin embargo, en C no está permitido usar una variable sin
antes haberle asignado un contenido, a lo que se denomina “inicializar la variable”. Por
tanto, al tratar de ejecutar un programa donde una variable está sin inicializar puede
producirse un error de compilación. Hay lenguajes donde la inicialización (o incluso la
declaración) de las variables no es estrictamente obligatoria como PHP ó Visual Basic.

48
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Tipo de Se Memoria Rango Equivalencia en


Observaciones
datos escribe requerida* orientativo* pseudocódigo
- 32768 a Uso en contadores,
Entero int 2 bytes Entero
32767 control de bucles etc.
Igual que int pero
Entero - 2147483648 a
long 4 bytes Entero admite un rango más
largo 2147483647
amplio
Hasta 6 decimales.
Decimal - 3,4·1038 a
float 4 bytes Real También admite
simple 3,4·1038
enteros
Hasta 14 decimales.
Decimal - 1,79·10308 a
double 8 bytes Real También admite
doble 1,79·10308
enteros
Carácter,
Carácter char 1 bytes 0 a 255 Alfanumérica independiente o parte
de una cadena

Ejemplo.
Conociendo ya los tipos de variables básicas y cómo nombrarlas, veamos ahora cómo
declararlas. La declaración de variables en C debe hacerse al principio del programa.
Veremos ahora una forma básica que nos permita empezar a trabajar y, de paso, crear
nuestro primer programa.
Usaremos para ello el tipo de variable int (entero). La sintaxis que usaremos será:
int [Nombre de variable];
Para facilitar la corrección y claridad de nuestros programas el lugar donde realizaremos
la declaración de variables, al menos de momento, será después de la línea int main(),
que constituye el inicio del código ejecutivo de nuestro programa. Crea un nuevo proyecto
y accede al código. Una vez en la ventana de código, dentro del int main() {…} escribe:
int numeroDePlantas;

Has declarado la variable numeroDePlantas como tipo entero. También podrías asignarle
un valor inicial a la variable en la misma línea que la declaras, de esta manera:
int numeroDePlantas = 15;

Este tipo de escritura nos permite declarar e inicializar la variable con un valor en una sola
línea. No siempre lo haremos así, pero en algunas ocasiones nos puede resultar de
interés. En otras ocasiones declararemos la variable en una línea y posteriormente le
asignaremos contenido en otra.

Supongamos que declaras: int edad, como variable destinada a contener la edad de una
persona. Sabemos que la edad de una persona puede oscilar entre cero y 150 años
(siendo exagerados), y que sus valores no son decimales. Por tanto, puede declararse
como tipo int sin ningún problema. ¿Qué ocurriría si la declaráramos como tipo double?

49
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

a) Vamos a ocuparle (estimamos) 8 bytes al sistema cuando podríamos haber ocupado


sólo 2 es una falta de eficiencia y economía.

b) A la hora de liberar de errores al programa (depurarlo) no sabremos a ciencia cierta


qué tipo de datos contiene la variable edad, ya que puede contener tanto el valor entero
56 como el valor decimal 56.332. Hacemos al programa más difícil de entender.

A la hora de declarar variables conviene seguir las pautas que ya hemos comentado y,
resumidamente:
• Elegir siempre el tipo de variable más sencillo posible. Consideraremos que el
grado de sencillez viene definido por la memoria requerida (a menor memoria
requerida mayor es la sencillez). Esto redunda en un menor consumo de recursos
del sistema y en una mayor rapidez de las operaciones que realiza el ordenador.

• Realizar declaraciones ordenadas y claras.

• Elegir un nombre descriptivo y claro, que comience preferiblemente con


minúsculas.
En C podemos declarar variables en múltiples líneas una por línea pero también varias
variables en una línea. Existen distintas formas para realizar declaraciones. Veamos
ejemplos:

Expresión abreviada Equivalente


a) int i, j, k; a) int i;
int j; int k;
b) int i, j, k; b) int i; int j; int k;
c) int i=0, j=4, k=76; c) int i=0;
int j=4; int k=76;
d) int i=0, j=4, k=76; d) int i=0; int j=4; int k=76;

Practica
Realizar una declaración de variables para las siguientes propuestas de programas. No es
necesario crear los programas, sino únicamente indicar cómo se haría la declaración de
variables.
1. Un programa que muestra un número decimal con la mayor precisión posible.
2. Un programa que nos pide nuestra edad y nos muestra el año en que nacimos.
3. Un programa que nos muestra el valor medio de tres magnitudes.
4. Un programa que trabaja con: tres contadores para bucles, tres valores de
momentos en una viga (de magnitud no conocida), valores de longitud de la viga,
alto y ancho y un valor interruptor que permite o impide que se muestren
resultados.
5. Un programa que dado el diámetro de un círculo obtenga el valor del área del
mismo.

50
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Operadores.
Si analizamos la sentencia siguiente:
var1 = var2 + var3;
Estamos diciéndole al programa, por medio del operador +, que compute la suma del
valor de dos variables, y una vez realizado esto asigne el resultado a otra variable var1.
Esta última operación (asignación) se indica mediante otro operador, el signo =.
El lenguaje C tiene una amplia variedad de operadores, y todos ellos caen dentro de 6
categorías, a saber: aritméticos, relacionales, lógicos, incremento y decremento, manejo
de bits y asignación.
Aritméticos.
Operador Significado
Operador = Asignación
Operador * Multiplicación
Operador / División
Operador % Resto de división entera (mod)
Operador + Suma
Operador - Resta

Ejemplo:
Teclea el siguiente código:

#include <stdio.h>
#include <stdlib.h>
int main() {
int A = 11; int B = 3; int C = 9; int D = 5;
printf ("A vale %d, B vale %d, C vale %d, D vale %d\n",
A, B, C, D);
printf ("Operador *: doble de A vale %d\n", A*2);
printf ("Operador +: A mas B vale %d\n", A+B);
printf ("Operador -: A menos B vale %d\n", A-B);
printf ("Operador /: C entre B vale %d\n", C/B);
printf ("Operador resto: resto de A entre B es %d\n",
A%B);
printf ("Ejecutar A entre B vale %d no es exacto \n",
A/B);
//Se admiten otros operadores que no vamos a usar
A +=B; //Equivale a A=A+B
C *=D; //Equivale a C=C*D;
printf ("A vale %d, B vale %d, C vale %d, D vale %d\n",
A, B, C, D);
return 0; //Ejemplo aprenderaprogramar.com
}

51
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Incremento y decremento.
Los operadores unarios de incremento y decremento agregan o sustraen uno de sus
operando, respectivamente. Son normalmente implementados en lenguajes de
programación imperativos. En lenguajes tipo C es normal tener 2 versiones (pre- y post-)
de cada operador con semántica ligeramente diferente.
En lenguajes tipo C, el operador de incremento es escrito como ++ y el de decremento
como --.
El operador de incremento aumenta el valor de su operando en 1. El operando debe ser
un tipo de dato aritmético o puntero, y debe hacer referencia a un objeto modificable.
Similarmente, el operador de decremento disminuye el valor de su operando en 1. El valor
de los punteros se incrementa (o disminuye) por una cantidad que hace que apunte al
siguiente (o anterior) elemento adyacente en memoria.
Ejemplo:

Ejemplo Significado
Variable++ El valor de la variable incrementa después de una operación
++Variable El valor de la variable incrementa antes de una operación
Variable-- El valor de la variable disminuye después de una operación
--Variable El valor de la variable disminuye antes de una operación

Comprueba el siguiente código:


#include <stdio.h>
#include <stdlib.h>
int main() {
int c = 0;
c = c + 1;
printf ("Valor de c %i \n", c);
c++;
printf ("Valor de c %i \n", c);
printf ("Valor de c %i \n", ++c+1);
return 0;
}
Practica.
Ahora te toca a ti, investiga los operadores que nos faltan y prepara material suficiente
para que en equipos de 4 integrantes desarrollen una presentación donde expongan a su
clase el uso de estos.
Trata de dar un ejemplo en el lenguaje C y compruébenlo frente a tus compañeros.

52
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado.

1.5 Estructuras secuenciales.

La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en


secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la
siguiente y así sucesivamente hasta el fin del proceso.
Este tipo de estructuras no tienen interrupciones por alguna decisión lógica que tomaría el
compilador o repeticiones de n número de veces.

Ejemplo:
El siguiente diagrama de flujo demuestra una estructura de este tipo.
Practica:
Te reto, realiza el anterior diagrama de flujo en lenguaje C.

1.5.1 Entrada y salida standard.

Printf y scanf son quizás las funciones (comandos) más utilizadas en programas básicos
de C. Sirven para imprimir información por pantalla y pedir datos a usuarios por pantalla,
respectivamente. Se incluyen en la biblioteca de funciones stdio.h. Veamos a ver cómo
utilizar estás funciones.

53
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Imprimir texto en pantalla


Para imprimir texto por pantalla, utilizamos la función printf(). Utilizar esta función es más
sencillo de lo que podemos llegar a pensar. De hecho, solo debemos incluir la biblioteca
stdio.h en nuestro programa y llamarla de la siguiente manera:

#include <stdio.h>
int main(){
printf("Hola mundo");
return 0;
}

Imprimir texto y variables.


Bien, para imprimir valores de variables utilizando la función printf(), podemos empezar
viendo el siguiente ejemplo

#include <stdio.h>
int main(){
int num1 = 10;
printf("Soy el número %d", num1);
return 0;
}

Imprimir variables con formatos.


Imprimiremos diferentes textos junto a valores de variables por pantalla utilizando printf()
pasandole las variables como parámetros.

#include <stdio.h>
int main(){
int num1 = 10;
float pi = 3.141592;
char caracter = 'a';
char mensaje[] = "Hola";
printf("5 + 5 = %d \n", num1);
printf("El número pi es aprox: %f \n", pi);
printf("Se puede usar la palabra '%s' para saludar \n",
mensaje);
printf("La primera letra del abecedario es: %c \n",
caracter);
return 0;
}
De forma que dependiendo del tipo de variable que queremos imprimir en un mensaje
usando la función printf(), debemos usar un formato u otro y indicamos este formato en la
posición pertinente.
Tipo de dato Formato
número entero %d
número real %f
carácter %c
cadena de texto %s

54
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Imprimir texto y varias variables


En el ejemplo anterior, hemos visto cómo imprimir el valor de una única variable. Pero
como ya hemos visto en artículos anteriores, en una misma función printf() podemos
imprimir más de una variable a la vez. Para ello solo debemos pasarle las variables como
parámetros separados por coma. A continuación vemos un ejemplo.

#include <stdio.h>
int main(){
int num1 = 10;
char mensaje[] = "Hola";
printf("%s, soy el número %d. \n", mensaje, num1);
return 0;
}

Printf y scanf
La función scanf() se utiliza principalmente para pedir información al usuario. Por ejemplo,
si queremos calcular la edad de una persona nos es imposible si no sabemos su fecha de
nacimiento.
Vamos a crear nuestro programa sabiendo con anterioridad la fecha de nacimiento:
#include <stdio.h>
int main(){
int fNacimiento = 2002;
int edad = 2017 - fNacimiento;
printf("Tienes %d años.\n", edad);
return 0;
}

Ahora bien, ¿qué pasa si no tenemos el dato de fecha de nacimiento?, pues se la


tendríamos que preguntar, hagamos el siguiente progrma.
#include <stdio.h>
#define anioActual 2014 //constante
int main(){
int fNacimiento = 0, edad = 0; //inicializamos las
variables a 0
printf("Introduce tu fecha de nacimiento: ");
//pedimos la fecha de nacimiento
fflush(stdout); //vacíamos el buffer de salida
scanf("%d",&fNacimiento); //guardamos el valor
introducido en la variable

edad = anioActual - fNacimiento; //calculamos la


edad
printf("Tienes %d años.\n", edad); //mostrar la
edad
return 0;
}

55
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Viendo el ejemplo, utilizamos scanf() para guardar el valor introducido por el usuario en la
variable fNacimiento, lo hacemos siguiendo la sintaxis
scanf(“tipo_de_dato”,&variable_destino);, donde tipo_de_dato es el formato de
información que vamos a capturar y variable_destino es la variable donde se guardará
esta información.

Ejemplo:
Teclea un ejemplo más para que reafirmes lo visto en clase.
#include <stdio.h>
int main(){
char nombre[12];
printf("Introduce tu nombre: ");
fflush(stdout);
scanf("%s",nombre);
printf("Hola, %s :)\n", nombre);
return 0;
}

Practicas.
Realiza los siguientes programas y atiende las indicaciones del maestro para su
grabación y entrega de dichos productos de aprendizaje.
1. Solicita 2 valores numéricos y realiza con ellos las operaciones básicas.
2. Calcula el área de un círculo.
3. Calcula el área de un rectángulo.
4. Calcula el volumen de un cubo.
5. Solicita el nombre y los apellidos por separados y al final muestra el nombre en
una línea completo.
6. Calcula la velocidad de un automóvil.
7. Convierte una edad dada en años en segundos vividos.
8. Calcula el promedio general de todas las materias que llevas en este semestre.
9. Imprime los número del 1 al 10 usando una variable de incremente su valor.
10. Convierte una cantidad de gigabytes en kilobytes.

56
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

57
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

2. Estructuras condicionales

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

2.1 Simple If

Los condicionales if, son una estructura de control condicional, que nos
permiten tomar cierta decisión al interior de nuestro algoritmo, es decir,
nos permiten determinar qué acciones tomar dada una -+condición, por
ejemplo determinar si un numero cualquiera es mayor que 10 y de
acuerdo a esto mostrar un mensaje.

En resumen, un condicional if es una estructura que nos posibilita definir las acciones a
ejecutar si se cumple cierta condición.
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a;
printf("Ingrese un numero: ");
scanf("%d",&a);
if(a>0)
printf("El numero es mayor que cero\n");
if(a%2==0)
printf("El numero ingresado numero es
par\n");
}

Practica:
Se quiere escribir un programa que:
1. Pida por teclado la nota (dato real) de una asignatura.
2. Muestre por pantalla:
"APROBADO", en el caso de que la nota sea mayor o igual que 5.

58
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
2.2 Doble If – else

La sentencia if: Esta sentencia permite la ejecución de un bloque de código, si y solo si,
se ha cumplido la condición dentro del "if", si no se cumplió la condición, se pasa a las
instrucciones que estén fuera del "if".
La sentencia else: En esta sentencia no se plantea directamente una condición, es más
bien, una respuesta a la condición que se formuló dentro de la sentencia "if". Si la
condición de "if" no se cumplió, entonces se ejecuta el bloque de código que contenga la
sentencia "else".
2.2.1 Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int main() {
int Num; int Res;
printf("Programa para determinar naturaleza par o
impar de un numero\n\n");
printf ("Introduzca un numero entero: ");
scanf ("%d", &Num);
Res = Num%2;
if (Res==0) {
printf ("El numero es par\n");
} else {
printf ("El numero es impar\n");
}
return 0;
}

Escribir un programa, en lenguaje C, que:


1. Pida por teclado dos números (datos enteros).
2. Calcule la suma de los números introducidos por el usuario.
3. Muestre por pantalla:
"LA SUMA SÍ ES MAYOR QUE CERO.", en el caso de que sí lo sea.
"LA SUMA NO ES MAYOR QUE CERO.", en el caso de que no lo sea.

59
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
2.3 Multiple (If anidado)

La estructura if implementan decisiones que implican una o dos


alternativas, un estatuto if es anidada cuando la sentencia de la rama
verdadera o la rama falsa es a su vez una sentencia if.
Un estatuto if anidada se puede utilizar para implementar decisiones
con varias alternativas o multi-alternativas
Ejemplo:
int mes = 10;
if (mes == 1){ printf ("Enero\n "); }
else if (mes == 2){ printf ("Febrero\n "); }
else if (mes == 3){ printf ("Marzo\n "); }
else if (mes == 4){ printf ("Abril\n "); }
else if (mes == 5){ printf ("Mayo\n "); }
else if (mes == 6){ printf ("Junio\n "); }
else if (mes == 7){ printf ("Julio\n "); }
else if (mes == 8){ printf ("Agosto\n "); }
else if (mes == 9){ printf ("Septiembre\n "); }
else if (mes == 10){ printf ("Octubre\n "); }
else if (mes == 11){ printf ("Noviembre\n "); }
else if (mes == 12){ printf ("Diciembre\n "); }
else { printf ("Error de mes"); }

Practica:
Se quiere escribir un programa que:
1. Pida por teclado la nota (real) de una asignatura.
2. Muestre por pantalla:
"APTO", en el caso de que la nota sea mayor o igual que 5 y menor o igual que 10.
"NO APTO", en el caso de que la nota sea mayor o igual que 0 y menor que 5.
"ERROR: Nota incorrecta.", en el caso de que la nota sea menor que 0 o mayor que 10.

60
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

2.4 Switch (Case)

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

La sentencia switch() en Lenguaje C es una sentencia de selección. Esta sentencia


permite seleccionar las acciones a realizar de acuerdo al valor que tome una variable. Si
el valor que toma la variable no coincide con los valores especificados en los casos, se
realizarán las acciones definidas en la etiqueta default.
Ejemplo:
int mes = 6;
switch (mes){
case 1: printf ("Enero\n");
case 2: printf ("Febrero\n");
case 3: printf ("Marzo\n");
case 4: printf ("Abril\n");
case 5: printf ("Mayo\n");
case 6: printf ("Junio\n");
case 7: printf ("Julio\n");
case 8: printf ("Agosto\n");
case 9: printf ("Septiembre\n");
case 10: printf ("Octubre\n");
case 11: printf ("Noviembre\n");
case 12: printf ("Diciembre\n");
defalut : printf ("Error de mes");
}
Practica:
Escribir un programa, en lenguaje C, que:
1. Pida por teclado el resultado (dato entero) obtenido al lanzar un dado de seis
caras.
2. Muestre por pantalla el número en letras (dato cadena) de la cara opuesta al
resultado obtenido.
Nota 1: En las caras opuestas de un dado de seis caras están los números: 1-6, 2-5 y 3-4.
Nota 2: Si el número del dado introducido es menor que 1 ó mayor que 6, se mostrará el
mensaje: "ERROR: Número incorrecto.".

61
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

62
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3. Estructuras ciclicas
La programación lógica estructurada realizada hasta el momento ha sido de manera
secuencial, de inicio a fin, de arriba hacia abajo, con la característica de que se ejecuta
una sola vez, las estructuras cíclicas o de bucle que a continuación se revisaran, tienen la
característica que se utilizan para ejecutar fragmentos de código un número limitado de
veces, el cual el programador considera para obtener un fin determinado, ahorrar tiempo y
líneas de código repetidas.
Hay tres estructuras cíclicas que en general son las más aplicadas:
• Mientras (While)
• Desde Hasta (For)
• Hacer Mientras (Do-While)

Las tres estructuras tienen el mismo objetivo, ejecutar un fragmento de código un número
limitado de veces o hasta que exista una condición de excepción que rompa el ciclo, su
principal diferencia se encuentra en la forma en la cual limitan el número de ocasiones
que se ejecutará el código. La realización de bucles o códigos son de vital importancia
para el programador, ya que permiten un ahorro enorme de líneas de código, tiempo,
procesos, deja un código más claro de analizar y facilita su modificación en el futuro.
Así también permite la realización de programas más inteligentes y dinámicos ante
situaciones cambiantes, en las cuales necesitamos la ejecución de un código hasta que
exista una situación extraordinaria que requiera el proceso de nuevas instrucciones que
estaban en espera.
Actividad 1 Analice el programa siguiente y resuélvalo de manera abstracta, usando el
Raptor para elaborar su diagrama de flujo.

Se le pide realizar un programa para un robot, el cual tiene que subir una escalera,
la cual puede ser de 20 o hasta 50 escalones.
• Podemos resolver el programa de manera sencilla escribiendo el programa de
manera secuencial, pero tendríamos que escribir la orden subir escalón 20 veces,
para que el robot suba ese número determinado de escalones. Pero este
programa funcionaria solo para escaleras de 20 escalones, si tienen uno más o
uno menos, el robot trabajaría mal y el programador tendría que realizar ajustes
cada vez.
• O podemos realizar un programa con un ciclo incluido, en el cual le pedimos al
robot subir 1 escalón, mientras exista un escalón enfrente, de esta manera el robot
siempre que tenga un escalón por subir lo subirá, sin importar el número, pudiendo
ser 20, 50, 100 o solo 3 escalones, el programa servirá para subir cualquier
escalera.

63
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

EJEMPLO:
a) Realizar un programa en karel, en el cual el robot avance 10 pasos, sin escribir
la instrucción move(), más de 1 vez.
Para la solución de este programa necesitaremos la instrucción cíclica de iterate(), la
cual nos permite repetir unas líneas de código que se encuentren dentro de la
menciona instrucción.

El iterate(), necesita los siguientes elementos para funcionar correctamente:


Es importante mencionar el uso de las llaves, estas delimitarán el código o
instrucciones que se repetirán la cantidad de veces que especificamos en los

Iterate(número de repeticiones){
Instrucciones de ejecución cíclica;
}

paréntesis.

La solución del programa por lo tanto seria:


class program {
program() {
iterate(10){
move();
}
turnoff();
}
}

Análisis del programa:


• En la instrucción iterate(10) especificamos un ciclo que se repetirá 10 veces.
• Dentro de las llaves del iterate le pedimos avanzar una vez. Como el ciclo se
repetirá 10 veces, el robot avanzara 10 en total. No es necesario escribir
move() más de una vez.

Recomendaciones:
• Es altamente sugerido el uso del indentado al abrir las llaves, ya que el error
más común del programador es olvidar colocar: puntos y comas, llaves,
corchetes o paréntesis. El emplear estas sangrías nos permiten ver más
claramente el contenido perteneciente a una estructura determinada, y
facilitan la lectura del programa.

64
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

PRACTICA
Empleando el programa Karel en el laboratorio de cómputo, en equipos de dos alumnos
realiza los siguientes programas. Los cuales deberán estar escritos en no más de 30
líneas de código. Emplear la instrucción iterate().

1. Un programa para que el robot suba 6 escalones.

2. Un programa para que el robot recoja los beepers del siguiente obstáculo:

CUESTIONARIO
1. ¿Qué son las estructuras cíclicas en programación?
2. Menciona ejemplos de las estructuras cíclicas más usadas y que significa cada una.
3. ¿Qué se necesita definir al emplear la instrucción iterate() en karel?
4. Investiga acerca de estructuras cíclicas anidadas y sus usos.

65
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3.1 Estructura while (mientras)

El Ciclo Mientras es conocido en los


lenguajes de programación como ciclo
while, una de sus características es que
verifica si la condición se cumple antes de
ingresar al bloque de código que se va a
repetir, el límite de ejecuciones estará dado
MIENTRAS
por la condición, se ejecutará mientras la
condición devuelva un valor lógico
verdadero.
INSTRUCCIONES La sentencia while es la más sencilla de las
estructuras de iteración. La iteración
continuará hasta que su condición sea falsa.

La condición tiene que tomar un valor


booleano (verdadero o falso). Si este valor
es verdadero, se ejecutará la sentencia.
Concluida esta acción se vuelve a evaluar la
condición. Proseguirán los ciclos hasta que la condición no cambie a falso.

Esta es una estructura de iteración pre-prueba, es decir primero se evalúa la condición


antes de realizar cualquier acción. Si de entrada la condición es falsa nunca ejecutará el
conjunto de sentencias.

Una nota importante es el evitar los ciclos infinitos, en los cuales la condición booleana
nunca cambia a falso, de tal manera que el ciclo while se ejecutaría por siempre. Los
lenguajes de programación modernos detectan esto como un error y el programa no
compila.

EJEMPLO:
a) Realizar un programa en Karel, en el cual el robot avance mientras existan
beepers en el suelo, y cuando no encuentre un beeper se detenga. El mismo
programa debe funcionar para cualquier cantidad de beepers colocados.

66
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Para la solución de este programa necesitaremos la instrucción cíclica de while(), la cual


nos permite ejecutar unas líneas de código que se encuentren dentro de la menciona
instrucción siempre y cuando la condición sea verdadera.

La instrucción while(), necesita los siguientes elementos para funcionar correctamente:

while(condición a evaluar){
Instrucciones de ejecución si la condición es verdadera;
}
Instrucciones a ejecutar si la condición es falsa;

La solución del programa por lo tanto seria empleando el sensor de si hay un


beeper en el suelo (nextToABeeper()):

class program {
program() {
while(nextToABeeper()){
move();
}
turnoff();
}
}

Analisis del programa:


• Al iniciar el programa, el robot verifica primero si hay un beeper en el suelo, al
encontrarlo avanza un espacio ( move() ), como es la única instrucción dentro de
las llaves del while, el ciclo se reinicia, y vuelve a verificar si hay otro beeper en el
suelo, de ser verdadero se repite sucesivamente, hasta ser falsa esta condición,
entonces el robot se apaga.

67
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Practica
Actividad 1 Realice los siguientes programas en Karel.
1. Elabore un programa para que un robot, suba una escalera de cualquier número de
escalones que se le presenten y finalice en el último escalón. El mismo programa
debe funcionar para cualquier cantidad de escalones.

2. Elabore un programa para que un robot, recorra una cuadra o manzana de cualquier
tamaño delimitada por paredes, y finalice en su posición inicial, el robot lleva un
beeper en la mochila.

3. Elabore un programa para que un robot, encuentre la salida de un callejón sin salida
de profundidad o longitud indeterminada, la salida puede estar a la izquierda o a la
derecha del mismo. El robot no lleva beepers.

Estructura while en c
Sintaxis:

Una instrucción:
while ( condición booleana )
instrucción a ejecutar;

Si se requiere realizar más de un estatuto se deben utilizar llaves.


while ( condición booleana )
{
Instrucción a ejecutar1;
Instrucción a ejecutar2;
………
Instrucción a ejecutar n;
}

Aquí se ejecuta la (s) instrucción(es) mientras la condición sea verdadera; al momento de


ser falsa termina el ciclo. Si la condición es falsa la primera vez, nunca se ejecuta(n) la
(s) instrucción(es).

68
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ejemplo:
Elaborar un programa en C++, que imprima el promedio final de una cantidad
especificada por el usuario de calificaciones.

Solución:

1 #include <stdio.h>
2 main ( )
3 {
4 int n , contar=1;
5 float c , promedio , suma=0;
6 printf ("¿Cuantas calificaciones desea ingresar?: ");
7 scanf ("%d",&n);
8 while (contar <= n) {
9 printf ("Ingrese calificacion %d = ",contar);
10 scanf ("%f",&c);
11 suma +=c;
12 ++contar;
13 }
14 promedio=suma/n;
15 printf ("\nEl promedio es: %.2f\n",promedio);
16 return 0;
17 }

Análisis del programa:


• Líneas 6 y 7: Como no sabemos la cantidad de datos a ingresar por el
usuario, lo primero que haremos es pedirle este dato, emplearemos la variable
n.
• Línea 8: Al iniciar el while, emplearemos un contador para llevar la cuenta de
ciclos, hasta el número ingresado por el usuario. (Contar<=n). previamente lo
iniciamos con el valor de 1.
• Línea 9,10,11,12: Dentro del while, le pediremos que ingrese la calificación, la
guardaremos en la variable c y esta se agregara a un total (variable suma),
finalmente aumentaremos el contador en 1, para pasar al siguiente ciclo.
• Línea 14: Al finalizar el ciclo while, en el cual ya se llevaron a cabo la cantidad
de entradas solicitadas por el usuario, calcularemos el promedio dividiendo el
acumulado de las cantidades ingresadas entre el numero calificaciones que se
ingresaron.
• Línea 15: Se imprime el resultado.

69
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Practica
Actividad 2 Realice los siguientes programas en Code::Blocks usando la estructura
while.
1. Un programa que muestre los números pares que existen entre dos números
ingresados por el usuario.
2. Un programa que imprima la tabla de multiplicar deseada por el usuario.
3. Un programa que imprima las potencias existentes del número 2, menores a un
número determinado por el usuario.
4. Un programa que imprima las potencias de cualquier base, menores a un número
determinado por el usuario.

Cuestionario
1) ¿Cómo funciona la estructura de programación while?
2) Menciona la sintaxis correcta de la estructura while.
3) ¿Cuáles son los valores de una condición booleana?
4) ¿Cuál es el valor booleano que le permite a while continuar realizando ciclos?
5) ¿Qué es un ciclo infinito y por qué sucede?
6) ¿Cuál es la importancia de las llaves en el ciclo while y que sucede si no se
escriben?

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3.2 Estructura for (Desde - Hasta)

La estructura cíclica Desde Hasta o for tiene


la característica especial de controlar la
cantidad exacta de bucles o ciclos, todo esto
debido a que cuenta con una o más variables
que llevaran el conteo (contadores), con las
cuales se controla el número de ocasiones
que se ejecutará el ciclo. Es una repetición
controlada por contador.

Esta estructura repetirá el mismo código


tantas veces como se le indique, mientras la
condición a evaluar por el contador sea
verdadera.

A partir de un valor inicial del contador, la


estructura va incrementando en cada iteración
del bucle hasta que tome un valor falso,
momento en el que sale del bucle y continúa
con el código afuera del ciclo Desde-Hasta.

70
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Por regla general estos contadores se nombran con las letras i, j, k, y los incrementos se
realizan de uno en uno escribiendo i++, j++, etc., con lo cual especificamos que el valor de
i se incrementa en una unidad cada ciclo. También existen los decrementos pero son
menos usados y se realizan escribiendo i--, j--, etc.

Sintaxis:

for (iniciación del contador ; condición a evaluar ; incremento del contador)


{
Instrucciones cíclicas;
}

La estructura for (Desde - Hasta) necesita lo siguiente:


a. Iniciación del contador del ciclo.
I. El nombre del contador. (i, j, k, etc.)
II. El valor inicial del contador del ciclo. (i=1)
b. Condición a evaluar, ejemplo: mientras i sea menor a 10 realizar ciclo. (i<=10)
c. El incremento del contador, i incrementa en 1 cada ciclo (i++)
Notas:
No olvidar que la estructura for, necesita el punto y coma (;) para separar la iniciación,
condición e incremento, las llaves delimitan las instrucciones a repetir por el ciclo.

Ejemplo:
Realizar un programa que imprima una cadena de caracteres como sigue: #*#*#*#*#*…
Empleando la estructura for y de 100 caracteres de longitud.
Solución:
1. //Programa para imprimir una cadena de caracteres
#*#*#*#*#*#*#*#.
2. #include<stdio.h>
3. #include<conio.h>
4. #include <stdlib.h>
5. int main()
6. {
7. int i;
8. for(i=0;i<100;i++){
9. if(i%2==0){
10. printf("*");
11. } else {
12. printf("#");}
13. }
14. return 0;
15. }

Análisis del programa:

71
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

• Línea 1: Comentario del programa, todo comentario empieza con // y es válido


para todo el renglón.
• Línea 7 y 8: Se declara la variable contadora i.
• Línea 8: Se establece dentro del for el valor inicial del contador (i=0), la condición a
cumplir (i<100), y el incremento de la variable contadora en uno (i++). Nota: como
empezamos de 0 hasta que sea <100, es decir hasta el 99, en total tenemos 100
ciclos por ser ejecutados. Se pueden emplear los números que quiera el
programador para llevar el conteo, aunque en muchos libros de programación el
empezar desde cero es el más empleado.
• Línea 9: Se emplea un operador modulo (%), el cual es verdadero cuando no hay
residuo al efectuar la división entre dos números, en este programa se escribió
i%2, en pocas palabras, verifica que la variable i sea divisible exacto entre dos, es
decir que sea número par. Si es par imprime un asterisco (*), y si es impar e
imprime un gato (#).

Practica
Actividad 1 Realiza los siguientes programas en Code::Blocks empleando la estructura de
programación for. (Desde - Hasta)
1. Un programa en C, que imprima los números del 1 al 1000.
2. Un programa en C, el cual imprima la suma de todos los números existentes entre
1 y un número dado por el usuario.
3. Un programa en C, el cual pida un número, y diga si es número primo o no.
4. Elabore los programas que impriman los patrones siguientes hecho de puros
asteriscos, la figura puede ser de cualquier tamaño.

********** ********* * *
********** ******** ** **
********** ****** *** ***
********** ***** **** ****
********** ***** ***** *****
********** **** ****** ****
********** *** ******* ***
********** ** ******** **
********** * ********* *

Cuestionario
1) ¿Cómo funciona la estructura de programación for?
2) Menciona la sintaxis correcta de la estructura for.
3) ¿Son las variables más empleadas para representar el contador en la estructura
for?
4) ¿Cómo se representa un incremento o decremento de la variable i?
5) ¿Para qué sirve el operador modulo?
6) ¿Cómo se escribe un comentario en las instrucciones de c++?

72
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3.3 Estructura do-while (Hacer -


Mientras)

La estructura conocida como do-while, es


similar a la estructura Mientras, pero tiene
su diferencia:

• El código que se encuentra dentro del


ciclo repetir, este se ejecuta por lo menos
una vez, debido a que la comparación y
verificación de la condición está en la parte
inferior de la estructura.

Para continuar realizando bucles se requiere


que la condición entregue un resultado de
verdadero, igual que los ciclos Mientras y for
que requieren que el resultado de la
condición sea verdadero.

Para salir del bucle do–while es necesario que la condición regrese un valor de falso, de
esta manera, el ciclo se interrumpirá y continuara el programa.

Sintaxis:

do {
sentencia 1;
sentencia n;
} while (condición a evaluar);
Las instrucciones dentro de las llaves del do se ejecutaran mientras la condición sea
verdadera, al momento de ser falsa se interrumpirá el ciclo. Como puede observarse
claramente, las instrucciones se ejecutan al menos una vez. Por encontrarse previamente
a la condición de evaluación.

Ejemplo
Realiza un programa que sume todos los números ingresados por el usuario, el programa
terminara hasta que se ingrese el número 0.

1 #include<stdio.h>
2 int main()
3 {
4 int i,suma=0;
5 do{
6 printf("Ingresa un numero = ");

73
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

7 scanf("%d",&i);
8 suma+=i;
9 }while(i!=0);
10 printf("Total = %d",suma);
11 return 0;
12 }

Análisis del programa


• Línea 5: Se declara la estructura do-while.
• Línea 6-8: Instrucciones que se repetirán mientras la condición sea verdadera, en
estas líneas solicitamos el número, lo guardamos en la variable i, y es acumulado
en la variable suma.
• Línea 9: Se especifica la condición mientras i sea diferente a 0 ( i!=0 ), el ciclo se
repetirá; como el usuario estará ingresando números, la condición será verdadera
ya que cualquier número ingresado es diferente a 0, es decir es verdadera la
condición. Cuando el usuario ingrese 0, la condición será falsa.
• Línea 10: se imprime el valor de suma, que lleva el total acumulado por el usuario.

Practica
Actividad 1 Realiza los siguientes programas en Code::Blocks empleando la estructura de
programación do-while. (Hacer - Mientras)
1. Elaborar un programa que imprima los números pares hasta un número
determinado.

2. Escribe un programa que use un bucle do-while para calcular la potencia de un


número al que denominaremos base sobre otro número al que denominaremos
exponente, ambos elegidos por el usuario.

3. Crear un programa que lea cantidades y precios de diferentes artículos, y al final


indique el total de la factura.

Cuestionario
1) ¿Cómo funciona la estructura de programación do-while?
2) Menciona la sintaxis correcta de la estructura while.
3) ¿Cuáles son las diferencias entre las estructuras cíclicas while, for y do-while?
4) ¿Cuál es la diferencia entre i++ y ++i?
5) Menciona que realizan las siguientes instrucciones:
a. ++i;
b. i++;
c. Total+=5;
d. Promedio*=2;
e. f/=3;

74
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3.4 Arreglos

3.4.1 Arreglos numéricos.

Un arreglo es un grupo consecutivo de localidades


de memoria relacionadas por el hecho de que
V tienen el mismo nombre y son del mismo tipo de
datos (enteros, caracteres, flotantes, etc.).
7 5 3 8 9
Para hacer referencia a una localidad o a un
elemento del arreglo en particular, especificamos
el nombre del arreglo y la posición numérica del
elemento en particular dentro del arreglo.

En la figura observamos el arreglo llamado V, con cinco localidades de memoria,


numeradas debajo de cada cuadro con los subindices: [0],[1],[2],[3],[4], de tal manera que
si queremos saber el valor de una localidad determinada debemos escribir V[2], y la
computadora nos entregara el resultado de 3. (V[2]=3)

Nota importante: como los vectores empiezan su numeración desde 0, siendo el primer
elemento v[0], el segundo elemento v[1], el tercer elemento V[2], y así sucesivamente,
para buscar un determinado elemento usaremos la formula V[#elemento - 1]

Los arrays, arreglos o vectores son una de las principales y más útiles estructuras que
podremos tener como herramienta de programación. Los arreglos son utilizados para
almacenar múltiples valores en una única variable, permiten almacenar muchos valores
en posiciones de memoria continuas, lo cual permite acceder a un valor u otro de manera
rápida y sencilla. De esta manera, si un programa tuviera que almacenar muchos valores,
como una base de datos, no necesitaremos declarar mil variables para hacerlo.

Como declarar un arreglo


Para declarar un arreglo necesitaremos saber el tipo de datos que irán en el interior de
este, es decir, serán número enteros, decimales o cadenas de texto, etc. necesitamos
también, como siempre, el nombre del vector y un tamaño máximo.

Sintaxis:

tipo_de_datos nombre_de_vector[tamaño_maximo];

Ejemplo:
int vector1[100]; //Es un arreglo llamado vector1 que almacena 100 números enteros.

75
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Se pueden realizar operaciones sobre los mismos, los cuales afectaran al valor
almacenado en esa referencia del arreglo:

Ejemplo:
Si a=1 y b=3, entonces la instrucción: V[a+b]+=2;
Realizara una suma de 2 al dato almacenado en V[4]. (Al quinto elemento del arreglo V)
por lo tanto V[4]=11.

Actividad 1 Explica las siguientes instrucciones: valor de la variable, que realizan, a


quien afectan, que se almacena, etc. Dados los siguientes parámetros:

Int Num=3, Dato=5, Suma=10;


Int V[5]={1,2,3,4,5]; //declaración con iniciación de un vector pequeño.

Instrucción Explicación
V[3]; V[3]=
Suma=V[4]+Num; Suma=
printf(“%d”, V[0]+V[2]+V[4]); Imprime:
x=V[3]/2; x=
Suma%=3 Suma=
y=V[1]+Suma/2; y=
Suma+=V[4]*2+V[2]-1; Suma=

Como inicializar un vector o arreglo.


La manera más fácil de inicializar un arreglo es utilizando instrucciones cíclicas: for es la
más empleada y sencilla de programar, así también es útil para imprimir los valores del
arreglo. Veámoslo con un ejemplo:

1 #include<stdio.h>
2 int main()
3 {
4 int V[5]; //Iniciación del vector
5 int i; //Declaración del contador
6 for(i=0;i<5;i++){ //ingreso de los valores en el arreglo
7 printf("ingrese el valor de V[%d] = ",i); //Solicitud de ingreso de valores
8 scanf("%d",&V[i]); //Guardamos el valor en su correspondiente vector
9 }
10 printf("\nlos valores ingresados en el vector son: ");
11 //impresión de los elementos del arreglo
12 for(i=0;i<5;i++){
13 printf("V[%d] = %d\t",i,V[i]);
14 }
15 return 0; //finalización exitosa del programa
16 }

76
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Actividad 2 Compruebe los resultados de la actividad 1 realizando un programa en


Code:: Blocks. Realice otras pruebas de asignación de valores empleando vectores.

PRACTICA

1. Elabore un programa en C que sume los valores de un determinado arreglo de 10


elementos ingresados por el usuario. Ejemplo: Dado el arreglo V[10]={2,4,6,8}, el
programa daría como resultado 20. (2+4+6+8)

2. Escriba un programa en C que realice la suma de dos arreglos determinados en


cada uno de sus elementos y se almacene en un tercer arreglo. Es decir:
V3[0]=V1[0]+V2[0], V3[1]=V1[1]+V2[2], y así sucesivamente. Los arreglos a
sumarse pueden ser declarados e inicializados de manera breve.

3. Redacte un programa en C, el cual busque en los 10 elementos de un arreglo


ingresado, aquellos que sean mayores a un número determinado por el usuario.
Ejemplo: Dado el vector V[10]={4,8,12,6,9,1,5,7,11,3} y buscando los números
mayores a 6, el resultado del programa seria 8,12,9,7y11, es decir 5 elementos.

4. Codifique un programa en C, el cual dado un arreglo de 5 números enteros al azar,


el programa los ordene e imprima de menor a mayor. Ejemplo: Dado
V[5]={9,5,4,8,3} , el programa entregue: 3,4,5,8,9.

CUESTIONARIO
1. ¿Qué es un arreglo?
2. ¿De qué otras maneras se conocen a los arreglos?
3. ¿Cuáles son las partes que componen la sintaxis de un arreglo?
4. ¿Qué tipo de datos se pueden almacenar en un arreglo?
5. ¿Cuál es la fórmula empleada para accesar a un elemento determinado en un
arreglo y por qué se emplea?

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3.4.2 Arreglos con caracteres (cadenas)

Hasta el momento hemos revisado ejemplos de arreglos


con números enteros. De la misma manera también se
pueden crear arreglos de caracteres, lo que nos permite
manipular cadenas (palabras o conjuntos de letras).

La declaración del arreglo se realiza de la misma manera,


solo se especifica el tipo de datos que se almacenaran en
el mismo.

77
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Sintaxis:

Char Cadena[]=”hola”;

Notemos que no hemos especificado índice alguno, el compilador contará la cantidad de letras
que tiene la cadena "hola" (son 4) y agregará uno para incluir el carácter nulo (‘\0’). El carácter
nulo índica la terminación de la cadena, es importante siempre tenerlo en cuenta.

Ejemplo:

1 #include<stdio.h>
2 int main()
3 {
4 int i;
5 char C[]="hola"; //Declaración e inicialización del arreglo C de tipo carácter.
6 printf("\nlas letras ingresadas en el vector C son: \n");
7 for(i=0;i<4;i++){ //Ciclo para imprimir los elementos del arreglo C
8 printf("C[%d] = %c\t",i,C[i]); // Impresión de los elementos de tipo
carácter.
9 }
10 return 0; // finalización del programa.
11 }

Otra forma de declarar cadenas seria: char Cadena[7] = {'b','u','e','n','a','s','\0'};

En esta declaración del arreglo Cadena, especificamos su longitud (7), e inicializamos cada
elemento de la cadena de forma individual, nótese el uso de comillas simples para mencionar
cada elemento, al final se escribió el elemento nulo, con el cual finaliza la cadena. (Este
elemento nulo aparecerá como un espacio, pero la computadora no le asigna ningún valor, ni
cero ni espacio, su valor es nada).

Los métodos anteriores son declaraciones e inicializaciones muy poco eficientes en los
programas, salvo para cadenas cortas, pero como realizar un almacenamiento de datos
significativo, en el cual el usuario pueda guardar palabras o textos largos. El método más
empleado es el que a continuación se describe:
Ejemplo
Elabore un programa que lea una cadena o palabra ingresada por el usuario, y la
descomponga en letras.

1 #include<stdio.h>
2 int main()
3 {
4 int i;
5 char Cadena[20]; //Declaración del arreglo Cadena para almacenar letras.
6 printf("Ingresa una palabra para deletrear \n");
7 scanf("%s",Cadena); //Captura de la cadena de texto ingresada por usuario
8 printf("\nlas letras ingresadas en el vector son: \n");
9 for(i=0;i<20;i++){ //Impresión de las letras que se guardaron en cadena.

78
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

10 if(Cadena[i]==NULL){ //Ruptura del ciclo al detectar un espacio nulo


11 break;
12 }
13 printf("Cadena[%d] = %c\n",i,Cadena[i]);
14 }
15 return 0;
16 }

Practica

1. Elabore un programa en C, el cual ingresada una palabra determinada por el


usuario, mencione cuantas vocales se ingresaron. Ejemplo: Ingresada la cadena:
“Papalote”, el programa debe dar por resultado: se ingresaron 4 vocales.

2. Escriba un programa en C, el cual ingresada una palabra definida por el usuario,


mencione cuantas veces se ingresaron cada vocal. Ejemplo: Ingresada la palabra:
“Estereotipo”, el programa debe dar por resultado: a=0 , e=3, i=1, o=2, u=0, total
vocales ingresadas: 6.

3. Escriba un programa en C, en el cual ingresada una palabra determinada por el


usuario, verifique si es palíndroma o no. Ejemplo: Ingresada la cadena:
“Reconocer”, el programa dará por resultado: la palabra es palíndroma.

4. Escriba un programa en C, en el cual ingresadas 5 palabras, las acomode en


todas las combinaciones posibles. Ejemplo: Ingresadas las palabras: “Perro”,
“el”,”Come”,”se”,”Gato”. el programa dará por resultados: “el perro se come gato”,
”el gato se come perro”, “el gato perro se come”…etc.

Cuestionario
1. ¿Cuál es el nombre de los arreglos con caracteres?
2. ¿Cuál es la sintaxis de un arreglo de caracteres?
3. ¿Al momento de guardar un arreglo de caracteres empleando el scanf en
necesario el “&”?
4. ¿Cuál es el valor de una variable null?
5. ¿Cuál es la diferencia entre el asignador %c y el %s?

79
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado

3.5 Arreglos bidimensionales (matrices)

Arreglo de dos dimensiones. Como un tablero


de ajedrez, en el cual tenemos casillas
verticales y horizontales, también se llaman
matrices.

Una matriz es una estructura de datos que


agrupan muchos datos del mismo tipo, en
donde cada elemento se puede trabajar
individualmente y se puede referenciar con un
mismo nombre. Se usan para representar
datos que se almacenan en filas y columnas.

Las matrices a diferencia de los arreglos, emplean dos subíndices, el primero para hacer
referencia a las filas, y el segundo para la referencia de las columnas.

Sintaxis:

Nombre_matriz [subíndice1] [subíndice2]

Para referenciar un elemento de la


matriz, debe darse un nombre de la
matriz y el índice de la fila y de la
columna que el elemento ocupa en dicha
matriz. Es importante que los índices de
las matrices tanto de las filas como de las
columnas inicien en 0 y terminan en
tamaño fila-1 y tamaño columna-1
respectivamente.

80
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Ejemplos:

int matriz [4][4]


char tablero [100][100]
int ventana [20][]

Cuando se ingresan datos en una matriz, es recomendable imaginar su representación


gráfica, la cual puede ser como se muestra a continuación:

Matriz 3x4 (3filas x 4columnas)

Como inicializar una matriz


Para inicializar una matriz de dos dimensiones necesitaremos emplear la estructura de for
anidados.

1 #include<stdio.h>
2 int main()
3 {
4 int i,j; //Declaración de dos contadores para la cuenta de filas y columnas
5 int Matriz[3][3]; //Declaración de la matriz 3x3
6 printf("Ingresa los valores de una matriz 3x3\n\n");
7 for(i=0;i<3;i++){ //Ciclos for anidados para guardar los elementos de la matriz
8 for(j=0;j<3;j++){
9 printf("Ingresa V[%d][%d]= ",i,j); //Solicitud de cada dato de la matriz
10 scanf("%d",&Matriz[i][j]); //Almacenamiento de datos en la matriz
11 }
12 }
13 printf("\nla matriz ingresada fue=\n\n");
14 for(i=0;i<3;i++){ //Ciclos for anidados para imprimir la matriz
15 for(j=0;j<3;j++){
16 printf("%d\t",Matriz[i][j]); //impresión de cada elemento de la matriz
17 }
18 printf("\n");
19 }
20 return 0;
21 }

81
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Practica

1. Elaborar un programa en C++, el cual realice la suma de dos matrices de 4x2


dadas por el usuario. Ejemplo:

5 2 1 7 6 9
2 1 3 5 5 6
3 7 + 6 3 = 9 10
8 2 1 5 9 7

2. Elaborar un programa en C++, que rellene una matriz cuadrada con los
primeros 25 números de la serie de Fibonacci. Ejemplo:

1 1 2 3
5 8 13 21
34 55 89 144
233 377 610 987 ….

CUESTIONARIO
1. ¿Qué es un arreglo bidimensional?
2. ¿Qué otro nombre recibe un arreglo bidimensional?
3. ¿Cuántos subíndices necesita un arreglo bidimensional y para qué sirven?
4. Explica la sintaxis de un arreglo bidimensional.
5. ¿Qué estructuras se necesitan para inicializar, imprimir o recorrer una matriz
bidimensional?

82
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 1: Desarrolla software utilizando programación estructurada

Fuentes de apoyo.
Lenguajes de programación C. Conceptos y principios. Recuperado de:
http://bloginformatico.com/lenguaje-de-programacion-c.php el dia 27 de septiembre del
2017.

Lenguaje de Programacion C. Sintaxis en C. Recuperado de:


https://sites.google.com/site/lenguajecprogramacion/sintaxis-de-c el dia 27 de septiembre
del 2017.

Las variables y los tipos básicos. Recuperado de:


http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/lengua_C/variables.htm el día
29 de septiembre del 2017.

83
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Técnico en Programación
MÓDULO I: DESARROLLA E INSTALA SOFTWARE
DE APLICACIÓN UTILIZANDO PROGRAMACIÓN
ESTRUCTURADA, CON ALMACENAMIENTO
PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos


simples

84
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

85
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

1. Introducción a las bases de datos

Competencia Profesional:
Elabora un diseño conceptual de una base de datos.

En la actualidad los usuarios cada vez demandan más recursos en


cuanto a tecnología, por tanto surgen las evoluciones en los sistemas,
y por ende las bases de datos.
Las bases de datos son fundamentales en los sistemas de información
debido a que estas se utilizan en todas las áreas profesionales como
la investigación, tecnología, arte, educación, sistemas médicos,
programas de ingeniería, programas de desarrollo, de diseño, sistemas de información
geográficas, entre otros.

1.1 Terminología: Tablas, campos y registros


Para definir “Bases de datos” es importante tener en claro que es un dato e información,
debido a que estos elementos son fundamentales para el desarrollo de las bases de
datos, según (Juárez, 2006. P. 45).

• Dato: es un conjunto de caracteres con algún significado, puede ser numérico,


alfabético o alfanumérico, es la unidad mínima de información. Un dato dentro
de una base de datos responde a la función (objeto, atributo, valor).

• Información: es un conjunto ordenado de datos los cuales son manejados


según la necesidad del usuario, para que un conjunto de datos pueda ser
procesado eficientemente y pueda dar lugar a información, primero se debe
guardar lógicamente en archivos.
La información es el recurso más valioso en una base de datos, por tanto este debe ser:

• Accesible: es la facilidad y rapidez para poder acceder a ella


• Clara: debe sr integra y fácil de entender
• Precisa: lo más exacta posible
• Propia: debe haber la mayor similitud entre el resultado creado y lo que el
usuario pide
• Oportuna: el proceso de entrada-procesamiento-entrega al usuario debe ser en
el menor tiempo posible.
• Flexible: la información se puede adaptar a la toma de decisiones que mejor
convenga
• Verificable: la información debe ser totalmente fiable para que se pueda
verificar en el momento deseado

86
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

• Imparcial: La información debe poder modificarse tanto por el administrador,


como por el usuario dueño de la base
• Cuantificable: la información puede ser el resultado de cualquier dato
procesado
Conceptos básicos

• Entidad: persona, lugar, objeto o evento de interés acerca del cual se recogen
o procesan datos. Esta se representa por medio de un rectángulo, mismo que
contiene dentro el nombre de la entidad.

• Las entidades se dividen en dos tipos, que son:


o Regulares o fuertes: que son las entidades normales que tienen
existencia por sí mismas, sin depender de otras.

Personas

o Débiles, su existencia depende de otras. Su representación es con


doble cuadro.

Personas

• Atributo: es una característica de una entidad o de una relación en función de


lo que nos interesa en nuestra aplicación. Su representación gráfica es un
eclipse.
Color

o Los atributos se clasifican en:


 Simples: no están divididos en sub-partes
 Compuestos: estos están divididos en sub-partes, una forma
clara de ejemplificar este tipo de atributos es, por ejemplo el
atributo de fecha, está compuesta (día, mes y año)
 Monovaluados: solo pueden un valor para una entidad
particular.
 Multivaluados: pueden tener más de un valor para una entidad.
 Almacenados o derivados: son atributos cuyo valor para una
entidad puede obtenerse en función de los valores almacenados
en otros atributos.
Identificador: se trata de uno o más campos cuyos valores son únicos en cada ejemplar
de una entidad. Se indican subrayando el nombre del identificador.

87
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

1.2 Estructura de la Base de Datos

Modelos de los datos primitivos


Cuando la gestión de base de datos se popularizó durante los años setenta y los ochenta,
emergieron un grupo de modelos de datos populares. Antes de la introducción de los
sistemas de bases de datos, todos los datos permanecían en archivos individuales.
Entonces un sistema de gestión de archivos, generalmente proporcionado por el
fabricante de la computadora como parte del sistema operativo, llevaba la cuenta de los
nombres y ubicaciones de los archivos. El sistema de gestión de archivos básicamente no
tenía un modelo de datos, no sabía nada acerca del contenido de los archivos. Si la
estructura de los datos cambiaba, por ejemplo añadiendo un nuevo campo a una tabla,
todos los programas que accedían al fichero tenían que ser modificados. Según crecía el
número de archivos y programas, todo el esfuerzo de procesamiento de datos se iba
perdiendo en mantener las aplicaciones existentes en lugar de desarrollar otras nuevas.
Tipos de bases de datos: jerárquica, red y relacionales
Sistemas de Bases de Datos Jerárquicas: Están organizadas bajo una estructura de
árbol, el problema que presentan es que la relación sólo se presenta en un sentido y
dirección. Uno de los sistemas más populares fue el Information Management System
(IMS) de IBM. Las ventajas del IMS y su modelo jerárquico son las siguientes:
Estructura simple: La organización de un sistema IMS era fácil de entender. La
jerarquía de la base de datos se asemejaba al diagrama de organización de una
organización o a un árbol familiar.
Organización Padre/Hijo: Una base de datos IMS era excelente para representar
relaciones padre/hijo tales como A es una pieza de B, o A es propiedad de B.
Rendimiento: IMS almacenaba las relaciones padre/hijo como punteros, por lo que
el movimiento a través de la base de datos era rápido.
Este es un esquema poco flexible por lo que surge la idea de eliminar la deficiencia del
Sistemas de Base de Datos Jerárquica y se crea el Sistema de Bases de Datos de Red.
Bases de datos de Red: La estructura sencilla de una base de datos jerárquica se
convertía en una desventaja cuando los datos tenían una estructura más compleja. En
una base de datos de procesamiento de pedidos, por ejemplo, un solo pedido podía
participar en tres relaciones padre/hijo diferentes: Ligando el pedido al cliente que lo
remitió, al proveedor que lo aceptó y al producto ordenado. Esta estructura pues, no se
ajustaba a la estricta estructura jerárquica de IMS. Para manejar aplicaciones tales como
el procesamiento de pedidos, se desarrolló un nuevo modelo de datos en red. El modelo
de datos en red extendía y el modelo jerárquico permitiendo que un registro participara en
múltiples relaciones padre/hijo. Estas relaciones eran conocidas como conjuntos en el
modelo en red. Este sistema se fue imponiendo frente a las estructuras jerárquicas pues
presentaban las siguientes ventajas:
Flexibilidad: Las múltiples relaciones padre/hijo permitían presentar datos que no
tuvieran una estructura jerárquica sencilla.

88
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Normalización: Dado que se realizó bajo el estándar CODASYL se reforzó la


popularidad de dicho modelo.
Rendimiento: A pesar de su mayor complejidad, las bases de datos en red
reforzaron el rendimiento, aproximándolo al de las bases de datos jerárquicas. Los
conjuntos se representaron mediante punteros a registros de datos físicos.

Ejercicio

I. Realiza el siguiente ejercicio, colocando el concepto que corresponde a cada


uno de los enunciados que se presentan.
Sistema de gestión de
Información Rendimiento Dato Estructura simple
archivos
Bases de datos jerárquicas Bases de datos Entidad Atributo Identificador

1. ________________________ Son fundamentales en los sistemas de información


debido a que estas se utilizan en todas las áreas profesionales como la
investigación, tecnología, educación, sistemas médicos, etc.
2. ________________________ Conjunto de caracteres con algún significado, el
cual puede ser numérico, alfabético o alfanumérico.
3. ________________________ Es un conjunto ordenado de datos los cuales son
manejadas según la necesidad del usuario, porque un conjunto de datos puede
ser procesado eficientemente.
4. ________________________ persona, lugar, objeto o evento de interés acerca
del cual se recogen o procesan datos.
5. ________________________ es una característica de una entidad o de una
relación en función de lo que nos interesa en nuestra aplicación. Su
representación gráfica es un eclipse.
6. ________________________ se trata de uno o más campos cuyos valores son
únicos en cada ejemplar de una entidad. Se indican subrayando el nombre del
identificador.
7. ________________________ generalmente es proporcionado por el fabricante de
la computadora como parte del sistema operativo, llevaba la cuenta de los
nombres y ubicaciones de los archivos.
8. _________________________ están organizadas bajo una estructura de árbol.

9. _________________________ La jerarquía de la base de datos se asemejaba al


diagrama de organización de una organización o a un árbol familiar.

10. _________________________ IMS almacenaba las relaciones padre/hijo como


punteros, por lo que el movimiento a través de la base de datos era rápido.

89
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

II. Identifica los conceptos necesarios para considerar en el manejo de


información.

A A E A T A T V V E S E E P V P E V
H C S M R C R A T T T S S R E R L E
G A C L A R A L A A U T T O R E B R
B B L E R A B O C D M R T P I C A D
Y A A E S M E R U I F A A I F C C D
T P R O P I A E D U L B W I I I I E
R T I P O A B S E C E I Y A C S F D
E R F O S T R L E C X E R D A A R A
D E I R I S P R E C I S A T B C D R
S S C T T I R A R M B C O P L L O T
W E A U I N O A P R L E R T E A M E
A W B N V O P A R T E D F G M R S R
Y S L A O I R A T E L B A E T S O C
U A E T S C U A N T I F I C A B L E
I D S S I C S E S C O L A A R T A R
L F D A L A E M E R C A S S T A D E
O G L C A S A P S A M A J A B A R T

1. ____________________________ el proceso de entrada-procesamiento-entrega al


usuario debe ser en el menor tiempo posible.
2. ____________________________es la facilidad y rapidez para poder acceder a ella
3. ____________________________debe sr integra y fácil de entender
4. ____________________________debe haber la mayor similitud entre el resultado
creado y lo que el usuario pide
5. ____________________________ la información se puede adaptar a la toma de
decisiones que mejor convenga
6. ____________________________ la información debe ser totalmente fiable para que
se pueda verificar en el momento deseado
7. ____________________________lo más exacta posible
8. ____________________________ La información debe poder modificarse tanto por el
administrador, como por el usuario dueño de la base
9. ____________________________ la información puede ser el resultado de cualquier
dato procesado

90
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

1.3 Normalización de una base de datos

Competencia Profesional:
Elabora el diseño lógico de una base de datos con
implementación en un sistema gestor de base de datos.

Primera Forma Normal


El proceso de normalización de bases de datos consiste en aplicar una serie de reglas a
las relaciones obtenidas tras el paso del modelo entidad-relación al modelo relacional.

Las bases de datos relacionales se normalizan para:


• Evitar la redundancia de los datos.
• Evitar problemas de actualización de los datos en las tablas.
• Proteger la integridad de los datos.
La primera forma normal (1FN), requiere que los datos sean atómicos. En otras palabras,
la 1FN prohíbe a un campo contener más de un dato de su dominio de columna. También
exige que todas las tablas deben tener una clave primaria. Por último, indica que una
tabla no debe tener atributos que acepten valores nulos.
Cuando no existe normalización, se presentan anomalías en la base de datos. Estos
problemas que ocasionan problemas al momento de insertar, modificar o eliminar datos.
Ejemplos:

• Múltiples valores:

Múltiples datos en número de teléfono


La forma correcta sería:

Número de teléfono normalizado


• Redundancia de datos:

91
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Datos redundantes en dos registros

La forma correcta de representar la tabla sería:


Sin redundancia. Cabe mencionar que la llave primaria de la segunda tabla es compuesta
• Columnas que permiten valores nulos:

La forma correcta de representar esta tabla seria como en el ejemplo anterior


• Tabla sin llave principal:

La forma correcta sería agregando una llave principal

Segunda Forma Normal en Bases de Datos (2FN)


La segunda forma normal (2NF) es una forma normal usada en normalización de bases
de datos. Una tabla que está en la primera forma normal (1NF) debe satisfacer criterios
adicionales para calificar para la segunda forma normal.
Una tabla 1NF estará en 2NF si y solo si, dada una clave primaria y cualquier atributo que
no sea un constituyente de la clave primaria, el atributo no clave depende de toda la clave
primaria en vez de solo una parte de ella.

92
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Ejemplos:
• Ejemplo1:

Esto se soluciona separando el atributo N_TRABAJADOR a una tabla separada

• Ejemplo 2:

En este caso se puede separar la tabla en 3 tablas diferentes para cumplir con la 2FN

Ejemplo3:

Esta tabla está en FN2


Ejemplo 4:

Esta tabla está en FN2

La Segunda Forma Normal presenta anomalías, en donde si existe dependencia funcional


completa entre los atributos. Como en el ejemplo siguiente:

93
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

De este tipo de anomalías se encarga la tercera forma normal.

Tercera Forma Normal en Bases de Datos (3FN)


La tercera forma normal (3NF) es una forma normal usada en la normalización de
bases de datos. Para que la tabla esté en 3NF, se debe cumplir que la tabla ya
esté en 2NF. Adicionalmente, ningún atributo no primario de la tabla debe ser
dependiente transitivamente de una clave primaria.

Ejemplos:

Esto se soluciona removiendo la transitividad y separando en dos relaciones


diferentes

94
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

La anomalía que presenta la tercera forma normal no está en la inserción,


modificación, o eliminación de datos. Sino, en la dependencia multivaluada.

Cuarta Forma Normal en Bases de Datos (4FN)


La cuarta forma normal (4NF) es una forma normal usada en la normalización de bases
de datos. Esta se asegura que todas las dependencias multivaluadas estén representadas
de la manera más eficiente en la base de datos. Esta forma normal se realiza después de
la forma normal de Boyce-Codd.

Una dependencia multivaluada es una restricción completa entre dos grupos de atributos
en una relación.

95
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Esta dependencia multivaluada se resuelve de la siguiente manera:

Hay algunas ocasiones en que aún existen anomalías después de una FN4, aunque este
tipo de anomalías son del tipo semánticas. Un ejemplo seria la siguiente tabla con
su descripción:

96
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Cuando un psiquiatra es autorizado a ofrecer el tratamiento reembolsable a los pacientes


asegurados por el asegurador P, y el psiquiatra puede tratar la condición C, entonces - en
caso que el asegurador P cubra la condición C - debe ser cierto que el psiquiatra puede
ofrecer el tratamiento reembolsable a los pacientes que sufren de la condición C y están
asegurados por el asegurador P.

Se puede dividir con esta descripción a la relación en tres partes:

Esta disposición ayuda a reducir redundancia y a facilitar cualquier tipo de búsquedas.

97
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Práctica 1. Analiza la información que se presenta a continuación y realiza las


tablas que se van construyendo del siguiente ejercicio.

Un dato sin normalizar no cumple con ninguna regla de normalización. Para explicar con
un ejemplo en qué consiste cada una de las reglas, vamos a considerar los datos de la
siguiente tabla.
ordenes (id_orden, fecha, id_cliente, nom_cliente, estado, num_art, nom_art, cant,
precio)

Ordenes

Id_orden Fecha Id_cliente Nom_cliente Estado Num_art nom_art cant Precio

2301 23/02/11 101 Martin Caracas 3786 Red 3 35,00

2301 23/02/11 101 Martin Caracas 4011 Raqueta 6 65,00

2301 23/02/11 101 Martin Caracas 9132 Paq-3 8 4,75

2302 25/02/11 107 Herman Coro 5794 Paq-6 4 5,00

2303 27/02/11 110 Pedro Maracay 4011 Raqueta 2 65,00

2303 27/02/11 110 Pedro Maracay 3141 Funda 2 10,00

PRIMERA FORMAL NORMAL (1FN)

Al examinar estos registros, podemos darnos cuenta que contienen un grupo repetido
para NUM_ART, NOM_ART, CANT y PRECIO. La 1FN prohíbe los grupos repetidos, por
lo tanto tenemos que convertir a la primera forma normal. Los pasos a seguir son:

• Tenemos que eliminar los grupos repetidos.

• Tenemos que crear una nueva tabla con la PK de la tabla base y el grupo repetido.

Los registros quedan ahora conformados en dos tablas que llamaremos ORDENES y
ARTICULOS_ORDENES

ordenes (id_orden, fecha, id_cliente, nom_cliente, estado)

Articulos_ordenes (id_orden, num_art, nom_art, cant, precio)

98
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Ordenes

Id_orden Fecha Id_cliente Nom_cliente Estado

2301 23/02/11 101 Martin Caracas

2302 25/02/11 107 Herman Coro

2303 27/02/11 110 Pedro Maracay

Articulos_ordenes

Id_orden Num_art nom_art cant Precio

2301 3786 Red 3 35,00

2301 4011 Raqueta 6 65,00

2301 9132 Paq-3 8 4,75

2302 5794 Paq-6 4 5,00

2303 4011 Raqueta 2 65,00

2303 3141 Funda 2 10,00

SEGUNDA FORMAL NORMAL (2FN)

Ahora procederemos a aplicar la segunda formal normal, es decir, tenemos que eliminar
cualquier columna no llave que no dependa de la llave primaria de la tabla. Los pasos a
seguir son:

• Determinar cuáles columnas que no son llave no dependen de la llave primaria de la


tabla.

• Eliminar esas columnas de la tabla base.

• Crear una segunda tabla con esas columnas y la(s) columna(s) de la PK de la cual
dependen.

La tabla ORDENES está en 2FN. Cualquier valor único de ID_ORDEN determina un sólo
valor para cada columna. Por lo tanto, todas las columnas son dependientes de la llave
primaria ID_ORDEN.

99
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Por su parte, la tabla ARTICULOS_ORDENES no se encuentra en 2FN ya que las


columnas PRECIO y NOM_ART son dependientes de NUM_ART, pero no son
dependientes de ID_ORDEN. Lo que haremos a continuación es eliminar estas columnas
de la tabla ARTICULOS_ORDENES y crear una tabla ARTICULOS con dichas columnas
y la llave primaria de la que dependen.

Las tablas quedan ahora de la siguiente manera.

Articulos_ordenes (id_orden, num_art, cant)

Articulos_ordenes

Id_orden Num_art cant

2301 3786 3

2301 4011 6

2301 9132 8

2302 5794 4

2303 4011 2

2303 3141 2

Articulos ( num_art, nom_art, precio)

Articulos

Num_art nom_art Precio

3786 Red 35,00

4011 Raqueta 65,00

9132 Paq-3 4,75

5794 Paq-6 5,00

3141 Funda 10,00

100
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

TERCERA FORMAL NORMAL (3FN)

La tercera forma normal nos dice que tenemos que eliminar cualquier columna no llave
que sea dependiente de otra columna no llave. Los pasos a seguir son:

• Determinar las columnas que son dependientes de otra columna no llave.

• Eliminar esas columnas de la tabla base.

• Crear una segunda tabla con esas columnas y con la columna no llave de la cual son
dependientes.

Al observar las tablas que hemos creado, nos damos cuenta que tanto la tabla
ARTICULOS, como la tabla ARTICULOS_ORDENES se encuentran en 3FN. Sin embargo
la tabla ORDENES no lo está, ya que NOM_CLIENTE y ESTADO son dependientes de
ID_CLIENTE, y esta columna no es la llave primaria.

Para normalizar esta tabla, moveremos las columnas no llave y la columna llave de la cual
dependen dentro de una nueva tabla CLIENTES. Las nuevas tablas CLIENTES y
ORDENES se muestran a continuación.

ordenes (id_orden, fecha, id_cliente)


Ordenes
Id_orden Fecha Id_cliente

2301 23/02/11 101

2302 25/02/11 107

2303 27/02/11 110

Clientes (id_cliente, nom_cliente, estado)


Ordenes
Id_cliente Nom_cliente Estado

101 Martin Caracas

107 Herman Coro

110 Pedro Maracay

101
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Por lo tanto la base de datos queda de la siguiente manera:

ordenes (id_orden, fecha, id_cliente)

Clientes (id_cliente, nom_cliente, estado)

Articulos ( num_art, nom_art, precio)

Articulos_ordenes (id_orden, num_art, cant)

Práctica 2. Aplica la normalización a los ejercicios que se presentan a continuación.

FACTURA DE COMPRA VENTA: La empresa COLOMBIAN SYSTEMS lo ha contratado


como el “Ingeniero Encargado” para sistematizar la facturación. En la siguiente FACTURA
DE COMPRA VENTA, usted debe analizar toda la información disponible y aplique el
proceso de normalización, hasta llegar a la Tercera Forma Normal.

Se pide realizar la respectiva justificación detallada de cada uno de los pasos que
conduzcan al resultado final.

Factura (NUM_FAC, FECHA_FAC, NOM_CLIENTE, DIR_CLIENTE, RIF_CLIENTE,


CIUDAD_CLIENTE, TELEF_CLIENTE, CATEGORIA, COD_PROD, DESP_PROD,
VAL_UNIT, CANT_PROD)

Donde:
NUM_FAC: Número de la factura de compra venta
FECHA_FAC: Fecha de la factura de compra venta
NOM_CLIENTE: Nombre del cliente
DIR_CLIENTE: Dirección del cliente
RIF_CLIENTE: Rif del cliente
CIUDAD_CLIENTE: Ciudad del cliente
TELEF_CLIENTE: Teléfono del cliente
CATEGORIA: Categoría del producto
COD_PROD: Código del producto
DESCRIPCION: Descripción del producto
VAL_UNIT: Valor unitario del producto
CANT_PROD: Cantidad de productos q compra el cliente
La llave primaria es Número de Factura de venta: NUM_FAC

102
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

EMPRESA DE ENVIO DE MERCANCIA: a continuación se agrupan todos los atributos


que hacen parte de la base de datos para aplicarle las reglas de normalización. Donde se
incluyen los nombres de los atributos con su significado

* GUIA_NO = Numero de Guia


* GUIA_FECHA= Fecha de la Guia
* GUIA_HORA= Hora de la Guia
* ORGN_RIF = Identificacion de Empresa Origen
* ORGN_NOM = Nombre de Empresa Origen
* ORGN_ACT = Actividad Comercial de Empresa Origen
* ORGN_CIUDAD= Ciudad de Empresa Origen
* ORGN_DIR = Direccion de Empresa Origen
* ORGN_TEL = Telefono de Empresa Origen
* ORGN_CEL = Celular de Empresa Origen
* DEST_ID = Identificacion del destinatario
* DEST_NOM = Nombre del destinatario
* DEST_COD_CIUDAD = Codigo de la ciudad del destinatario
* DEST_CIUDAD= Ciudad del destinatario
* DEST_DIR = Direccion del destinatario
* DEST_TEL = Telefono del destinatario
* DEST_KM = Distancia kilometraje de Ciudad origen a ciudad del destinatario
* CODIGO = Codigo del paquete
* TIPO = Tipo de paquete
* NOMBRE = Nombre del paquete
* DESCRIPCION = Descripción del paquete
* VALR_ FLETE = Valor del flete

Practica 3. Aplica la normalización a los ejercicios que se presentan a continuación.

Video club: En una tienda de video se necesita mantener información de alrededor de


3000 casetas cada uno de los casetes tiene asignado un número por cada `película se
necesita conocer un título y categoría por ejemplo: comedia, suspenso, drama, acción,
ciencia ficción, etc. Se mantienen algunas copias de muchas películas. Se le da a cada
película una identificación y se mantiene seguimiento de lo que contiene cada casete.

Un casete puede venir en varios formatos y una película es grabada en un solo casete;
frecuentemente las películas son pedidas de acuerdo a un actor especifico Tom Cruise y
Demi More son los más populares es por esto que se debe mantener información de los
actores que pertenecen a cada película.

103
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

No en todas las películas actúan artistas famosos, a los clientes de la tienda le gusta
conocer datos como el nombre real del actor, y su fecha de nacimiento.

En la tienda se mantienen información solo de los actores que aparecen en las películas y
que se tiene a disposición. Solo se alquila videos a aquellos que pertenecen al club de
videos. Para pertenecer al club se debe tener un buen crédito. Por cada miembro del club
se mantiene una ficha con su nombre, teléfono y dirección, cada miembro del club tiene
asignado un número de membresía. Se desea mantener información de todos los casetes
que un cliente alquila, cuando un cliente alquila un casete se debería conocer el nombre
de la película, la fecha en la que se alquila y la fecha de devolución.

Se pide aplicar las reglas de normalización hasta la tercera forma normal, teniendo las
siguientes entidades con sus respectivos atributos:

Alquiler (cod_alquiler, num_membresia, cod_cliente, nom_cliente, dir_cliente,


telef_cliente, cod_cassette, fecha_alquiler, fecha_dev, valor_alquiler, cantidad)

Cassettte (cod_cassette, num_copias, formato, cod_pelicula, titulo, categoría, cod_actor,


nom_actor, fechanac_actor, cod_tipo)

Donde:
cod_alquiler = Codigo del alquiler
num_membresia = Numero de membresia
cod_cliente = código del cliente
nom_cliente = nombre del cliente
dir_cliente = dirección del cliente
telef_cliente = teléfono del cliente
cod_cassette = código del cassette
fecha_alquiler = fecha del alquiler del al película
fecha_dev = fecha de devolución de la pelicula
valor_alquiler = valor del alquiler de la película
cantidad = cantidad de película alquilada
num_copias = números de copias de cassette
formato = formato del cassette
titulo = nombre de la película
categoría = categoría de la película
cod_actor = código del actor
nom_actor = nombre del actor
fechanac_actor = fecha de nacimiento del actor
cod_tipo = código del tipo de película.

104
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

2. Bases de datos relacionales


Una base de datos relacional es una base de datos que se trata como un conjunto de
tablas y se manipula de acuerdo con el modelo de datos relacional. Contiene un conjunto
de objetos que se utilizan para almacenar y gestionar los datos, así como para acceder a
los mismos. Las tablas, vistas, índices, funciones, activadores y paquetes son ejemplos
de estos objetos.

Tablas, filas y columnas

En términos informales puede pensar en una base de datos relacional como en una
colección de tablas, cada una de ellas contiene filas y columnas. En este nivel, se parece
a un cuaderno de ejercicios que contiene varias hojas de ejercicios (u hojas de cálculo)
aunque una hoja de ejercicios es mucho más limitada que una tabla de una base de
datos.

En conjunto de valores que están permitidos en una columna se llaman dominio de la


columna. Por ejemplo, el dominio de una columna podría ser números de teléfonos,
números de cuentas bancarias, tallas de zapatos o colores de ala deltas.

Los tipos de datos que pueden utilizar en una columna dependen de la base de datos que
esté utilizando, pero los tipos normales incluyen números enteros, números de punto
flotante (un número con una coma decimal), cadenas y fechas.

Las filas de una tabla corresponden con los valores de una columna que están
relacionados unas con otras de acuerdo al propósito de la tabla.

Los registros estaban divididos en campos de longitud fija que corresponden con las
columnas de una tabla.
Por ejemplo si se piensa en una tabla que aparece a continuación en un archivo plano, la
primera fila corresponde a un registro del archivo. Cada uno contiene: Nombre, Dirección,
Evento, Grupo Sanguíneo y ParienteMasPróximo.

105
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Nombre Dirección Evento Grupo Pariente más


Sanguíneo próximo

Alice 6543 Flak Ter, Runner AZ 82018 Pyamid Boarding A+ Art. Adveture
Adventura

Alice 6543 Flak Ter, Runner AZ 82018 Pyamid Luge A+ Art. Adventure
Adventura

Bart Bold 6371 Jumo St #27, Dove City, NV Camel Drafting O- Betty Bold
73289

Bart Bold 6371 Jumo St #27, Dove City, NV Pyramid Boarding O- Betty Bold
73289

Bart Bold 6371 Jumo St #27, Dove City, NV Sphinx Jumping O- Betty Bold
73289

Cindy Copes 271 Sledding Hill, Ricky Ride CO 80281 Camel Drafting AB- John Finkle

Cindy Copes 271 Sledding Hill, Ricky Ride CO 80281 Sphinx Jumping AB- John Finkle

Darin Daring 73 Fighter Ave. New Plunge UT 78281 Pyamid Boarding O+ Betty Dare

Darin Daring 73 Fighter Ave. New Plunge UT 78281 Pyamid Boarding O+ Betty Dare

Frank Flercely 3872 Bother Bld. Lost City HI 99182 Pyramid Luge B+ Fred Farce

Frank Flercely 3872 Bother Bld. Lost City HI 99182 Sphinx B+ Fred Farce

George Forman 73 Fighter Ane. New Plunge UT 78281 Sphinx Jumping O+ George Forman

George Forman 73 Fighter Ane. New Plunge UT 78281 Pyramid Luge O+ George Forman

Gina Grulf 1 Skatepark Ln. Forever KS 72071 Camenl Drafting A+ Gill Gruff

Gina Grulf 1 Skatepark Ln. Forever KS 72071 Pyamid Boarding A+ Gill Gruff

Relaciones, atributos y tuplas


Los valores de una fila están relacionados por el hecho de que se aplican a una persona
en particular. Debido a este hecho, el término formal por una tabla es relación. Esto puede
causar cierta confusión porque la palabra “relación” también se utiliza de forma informal
para describir una relación entre dos tablas.
El término formal para una columna es un atributo o elemento de datos. Por ejemplo en la
relación Competidores que aparece en la tabla de competidores Nombre, Dirección, grupo
sanguíneo y pariente más cercano son atributos de cada una de las personas
representadas. Puede pensar en esto como en que “cada persona en la relación tienen un
atributo Nombre”.
El término formal para una fila es “Tupla”. Esto casi tiene sentido si piensa en una relación
de los atributos que contiene pares de datos, una relación de tres atributos que contiene
valores triples y una relación de cuatro atributos que contienen datos cuádruples.

106
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

No confunda el término formal “relación” (con el significado de tabla) con una utilización
más general y menos precisa del término que significa “relacionado con” como en “estos
campos forman una relación entre dos tablas (o “ese psicópata no tiene nada que ver
conmigo”).
De la misma forma no confunda el termino formal “atributo” con la utilización menos
precisa que significa “característica de” como en “este campo tiene el atributo exigido”(o
“no me atribuyas ese comentario a mi”). Dudo que confunda el término “tupla” con nada,
seguramente ya es lo suficiente confuso por sí mismo.
En teoría una relación no impone ninguna orden en las tuplas que contiene ni da ninguna
orden a sus atributos. En general las órdenes no importan a la teoría matemática de la
base de datos. Sin embargo en la práctica las aplicaciones de la base de datos clasifican
los registros seleccionados de una tabla de alguna forma para hacer que el usuario
entienda mejor los resultados.

Claves
La terminología de una base de datos relacional incluye muchos tipos distintos de claves.
En su sentido más amplio una clave es una combinación de una o más columnas que
utilizamos para encontrar filas en una tabla.
Por ejemplo una tabla de Clientes podría utilizar IDCliente para encontrar a los clientes si
sabe cuál es la ID de un cliente puede encontrar rápidamente el registro del cliente en la
tabla (De hecho, muchos números ID, como las ID de empleado, las ID de estudiante
permisos de conducir etc.
En general una clave es un conjunto de una o más columnas de una tabla que tienen
ciertas propiedades. Una clave compuesta es una clave que incluye más de una columna.
Por ejemplo podría utilizar la combinación de Nombre y Apellido para buscar clientes.
Una superclave es un conjunto de una o más columnas de una tabla para las que dos filas
no puedan tener el mismo valor exacto. Por ejemplo en la tabla Competidores que las
columnas Nombre, dirección y Evento forman una superclave porque no hay dos filas que
tengan exactamente los mismos valores. Debido a que las superclaves definen campos
que tienen que ser únicos dentro de una tabla, algunas veces se llaman “claves únicas”.
Fundamentos de las bases de datos relacionados
Como clave primaria. Después podría obtener un registro con Nombre y Evento pero sin
valor Dirección. (Aunque eso sería un poco extraño. Podríamos querer que todos los
campos tengan este valor.) Una clave alternativa es un a clave candidata que no es la
clave primaria. Algunos también la denomina clave secundaria, aunque otros utilizan el
término “clave secundaria” para referirse a cualquier conjunto de datos utilizados para
localizar los registros aunque los campos no defiendan valores únicos.

107
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Son un montón de claves para recordarlas todas. La siguiente lista resumen brevemente
los distintos tipos:
 Clave compuesta: Una clave que incluye más de un campo
 Superclave: Un conjunto de columnas para las que dos filas no pueden tener
exactamente los mismos valores
 Clave candidata: Una superclave mínima
 Clave única: Una superclave utilizada por la base de datos para exigir unicidad.
 Clave primaria: Una calve única que se utiliza para localizar rápidamente
registros en la base de datos.
 Clave alternativa: Una calve candidata que no es la calve primaria.
 Clave secundaria: Una clave utilizada para buscar registros pero que puede no
garantizar la unicidad.
Un último tipo de clave es la clave ajena. Una calve ajena se utiliza como una restricción
en lugar de para buscar registros en una tabla, por lo que se describen en una sección
posterior un poco más adelante.
Índices
Un índice es una estructura que hace que sean más rápido y fácil encontrar registros
basados en los valores de uno o más campos. Los índices no son los mismos que las
claves, aunque los dos están tan relacionados que muchos desarrolladores confunden los
dos términos y los utilizan de forma intercambiable.
Ejercicio: Relaciona las columnas que se presentan a continuación.

( ) Clave única 1. Término formal para una columna es un.

( ) Tupla 2. Se utiliza de forma informal para describir una


relación entre dos tablas

( ) Clave candidata 3. Una clave que incluye más de un campo

( ) Clave secundaria 4. Un conjunto de columnas para las que dos


filas no pueden tener exactamente los
mismos valores

( ) Atributo o elemento de 5. Término formal para una fila


datos
( ) Clave primaria 6. Una clave utilizada para buscar registros pero
que puede no garantizar la unicidad.

( ) Superclave 7. Una calve candidata que no es la calve


primaria

108
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

( ) Clave alternativa 8. Una calve única que se utiliza para localizar


rápidamente registros en la base de datos.

9. Una superclave utilizada por la base de datos


( ) Relación para exigir unicidad.

( ) Clave compuesta 10. Una superclave mínima

3. Diseño conceptual de una base de datos relacional


3.1 Ambiente del software yED Graph Editor

Antes de dar inicio a la presentación es necesario ver el siguiente video para


observar la forma en que trabaja el software.

Desarrollo de un caso utilizando yED y creación de bases de datos. [Septiembre,


2017]. https://www.youtube.com/watch?v=pYUvI78iVYs

Pantallas de software yED Graph Editor

Pantalla de inicio

109
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Elaboración de nuevo documento

Pantalla principal del software

Paleta de opciones

110
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Práctica 4: Realiza las pantallas (diseño) que forman parte de software yED Graph
Editor en tú libreta haciendo la traducción del significado de cada una de las
pantallas.

Práctica 5. Haciendo uso del Software yED Graph Editor realiza los diseños que se
presentan a continuación.

111
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Problema 1.

Problema 2.

112
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Problema 3.

Problema 4.

113
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

114
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Competencia Profesional:
Elabora el diseño lógico de una base de datos con
implementación en sistema gestor de base de datos.

4. Diseño lógico y físico de una base de datos relacional

4.1 Ambiente de Software MySQL y Workbench

PRACTICA 6. Crear una base de datos utilizando MySQL y WorkBench en forma gráfica
CREAR LA CONEXIÓN A LA BASE DE DATOS
Para que puedas crear una base de datos primero creas una conexión al servidor de
MySQL, para esto entras a MySQL Workbench.
Lo que estás haciendo en esta imagen es crear una conexión, con la finalidad de poder
interactuar con el servidor de base de datos (crear bases de datos, vistas, comandos SQL
etc.)
Las partes más importantes son:
El nombre del servidor=127.0.0.1 o que también puede ser localhost.
El puerto=3306
El nombre de usuario=root.
Sigue los pasos descritos en la siguiente imagen para crear una conexión, recuerda poner
la clave para el usuario con el cual te estás conectando.

115
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Una vez creada la conexión te aparecerá en la vista principal de MySQL Workbench.Lo


siguiente que tienes hacer es entrar dando doble click, te va pedir la clave del usuario con
el que creaste la conexión.
A continuación debes crear la base de datos, para esto sigue los pasos de la imagen:

Le das el nombre como quieres que se llame y aplicas los cambios, para el ejemplo le
puse el nombre de ventas.

Finalmente te fijas en la parte inferior izquierda en la sección Schemas, se reflejan los


cambios de la nueva base de datos.

CREAR LAS TABLAS


La tablas se pueden crear desde la consola a través de comandos SQL o utilizando un
modelo.
Para el ejemplo voy a utilizar un modelo, que es básicamente crear un script, pero se lo
hace de forma gráfica.

CREAR EL MODELO
Un modelo es un script en el que podemos crear todo el diseño de las tablas y relaciones
de una base de datos pero de forma gráfica, se los puede importar a nuestra base de
datos y automáticamente se crean todo lo creado en el modelo.
Para crear el modelo debes entrar a MySQL Workbench en la vista principal (parte inferior
izquierda) sigues el paso que se ve en la imagen.

116
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Lo siguiente que vas hacer es crear un diagrama, el cual es una especie de lienzo, sobre
el que puedes crear todas las tablas de tu base de datos
Para crear el diagrama sigues las indicaciones de la imagen.

A continuación te presenta un lienzo donde a través de arrastrar y soltar, puedes crear


tablas, relaciones y los atributos para cada tabla.

Como puedes ver hay varias opciones, pero en la que nos vamos a centrar es en crear
tablas y relaciones entre ellas, opciones que se encuentran dentro de los recuadros
respectivamente.
CREAR LA TABLA
Para esto das un click en el primer recuadro rojo que se ve en la imagen anterior y luego
das otro click dentro del lienzo, en el área de recuadros pequeños y te aparecerá una
tabla por defecto con el nombre table1.

CÓMO AGREGAR CAMPOS A LA TABLA


Para agregar campos debes dar doble click sobre la tabla creada table1.
Seguidamente en la parte inferior te aparece una ventana donde puedes agregar y
modificar los atributos de la tabla.

En el primer campo recuadro rojo es para el nombre de tu tabla.


Para agregar campos debes dar doble click en área de la flecha número 2.

117
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Esto lo debes repetir de acuerdo al número de campos que quieras ingresar.


En esta parte también le das el tipo de dato que quieres que tenga ese campo (Datatype),
así mismo configuras que un campo sea clave primaria (PK), si quieres que el campo no
acepte nulos (NN), si deseas que un campo sea autonumérico (AI).
Recuerda que por ejemplo si deseas que un campo se autonumérico (AI), debes dejar
checado el campo AI.
En la siguiente imagen que se muestra, he creado una tabla cliente con sus respectivos
campos:

Como te puedes dar cuenta en el campo id de la tabla le he puesto que sea clave primaria
(PK), que no contengan valores null (NN) y que sea un campo autoincrementable (AI).
CÓMO CREAR RELACIONES ENTRE TABLAS
Además de crear tablas también podemos crear relaciones entre ellas, por ejemplo una
típica relación maestro detalle que es una relación de uno a muchos y por ejemplo se la
puede implementar en una factura.
Para crear una relación das click en la relación que desees (uno a uno, uno a muchos
etc.) y primero das click en la tabla que quieres que se cree la clave foránea y luego en la
tabla desde donde quieres que se herede la clave primaria.
Por ejemplo en este caso la tabla Detalle tiene la clave foránea de la tabla Factura.
Entonces el proceso de crear la relación es elegir el tipo de relación y luego dar click en la
tabla Detalle y finalmente en la tabla Factura.

118
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

De la misma forma para la relación Cliente–Factura que es de uno a uno, en este caso
quiero que la clave foránea se cree en la tabla Factura.

Algo a tomar en consideración es que cada tabla lleva sus propios atributos, las claves
foráneas se crean al momento de crear la relación.
Finalmente guardas el modelo con el nombre de ventas.

CÓMO CREAR LAS TABLAS EN LA BASE DE DATOS A PARTIR DEL MODELO


Ahora bien, el modelo lo vamos a pasar a la base de datos de manera que se generen las
tablas con sus respectivos campos y las relaciones.
A esto se le conoce como Forward Engineer.
Desde el modelo sigues los pasos, como se muestra en la imagen:

119
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Esta parte hace referencia a la conexión y a sus atributos, por lo general se quedan los
que están por defecto.

Aquí te muestra algunas opciones que también las vamos a dejar por defecto.

120
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Aquí te muestra todos lo que se creará en la base de datos, lo principal que vemos en la
parte superior de la imagen, es que son 3 tablas las que se van a crear.

121
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Ahora vas ejecutar el script interno que se genera detrás del modelo.

122
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Te muestra que todo ha ido perfecto y que se han generado de forma correcta las tablas,
sus relaciones y pues básicamente con esto termina.

Lo que queda es revisar que se crearon las tablas junto con sus relaciones.

123
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Algo que debes tomar en cuenta, en este caso hemos creado a la base de datos primero,
pero esto no es es obligatorio, puedes crear directamente desde el modelo, ya que con el
nombre que le das al modelo con ese nombre se crea la base de datos en el servidor.
A partir de ahí ya puedes interactuar con la base de datos, ya sea creando algún script y
utilizar comandos SQL o desde cualquier aplicación.

PRACTICA 7. CREAR UNA BASE DE DATOS UTILIZANDO MYSQL Y MYSQL


WORKBENCH POR COMANDOS
A continuación se muestran los comandos básicos para la creación de una base de datos:
CREATE DATABASE: crea la base de datos.
SHOW DATABASE: Muestra la base de datos en uso.
USE: Abre o pone en uso la base de datos.
CREATE TABLE: Crea una tabla dentro de la base de datos abierta.
DESCRIBE: Comprueba o visualiza la tabla creada.
INSERT INTO: Inserta registros dentro de la tabla especificada.
SELECT * FROM: Muestra los datos de la tabla especificada.

Elabora una base de datos llamada empleado con 3 tablas usando los comandos básicos,
además agregarles información también por medio de comandos, para ello revisa los
siguientes videos:
https://www.youtube.com/watch?v=zh3C0-fB3B0&index=4&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg
https://www.youtube.com/watch?v=Q6iyHFB_Ins&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg&index=5
https://www.youtube.com/watch?v=uZwOS_GY3BI&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg&index=6

124
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

PRACTICA 8. Elaborar la base de datos colegio


Elaborar la base de datos llamada colegio que muestre el esquema de la siguiente forma:

Par llevar a cabo esta práctica deberán seguir las indicaciones del video que se encuentra
en la siguiente liga:
https://www.youtube.com/watch?v=lUlViBNLfPQ

PRACTICA 9. Elaborar una base de datos de un videoclub


Elaborar la base de datos llamada videoclub que muestre el esquema de la siguiente
forma:

Par llevar a cabo esta práctica deberán seguir las indicaciones del video que se encuentra
en la siguiente liga:
https://www.youtube.com/watch?v=-HNBQ_md_rs

125
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

PRACTICA 10. Elaborar una base de datos de una aerolínea


Elaborar la base de datos llamada aerolínea que muestre el esquema de la siguiente
forma:

Par llevar a cabo esta práctica deberán seguir las indicaciones del video que se encuentra
en la siguiente liga:
https://www.youtube.com/watch?v=v1Nrek1vKKY

126
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

127
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Competencia Profesional:
Elabora el diseño lógico de una base de datos con
implementación en sistema gestor de base de datos.

5. Administra una base de datos

PRACTICA 11. Modificar y eliminar datos de una tabla


Sentencia SQL UPDATE
La sentencia UPDATE se utiliza para actualizar registros ya existentes de una tabla.
Nos permite elegir los campos a actualizar y los datos con que actualizarlos.
Sintaxis SQL UPDATE
La sintaxis básica de la claúsula UPDATE es la siguiente:
UPDATE table_name
SET column_name = value
WHERE condition
Sentencia SQL DELETE
La sentencia DELETE se utiliza para borrar registros de una tabla.
Se especifica de que tabla se quieren borrar los registros y si se necesita, se puede añadir
una cla clausula WHERE para especificar qué registros borrar.
Hay que tener en cuenta que si se omite la claúsula WHERE, se borrarán todos los
registros!
Sintaxis SQL DELETE
DELETE FROM table_name
WHERE some_column=some_value;

Realiza algunas modificaciones y elimina información de la tabla “empresa”, si no la tienes


debes realizar nuevamente la práctica 6 del manual para poder manipular información,
para ello debes revisar los siguientes videos:
https://www.youtube.com/watch?v=Vt-UFLW26Rk&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg&index=7
https://www.youtube.com/watch?v=gQzZusSvZsc&index=9&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg

128
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

PRACTICA 12. Insertar, modificar y eliminar registros de una tabla por medio gráfico
Sentencia SELECT
La sentencia SELECT se utiliza para seleccionar datos de una base de datos.
Se guarda el resultado en una tabla llamada "result-set".
Sintaxis de la Sentencia SELECT 1
SELECT column_name,column_name
FROM table_name;

Sintaxis de la Sentencia SELECT 2


SELECT * FROM table_name;
EL asterisco * significa que queremos todas las columnas de la tabla.
Realiza algunas modificaciones y elimina información de la tabla “empresa”, si no la tienes
debes realizar nuevamente la práctica 6 del manual para poder manipular información,
para ello debes revisar los siguientes videos:
https://www.youtube.com/watch?v=gQzZusSvZsc&index=9&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg
https://www.youtube.com/watch?v=6CaJ-6oZDQw&index=10&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg

Competencia Profesional:
Genera consultas

PRACTICA 13. Consultas con operadores de comparación

Realiza una consulta con la base de datos empresa, si no la tienes debes realizar
nuevamente la práctica 2 del manual, para llevarla a cabo debes revisar el siguiente
video:
https://www.youtube.com/watch?v=70cNZuGjpCI&index=11&list=PL0yfy89pewyM-
O3ExT7RjbCOy7sEEpQbg

129
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

PRACTICA 14
SENTENCIA ALTER TABLE
La sentencia ALTER TABLE se utiliza para añadir, borrar o modificar columnas de una
tabla existente.
SINTAXIS PARA LA SENTENCIA ALTER TABLE
Para borrar una columna de una tabla, hay que utilizar la siguiente sintaxis (algunos
sistemas de bases de datos no permiten borrar una columna):
ALTER TABLE table_name
DROP COLUMN column_name
Para añadir una columna a una tabla, hay que utilizar la siguiente sintaxis;
ALTER TABLE table_name
ADD column_name datatype

Elaborar una base de datos que se llame “ventas” que contenga las siguientes tablas:
CLIENTES PRODUCTOS
Id_cliente Id
Nombre Nombre
Dirección Cantidad
Teléfono

Al finalizar deberán revisar el siguiente video para utilizar las sentencias antes
mencionadas:
https://www.youtube.com/watch?v=ZwXVgD0aAEM

130
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

PRACTICA 15
Elaborar la base de datos “Libreria“ y con ello crearemos el diagrama, tablas, relaciones y
manipularemos los registros, además agregar información a cada una de las tablas, para
realizar algunas consultas sugeridas por el docente.
El diseño de la base de datos deberá quedar de la siguiente forma:

131
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

ANEXO
Instalación de MySQL WorkBench
CÓMO INSTALAR MYSQL Y MYSQL WORKBENCH EN WINDOWS 10
Vas aprender como instalar MySQL Server 5.7 y MySQL Workbench 6.3, dos
herramientas importantes a la hora de trabajar con base de datos en nuestras
aplicaciones, ya sean de escritorio o web.
MYSQL SERVER
Mientras que MySQL es un gestor de base de datos o motor de base de datos muy
conocido y gratuito, mediante el cual podemos crear bases de datos, tablas, vistas
procedimientos almacenados, y todo lo que nos permite crear un gestor de base de datos.

MYSQL WORKBENCH
MySQL Workbench es una excelente herramienta visual que te permite modelar, diseñar y
administrar bases de datos MySQL, utilizar todo tipo de comando sql. Con MySQL
Workbench podrás administrar tu base de datos con un par de clicks.

DESCARGAR MYSQL SERVER 5.7


Primero descarga desde la página oficial Descargar MySQL 5.7 y a continuación sigue los
pasos como se muestra en la siguiente imagen.
Primero eliges la plataforma que es Microsoft Windows y luego la opción de descarga:

Eliges la segunda opción (paso 3), puesto que con esto descargas todo el software,
mientras que en el primer caso para instalar debes estar conectado a Internet.

132
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Finalmente te va mostrar la opción de descargar a través de una cuenta de oracle o a su


vez si no tienes cuenta te va pedir que la crees, pero también te ofrece una última opción
de empezar la descarga sin crear ni utilizar una cuenta oracle, eliges la última opción.

INSTALAR MYSQL SERVER 5.7


Para la instalación debes ejecutar el archivo con nombre mysql-installer-community-
5.7.16.0 qué es el archivo que te descargaste anteriormente y que por lo general lo
encuentras en la carpeta Descargas, a continuación te dejo una serie de imágenes que
necesitas para tener una instalación en la cual puedas hacer prácticas, como por ejemplo,
crear bases de datos, insertar, modificar y eliminar registros.

133
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Debido a que algunos pasos son muy obvios sólo pondré las imágenes en donde haya
algún cambio en la configuración o algo que se deba explicar para el resto sólo deberás
dar Next.

Primero vas elegir la opción Server Only que es sólo instalar el servidor, podrías instalar
todo con la opción Developer Default, pero para tener un poco más claras las cosas,
vamos hacer la instalación por separado, primero el motor de base datos MySQL y luego
el entorno de administración MySQL Workbench.

En esta imagen te muestra algunas configuraciones como por ejemplo el tipo de máquina
en la que se va instalar y el puerto por el que va escuchar (3306) MySQL, está como paso
5, puesto que se ha obviado las pantallas anteriores.

134
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

La siguiente imagen te pide la contraseña para el usuario root que se usará para la
conexión, por cuestiones de aprendizaje y para entornos de desarrollo se suele poner la
palabra root, pero tu puedes usar la que tu quieras, recuerda memorizar esta clave ya que
se utilizará para las conexiones posteriores.

135
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Casi antes de finalizar la instalación debe mostrarte una imagen con todas las
características en verde lo que indica que todo está correcto como se muestra a
continuación, si por el contrario tienes algo en rojo, deberías ver la información que te
muestra, corregir el error y volver a instalar, dejo la imagen como te debería quedar.

136
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

DESCARGAR MYSQL WORKBENCH 6.3

La descarga la debes hacer del siguiente enlace MySQL Workbench 6.3.

137
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Descargas el instalador como se ve en la imagen:

Al igual que la descarga de MySQL lo vas hacer dando en la opción No thanks, just start
my download que está al final.

INSTALAR MYSQL WORKBENCH 6.3


Al igual que la instalación de MySQL, es sumamente sencilla y empieza por la siguiente
imagen, en total son 5 pasos y que los voy ha omitir en vista que no son más que dar
simples Next.

138
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Nota: En algunas instalaciones suele saltar un error ya que la instalación requiere Visual
C++ 2013, te mostrará una imagen como la siguiente:

Para solucionar este error debes descargar e instalar Visual C++ desde el siguiente
enlace Descarga de Visual C++ 2013.
OPCIONES BÁSICAS EN MYSQL WORKBENCH

Una vez que has instalado MySQL Workbench debes abrir la aplicación, lo puedes hacer
desde la lupa de Búsqueda de Windows, a continuación te muestro en bloques lo que
más interesa de esta herramienta:

139
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

BLOQUE 1
Es la barra de herramientas entre lo más básico que puedes hacer desde algunas
opciones es conectarte a una base de datos, crear nuevos scripts, crear nuevos modelos
etc.
BLOQUE 2
Este bloque es una abreviación del principal ya que te permite crear tantas conexiones a
MySQL como quieras, a través de estas conexiones podrás crear una base de datos,
añadir tablas, crear scripts etc.
BLOQUE 3
Lo interesante de este bloque es que te permite crear modelos, es decir es una
herramienta gráfica que te permite crear todas las tablas de tus base de datos con sus
campos y relaciones que luego al exportar te genera todo el código SQL de ese modelo, y
fácilmente podrás ejecutar ese código para crear las tablas en tu base de datos.

CREANDO UNA CONEXIÓN EN MYSQL WORKBENCH


Bien, hasta ahora hemos revisado algunas opciones muy básicas de MySQL Workbench,
ahora vamos hacer una conexión con MySQL.
Como te indica la imagen debes seguir los pasos en secuencia, lo primero que debes
hacer es ir al bloque MySQL Connections y añadir una nueva conexión en el icono (+),
luego dar un nombre a la conexión que es el paso 2.
Hay tres campos que no vas cambiar, el primero es el Hostname, que es el que crea la
instalación por defecto, además el campo Port también se queda como está, el campo
Username, este campo lo puedes cambiar si quisieras conectarte con otro usuario, por
último el campo Default Schema puedes poner a la base de datos que deseas conectarte,
en este caso como es la primera conexión la dejas en blanco.

140
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Debes hacer un test de la conexión para saber si esta todo bien, para esto también te
pedirá la clave para el usuario que este caso es el usuario root.

Finalmente si todo esta bien debe aparecer una imagen como la siguiente, caso contrario
revisa si están llenos correctamente los campos de clave o usuario.

Para finalizar le das click en OK (esta imagen se omite).

PROBANDO LA CONEXIÓN
Ahora es momento de probar la conexión creada para lo cual debes seguir las imágenes
que se muestran a continuación, empieza desde el paso 8 puesto que se omitió el paso 7:

141
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Por motivos de seguridad te pedirá la contraseña nuevamente:

Por último te mostrará la siguiente interfaz:

142
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

Ahora estas conectado a MySQL y para explicar lo más esencial lo he dividido en


bloques:

BLOQUE A
Puedes abrir un script que tengas guardado.
Te permite crear una nueva Base de datos.
Puedes crear una nueva tabla y sus campos.
Creas un procedimiento almacenado, la opción anterior y que no está numerada te
permite crear una vista en la base de datos.
Puedes crear una función.

143
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS

Submódulo 2: Diseña y administra bases de datos simples

BLOQUE B

Puedes ver estado del servidor.


Administras los clientes conectados al servidor de base de datos.
Administras los usuarios y sus privilegios.
Te permite exportar una base de datos.
Te permite importa una base de datos.
Levantas y bajas los servicios de la base de datos
Puedes revisar el archivo log.
Es un panel en el que visualizas en tiempo real el rendimiento y el tiempo que ocupa cada
proceso, por ejemplo el número de conexiones y cuanto ocupa en memoria, algún script
que se está ejecutando y que está consumiendo memoria del servidor.
Te muestra todas las bases de datos que estén creadas en el servidor (Bloque C).
Puedes escribir sentencias SQL para ejecutar en la base de datos (Bloque D).
Las opciones pueden variar de acuerdo con que usuario te conectes y los privilegios del
mismo, recuerda que el usuario root es el usuario con más privilegios (super usuario) y
como te mencioné, solo utilizamos este usuario por motivos de práctica.

En un ambiente de producción por lo general y lo más recomendable por cuestiones de


seguridad es crear usuarios con ciertos privilegios que pueden acceder a ciertas tablas de
la base de datos, con comandos SQL sólo de lectura o sólo con acceso a vistas, bueno en
fin eso es otro tema del que tal vez hablaré en otro tutorial.

144
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Técnico en Programación
MÓDULO I: DESARROLLA SOFTWARE DE
APLICACIÓN CON PROGRAMACIÓN
ESTRUCTURADA

Submódulo 3: Aplica estructuras de datos con un


lenguaje de programación.

1
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

UNIDAD I
Subprogramas

2
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Competencias Profesionales 5.- Reconoce estructuras de datos


6.- Desarrollar una aplicación

1.- Funciones
La utilización de funciones nos permite dividir un programa extenso en pequeños
segmentos que realizan tareas concretas. Probablemente, dentro de un mismo programa
se realicen las mismas tareas varias veces, lo que se facilita mediante la utilización de
funciones. Sin embargo, es probable que ciertas funciones no sean reutilizables, pero al
usarlas se mejora la legibilidad del programa.

La filosofía en la que se base el diseño de C es el empleo de funciones. Por esta razón, un


programa en C contiene al menos una función, la función main. Esta función es particular
dado que la ejecución del programa se inicia con las instrucciones contenidas en su interior.
Una vez iniciada la ejecución del programa, desde la función main se puede llamar a otras
funciones y, posiblemente, desde estas funciones a otras. Otra particularidad de la función
main es que se llama directamente desde el sistema operativo y no desde ninguna otra
función. De esta manera, un programa en C sólo puede contener una función main.

Con el propósito de permitir un manejo eficiente de los datos, las funciones en C no se


pueden anidar. En otras palabras, una función no se puede declarar dentro de otra función,
por lo que todas las funciones son globales o externas, lo que hace que puedan llamarse
desde cualquier parte de un programa.

1.1 Estructura de una función

Se puede acceder (llamar) a una determinada función desde cualquier parte de un


programa. Cuando se llama a una función, se ejecutan las instrucciones que constituyen
dicha función. Una vez que se ejecutan las instrucciones de la función, se devuelve el
control del programa a la siguiente instrucción (si existe) inmediatamente después de la que
provocó la llamada a la función.

Cuando se accede a una función desde un determinado punto del programa, se le puede
pasar información mediante unos identificadores especiales conocidos como argumentos
(también denominados parámetros). Una vez que la función procesa esta información,
devuelve un valor mediante la instrucción return.

La estructura general de una función en C es la siguiente:

tipo_de_retorno nombre_de_la_función (lista_de_parámetros)


{
cuerpo_de_la_función
return expresión
}

3
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Donde:
• tipo_de_retorno: es el tipo del valor devuelto por la función, o, en caso de que la función
no devuelva valor alguno, la palabra reservada void.
• nombre_de_la_función: es el nombre o identificador asignado a la función.
• lista_de_parámetros: es la lista de declaración de los parámetros que son pasados a la
función. Éstos se separan por comas. Debemos tener en cuenta que pueden existir
funciones que no utilicen parámetros.
• cuerpo_de_la_función: está compuesto por un conjunto de sentencias que llevan a cabo
la tarea específica para la cual ha sido creada la función.
• return expresión: mediante la palabra reservada return, se devuelve el valor de la función,
en este caso representado por expresión.

Vamos a suponer que queremos crear un programa para calcular el precio de un producto
basándose en el precio base del mismo y el impuesto aplicable. A continuación,
mostramos
el código fuente de dicho programa:

#include <stdio.h>
float precio(float base, float impuesto); /* declaración */
main()
{
float importe = 2.5;
float tasa = 0.07;
printf("El precio a pagar es: %.2f\n", precio(importe, tasa));
return 0;
}

float precio(float base, float impuesto) /* definición */


{
float calculo;
calculo = base + (base * impuesto);
return calculo;
}

El ejemplo anterior se compone de dos funciones, la función requerida main y la función


creada por el usuario precio, que calcula el precio de un producto tomando como
parámetros su precio base y el impuesto aplicable. La función precio calcula el precio de un
producto sumándole el impuesto correspondiente al precio base y devuelve el valor
calculado mediante la sentencia return.

Por otra parte, en la función main declaramos dos variables de tipo float que contienen el
precio base del producto y el impuesto aplicable. La siguiente sentencia dentro de la función
main es la llamada a la función de biblioteca printf, que recibe como parámetro una llamada
a la función precio, que devuelve un valor de tipo float. De esta manera, la función printf
imprime por la salida estándar el valor devuelto por la función precio. Es importante tener
en cuenta que las variables importe y tasa (argumentos) dentro de la función main tienen
una correspondencia con las variables base e impuesto (parámetros) dentro de la función
precio respectivamente.

En el ejemplo anterior, justo antes de la función main, hemos declarado la función precio.

4
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

La intención es que la función main sea capaz de reconocerla. Sin embargo, la definición
de dicha función aparece después de la función main. Las definiciones de función pueden
aparecer en cualquier orden dentro de uno o más ficheros fuentes. Más adelante, en esta
unidad, veremos en detalle la declaración y definición de funciones. Por otra parte, hemos
añadido la sentencia return 0 al final de la función main, puesto que se trata de una función
como otra cualquiera y puede devolver un valor a quien le ha llamado, en este caso el
entorno en el que se ejecuta el programa. Generalmente, el valor 0 implica un fin de
ejecución normal, mientras que otro valor diferente implica un final de ejecución inusual o
erróneo.

Considere un programa que utiliza una función cuadrado para calcular los cuadrados de
los enteros del 1 al 10.

/* Funcion que calcula cuadrado de un número. */


int cuadrado(int);
main ()
{
int x;
for (x=1; x <= 10; x++)
printf("%d ", cuadrado(x));
printf ("nn");
system("PAUSE");
}

/* Definición de función */

int cuadrado(int y)
{
return y*y;
}

Se imprime:
1 4 9 16 25 36 49 64 81 100

1.2 Declaración de funciones

Antes de empezar a utilizar una función debemos declararla. La declaración de una función
e conoce también como prototipo de la función. En el prototipo de una función se tienen
que especificar los parámetros de la función, así como el tipo de dato que devuelve.

Los prototipos de las funciones que se utilizan en un programa se incluyen generalmente


en la cabecera del programa y presentan la siguiente sintaxis:

tipo_de_retorno nombre_de_la_función(lista_de_parámetros);

En el prototipo de una función no se especifican las sentencias que forman parte de la


misma, sino sus características. Por ejemplo:

int cubo(int numero);

5
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

En este caso se declara la función cubo que recibe como parámetro una variable de tipo
entero (numero) y devuelve un valor del mismo tipo. En ningún momento estamos
especificando qué se va a hacer con la variable numero, sólo declaramos las características
de la función cubo.

Cabe señalar que el nombre de los parámetros es opcional y se utiliza para mejorar la
comprensión del código fuente. De esta manera, el prototipo de la función cubo podría
expresarse de la siguiente manera:

int cubo(int);

Los prototipos de las funciones son utilizados por el compilador para verificar que se accede
a la función de la manera adecuada con respecto al número y tipo de parámetros, y al tipo
de valor de retorno de la misma. Veamos algunos ejemplos de prototipos de funciones:

int potencia(int base, int exponente);


double area_rectangulo (float base, float altura);
int mayor(int, int);
struct direccion entrada(void);

Las funciones de biblioteca se declaran en lo que se conocen como ficheros de cabecera


o ficheros .h (del inglés headers, cabeceras). Cuando deseamos utilizar alguna de las
funciones de biblioteca, debemos especificar el fichero .h en que se encuentra declarada la
función, al inicio de nuestro programa. Por ejemplo, si deseamos utilizar la función printf en
nuestro programa, debemos incluir el fichero stdio.h que contiene el prototipo de esta
función.

1.3 Definición de funciones


Tras declarar una función, el siguiente paso es implementarla. Generalmente, este paso se
conoce como definición. Es precisamente en la definición de una función donde se
especifican las instrucciones que forman parte de la misma y que se utilizan para llevar a
cabo la tarea específica de la función. La definición de una función consta de dos partes, el
encabezado y el cuerpo de la función. En el encabezado de la función, al igual que en el
prototipo de la misma, se tienen que especificar los parámetros de la función, si los utiliza
y el tipo de datos que devuelve, mientras que el cuerpo se compone de las instrucciones
necesarias para realizar la tarea para la cual se crea la función. La sintaxis de la definición
de una función es la siguiente:

tipo_de_retorno nombre_de_la_función(lista_de_parámetros)
{
sentencias;
}

El tipo_de_retorno representa el tipo de dato del valor que devuelve la función. Este tipo
debe ser uno de los tipos simples de C, un puntero a un tipo de C o bien un tipo struct. De
forma predeterminada, se considera que toda función devuelve un tipo entero (int). En otras
palabras, si en la declaración o en la definición de una función no se especifica el
tipo_de_retorno, el compilador asume que devuelve un valor de tipo int. El
nombre_de_la_función representa el nombre que se le asigna a la función.

6
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Se recomienda que el nombre de la función esté relacionado con la tarea que lleva a cabo.
En caso de que la función utilice parámetros, éstos deben estar listados entre paréntesis a
continuación del nombre de la función, especificando el tipo de dato y el nombre de cada
parámetro. En caso de que una función no utilice parámetros, se pueden dejar los
paréntesis vacíos o incluir la palabra void, que indica que la función no utiliza parámetros.
Después del encabezado de la función, debe aparecer, delimitado por llaves ({ y }), el
cuerpo de la función compuesto por las sentencias que llevan a cabo la tarea específica de
la función. Veamos la definición de la función cubo declarada en el apartado anterior:

int cubo(int base)


{
int potencia;
potencia = base * base * base;
return potencia;
}

Como ya hemos visto, a los argumentos que recibe la función también se les suele llamar
parámetros. Sin embargo, algunos autores consideran como parámetros a la lista de
variables entre paréntesis utilizada en la declaración o en la definición de la función, y como
argumentos los valores utilizados cuando se llama a la función. También se utilizan los
términos argumentos formales y argumentos reales, respectivamente, para hacer esta
distinción.

Cuando un programa utiliza un número elevado de funciones, se suelen separar las


declaraciones de función de las definiciones de las mismas. Al igual que con las funciones
de biblioteca, las declaraciones pasan a formar parte de un fichero cabecera (extensión .h),
mientras que las definiciones se almacenan en un fichero con el mismo nombre que el
fichero .h, pero con la extensión .c. En algunas ocasiones, un programador no desea
divulgar el código fuente de sus funciones. En estos casos, se suele proporcionar al usuario
el fichero de cabecera, el fichero compilado de las definiciones (con extensión .o, de objeto)
y una documentación de las mismas. De esta manera, cuando el usuario desea hacer uso
de cualquiera de las funciones, sabe qué argumentos pasarle y qué tipo de datos devuelve,
pero no tiene acceso a la definición de las funciones.

Ejemplo práctico:

El siguiente programa calcula el cubo de los números del 1 al 5 utilizando una función
definida por el usuario.

#include <stdio.h>
int cubo(int base);
main()
{
int numero;
for(numero=1; numero<=5; numero++) {
printf("El cubo del número %d es %d\n", numero, cubo(numero));
}
return 0;
}

7
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

int cubo(int base)


{
int potencia;
potencia = base * base * base;
return potencia;
}

La salida es:
El cubo del número 1 es 1
El cubo del número 2 es 8
El cubo del número 3 es 27
El cubo del número 4 es 64
El cubo del número 5 es 125

1.4 Devolución de valores


Una función en C sólo puede devolver un valor. Para devolver dicho valor, se utiliza la
palabra reservada return cuya sintaxis es la siguiente:

return <expresión>;

Donde <expresión> puede ser cualquier tipo de dato salvo un array o una función. Además,
el valor de la expresión debe coincidir con el tipo de dato declarado en el prototipo de la
función. Por otro lado, existe la posibilidad de devolver múltiples valores mediante la
utilización de punteros o estructuras. Dentro de una función pueden existir varios return
dado que el programa devolverá el control a la sentencia que ha llamado a la función en
cuanto encuentre la primera sentencia return. Si no existen return, la ejecución de la función
continúa hasta la llave del final del cuerpo de la función (}). Hay que tener en cuenta que
existen funciones que no devuelven ningún valor. El tipo de dato devuelto por estas
funciones puede ser void, considerado como un tipo especial de dato. En estos casos, la
sentencia return se puede escribir como return o se puede omitir directamente. Por ejemplo:

void imprime_cabecera();
{
printf("esta función sólo imprime esta línea");
return;
}

equivale a:

void imprime_cabecera();
{
printf("esta función sólo imprime esta línea");
}

8
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

1.5 Acceso a una función


Para que una función realice la tarea para la cual fue creada, debemos acceder o llamar a
la misma. Cuando se llama a una función dentro de una expresión, el control del programa
se pasa a ésta y sólo regresa a la siguiente expresión de la que ha realizado la llamada
cuando encuentra una instrucción return o, en su defecto, la llave de cierre al final de la
función.

Generalmente, se suele llamar a las funciones desde la función main, lo que no implica
que dentro de una función se pueda acceder a otra función.

Cuando queremos acceder a una función, debemos hacerlo mediante su nombre seguido
de la lista de argumentos que utiliza dicha función encerrados entre paréntesis. En caso de
que la función a la que se quiere acceder no utilice argumentos, se deben colocar los
paréntesis vacíos.

Cualquier expresión puede contener una llamada a una función. Esta llamada puede ser
parte de una expresión simple, como una asignación, o puede ser uno de los operandos de
una expresión más compleja. Por ejemplo:

a = cubo(2);
calculo = b + c / cubo(3);

Debemos recordar que los argumentos que utilizamos en la llamada a una función se
denominan argumentos reales. Estos argumentos deben coincidir en el número y tipo con
los argumentos formales o parámetros de la función. No olvidemos que los argumentos
formales son los que se utilizan en la definición y/o declaración de una función. Los
argumentos reales pueden ser variables, constantes o incluso expresiones más complejas.
El valor de cada argumento real en la llamada a una función se transfiere a dicha función y
se le asigna al argumento formal correspondiente.

Generalmente, cuando una función devuelve un valor, la llamada a la función suele estar
dentro de una expresión de asignación, como operando de una expresión compleja o como
argumento real de otra función. Sin embargo, cuando la función no devuelve ningún valor,
la llamada a la función suele aparecer sola. Veamos un ejemplo:

z = potencia( a, b);
imprime_valores (x, y, z);

Ejemplo práctico:

Vamos a acceder a las funciones primera y segunda desde la función main.

#include <stdio.h>
void primera(void);
void segunda(void);
main()
{
printf("La primera función llamada, main\n");
primera();
segunda();

9
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

printf("Final de la función main\n");


return 0;
}

void primera(void)
{
printf("Llamada a la función primera\n");
return;
}

void segunda(void)
{
printf("Llamada a la función segunda\n");
return;
}

La salida es:
La primera función llamada, main
Llamada a la función primera
Llamada a la función segunda
Final de la función main

1.6 Variables locales


Cuando declaramos variables dentro de la función principal del programa, es decir, dentro
de la función main, están únicamente asociadas a esta función, en otras palabras, son
variables locales de la función main y no se puede acceder a ellas a través de ninguna otra
función.

Al igual que sucede con las variables declaradas dentro de la función main, cualquier
variable que declaremos dentro de una función, es local a esa función, es decir, su ámbito
esta confinado a dicha función. Esta situación permite que existan variables con el mismo
nombre en diferentes funciones y que no mantengan ninguna relación entre sí.

Debemos tener en cuenta que cualquier variable declarada dentro de una función se
considera como una variable automática (auto) a menos que utilicemos algún modificador
de tipo. Una variable se considera automática porque cuando se accede a la función se le
asigna espacio en la memoria automáticamente y se libera dicho espacio tan pronto se sale
de la función. En otras palabras, una variable automática no conserva un valor entre dos
llamadas sucesivas a la misma función. Con el propósito de garantizar el contenido de las
variables automáticas, éstas deben inicializarse al entrar a la función para evitar que su
valor sea indeterminado.

Todas las variables que hemos utilizado en los ejemplos vistos hasta ahora son variables
automáticas. La utilización de la palabra reservada auto es opcional, aunque normalmente
no se utiliza, por ejemplo:

auto int contador;

equivale a

10
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

int contador;

Ejemplo práctico

Utilización del mismo identificador de variable en diferentes funciones mostrando su


localidad

#include <stdio.h>
void imprimeValor();
main()
{
int contador = 0;
contador++;
printf("El valor de contador es: %d\n", contador);
imprimeValor();
printf("Ahora el valor de contador es: %d\n", contador);
return 0;
}

void imprimeValor()
{
int contador = 5;
printf("El valor de contador es: %d\n", contador);
}

1.7 Variables globales


A diferencia de las variables locales cuyo ámbito estaba confinado a la función donde
estaban declaradas, el ámbito de las variables globales se extiende desde el punto en el
que se definen hasta el final del programa. En otras palabras, si definimos una variable al
principio del programa, cualquier función que forme parte de éste podrá utilizarla
simplemente haciendo uso de su nombre.

La utilización de variables globales proporciona un mecanismo de intercambio de


información entre funciones sin necesidad de utilizar argumentos. Por otra parte, las
variables globales mantienen el valor que se les ha asignado dentro de su ámbito, incluso
después de finalizar las funciones que modifican dicho valor. Debemos tener en cuenta que
el uso de variables globales para el intercambio de informaciones entre funciones puede
resultar útil en algunas situaciones (como cuando se desea transferir más de un valor desde
una función), pero su utilización podría llevarnos a programas de difícil interpretación y
complejos de depurar.

Ejemplo práctico

Utilización de variables globales como mecanismo de intercambio de información entre


función

11
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

#include <stdio.h>
void unaFuncion();
void otraFuncion();
int variable;
main()
{
variable = 9;
printf("El valor de variable es: %d\n", variable);
unaFuncion();
otraFuncion();
printf("Ahora el valor de variable es: %d\n", variable);
return 0;
}

void unaFuncion()
{
printf("En la función unaFuncion, variable es: %d\n", variable);
}
void otraFuncion()
{
variable++;
printf("En la función otraFuncion, variable es: %d\n",variable);
}

La salida es:
El valor de variable es: 9
En la función unaFuncion, variable es: 9
En la función otraFuncion, variable es: 10
Ahora el valor de variable es: 10

Cuando trabajamos con variables globales debemos distinguir entre la definición de una
variable global y su declaración. Cuando definimos una variable global, lo hacemos de la
misma forma en que se declara una variable ordinaria. La definición de una variable global
se realiza fuera de cualquier función. Además, las definiciones de variables globales suelen
aparecer antes de cualquier función que desee utilizar dicha variable. La razón es que una
variable global se identifica por la localización de su definición dentro del programa. Cuando
se define una variable global automáticamente, se reserva memoria para el
almacenamiento de ésta. Además, podemos asignarle un valor inicial a la misma.

Si una función desea utilizar una variable global previamente definida, basta con utilizar su
nombre sin realizar ningún tipo de declaración especial dentro de la función. Sin embargo,
si la definición de la función aparece antes de la definición de la variable global, se requiere
incluir una declaración de la variable global dentro de la función.

Para declarar una variable global se utiliza la palabra reservada extern. Al utilizar extern, le
estamos diciendo al compilador que el espacio de memoria de esa variable está definido
en otro lugar. Es más, en la declaración de una variable externa (extern) no se puede incluir
la asignación de un valor a dicha variable. Por otro lado, el nombre y el tipo de dato utilizados
en la declaración de una variable global debe coincidir con el nombre y el tipo de dato de la
variable global definida fuera de la función.

12
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Debemos recordar que sólo se puede inicializar una variable global en su definición. El valor
inicial que se le asigne a la variable global debe expresarse como una constante y no como
una expresión. Es importante señalar que si no se asigna un valor inicial a la variable global,
automáticamente se le asigna el valor cero (0). De esta manera, las variables globales
siempre cuentan con un valor inicial.

Cabe señalar que la declaración de una variable global puede hacer referencia a una
variable que se encuentra definida en otro fichero. Por esta razón, podemos decir que el
especificador de tipo extern hace referencia a una variable que ha sido definida en un lugar
distinto al punto en el que se está declarando y donde se va a utilizar.

En aplicaciones grandes compuestas de varios ficheros, es común que las definiciones de


variables globales estén agrupadas y separadas del resto de ficheros fuente. Cuando se
desea utilizar cualquiera de las variables globales en un fichero fuente, se debe incluir el
fichero en el que están definidas las variables mediante la directiva de precompilación
#include.

Ejemplo practico

Utilización del modificador de tipo extern.

#include <stdio.h>
void unaFuncion();
void otraFuncion();
main()
{
extern variable;
variable = 9;
printf("El valor de variable es: %d\n", variable);
unaFuncion();
printf("Ahora el valor de variable es: %d\n", variable);
return 0;
}

void unaFuncion()
{
extern variable;
printf("En la función unaFunción, variable es: %d\n", variable);
}
int variable;

Su salida es:
El valor de variable es: 9
En la función unaFuncion, variable es: 9
Ahora el valor de variable es: 9

13
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

1.8 Ejercicios

1. Diseñe un Programa en C, que Dado un número entero y mayor que cero,


Determine si es o no un número Primo. Ojo, los números primos sólo son divisibles
por el mismo y por la unidad (1).

#include <stdio.h>
#include <conio.h>
void primo (int numero);
main()
{
int numero, ban=1;
clrscr();
while(ban==1)
{
printf("Introduzca el n£mero por favor:\n");
scanf("%d", &numero);
while(numero<0)
{
printf("ERROR, el valor del n£mero debe ser mayor que cero\n");
scanf("%d", &numero);

primo(numero);

printf("¨Otro n£mero (si=1 y No=0)?\n");


scanf("%d", &ban);
}
getch();
return 0;
}
void primo (int numero)
{
int div, primo=1;
for(div=2; div<numero; div++)
{
if(numero%div==0)
{
primo=0;
printf("%d NO es primo\n\n\n", numero);
return 0;
}
else

14
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

primo=1;
}
if(primo!=0)
printf("%d es primo\n\n\n", numero);
}

2. Diseñe un programa, que dado un número entero y mayor que cero, muestre su
factorial. (El factorial de 5 es 120; 5x4x3x2x1=120)

#include <stdio.h>
#include <conio.h>
int factorial (int num);
main()
{
int num, ban=1;
clrscr();
while(ban==1)
{
printf("Ingrese el valor del n£mero por favor:\n");
scanf("%d", &num);
while(num<0)
{
printf("ERROR, el valor del n£mero debe ser mayor que cero:\n");
scanf("%d", &num);
}
printf("El valor del factorial es %d\n\n", factorial (num));
printf("¨Desea Realizar otro calculo?Si=1 y No=0\n");
scanf("%d", &ban);
}
getch();
return 0;
}
int factorial (int num)
{
int sum=1, i;
for(i=2; i<=num; i++)
{
sum=sum*i;
}
return (sum);
}

15
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

3. Diseñe un programa, que dada una cifra entera y mayor que cero, sea elevada a
una potencia introducida por el usuario, la cual. (Ejemplo: 5^2=25).

#include <stdio.h>
#include <conio.h>
long int potencia (int base, int exponente);
main()
{
int base, exponente;
clrscr();
printf("La Base es:\n");
scanf("%d", &base);
while (base<0)
{
printf("ERROR, el dato debe ser mayor que cero:\n");
scanf("%d", &base);
}
printf("El Exponente es:\n");
scanf("%d", &exponente);
printf("%d ^ %d es %ld\n\n", base, exponente, potencia(base,exponente));
getch();
return 0;
}
long int potencia (int base, int exponente)
{
long int sum=0, i,x;
for(i=1; i<exponente; i++)
{
x=base*base;
sum=sum+x;
}
return (sum);
}

16
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

2.- Procedimientos
Un procedimiento es un fragmento de código cuya función es la de realizar una tarea
específica independientemente del programa en el que se encuentre. Con los
procedimientos se pueden crear algoritmos de ordenación de arrays, de modificación de
datos, cálculos paralelos a la aplicación, activación de servicios, etc. Prácticamente
cualquier cosa puede realizarse desde procedimientos independientes.

En cambio una función es exactamente lo mismo que un procedimiento salvo por un detalle,
una función puede devolver un valor al programa principal y un procedimiento no.
Con las funciones podemos realizar todas las tareas que se hacen con los procedimientos
pero además pudiendo devolver valores (como por ejemplo el área de un triángulo).

2.1 Estructura y uso


Como se puede ver los conceptos de procedimiento y función son bastante similares,
incluso podríamos definir un procedimiento como una función que no retorna ningún valor.
Ambos poseen la misma estructura:

Tipo_Dato_Retorno Nombre (Parámetros){


sentencias;
retorno; (sólo en el caso de las funciones)
}

Para un procedimiento el Tipo_Dato_Retorno es siempre void, o lo que es lo mismo, nada.


En el caso de las funciones se puede poner cualquier tipo de dato, int, float, char, etc.

Ahora vamos a plantear un algoritmo que calcule el área de un triángulo, veamos como se
podría hacer mediante un procedimiento y una función:

Procedimiento:

#include <stdio.h>
#include <stdlib.h>

void areatriangulo (void) {


float base, altura;
printf("Introduce base: ");
scanf("%f",&base);
printf("Introduce altura: ");
scanf("%f",&altura);

printf("El área es: %2.2f \n",(base*altura)/2);


}

int main(int argc, char *argv[])


{

17
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

areatriangulo();

system("PAUSE");
return 0;
}

Función:

#include <stdio.h>
#include <stdlib.h>

float areatriangulo (void) {


float base, altura;
printf("Introduce base: ");
scanf("%f",&base);
printf("Introduce altura: ");
scanf("%f",&altura);

return (base*altura)/2;
}

int main(int argc, char *argv[])


{

float area;

area=areatriangulo();
printf("El área es: %2.2f \n",area);

system("PAUSE");
return 0;
}

Recordemos, un procedimiento siempre se declarará con valor de retorno void y una


función se declarará con cualquier tipo de dato como valor de retorno y en su código se
añadirá la sentencia return y el valor que se desea devolver al programa que lo llama.

Es muy recomendable definir todos los procedimientos y funciones antes de la función


principal main, el motivo de esto es que en C todas las funciones y procedimientos deben
definirse antes de la primera línea de código en que se usa. En caso de que incumplamos
ésta norma a la hora de compilar tendremos errores.

2.2 Llamado de un procedimiento


Para llamar a un procedimiento o función debemos hacerlo de la siguiente forma:

En un procedimiento escribimos su nombre seguido de los parámetros entre paréntesis:

areatriangulo();

18
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

En una función debemos declarar antes una variable que almacene el dato que la función
va a devolver, la variable debe ser del mismo tipo que el que retorna la función.
Seguidamente llamamos a la función escribiendo la variable seguido del operador de
asignación, el nombre de la función y los parámetros entre paréntesis:

float area;
area=areatriangulo();

Implementar funciones y procedimientos en nuestros programas es una muy buena práctica


que se debe hacer siempre que se pueda, ayuda a mantener organizado el código y nos
permite reutilizar funcionalidades en otras secciones del programa.

2.3 Comunicación con subprogramas: paso de parámetros

2.3.1 Paso de parámetros


A la hora de crear funciones y procedimientos puede que sea necesario que trabajemos
con datos que se encuentran alojados en el programa que los llama, para eso existen los
parámetros. Los parámetros son valores que se mandan a un procedimiento o función
para que éstos puedan trabajar con ellos.

Para utilizar los parámetros en un procedimiento o función debemos declarar el tipo de


dato y su identificador, exactamente igual que si declaramos una variable.

Veamos el programa del área del triángulo pasando por parámetros los datos de base y
altura:

#include <stdio.h>
#include <stdlib.h>

void areatriangulo (float base, float altura) {

printf("El área es: %2.2f \n",(base*altura)/2);


}

int main(int argc, char *argv[])


{

float base, altura;

printf("Introduce base: ");


scanf("%f",&base);
printf("Introduce altura: ");
scanf("%f",&altura);

areatriangulo(base,altura);

system("PAUSE");

19
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

return 0;
}

Es muy importante que las variables se pasen en el mismo orden que como se han
definido en los parámetros. En caso de que no sea así podemos tener resultados
inesperados en la ejecución del programa. Recuerda que los identificadores son palabras
en lenguaje humano legible mediante el cual manejamos celdas de memoria, da igual como
se llamen en el programa, en las funciones y en los procedimientos.

2.3.2 Paso de valor y por referencia


El paso de parámetros a procedimientos y funciones es un recurso bastante potente de
cara a trabajar con datos, además tenemos la posibilidad de pasar estos parámetros de
varias formas, por valor o por referencia, esto lo especificamos cuando definimos el
procedimiento o función.

El paso por valor es el que acabamos de ver, mediante el paso por valor el procedimiento
o función reciben los valores indicados para poder trabajar con ellos, su declaración es la
siguiente:

Procedimiento - void areatriangulo (float base, float altura)


Función - float areatriangulo (float base, float altura)

A veces necesitaremos modificar varios de estos datos que hemos pasado en los
parámetros, para ello es posible declarar los parámetros de tal forma que se puedan
modificar, a esto se le llama paso por referencia.

Gracias al paso por referencia un procedimiento o función no sólo realiza unas operaciones
y devuelve (en el caso de las funciones) un valor, sino que también puede modificar los
valores que se pasan como parámetros.

Para poder realizar el paso de parámetros por referencia es necesario que en la


declaración del procedimiento o función se especifique el espacio de memoria donde se
encuentra alojado el dato, esto se realiza así:

Procedimiento - void areatriangulo (float *base, float *altura)


Función - float areatriangulo (float *base, float *altura)

Lo que acabamos de definir como parámetros no son las variables en sí, sino un puntero
que apunta a la dirección de memoria donde se encuentra alojado el valor, así podremos
modificarlo.

Para llamar a un procedimiento o función pasando los parámetros por valor se hace de la
forma que hemos visto:

Procedimiento - areatriangulo(base, altura);


Función - area=areatriangulo(base, altura);

20
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Para llamar a un procedimiento o función pasando los parámetros por referencia se hace
de la siguiente forma:

Procedimiento - areatriangulo(&base, &altura);


Función - area=areatriangulo(&base, &altura);

Así lo que pasamos como parámetros no es el valor de la variable, sino la dirección de


memoria donde se encuentra el dato, de ésta forma el procedimiento o función podrá
modificar su valor directamente.

Veamos el caso de un programa que intercambia los valores de dos variables, en uno
utilizaremos parámetros por valor y en el otro por referencia:

Por valor:

#include <stdio.h>
#include <stdlib.h>

void intercambio(int num1, int num2){


int aux;
aux=num1;
num1=num2;
num2=aux;

printf("El intercambio es: num1=%d num2=%d\n",num1,num2);

int main(int argc, char *argv[])


{

int num1=3, num2=5;

printf("Vamos a intercambiar: num1=%d num2=%d\n",num1,num2);

intercambio(num1,num2);

printf("El resultado tras el intercambio es: num1=%d num2=%d\n",num1,num2);

system("PAUSE");
return 0;
}

Por referencia:

#include <stdio.h>
#include <stdlib.h>

void intercambio(int *num1, int *num2){


int aux;

21
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

aux=*num1;
*num1=*num2;
*num2=aux;

printf("El intercambio es: num1=%d num2=%d\n",*num1,*num2);

int main(int argc, char *argv[])


{

int num1=3, num2=5;

printf("Vamos a intercambiar: num1=%d num2=%d\n",num1,num2);

intercambio(&num1,&num2);

printf("El resultado tras el intercambio es: num1=%d num2=%d\n",num1,num2);

system("PAUSE");
return 0;
}

Compila ambos código y observa la diferencia, es en ésta característica donde radica el


potencial del paso por valor y por referencia.

2.4 Variables locales y globales


Gracias al concepto de procedimiento y función podemos tener dentro de un mismo
programa varios subprogramas, los cuales se irán llamando entre ellos para poder realizar
las tareas pertinentes, esto está muy bien pero es posible que necesitemos realizar tareas
con variables alojadas en otros sitios, o necesitemos declarar nuevas, o simplemente no
deseemos usar parámetros.

Para solucionar esto existe el concepto de variables locales y variables globales.

Las variables locales son aquellas que declaramos al principio del cuerpo de un
procedimiento o función, esto incluye a las declaradas en la función principal main.

Las variables globales son aquellas que las podemos definir en la zona de importación de
librerías #include y la definición de constantes con #define. Su utilidad radica en poder
operar con su valor en cualquier procedimiento o función sin necesidad de pasarla como
parámetro.

Veamos el ejemplo del triángulo usando variables globales:

#include <stdio.h>
#include <stdlib.h>

float base, altura;

22
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

void areatriangulo (void) {

printf("El área es: %2.2f \n",(base*altura)/2);


}

int main(int argc, char *argv[])


{

printf("Introduce base: ");


scanf("%f",&base);
printf("Introduce altura: ");
scanf("%f",&altura);

areatriangulo();

system("PAUSE");
return 0;
}

Como se puede comprobar, el programa funciona exactamente igual que en su versión


con parámetros, no obstante muchos desarrolladores no recomiendan hacer uso de
ésta técnica debido a que en proyectos medios o grandes puede resultar confuso manejar
variables globales sin un determinado estándar que regule su uso.

El modo más común de operar es mediante el uso de parámetros así que durante el
curso y posteriormente seguiremos con esa técnica, no obstante, si puede interesarte
practicar los ejercicios que hemos visto hasta ahora usando variables globales.

2.5 Recursividad
El último punto de éste capítulo se lo voy a dedicar a la recursividad, una técnica bastante
común e importante para desarrollar determinados algoritmos.

La recursividad no es más que la técnica de desarrollar una función que se llama a sí


misma.

La recursividad normalmente la veremos en funciones que realicen cálculos


matemáticos, donde para realizar un cálculo repetitivo la función tendrá que llamarse a sí
misma y así ir desarrollando el cálculo.

Una cosa importante que hay que tener en cuenta es que para realizar funciones recursivas
debemos tener muy claro que queremos hacer, planificarlo bien y no complicarnos si no
es necesario, para ello podemos hacer uso de todos los elementos que conocemos,
parámetros por referencia, funciones, bucles, variables que indiquen el fin del ciclo, etc.

El ejemplo más típico que se suele utilizar para explicar la recursividad es el de un


programa que calcula el factorial de un número, el factorial de un número responde a la
siguiente fórmula matemática:

23
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

n! = n * (n-1)!

Es decir, que el factorial de un número es la multiplicación de ese número por el


factorial del número inmediatamente anterior. Así si queremos saber el factorial de 5
sería:

5! = 5 * 4!

O lo que es lo mismo:

5! = 5 * 4 * 3 * 2 * 1

Veamos esto primero mediante un programa normal usando un bucle while:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int num, num2;

printf("Introduce número: ");


scanf("%d",&num);
num2=num;

while (num2!=1){
num2=num2-1;
num=num*num2;
}

printf("El factorial es: %d \n", num);

system("PAUSE");
return 0;
}

Ahora veámoslo mediante el uso de una función recursiva:

#include <stdio.h>
#include <stdlib.h>

int factorial(int num){


if (num==0)
{
return 1;
}
else
{
return num * factorial(num-1);
}

24
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

int main(void)
{

int num;

printf("Introduce número: ");


scanf("%d",&num);
printf("El factorial es: %d \n", factorial(num));

system("PAUSE");
return 0;
}

25
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

UNIDAD II
Estructura de
datos
unidimensionales

26
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

2.- Arreglos unidimensionales

Los arreglos son estructuras de datos consistentes en un conjunto de datos del mismo tipo.
Los arreglos tienen un tamaño que es la cantidad de objetos del mismo tipo que pueden
almacenar. Los arreglos son entidades estáticas debido a que se declaran de un cierto
tamaño y conservan ´este todo a lo largo de la ejecución del programa en el cual fue
declarado.

Decimos arreglo o array indistintamente.

2.1 Introducción a la estructura de datos


Un arreglo unidimensional de n elementos en la memoria se almacena de la siguiente
manera:

La primera localidad del arreglo corresponde al índice 0 y la última corresponde al índice n-


1, donde n es el tamaño del arreglo.
La sintaxis para definir un arreglo en leguaje C es la siguiente:
TipoDeDato nombre[tamaño]
Donde nombre se refiere al identificador del arreglo, tamaño es un número entero y define
el número máximo de elementos que puede contener el arreglo. Un arreglo puede ser de
los tipos de dato entero, real, carácter o estructura.
El siguiente ejemplo muestra la definición de tres arreglos, uno de 80 elementos doble
precisión, otro de 30 elementos enteros y uno de 20 elementos tipo carácter.
double x[80];
int factores[30];
char codSexo[20];
Los nombres deben cumplir con las normas para los identificadores. La primera línea indica
que se han reservado 80 posiciones para números doble precisión. Estas posiciones son
contiguas. Es importante recalcar que en C, a diferencia de otros lenguajes, el primer

27
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

elemento es x[0], el segundo es x[1], el tercero es x[2], y así sucesivamente; el último


elemento es x[79].
En x hay espacio reservado para 80 elementos, pero esto no obliga a trabajar con los 80;
el programa puede utilizar menos de 80 elementos.

2.2 Operaciones con vectores


Un vector, como ya se ha mencionado, es una secuencia ordenada de elementos como
X[1], X[2], ..., X[n]
El límite inferior no tiene por qué empezar en uno. El vector L
L[0], L[1], L[2], L[3], L[4], L[5]
contiene seis elementos, en el que el primer elemento comienza en cero. El vector P, cuyo
rango es 7 y sus límites
inferior y superior son –3 y 3, es
P[-3], P[-2], P[-1], P[0], P[1], P[2], P[3]
Las operaciones que se pueden realizar con vectores durante el proceso de resolución de
un problema son:
• asignación,
• lectura/escritura,
• recorrido (acceso secuencial),
• actualizar (añadir, borrar, insertar),
• ordenación,
• búsqueda.
En general, las operaciones con vectores implican el procesamiento o tratamiento de los
elementos individuales
del vector.
Las notaciones algorítmicas que utilizaremos:
TipoDeDato nombre[tamaño]

Ejemplos de declaraciones:
int notas[8] /* almacena ocho notas */
char nombre[21] /* almacena nombres de largo menor o igual a 20 */
int multiplos[n] /* donde n tiene un valor, declara un arreglo de tamaño n*/

28
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

2.2.1 Asignación
Los elementos de un arreglo pueden ser inicializados en la declaración del arreglo haciendo
seguir a la declaración un signo de igual y una lista entre llaves de valores separados por
comas.
Por ejemplo
int n[10]={32, 27, 64, 18, 95, 24, 90, 70, 8, 3};
Si en la declaración hay menos inicializadores que el tamaño del array, los elementos son
inicializados a cero. Puedo entonces inicializar todo un array en 0 con la declaración:
int n[10]={0};
Declarar más inicializadores que el tamaño del arreglo es un error de sintaxis. Si en una
declaración con una lista inicializadora se omite el tamaño del arreglo el número de
elementos del arreglo ser ‘a el número de elementos incluidos en la lista inicializadora.
Por ejemplo
int a1 [ ] = {1,2,3,4,5};
crea un arreglo de 5 elementos.
En el caso especial de los arrays de caracteres, podemos utilizar varias formas de
inicialización:
char cadena[ ] = "Hola";
char cadena[ ] = {'H','o','l','a',0};
char cadena[ ] = {'H','o','l','a','\0'};

2.2.2 Lectura/Escritura de datos


La estructura repetitiva for() es la más usada para trabajar con los arreglos, a continuación
veremos cómo se ingresan datos en el arreglos, y a su vez como se los presentan por
pantalla.
Ingreso de datos en un arreglo unidimensional.
Sabemos que para el ingreso por teclado se usa la función scanf(); y también que para cada
tipo de dato se necesita un especificador del dato como por ejemplo el "%d" para datos de
tipo enteros.
En arreglos se usa el mismo formato de ingreso de cuando nos referimos a datos normales,
es decir:
scanf("Especificador de datos",&"Arreglo"[tamaño/posición]);

29
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

La única diferencia que se puede divisar es que junto a la variable debemos poner el tamaño
o la posición del dato del arreglo.
A continuación veremos cómo es la escritura de un arreglo con la función for().

#include<stdio.h>
#include<conio.h>
void main()
{
int num[10];
int i;
for(i=0;i<10;i++)
{
scanf("%d ",&num[i]);
}
}

Así mismo para mostrar por pantalla se usa la función printf(); dentro de un bucle repetitivo
a continuación se muestra:
#include<stdio.h>
#include<conio.h>
void main()
{
int num[10];
int i;
for(i=0;i<10;i++)
{
printf("%d ",num[i]);
}
}

30
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

2.2.3 Acceso secuencial a un vector

En los arrays, a menudo necesitamos recorrer todos sus índices, ya sea para buscar un
valor en concreto o para mostrar todos los valores que tiene dentro del array.
Como imaginaréis es ideal hacerlo con bucles, y por lo general el más adecuado es el ciclo
for.
#include <stdio.h>
#include <stdlib.h>

Int main ()
{
int notas[10] = {9, 2, 6, 7, 4, 5, 5, 7, 8,1}
for (int i=0; i<10; i++)
{
Printf(“La nota del %i \n”, i+1, notas[i]);
}
system(“PAUSE”);
}

2.2.4 Actualización de un vector


La operación de actualizar un vector puede constar a su vez de tres operaciones
elementales:
• Búsqueda
• Ordanación
• Inserción
• Eliminación

Búsqueda
La búsqueda consiste en encontrar un determinado valor dentro de un conjunto de datos,
para recuperar alguna información asociada con el valor buscado.

Existen diferentes formas de realizar esta operación; en otras palabras hay distintos
métodos o técnicas para realizar búsqueda en vectores.
• Búsqueda secuencial o lineal.
• Búsqueda Binaria.
• Búsqueda Hash.
• Arboles de búsqueda.

Ordenación
La ordenación se refiere a la operación de organizar los elementos de un vector en algún
orden dado: ascendente o descendente.

31
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

Existen diferentes métodos o técnicas para organizar los elementos de un arreglo. Los más
comunes son:
• Método de burbuja
• Método de burbuja mejorado.
• Ordenación por selección
• Inserción o método de la baraja
• Shell
• Binsort o por urnas
• Por montículos o heapsort
• Por mezcla o mergesot
• Método de la sacudida o shackersort
• Rapid sort o quick sort
• Por árboles.

Inserción
Esta operación consiste en adicionar un nuevo elemento al arreglo. Se debe tener en
cuenta:
1. Que no sobrepase el tamaño máximo declarado para el vector.
2. La operación puede darse para un arreglo ordenado o desordenado.
3. Si el arreglo está desordenado, se incrementa en uno el número de elementos y en esa
posición N + 1
se inserta el nuevo elemento,
4. Si el arreglo está ordenado hay que:
• Buscar el lugar dentro del arreglo donde se debe inserta el nuevo valor para que
continúe el vector ordenado.
• Correr todos los elementos del vector una posición a la derecha, para abrirle espacio
al nuevo elemento, a partir del lugar donde debe insertarse el nuevo dato.
• Insertar el nuevo elemento del vector en el espacio que le corresponde

Eliminación
Consiste en eliminar un elemento del arreglo, puede darse cuando el arreglo está
desordenado u ordenado.

El proceso de eliminación sigue los pasos que se describen a continuación:


• Verificar que el arreglo no esté vacío.
• Buscar la posición donde se encuentra el elemento a borrar.
• Correr los elementos una posición a la izquierda, a partir de la posición siguiente
donde se encuentra el valor a borrar.
• Disminuir el número de elementos del vector en uno.
• Enviar un mensaje en caso de que el elemento a borrar no esté dentro del arreglo.

2.3 Ejercicios
1. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en
orden ascendente.

32
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,tabla[100];

for (x=1;x<=100;x++)
{
tabla[x]=x;
}

for (x=1;x<=100;x++)
{
printf("%d\n",tabla[x]);
}

system("PAUSE");
return 0;
}

2. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en
orden descendente.
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,tabla[100];

for (x=1;x<=100;x++)
{
tabla[x]=x;
}

for (x=100;x>=1;x--)
{
printf("%d\n",tabla[x]);
}

system("PAUSE");
return 0;
}

33
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

3. Que rellene un array con los números primos comprendidos entre 1 y 100 y los muestre
en pantalla en orden ascendente.
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,cont,z,i,tabla[100];

i=0;
for (x=1;x<=100;x++)
{
cont=0;
for (z=1;z<=x;z++)
{
if (x%z==0)
{
cont++;
}
}

if (cont==2 || z==1 || z==0)


{
tabla[i]=x;
i++;
}

for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}

system("PAUSE");
return 0;
}

4. Que rellene un array con los números pares comprendidos entre 1 y 100 y los muestre
en pantalla en orden ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,cont,z,i,tabla[100];

i=0;
for (x=1;x<=100;x++)

34
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

{
cont=0;
if (x%2==0)
{
tabla[i]=x;
i++;
}
}

for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}

system("PAUSE");
return 0;
}

5. Que rellene un array con los números impares comprendidos entre 1 y 100 y los muestre
en pantalla en orden ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,cont,z,i,tabla[100];

i=0;
for (x=1;x<=100;x++)
{
cont=0;
if (x%2==1)
{
tabla[i]=x;
i++;
}
}

for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}

system("PAUSE");
return 0;
}

35
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

6. Que lea 10 números por teclado, los almacene en un array y muestre la suma, resta,
multiplicación y división de todos.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,tabla[10];
int sum,res,mul,div;

for (x=0;x<10;x++)
{
printf("Introduzca número\n");
scanf("%d",&tabla[x]);
}

sum=tabla[0];
res=tabla[0];
mul=tabla[0];
div=tabla[0];

for (x=1;x<10;x++)
{
sum=sum+tabla[x];
res=res-tabla[x];
mul=mul*tabla[x];
div=div/tabla[x];
}

printf("Suma: %d\n",sum);
printf("Resta: %d\n",res);
printf("Multiplicación: %d\n",mul);
printf("División: %d\n",div);

system("PAUSE");
return 0;
}

7. Que lea 10 números por teclado, los almacene en un array y los ordene de forma
ascendente.

#include <stdio.h>
#include <stdlib.h>

int main()
{
float aux, numeros[10];
int i,j,n=10;

for (i=0;i<n;i++){

36
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

printf("Escriba un número");
scanf("%f",&numeros[i]);
}

for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(numeros[i]<numeros[j])
{
aux=numeros[i];
numeros[i]=numeros[j];
numeros[j]=aux;
}
}
}

for (i=n-1;i>=0;i--){
printf("%f\n",numeros[i]);
}

system("PAUSE");
return 0;
}

8. Que lea 10 números por teclado, 5 para un array y 5 para otro array distinto. Mostrar los
10 números en pantalla mediante un solo array.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int aux, numeros1[5],numeros2[5],numeros3[10];
int i,j;

for (i=0;i<5;i++){
printf("Escriba un número");
scanf("%d",&numeros1[i]);
}

for (i=0;i<5;i++){
printf("Escriba un número");
scanf("%d",&numeros2[i]);
}

for(i=0;i<5;i++)
{
numeros3[i]=numeros1[i];
}

37
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

for(i=0;i<5;i++)
{
numeros3[5+i]=numeros2[i];
}

for (i=0;i<10;i++){
printf("%d\n",numeros3[i]);
}

system("PAUSE");
return 0;
}

9. Que lea 5 números por teclado, los copie a otro array multiplicados por 2 y muestre el
segundo array.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int aux, numeros1[5],numeros2[5];
int i,j;

for (i=0;i<5;i++){
printf("Escriba un número");
scanf("%d",&numeros1[i]);
}

for(i=0;i<5;i++)
{
numeros2[i]=numeros1[i]*2;
}

for (i=0;i<5;i++){
printf("%d\n",numeros2[i]);
}

system("PAUSE");
return 0;
}

38
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

10. Que lea 5 números por teclado, los copie a otro array multiplicados por 2 y los muestre
todos ordenados usando un tercer array.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int aux, numeros1[5],numeros2[5],numeros3[10];
int i,j;

for (i=0;i<5;i++){
printf("Escriba un número");
scanf("%d",&numeros1[i]);
}

for(i=0;i<5;i++)
{
numeros2[i]=numeros1[i]*2;
}

for(i=0;i<5;i++)
{
numeros3[i]=numeros1[i];
}

for(i=0;i<5;i++)
{
numeros3[5+i]=numeros2[i];
}

for (i=0;i<10;i++){
printf("%d\n",numeros3[i]);
}

system("PAUSE");
return 0;
}

11. Que rellene un array con los 100 primeros números pares y muestre su suma.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int x,cont,sum,i,tabla[100];

i=0;
sum=0;
for (x=1;x<=100;x++)

39
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

{
cont=0;
if (x%2==0)
{
tabla[i]=x;
i++;
}
}

for (x=0;x<i;x++)
{
sum=sum+tabla[x];
}

printf("%d\n",sum);

system("PAUSE");
return 0;
}

12. Que lea 10 números por teclado, los almacene en un array y muestre la media.

#include <stdio.h>
#include <stdlib.h>

int main()
{
float sum, numeros1[10];
int i;

sum=0;
for (i=0;i<10;i++){
printf("Escriba un número");
scanf("%f",&numeros1[i]);
}

for(i=0;i<10;i++)
{
sum=sum+numeros1[i];
}

printf("%f\n",sum/10);

system("PAUSE");
return 0;
}

40
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

13. Que mediante un array almacene números tanto positivos como negativos y los muestre
ordenados.

#include <stdio.h>
#include <stdlib.h>

int main()
{
float aux, numeros[10];
int i,j,n=10;

for (i=0;i<n;i++){
printf("Escriba un número");
scanf("%f",&numeros[i]);
}

for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(numeros[i]<numeros[j])
{
aux=numeros[i];
numeros[i]=numeros[j];
numeros[j]=aux;
}
}
}

for (i=n-1;i>=0;i--){
printf("%f\n",numeros[i]);
}

system("PAUSE");
return 0;
}

14. Que rellene un array con 20 números y luego busque un número concreto.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int i,x=0,vector[20], n=20, dato, centro,inf=0,sup=n-1;

for (i=0;i<20;i++){
printf("Escriba un número");
scanf("%d",&vector[i]);
}

41
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

printf("Escriba el número a buscar");


scanf("%d",&dato);

while(inf<=sup)
{
centro=(sup+inf)/2;
if (vector[centro]==dato)
{
printf("Existe\n");
x=1;
break;
}
else if(dato < vector [centro] )
{
sup=centro-1;
}
else
{
inf=centro+1;
}
}

if (x==0)
{
printf("No existe\n");
}

system("PAUSE");
return 0;

15. Que lea una cadena y la muestre al revés.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int indice,x;
char frase[50];

printf("Introduzca una frase: ");


gets(frase);

for(x = 0;x < 50;x++)


{
if (frase[x]=='\0')
{

42
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

indice=x;
break;
}
}

printf("La frase al reves es: \n\n");

for(x = indice-1;x >=0;x--)


{
printf("%c",frase[x]);
}

printf("\n\n");

system("PAUSE");
return 0;
}

16. Que lea una cadena y diga cuantas vocales hay.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int sum=0,x;
char frase[50];

printf("Introduzca una frase: ");


gets(frase);

for(x = 0;x < 50;x++)


{
switch (frase[x])
{
case 'a':
sum++;
break;
case 'e':
sum++;
break;
case 'i':
sum++;
break;
case 'o':
sum++;
break;
case 'u':
sum++;
break;

43
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

default:
break;
}

printf("\n\nEn la frase hay %d vocales\n\n",sum);

printf("\n\n");

system("PAUSE");
return 0;
}

17. Que lea una cadena y diga cuantas mayúsculas hay.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{
int sum=0,x;
char frase[50];

printf("Introduzca una frase: ");


gets(frase);

for(x = 0;x < 50;x++)


{
if (frase[x]>=65 && frase[x]<=90)
{
sum++;
}
}

printf("\n\nEn la frase hay %d mayúsculas\n\n",sum);

printf("\n\n");

system("PAUSE");
return 0;
}

44
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

18. Que lea una cadena y la encripte sumando 3 al código ASCII de cada carácter. Mostrar
por pantalla.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{
int sum=0,x;
char frase[50];

printf("Introduzca una frase: ");


gets(frase);

for(x = 0; x < 50;x++)


{
if (frase[x]!='\0')
{
frase[x]=frase[x]+3;
}
}

printf("\n\nLa nueva frase es:\n\n",sum);


printf("\n\n%s\n\n",frase);
printf("\n\n");

system("PAUSE");
return 0;
}

19. Que gestione los datos de stock de una tienda de comestibles, la información a recoger
será: nombre del producto, precio, cantidad en stock. La tienda dispone de 10 productos
distintos. El programa debe ser capaz de:

1. Dar de alta un producto nuevo.


2. Buscar un producto por su nombre.
3. Modificar el stock y precio de un producto dado.

#include <stdio.h>
#include <stdlib.h>

struct producto {
char nombre[50];
float precio;
int cantidad;
};

int main(int argc, char *argv[])


{
struct producto prod,productos[10];

45
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

int x,opcion=1;

for (x=0;x<10;x++)
{
strcpy(productos[x].nombre,"X");
productos[x].precio=0;
productos[x].cantidad=0;
}

while ((opcion==1 || opcion==2 || opcion==3) && (opcion!=4))


{

printf("1- Alta de producto\n");


printf("2- Buscar por nombre\n");
printf("3- Modificar stock y precio\n");
printf("4- Salir\n");
printf("Introduzca una opción: ");
scanf("%d",&opcion);

if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(prod.nombre);
gets(prod.nombre);
printf("Introduzca un precio: ");
scanf("%f",&prod.precio);
printf("Introduzca un stock: ");
scanf("%d",&prod.cantidad);

for(x = 9; x >=0; x--)


{
if (x!=0)
{
strcpy(productos[x].nombre,productos[x-1].nombre);
productos[x].precio=productos[x-1].precio;
productos[x].cantidad=productos[x-1].cantidad;
}
else
{
strcpy(productos[x].nombre,prod.nombre);
productos[x].precio=prod.precio;
productos[x].cantidad=prod.cantidad;
}
}
printf("\nProducto creado. \n\n");
}
else if (opcion==2)
{
printf("Introduzca un nombre: ");
gets(prod.nombre);
gets(prod.nombre);

46
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

for(x = 0; x < 10;x++)


{

if (strcmp(productos[x].nombre,prod.nombre)==0)
{
printf("\nNombre: %s\n",productos[x].nombre);
printf("Precio: %f\n",productos[x].precio);
printf("Cantidad en Stock: %d\n",productos[x].cantidad);
}
}
printf("\n\n");
}
else if (opcion==3)
{
printf("Introduzca un nombre: ");
gets(prod.nombre);
gets(prod.nombre);

for(x = 0; x < 10;x++)


{
if (strcmp(productos[x].nombre,prod.nombre)==0)
{
printf("Introduzca un precio: ");
scanf("%f",&productos[x].precio);
printf("Introduzca un stock: ");
scanf("%d",&productos[x].cantidad);
printf("\nProducto modificado.");
}
}
printf("\n\n");
}
}

system("PAUSE");
return 0;
}

25. Que gestiona las notas de una clase de 20 alumnos de los cuales sabemos el nombre
y la nota. El programa debe ser capaz de:

1. Buscar un alumno.
2. Modificar su nota.
3. Realizar la media de todas las notas.
4. Realizar la media de las notas menores de 5.
5. Mostrar el alumno que mejores notas ha sacado.
6. Mostrar el alumno que peores notas ha sacado.

47
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

#include <stdio.h>
#include <stdlib.h>

struct alumno {
char nombre[50];
float nota;
};

int main(int argc, char *argv[])


{
struct alumno alum,alumnos[5];

int x,opcion=1;
float sum=0,cont=0,mejor,peor;

for (x=0;x<5;x++)
{
printf("Introduzca nombre alumno:");
gets(alumnos[x].nombre);
gets(alumnos[x].nombre);
printf("Introduzca nota:");
scanf("%f",&alumnos[x].nota);
}

while ((opcion==1 || opcion==2 ||


opcion==3 || opcion==4 ||
opcion==5 || opcion==6) && (opcion!=7))
{

printf("1- Buscar un alumno\n");


printf("2- Modificar nota\n");
printf("3- Media de todas las notas\n");
printf("4- Media de todas las notas inferiores a 5\n");
printf("5- Alumno con mejores notas\n");
printf("6- Alumno con peores notas\n");
printf("7- Salir\n");
printf("Introduzca una opción: ");
scanf("%d",&opcion);

if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);

for(x = 0; x < 5;x++)


{
if (strcmp(alumnos[x].nombre,alum.nombre)==0)
{
printf("\nNombre: %s\n",alumnos[x].nombre);

48
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

printf("Nota: %f\n",alumnos[x].nota);
}
}
printf("\n\n");
}
else if (opcion==2)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);

for(x = 0; x < 5;x++)


{
if (strcmp(alumnos[x].nombre,alum.nombre)==0)
{
printf("Introduzca una nota: ");
scanf("%f",&alumnos[x].nota);
printf("\nNota modificada.");
}
}
printf("\n\n");
}
else if (opcion==3)
{
sum=0;
for(x = 0; x < 5;x++)
{
sum=sum+alumnos[x].nota;
}
printf("\nLa media de las notas es de: %f \n",(sum/5));
}
else if (opcion==4)
{
sum=0;
cont=0;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota<5)
{
sum=sum+alumnos[x].nota;
cont++;
}
}
printf("\nLa media de las notas inferiores a 5 es: %f \n",sum/cont);
}
else if (opcion==5)
{
mejor=0;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota>mejor)

49
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

{
mejor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
}
printf("\nEl alumno con mejores notas es: %s \n",alum.nombre);
}
else if (opcion==6)
{
peor=10;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota<peor)
{
peor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
}
printf("\nEl alumno con peores notas es: %s \n",alum.nombre);
}
}

system("PAUSE");
return 0;
}

50
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

UNIDAD III
Estructura de datos
multidimiensionales

51
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

3. Arreglos multidimensionales
Lenguaje C permite crear arreglos de varias dimensiones con la siguiente sintaxis:
tipoDato nombre[tamaño] [tamaño] [tamaño]…[tamaño]
Donde nombre se refiere al identificador del arreglo, tamaño es un número entero y define
el número máximo de elementos que puede contener el arreglo por dimensión (el número
de dimensiones está determinado por el número de corchetes). Los tipos de datos que
puede tolerar un arreglo multidimensional son: entero, real, carácter o estructura.
De manera practica se puede considerar que la primera dimensión corresponde a los
renglones, la segunda a las columnas, la tercera al plano, y así sucesivamente.

3.1 Arreglos bidimensionales


Una matriz es una estructura de datos interna que almacena un conjunto de datos del
mismo tipo bajo un nombre de variable común. La posición de un elemento dentro de la
matriz viene identificada por uno o varios índices, de tal modo que a cada elemento se
accede mediante el nombre de la matriz y sus índices.

La dimensión de una matriz es el número de índices necesario para identificar un elemento.

Podemos declarar vectores de más de una dimensión muy fácilmente:

int a[10][5];
float b[3][2][4];

En este ejemplo, a es una matriz de 10 × 5 enteros y b es un vector de tres dimensiones


con 3 × 2 × 4 números en coma flotante.

Puedes acceder a un elemento cualquiera de los vectores a o b utilizando tantos índices


como dimensiones tiene el vector: a[4][2] y b[1][0][3], por ejemplo, son elementos de a y b,
respectivamente.

3.1.1 Asignación
Tenemos que declarar el arreglo bidimensional o la matriz de acuerdo al tipo de dato que
contendrá:

TipodeVariable nombre[dimensión1] [dimesion2]

Un ejemplo sería:

int A [3][2]

El número de elementos declarados (recordar que los índices de arrays comienzan en cero)
será de 3 x 2 = 6, correspondiente a (2+1) x (1+1) = 3 x 2.

Vamos a definir una matriz con el mismo ejemplo que usamos cuando hablamos de
pseudocódigo: queremos almacenar en una matriz el número de alumnos con que cuenta

52
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

una academia ordenados en función del nivel y del idioma que se estudia. Tendremos 3
filas que representarán Nivel básico, medio o de perfeccionamiento y 4 columnas que
representarán los idiomas (0 = Inglés, 1 = Francés, 2 = Alemán y 3 = Ruso). La declaración
de dicha matriz sería:

int alumnosfxniveleidioma [3] [4];

Podríamos asignar contenidos de la siguiente manera:

alumnosfxniveleidioma[0] [0] = 7; alumnosfxniveleidioma[0] [1] = 14;

alumnosfxniveleidioma[0] [2] = 8; alumnosfxniveleidioma[0] [3] = 3;

alumnosfxniveleidioma[1] [0] = 6; alumnosfxniveleidioma[1] [1] = 19;

alumnosfxniveleidioma[1] [2] = 7; alumnosfxniveleidioma[1] [3] = 2;

alumnosfxniveleidioma[2] [0] = 3; alumnosfxniveleidioma[2] [1] = 13;

alumnosfxniveleidioma[2] [2] = 4; alumnosfxniveleidioma[2] [3] = 1;

Veamos lo que sería un ejemplo de programa con array multidimensional. Escribe y ejecuta
este código.

#include <stdio.h>
#include <stdlib.h>

int main() {
int habitantesVivienda[5][25];
habitantesVivienda[3][24] = 4;
printf("El numero de personas que viven en la vivienda 24 del piso 3 es %d\n",
habitantesVivienda[3][24]);
return 0;
}

El resultado del programa es que se muestra el mensaje “El numero de personas que viven
en la vivienda 24 del piso 3 es 4”. Fíjate que en un array multidimensional cada índice tiene
un significado.

3.1.2 Lectura/escritura de datos


Para poder trabajar la lectura y la escritura de un arreglo bidimensional lo primordial es
saber identificar las filas de las columnas.

Las filas o renglones son las horizontales, y las columnas son las verticales en la matriz.

Ejemplo:

53
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

#include<stdio.h>
#include<conio.h>
void main()
{ clrscr();
int num[3][3];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&num[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",num[i][j]);
}
}
getch();
}

3.1.3 Acceso secuencial a una matriz


Es posible utilizar diferentes estrategias para recorrer una matriz, si bien la mas habitual es
recorrer primero las filas y luego las columnas:

Siguiendo esta estrategia es necesario anidar dos ciclos, uno externo que recorrerá las filas
y uno interno que recorrerá las columnas.

for (i=0; i<F; i++) Siento F el número de filas y C el número de columnas


for(j=0; j<C; j++)

Ejemplo:
Diseñe un programa que lea e imprima una matriz 2 x 2

54
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

#include <stdio.h>
#include <conio.h>
main()
{
int matriz[F][C], i=0, j=0;
for(i=0; i<F; i++)
{
for(j=0; j<C; j++)
{ printf("Ingrese el elemento F=%d y Columna=%d de la matriz:\n", i,j);
scanf("%d", &matriz[i][j]); }
}
printf("La Matriz generada es:\n\n");
for(i=0; i<F; i++)
{
for(j=0; j<C; j++)
{ printf("%5d", matriz[i][j]); }
printf("\n");
}
getch();
}

3.1.4 Actualización de una matriz


Consultar o leer el valor de un elemento de la matriz
Si queremos poner en la variable nota_alu5, la nota del alumno que tenemos en la posición
5 dentro de la asignatura 0, haríamos la siguiente asignación:

float nota_alu5, notas[MAX_ASIG][NAX_ALUM]; /*Declaración de variables*/


...
nota_alu5 = notas[0][5];

Asignar o escribir un valor en un elemento de la matriz


Si queremos poner un 8 en la asignatura 0 al alumno que está en la posición 5 haríamos
la siguiente asignación: 5

notas[0][5] = 8;

En estos dos casos, el acceso al elemento de la matriz que queremos leer o en el que
queremos escribir es directo, porque solamente leemos o modificamos un elemento, el fila
0, columna 5 en estos ejemplos. Si queremos recorrer toda la matriz, ya sea para leer como
para escribir, tendremos que utilizar un ciclo.

Recorrido de una matriz


Es posible utilizar diferentes estrategias para recorrer una matriz, si bien la mas habitual es
recorrer primero las filas y luego las columnas.

for (i=0; i<F; i++) Siento F el número de filas y C el número de columnas


for(j=0; j<C; j++)
3.2 Ejercicios

55
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

1. Que muestre los primeros 100 números de izquierda a derecha usando un array de dos
dimensiones.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int x,y, numeros[10][10];

for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
numeros[x][y]=(x*10)+1+y;
}

for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
printf("%d ",numeros[x][y]);
}
printf("\n");
}

system("PAUSE");
return 0;

2. Que muestre los primeros 100 números de izquierda a derecha usando un array de dos
dimensiones, la última fila a mostrará la suma de sus respectivas columnas.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int x,y,sum, numeros[11][10];

for (y=0;y<10;y++)
{
sum=0;
for (x=0;x<10;x++)
{
numeros[x][y]=(x*10)+1+y;

56
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

sum=sum+numeros[x][y];
}
numeros[10][y]=sum;
}

for (x=0;x<11;x++)
{
for (y=0;y<10;y++)
{
printf("%d ",numeros[x][y]);
}
printf("\n");
}

system("PAUSE");
return 0;
}

3. Que rellene un array de dos dimensiones con números pares, lo pinte y después que
pida una posición X,Y y mostrar el número correspondiente.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int x,y,num=2, numeros[3][3];

for (x=0;x<3;x++)
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num=num*2;
}
}

printf("Introduzca coordenada x: ");


scanf("%d",&x);
printf("Introduzca coordenada y: ");
scanf("%d",&y);

printf("El número es: %d\n",numeros[x][y]);

system("PAUSE");
return 0;
}

4. Que rellene una matriz de 3x3 y muestre su traspuesta (la traspuesta se consigue
intercambiando filas por columnas y viceversa).

57
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

int x,y,num=0, numeros[4][4];

for (x=0;x<3;x++)
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num++;
}
}

printf("El array original es: \n\n\n");

for(x = 0;x < 3;x++)


{
for(y = 0;y < 3;y++)
{
printf(" %d ", numeros[x][y]);
}
printf("\n\n\n");
}

printf("La traspuesta es: \n\n\n");

for(x = 0;x < 3;x++)


{
for(y = 0;y < 3;y++)
{
printf(" %d ", numeros[y][x]);
}
printf("\n\n\n");
}

5. Imprimir total de alumnos matriculados por asignatura

#include <stdio.h>
main(){//abre el main
int total;
int matricula [3] [7];
int i, j;
for (i=0; i<=3; i++) //rellenamos la matriz
for (j=0; j<=7; j++){//abre el for
printf("Introduce el numero de alumnos matriculados para curso %d y
asignatura %d:\n", i+1, j);
scanf("%d", &matricula [i] [j]);

58
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

}//cierra el for
for (j=0; j<=7; j++)//contabilizamos alumnos
{//abre el for
total=0;
for (i=0; i<=3; i++)
total=total+matricula [i] [j];
printf("Total de alumnos de asignatura %d es: %d\n", j, total);

}//cierra el for
}//cierra el main

6. Programa que nos dice los valores máximo y mínimo y sus posiciones dentro de
una matriz.

#include <stdio.h>
#include <math.h>
#
main (){
int num, i, j;
int tablanum[3][3]={0};
int t[3][3]={0};
int may, fmax=0, cmax=0, min, fmin=0, cmin=0;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
printf ("Introduce un numero: ");
scanf ("%d", &tablanum[i][j]);
}
}

may= tablanum[0][0];
min= tablanum[0][0];
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (tablanum[i][j]>may)
{
may=tablanum[i][j];
fmax=i;
cmax=j;
}
if (tablanum [i][j]<min)
{
min=tablanum[i][j];
fmin=i;
cmin=j;
}
}
}

59
MÓDULO I: DESARROLLA SOFTWARE DE APLIACION CON PROGRAMACIÓN ESTRUCTURADA.
Submódulo 3: Aplica estructuras de datos con un lenguaje de programación.

printf ("El mayor es: %d y su posicion es: %d fila y %d columna\n", may, fmax, cmax);
printf ("El menor es: %d y su posicion es: %d fila y %d columna\n", min, fmin, cmin);
}

60
Este manual de prácticas es parte de una serie de guías de aprendizaje y manuales,
que tienen como único propósito proporcionar a los alumnos del CECyTENL
bibliografía básica del Componente de Formación Profesional y el Componente de
Formación para el Trabajo, con el fin de desarrollar conocimientos en nuestros
estudiantes. El uso y distribución de estos manuales se restringe a este colegio que los
genera sin fines de lucro, por lo anterior se prohíbe su venta y/o reproducción fuera
de esta institución.

También podría gustarte