Programación Módulo I - 206 Páginas
Programación Módulo I - 206 Páginas
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
Submódulo 1
UNIDAD I
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
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
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
7
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
8
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Tipos de dispositivos
9
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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:
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
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.
1.2.1 Programa
12
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
13
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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.
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
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.
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
Operador Nombre
+ Suma
- Resta
* Multiplicación
/ División
^ Exponencial
Operadores de asignación
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.
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
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:
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
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
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.
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
Competencia Profesional:
Desarrolla diagramas de flujo de algoritmos
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
Botón de limpieza
Línea de comandos
Control de velocidad
Terminar ejecución
de la ejecución
Cortar
Copiar
Pegar
Imprimir
Deshacer
Rehacer
Guardar diagrama
Nuevo diagrama
21
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Á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
Área de trabajo
Barra de menú
Área de resultados
Línea de comandos
Botón Clear
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
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).
Estructura Básica
23
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ejemplo:
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.
24
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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 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
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.
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
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
Altura
La cual sera 4
27
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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
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í.
29
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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.
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
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
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:
32
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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:
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
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.
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
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
35
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
1.4. Programación
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado.
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:
36
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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.
¿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
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
39
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ahora escribe el nombre del proyecto y selecciona la ubicación donde será grabado
orpimiendo el boton Next.
40
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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;
}
41
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
1.4.2 Lenguaje C.
42
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
• 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.
43
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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:
45
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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 */
return 0;
}
47
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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é?
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
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
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.
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
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
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
52
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado.
Ejemplo:
El siguiente diagrama de flujo demuestra una estructura de este tipo.
Practica:
Te reto, realiza el anterior diagrama de flujo en lenguaje C.
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
#include <stdio.h>
int main(){
printf("Hola mundo");
return 0;
}
#include <stdio.h>
int main(){
int num1 = 10;
printf("Soy el número %d", num1);
return 0;
}
#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
#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;
}
55
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
57
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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;
}
59
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
2.3 Multiple (If anidado)
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
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
61
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
62
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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.
Iterate(número de repeticiones){
Instrucciones de ejecución cíclica;
}
paréntesis.
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
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().
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
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
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
while(condición a evaluar){
Instrucciones de ejecución si la condición es verdadera;
}
Instrucciones a ejecutar si la condición es falsa;
class program {
program() {
while(nextToABeeper()){
move();
}
turnoff();
}
}
67
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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;
68
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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 }
69
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
70
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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:
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. }
71
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
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
7 scanf("%d",&i);
8 suma+=i;
9 }while(i!=0);
10 printf("Total = %d",suma);
11 return 0;
12 }
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.
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
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
3.4 Arreglos
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.
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
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.
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=
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
PRACTICA
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
77
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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 }
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
Practica
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
Competencia Profesional:
Desarrolla el código en un lenguaje de programación
estructurado
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:
80
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ejemplos:
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
Practica
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
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.
83
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
84
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
85
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Competencia Profesional:
Elabora un diseño conceptual de una base de datos.
86
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
• 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.
Personas
Personas
87
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
88
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ejercicio
89
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
90
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS 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.
• Múltiples valores:
91
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
92
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ejemplos:
• Ejemplo1:
• Ejemplo 2:
En este caso se puede separar la tabla en 3 tablas diferentes para cumplir con la 2FN
Ejemplo3:
93
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ejemplos:
94
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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
97
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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 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
98
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Ordenes
Articulos_ordenes
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:
• 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
Articulos_ordenes
2301 3786 3
2301 4011 6
2301 9132 8
2302 5794 4
2303 4011 2
2303 3141 2
Articulos
100
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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:
• 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.
101
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Se pide realizar la respectiva justificación detallada de cada uno de los pasos que
conduzcan al resultado final.
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
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
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:
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
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.
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
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
106
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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.
108
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Pantalla de inicio
109
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Paleta de opciones
110
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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
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
114
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Competencia Profesional:
Elabora el diseño lógico de una base de datos con
implementación en sistema gestor de base de datos.
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
Le das el nombre como quieres que se llame y aplicas los cambios, para el ejemplo le
puse el nombre de ventas.
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
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.
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.
117
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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.
119
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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
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
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
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.
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
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
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
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
127
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
Competencia Profesional:
Elabora el diseño lógico de una base de datos con
implementación en sistema gestor de base de datos.
128
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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;
Competencia Profesional:
Genera consultas
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
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
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
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.
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
133
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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
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
137
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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.
138
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
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.
140
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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.
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
142
MÓDULO I: DESARROLLA E INSTALA SOFTWARE DE APLICACIÓN UTILIZANDO PROGRAMACIÓN ESTRUCTURADA, CON
ALMACENAMIENTO PERSISTENTE DE LOS DATOS
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
BLOQUE B
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
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.
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.
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.
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;
}
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.
/* Definición de función */
int cuadrado(int y)
{
return y*y;
}
Se imprime:
1 4 9 16 25 36 49 64 81 100
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.
tipo_de_retorno nombre_de_la_función(lista_de_parámetros);
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:
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:
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.
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.
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
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.
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:
#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.
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
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:
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
#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);
}
Ejemplo práctico
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.
Ejemplo practico
#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
#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);
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).
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>
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>
return (base*altura)/2;
}
float area;
area=areatriangulo();
printf("El área es: %2.2f \n",area);
system("PAUSE");
return 0;
}
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();
Veamos el programa del área del triángulo pasando por parámetros los datos de base y
altura:
#include <stdio.h>
#include <stdlib.h>
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.
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:
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.
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:
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:
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>
intercambio(num1,num2);
system("PAUSE");
return 0;
}
Por referencia:
#include <stdio.h>
#include <stdlib.h>
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;
intercambio(&num1,&num2);
system("PAUSE");
return 0;
}
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.
#include <stdio.h>
#include <stdlib.h>
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.
areatriangulo();
system("PAUSE");
return 0;
}
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.
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.
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)!
5! = 5 * 4!
O lo que es lo mismo:
5! = 5 * 4 * 3 * 2 * 1
#include <stdio.h>
#include <stdlib.h>
while (num2!=1){
num2=num2-1;
num=num*num2;
}
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
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;
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.
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.
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.
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'};
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.
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”);
}
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.
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++;
}
}
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>
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.
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;
#include <stdio.h>
#include <stdlib.h>
int indice,x;
char frase[50];
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("\n\n");
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int sum=0,x;
char frase[50];
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\n");
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
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>
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:
#include <stdio.h>
#include <stdlib.h>
struct producto {
char nombre[50];
float precio;
int cantidad;
};
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;
}
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);
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.
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);
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 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);
}
if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.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);
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.
int a[10][5];
float b[3][2][4];
3.1.1 Asignación
Tenemos que declarar el arreglo bidimensional o la matriz de acuerdo al tipo de dato que
contendrá:
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:
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.
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();
}
Siguiendo esta estrategia es necesario anidar dos ciclos, uno externo que recorrerá las filas
y uno interno que recorrerá las columnas.
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();
}
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.
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>
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>
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>
for (x=0;x<3;x++)
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num=num*2;
}
}
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>
for (x=0;x<3;x++)
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num++;
}
}
#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.