You are on page 1of 155

Guía temática de aprendizajes

para entornos virtuales
Chiclayo noviembre de 2012

Luis Alberto Vives Garnique
Docente experto PEaD – USS Virtual

Introducción a la
Ingeniería de Sistemas
Asignatura
Material para el docente

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

2















Rector
Dr. Humberto Llempén Coronel

Vicerrector Académico
Mg. Alcibíades Sime Marques

Decano de Facultad Derecho
Dr. Daniel Cabrera Leonardini

Decano Facultad de Ingeniería
Mg. Jorge Lujan López

Decano Facultad de Humanidades
Mg. Nicolás Valle Palomino

Decano de la Facultad de Ciencias Empresariales
Mg. Alfredo Díaz Jave

Directora del PEaD
Mg.. Lady Lora Peralta


Guía temática de aprendizajes
para entornos virtuales
__________________________
Introducción a la Ingeniería de Sistemas
Luis Alberto Vives Garnique

© Universidad Señor de Sipán
Programa Académico de Educación a Distancia

Edición y tratamiento didáctico
Área de Desarrollo Pedagógico PEaD

Primera edición octubre 2012

Chiclayo: Av. Luis Gonzáles 1004 – Esq. Con Lora y Cordero
Teléf. 481615
Campus USS: Carretera a Pimentel km. 5 / Teléf.: 51 – 74 – 481615
Fax: 51 – 74 – 236091
http://www.uss.edu.pe/

Introducción a la Ingeniería
de Sistemas
Asignatura
Guía temática de aprendizajes
para entornos virtuales

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

3
Índice
Pág.

Presentación …………………………………………………..…………………………………………………………………
Programación de contenidos de aprendizaje………………………………………………………………………………


PRIMERA SEMANA
“Definiciones básicas de fundamentos de programación”
 Bienvenida
 Ruta de aprendizaje primera semana

Tema 1: Definiciones básicas de fundamentos de programación ………………………………………….………….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
1.1 Concepto de algoritmo - Concepto de programa
- Traductores e intérpretes - Los lenguajes de programación
1.2 Datos, tipos de datos y operaciones primitivas
- Constantes, variables
- Operadores, expresiones.
1.3 Diseño del Algoritmo
- Pseudocódigo - Diagrama de flujo
- Diagrama N – S
1.4 Concepto de Programa
- Elementos Básicos de un Programa
1.5 Uso del Lenguaje de Programación
1.6 Sintaxis del Lenguaje
 Lecturas recomendadas (para ampliar conocimientos de la primera semana)
 Conclusiones (de la primera semana)
 Metacognición de la primera semana
 Control de lectura primera semana


SEGUNDA SEMANA
“Estructuras de control I”

Tema 2: Estructuras de control I …………………………………………………………………………………….………….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
2.1 Estructuras Secuenciales
2.2 Estructuras Condicionales
- Simples (if)
- Dobles (if – else)
- Múltiples (Switch)
2.3 Conversión de Algoritmos a Programas
2.4 Creación de programas en Java
 Lecturas recomendadas (para ampliar conocimientos de la segunda semana)
 Conclusiones (de la segunda semana)
 Metacognición de la segunda semana
 Control de lectura segunda semana

TERCERASEMANA
““Estructuras de Control II”

 Bienvenida
 Ruta de aprendizaje primera semana

Tema 3: Estructuras de Control II …………………….…………………………………………..….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes

05
06


07





08


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

4
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
3.1 Estructuras Repetitivas (Mientras / Hacer, Mientras (While, Do-while)
3.2 Estructura Repetitiva Desde (For)
3.3 Conversión de Algoritmos a Programas
3.4 Creación de programas en Java
 Lecturas recomendadas (para ampliar conocimientos de la tercera semana)
 Conclusiones (de la tercera semana)
 Metacognición de la tercera semana
 Control de lectura tercera semana

CUARTA SEMANA
“Introducción a la Estructura de Datos”
 Bienvenida
 Ruta de aprendizaje primera semana

Tema 4: Introducción a la Estructura de Datos ………………………………………………….………….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
4.1 Arreglos unidimensionales
4.2 Operaciones con vectores
4.3 Métodos de ordenamiento y búsqueda
 Lecturas recomendadas (para ampliar conocimientos de la cuarta semana)
 Conclusiones (de la cuarta semana)
 Metacognición de la cuarta semana
 Control de lectura cuarta semana


QUINTA SEMANA
““Cadenas de Caracteres.”
 Bienvenida
 Ruta de aprendizaje primera semana

Tema 5: Cadenas de Caracteres.………………….………………………………………………….………….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
5.1 Cadena de Caracteres
5.2 Operaciones y funciones de cadenas.
 Lecturas recomendadas (para ampliar conocimientos de la quinta semana)
 Conclusiones (de la quinta semana)
 Metacognición de la quinta semana
 Control de lectura quinta semana

SEXTA SEMANA
“Introducción a métodos”
 Bienvenida
 Ruta de aprendizaje primera semana

Tema 6: Introducción a métodos ………………………………..………………………………………………….………….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
6.1 Un Programa
6.2 Una Función
6.3 Una Subrutina (o Procedimiento)
 Lecturas recomendadas (para ampliar conocimientos de la sexta semana)
 Conclusiones (de la sexta semana)
 Metacognición de la sexta semana
 Control de lectura sexta semana
SÉPTIMA SEMANA

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

5

“Arreglos dimensionales”
 Bienvenida
 Ruta de aprendizaje primera semana

Tema 7: Arreglos dimensionales ………………………………..………………………………………………….………….
 Introducción al tema
 Aprendizajes esperados: Capacidad / Actitudes
 Mapa conceptual referido al tema…………………………………………………………………………………………
 Desarrollo de los contenidos de aprendizaje
7.1 Arreglos bidimensionales
7.2 Operaciones con arreglos bidimensionales
7.3 Exposiciones Finales
 Lecturas recomendadas (para ampliar conocimientos de la séptima semana)
 Conclusiones (de la séptima semana)
 Metacognición de la séptima semana
 Control de lectura séptima semana


Referencias bibliográficas
Glosario






Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

6

Presentación

Es una enorme satisfacción presentar, la Guía temática de aprendizajes para entornos
virtuales de la asignatura Fundamentos de programación, que hemos elaborado según
los lineamientos de planificación curricular y diseño didáctico, estipulados en el modelo
educativo del Programa Académico de Educación Superior a Distancia - Virtual de la
Universidad Señor de Sipán.

En este documento, se desarrollan estructuralmente los contenidos de aprendizaje
planificados en el sílabo del curso y que corresponden al plan de estudio de la escuela
Académico profesional de Ingeniería de Sistemas.

Para lograr las finalidades exigidas por la metodología e-learning, en el tratamiento
didáctico de los contenidos hemos incluido textos, imágenes, videos, direcciones
electrónicas, pág. web, etc. buscando siempre la comprensión de las temáticas
abordadas, sin descuidar el rigor científico de la asignatura. Además, con nuestra
producción buscamos en todo momento que el alumno a distancia, “sienta” las
orientaciones del docente a través de rutas de aprendizaje, actividades significativas y
sobre todo identifique constantemente el logro de sus aprendizajes a través de controles
de lectura, así mismo conozca los criterios de evaluación que demuestren el logro de las
competencias desarrolladas.


Además esta guía cobra relevancia, pues, es el insumo principal para virtualizar nuestro
curso Fundamentos de Programaciónj.








Luis Alberto Vives Garnique
Docente experto
PEaD – USS Virtual










Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

7
PROGRAMACIÓN DE CONTENIDOS DE APRENDIZAJE

COMPETENCIAS
 Implementar algoritmos y su codificación en un lenguaje de programación, aplicando las técnicas de programación, haciendo uso de su
capacidad lógica, habilidad y destreza, demostrando además capacidades para el trabajo aplicativo y en equipo.
SEMANA TEMAS FINALIDADES FORMATIVAS

Semana 1

del 04 al 11 de mayo



Tema1: Definiciones básicas de fundamentos de
programación
.1.1. Concepto de algoritmo - Concepto de programa
- Traductores e intérpretes - Los lenguajes de programación
.1.2. Datos, tipos de datos y operaciones primitivas
- Constantes, variables
- Operadores, expresiones.
.1.3. Diseño del Algoritmo
- Pseudocódigo - Diagrama de flujo
- Diagrama N – S
.1.4. Concepto de Programa
- Elementos Básicos de un Programa
.1.5. Uso del Lenguaje de Programación Java
.1.6. Sintaxis del Lenguaje Java



 Capacidades
Comprende los conceptos y principios básicos de
la algoritmia y la programación, para la resolución
de problemas.

Analiza y diseña algoritmos usando diagramas de
flujo, pseudocódigos y plasmándolos en un
programa, diferenciando la funcionalidad de las
estructuras básicas de control.

Utiliza las estructuras básicas de control en la
construcción de algoritmos y programas.


 Actitudes

 Reconoce la oportunidad de aplicar algoritmos y
programas en situaciones reales.

 Distingue entre los diversos problemas la
oportunidad de utilizar estructuras de control.

 Es creativo al generar planteamientos y
soluciones innovadoras a los problemas que se le
presentan.
Semana 2


Tema2: Estructuras de control I
2.1. Estructuras Secuenciales
2.2. Estructuras Condicionales
- Simples (if)
- Dobles (if – else)
- Múltiples (Switch)
2.3. Conversión de Algoritmos a Programas
2.4. Creación de programas en Java

Semana 3

Tema3: Estructuras de Control II

3.1. Estructuras Repetitivas
Mientras / Hacer
Mientras (While, Do-while)
Estructura Repetitiva Desde (For)
3.2. Conversión de Algoritmos a Programas
3.3. Creación de programas en Java
Semana 4


Tema4: Introducción a la Estructura de Datos
4.1. Arreglos unidimensionales
4.2. Operaciones con vectores
4.3. Métodos de ordenamiento y búsqueda

 Capacidades
 Utiliza eficientemente estructuras de datos
estáticas en la solución de problemas.
 Aplica adecuadamente algoritmos y programas
recursivos para resolver problemas específicos.
 Implementa apropiadamente archivos de datos
para su aplicación en problemas de nivel
intermedio.
 Comprende el manejo de memoria de las
estructuras estáticas.
 Resuelve problemas asociados a la manipulación
de cadenas.

 Actitudes
 Asume una actitud de respeto ante sus
semejantes, mostrándose responsable en las
diversas actividades.

 Demuestra solidaridad en el trabajo cooperativo y
tolerancia en la resolución de discrepancias en las
opiniones y actitudes de los demás.

 Asume una actitud de respeto ante sus
semejantes, mostrándose responsable en las
diversas actividades.
Semana 5

Tema5: Cadenas de Caracteres.

5.1. Cadena de Caracteres
Operaciones y funciones de cadenas.

Semana 6

Tema6: Introducción a métodos
6.1. Modularización
6.2. Programación con métodos
Semana 7

Tema7: Arreglos dimensionales
6.3. Arreglos bidimensionales
6.4. Operaciones con arreglos bidimensionales
6.5. Exposiciones Finales



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

8





«Los mejores programadores… son un orden de magnitud mejores, medidos en cualquier
estándar: creatividad conceptual, velocidad, ingenuidad de diseño o capacidad de resolver
problemas»

Randall E. Stross











 Bienvenida

Estimados estudiantes ¡bienvenidos! a la primera semana del curso, en la cual conoceremos los
fundamentos necesarios para despertar tu lógica, la cual te llevara al mundo de la programación y podrás
desarrollar soluciones a problemas de la realidad usando algoritmos y su codificación en un lenguaje de
programación.

 Ruta de aprendizaje
Durante la primera semana que corresponde del 06 al 12 de mayo realizaremos las siguientes
actividades, no sin antes haber descargado y revisado el silabo del curso, la guía de aprendizaje y haber
respondido la evaluación diagnóstica, luego emprenderemos la siguiente ruta:

- Concepto de algoritmo - Concepto de programa
- Datos, tipos de datos y operaciones primitivas
- Diseño del Algoritmo
- Concepto de Programa
- Uso del Lenguaje de Programación
- Sintaxis del Lenguaje

Es preciso recordarte que para que cumplas los objetivos planteados debes planificar tu tiempo, pues
estas actividades demandan 10 horas de estudio semanales.
Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura

Primera Semana
“Conozcamos los principales conceptos que ayudan a explicar los fundamentos
de la programación, el análisis y diseño de los algoritmos y su codificación en un
lenguaje de programación, esto constituye una pieza clave para el desarrollo de
sistema de software”
(06 al 12 de mayo)
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

9
Tema 1

Definiciones básicas de fundamentos de
programación


 Introducción al tema

Imagínate que deseas realizar un programa sobre el cálculo de horas a pagar de un trabajador
promedio, y solo llegas a sentarte frente a tu computadora sin haber planeado como enfrentar el
programa, llevas horas y horas ingresando código y probando los resultados. Luego de “x” horas te
desesperas y aún no has llegado a resolver lo del pago de horas adicionales trabajadas!.

Aquí puedes apreciar un ejemplo de lo que puede suceder si solamente llegas a escribir código y
código sin haber planificado antes lo que harías en el programa.

 Aprendizajes esperados

Conozcamos ahora las capacidades y actitudes a desarrollar en este primer tema:
Capacidades
- Comprende los conceptos y principios básicos de la algoritmia y la programación, para la
resolución de problemas.

Actitudes
- Reconoce la oportunidad de aplicar algoritmos y programas en situaciones reales.
- Distingue entre los diversos problemas la oportunidad de utilizar estructuras de control.
- Es creativo al generar planteamientos y soluciones innovadoras a los problemas que se le
presentan.





F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

10
 Mapa conceptual referido al tema

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera
sintetizada los principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te
llaman la atención?






Fuente: Elaboración propia






Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

11
 Desarrollo de los contenidos de aprendizaje

1.1 ALGORITMOS
Se deriva de la traducción al latín de la palabra árabe Alkhowarismi, nombre de un matemático y
astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo
IX.
Un algoritmo es un método para resolver un problema mediante una serie de pasos
precisos, definidos y finitos.
Características de los Algoritmos

1. Preciso, tiene que indicar el orden de realización en cada paso.
2. Definido, es decir, si el algoritmo se prueba dos veces, en estas dos pruebas, se debe
obtener el mismo resultado.
3. Finito, es decir, que el algoritmo tiene que tener un número determinado de pasos.

Ejemplos de algoritmos cotidianos:
A. Ver una película
1. Buscar el DVD de la película
2. SI el televisor y el DVD se encuentran apagados, encenderlos
3. Sacar el DVD de la película del estuche
4. Introducirlo en el DVD casetera
5. Tomar el control del televisor y del DVD
6. Dirigirme al sofá
7. Ponerme cómodo
8. Disfrutar la película
Fíjate como he descrito en estos pasos el algoritmo para poder ver una película en el DVD, este
pequeño algoritmo cumple con los requisitos descritos arriba, ya que cada paso precisa un orden
y tiene un orden de pasos finitos. En este algoritmo aparece la palabra SI remarcada en
mayúsculas, el uso de esta palabra la veremos más adelante, cuando discutamos sobre las
estructuras de control.
Los algoritmos se pueden expresar por fórmulas, diagramas de flujo, y pseudocódigos conocidos
como herramientas de programación. Esta última representación es la más utilizada por su
sencillez y parecido al lenguaje humano.
B. Cambiar una llanta a un carro.
1. Inicio.
2. Traer gata.
3. Levantar el coche con la gata.
4. Aflojar tornillos de las llantas.
5. Sacar los tornillos de las llantas.
6. Quitar la llanta.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

12
7. Poner la llanta de repuesto.
8. Poner los tornillos.
9. Apretar los tornillos.
10. Bajar la gata.
11. Fin.
1.2 Definición de Lenguajes Algorítmicos
Los algoritmos se pueden describirse utilizando diversos lenguajes. Cada uno de estos lenguajes
permiten describir los pasos con mayor o menor detalle.
La clasificación de los lenguajes para algoritmos puede enunciarse de la siguiente manera:
- Lenguaje Natural
Es aquél que describe en español, para nuestro caso, los pasos a seguir utilizando un
vocabulario cotidiano. Se le conoce como lenguaje jerga cuando se utilizan términos
especializados de una determinada ciencia, profesión o grupo.
- Lenguaje de Diagrama de Flujo
Es aquél que se vale de diversos símbolos para representar las ideas o acciones a desarrollar.
Es útil para organizar las acciones o pasos de un algoritmo pero requiere de etapas posteriores
para implementarse en un sistema de cómputo.
- Lenguaje Natural de Programación
Son aquéllos que están orientados a la solución de problemas que se definen de una manera
precisa. Generalmente son aplicados para la elaboración de fórmulas o métodos científicos.
- Lenguaje de Programación:
Es un conjunto de palabras, símbolos y reglas sintácticas mediante los cuales puede indicarse a
la computadora los pasos a seguir para resolver un problema.
Los lenguajes de programación pueden clasificarse por diversos criterios, siendo el más común
su nivel de semejanza con el lenguaje natural, y su capacidad de manejo de niveles internos de
la máquina.
1.3 Los principales tipos de lenguajes utilizados son tres:
Lenguaje Máquina
Son aquéllos que están escritos en lenguajes directamente inteligibles por la máquina
(computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de caracteres
de dígitos 0 y 1) que especifican una operación y las posiciones (dirección) de memoria implicadas
en la operación se denominan instrucciones de máquina o código máquina. El código máquina
es el conocido código binario.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

13
Las instrucciones en lenguaje máquina dependen del hardware de la computadora y, por tanto,
diferirán de una computadora a otra.
Ventajas del Lenguaje Máquina
Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción
posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de
programación. En la actualidad, las desventajas superan a las ventajas, lo que hace
prácticamente no recomendables a los lenguajes máquinas.
Lenguajes de Bajo Nivel
Son más fáciles de utilizar que los lenguajes máquina, pero al igual que ellos, dependen de la
máquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las
instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos. Por
ejemplo, nemotécnicos típicos de operaciones aritméticas son: en inglés: ADD, SUB, DIV, etc.;
en español: SUM, RES, DIV, etc.
Una instrucción típica de suma sería:
ADD M, N, P
Esta instrucción significa "sumar el contenido en la posición de memoria M al número
almacenado en la posición de memoria N y situar el resultado en la posición de memoria P”.
Evidentemente es más sencillo recordar la instrucción anterior con un nemotécnico que su
equivalente en código máquina.
0110 1001 1010 1011
Un programa escrito en lenguaje ensamblador, requiere de una fase de traducción al lenguaje
máquina para poder ser ejecutado directamente por la computadora.
El programa original escrito en lenguaje ensamblador se denomina programa fuente y el
programa traducido en lenguaje máquina se conoce como programa objeto, el cual ya es
directamente entendible por la computadora.
Ventajas del lenguaje ensamblador frente al lenguaje máquina
- Mayor facilidad de codificación y, en general, su velocidad de cálculo.
Lenguajes de Alto Nivel
Estos lenguajes son los más utilizados por los programadores. Están diseñados para que las
personas escriban y entiendan los programas de un modo mucho más fácil que los lenguajes
máquina y ensambladores. Un programa escrito en lenguaje de alto nivel es independiente de la
máquina (las instrucciones no dependen del diseño del hardware o de una computadora en
particular), por lo que estos programas son portables o transportables. Los programas escritos
en lenguaje de alto nivel pueden ser ejecutados con poca o ninguna modificación en diferentes
tipos de computadoras.


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

14
1.4 Fases para la Resolución de Problemas
En esta sección describimos brevemente las fases o pasos a seguir para la resolución de
problemas con ayuda de la computadora.
- Definición y Análisis del Problema
Esta fase requiere una clara definición donde se contemple exactamente lo que debe hacer el
programa y el resultado o solución deseada.
Dado que se busca una solución se precisan especificaciones de entrada y salida.
Para poder definir bien un problema es conveniente responder a las siguientes preguntas:
- ¿Qué entradas se requieren? (cantidad y tipo)
- ¿Cuál es la salida deseada? (cantidad y tipo)
- ¿Qué método produce la salida deseada?

- Diseño del Algoritmo
En la fase de análisis en el proceso de programación se determina que hace el programa. En la
fase de diseño se determina como hace el programa la tarea solicitada.
Los métodos utilizados para el proceso del diseño se basan en el conocido divide y vencerás. Es
decir la resolución de un problema complejo se realiza dividiendo el problema en sub problemas y
a continuación dividir estos sub problemas en otros de nivel más bajo, hasta que sea
implementada una solución en la computadora. Este método se conoce técnicamente como
diseño descendente (top-down) o modular.
Cada programa bien diseñado consta de un programa principal (el módulo de nivel más alto) que
llama a subprogramas (módulos) de nivel más bajo, que a su vez pueden llamar a otros
subprogramas.
Los módulos pueden ser planeados, codificados, comprobados y depurados independientemente
y a continuación combinarlos entre sí. Este proceso implica la ejecución de estos pasos hasta que
el programa se ha terminado:
- Programar un módulo
- comprobar el módulo
- Si es necesario, depurar el módulo
- Combinar el módulo, con el resto de los otros módulos
El diseño del algoritmo es independiente del lenguaje de programación en el que se vaya a
codificar posteriormente.
Implementación del Algoritmo
Para implementar un algoritmo en la computadora, se debe ejecutar los siguientes pasos:
- Codificación
- Compilación y ejecución
o Verificación
o Depuración
- Documentación



Codificación:

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

15
Es la escritura en un lenguaje de programación de la representación de un algoritmo. Dado que el
diseño del algoritmo es independiente del lenguaje de programación utilizado en su
implementación, el código puede ser escrito con igual facilidad en un lenguaje o en otro.
Si la codificación original se realizó en papel, previo a la compilación deberá existir un paso
conocido como trascripción.

Compilación y ejecución:
Una vez que el algoritmo se ha convertido en un programa fuente, es preciso introducirlo en
memoria mediante el teclado y almacenarlo posteriormente en un disco. Esta operación se realiza
con un editor de texto, posteriormente el programa fuente se convierte en un archivo de programa
que se guarda en un disco.
El programa fuente debe ser traducido a lenguaje máquina. Este proceso se realiza con el
compilador y el sistema operativo que se encarga prácticamente de la compilación. Si al compilar
el programa fuente se presentan errores (errores de compilación), es necesario volver a editar el
programa, corregir los errores y compilar de nuevo. Esto se repite hasta que ya no se presenten
más errores, obteniéndose el programa objeto, el cual todavía no es ejecutable directamente. Al
ya no existir errores en el programa fuente se debe instruir al sistema operativo para que efectúe
la fase de montaje o enlace, del programa fuente con las librerías del programa del compilador.
Este proceso de montaje produce un programa ejecutable.

Documentación:
La importancia de la documentación debe ser destacada por su influencia en la etapa final, ya que
programas pobremente documentados son difíciles de leer, más difíciles de depurar y casi
imposibles de mantener y modificar.
Puede ser interna y externa. La documentación interna es la contenida en líneas de comentarios.
La documentación externa incluye análisis, diagramas de flujo y/o pseudocodigos, manuales de
usuarios con instrucciones para ejecutar el programa y para interpretar los resultados.
La documentación es vital cuando se desea corregir posibles errores futuros o bien cambiar el
programa. Estos cambios se denominan mantenimiento del programa.
Además es de buena costumbre para todo buen programador, dejar comentado su código, esto
es para que el futuro programador pueda darle mantenimiento fácilmente a el programa, o incluso,
si es el mismo creador quien debe darle mantenimiento.

 Autoevaluación

Explora ahora tu nivel de aprendizaje.

1. Indica la falsedad o veracidad de las siguientes expresiones: 2 puntos cada uno.

Expresiones
a. El algoritmo es independiente del Lenguaje de Programación V F
b. Un Algoritmo debe ser preciso V F
c. Si se sigue dos veces un algoritmo, llegamos a obtener dos
respuestas diferentes
V F
d. El diagrama de flujo se presenta por medio de códigos

V F



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

16
2. Que diferencias encuentras entre un Lenguaje de Programación y un Lenguaje de Bajo Nivel
3. Describa las fases para resolver problemas con respecto a los algoritmos
4. Mencione 5 lenguajes de programación existentes
5. Mencione y describa 3 técnicas más usadas para representar los algoritmos.

 Taller N° 01
Como ejercicio te recomendaría que escribieras algunos algoritmos de sucesos en tu vida cotidiana,
como por ejemplo:
1. Encender el auto.
2. Ir al cine.
3. Hacer un depósito al banco.
4. Ir a la playa.
5. Imprimir un documento escrito en un procesador de texto.
6. Realizar una llamada telefónica desde un teléfono público.
7. Cambiar la llanta de un vehículo.
8. Comprar una prenda.
9. Jugar futbol.
10. Registrar Matricula en la USS.
11. Hacer un viaje a Lima por avión.
12. Quemar un archivo de texto en un Cd.
13. Formatear el disco duro de la Pc.
14. Crear un carpeta en el disco D:/ de tu Pc.
15. Buscar el número de teléfono de un alumno en tu celular
16. Quitar un foco quemado de un techo
17. Encontrar la media de una lista indeterminada de números positivos terminada con un número
negativo.











Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

17
1.5 ENTIDADES BÁSICAS PARA EL DESARROLLO DE ALGORITMOS

1.5.1 Datos
Todos los datos tienen un tipo asociados con ellos que nos servirá para poder conocer con que
información trabajaremos. Es decir, cuando ingresemos el sueldo de un trabajador necesitamos que
este contenga decimales, o al solicitar la edad de una persona está tiene que estar con números
enteros u otros casos. Además la suma entre caracteres no tiene sentido.
La asignación de tipos a los datos tiene dos objetivos principales:
 Detectar errores de operaciones aritméticas en los programas
 Determinar cómo ejecutar las operaciones.

Tipos de Datos Numéricos
Dentro de estos tipos se puede hacer mención de los tipos enteros (integer), reales o de coma
flotante, y de los exponenciales.
- Enteros
Es un conjunto finito de los números enteros. Los enteros son números completos, no
tienen componentes fraccionarios o decimales y pueden ser negativos y positivos.
Algunos ejemplos son:
- 7
- -10
- 15
- -50
- Reales
Consiste en un subconjunto de los números reales. Estos números siempre tienen un
punto decimal y pueden ser positivos o negativos. Un número real consiste de un
número entero y una parte decimal. Algunos ejemplos son:
- 0.52
- 6.579
- -47.23
Tipos de Datos Carácter o Tipo Cadena (String)
Los tipos de datos carácter se dividen también en caracteres ASCII, como por ejemplo: a A
, /, * ; entre otros.
El otro grupo de caracteres son los strings o cadenas de caracteres, como por ejemplo:
"Hola Mundo".
- Tipo Carácter
Es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato
de este tipo contiene solo un carácter.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

18
Reconoce los siguientes caracteres:
- Caracteres Alfabéticos (A,B,C,…Z,a,b,c…z)
- Caracteres Numéricos (0,1,2,…9)
- Caracteres Especiales (+, -, *, /, ^, . , ;, <, >, $, …….)
- Tipo Cadena (String)
Es una sucesión de caracteres que se encuentran delimitados por una comilla
(apóstrofe) o dobles comillas, según el tipo de lenguaje de programación. La longitud de
una cadena de caracteres es el número de ellos comprendidos entre los separadores o
delimitadores.
Ejemplos:
- “Hola AMOR”
- “30 de mayo del 2020”
- „Enunciado cualquiera‟
Nota: Los símbolos disponibles para la formulación de caracteres y de cadenas son
aquéllos que se encuentran en el código ASCII
MUY MUY IMPORTANTE
Revisa el código ASCII (American Standard Code for Information Interchange).
Indica el valor que tiene la letra A y la letra a, así como también la letra B mayúscula y
minúscula.
Resolver: ¿Qué relación encuentras entre sus valores?
Cuadro N°01: Tipos de datos, palabras reservadas y tamaño en Byte
TIPO PALABRA RESERVADA TAMAÑO EN BYTES
sin valor Void 0
carácter Char 1
entero Int 2
coma flotante (simple precisión) Float 4
coma flotante (doble precisión) Doublé 8
Fuente: Elaboración propia
Tipos de Datos Lógicos
Los tipos lógicos solamente pueden tomar los valores verdadero (true) o falso (false).
Se utiliza para representar las alternativas (si/no) a determinadas condiciones. Por ejemplo,
cuando se pide si un valor entero sea primo, la respuesta será verdadera o falsa, según
sea.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

19
- And Y
- Or O
- Not Negación
1.5.2 Los Identificadores
Representan los nombres de los objetos de un programa (constantes, variables, tipos de datos,
procedimientos, funciones, etc.). Es una secuencia de caracteres que puede ser de cualquier
longitud, aunque tiene ciertas reglas que hay que seguir, las cuales son:

1. Debe comenzar con una letra o "_" y no puede contener espacios en blanco.
2. Letras, dígitos y caracteres subrayados ("_") están permitidos después del primer carácter.
En síntesis un identificador es un método para nombrar a las celdas de memoria en la
computadora, en lugar de memorizarnos una dirección de memoria.
Se utilizan para nombrar variables, constantes, procedimientos y funciones.
Ejemplos
- numero
- horas_trabajadas
- _prom
- $total_pago
- promedio

Constantes

Las constantes son valores que no pueden cambiar en la ejecución del programa o de un
algoritmo. Recibe un valor en el momento de la compilación del programa y este no puede ser
modificado.

CONSTANTES REALES VALIDAS CONSTANTES REALES NO VALIDAS
1.26
-0.34
+5.236
1, 26
-0, 34
+5, 236

- CONSTANTES TIPO CARÁCTER:
„A‟ , „B` , ………….. „+‟ , „ – „ ,……….‟1‟ , „2‟ , ………
Una secuencia de caracteres se denomina una cadena y una constante tipo cadena
encerrada entre apóstrofos.
Ejemplo:
„Hola a todos‟

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

20
„Feliz Aniversario‟

- CONSTANTES LOGICAS (BOOLEAN):
True (verdadero) o False(Falso)


Variables
Las variables son valores que se pueden modificar durante el desarrollo de un algoritmo o la
ejecución de un programa. Al contrario de las constantes estas reciben un valor, pero este valor
puede ser modificado. Dependiendo del lenguaje de programación hay diversos tipos de
variables: enteros, reales, lógicos, carácter, y de cadena.
Una Variable se identifica por los siguientes atributos:

NOMBRE TIPO
Debe ser significativo y debe tener
relación con el objeto que representan.
Por Ejemplo:
EDAD
NOMBRE
NOTA
Pueden ser de tipo: entero, real o punto
flotante; carácter.
Siguiendo el Ej.

Integer
String
Integer o real

Clasificación de las Variables
Por su Contenido Por su Uso
Numéricas De Trabajo
Lógicas Contadores
Alfanuméricas (String) Acumuladores
- Por su Contenido
Variable Numéricas: Son aquellas en las cuales se almacenan valores numéricos,
positivos o negativos, es decir almacenan números del 0 al 9, signos (+ y -) y el punto
decimal. Ejemplo:

iva=0.15 pi=3.1416 costo=2500
Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso)
estos representan el resultado de una comparación entre otros datos.
Variables Alfanuméricas: Está formada por caracteres alfanuméricos (letras,
números y caracteres especiales). Ejemplo:

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

21
Letra=‟a‟ apellido=‟lopez‟ direccion=‟Av. Libertad #190‟
- Por su Uso
Variables de Trabajo: Variables que reciben el resultado de una operación
matemática completa y que se usan normalmente dentro de un programa. Ejemplo:
suma=a+b+c
Contadores: Se utilizan para llevar el control del número de ocasiones en que se
realiza una operación o se cumple una condición. Con los incrementos generalmente
de uno en uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la suma
acumulativa de una serie de valores que se van leyendo o calculando
progresivamente.
Expresiones
Son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de
funciones especiales.
Una expresión consta de OPERANDOS y OPERADORES. Las expresiones se clasifican en:







Una expresión es un conjunto de datos o funciones unidos por operadores aritméticos, los
cuales se muestran en la siguiente tabla:

Operador Significado
+ Suma
- Resta
* Multiplicación
/ División
^ Exponenciación
Mod Módulo

1.5.3 Los Operadores
Operadores Div y Mod
El símbolo / se utiliza para la división real, y el operador Div representa la división entera.
Expresión Resultado
1. Aritméticas
2. Relacionales
3. Lógicas
4. Carácter
Aritméticas
Lógica
Lógica
Carácter

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

22
El símbolo mod o % se usa para obtener el residuo de la división de dos números ENTEROS
Expresión
valores reales
Resultado Expresión
valores enteros
Resultado
10.5/3.0 3.5 10 Div 3 3
1/4 0.25 18 Div 2 9
2.0/4.0 0.5 30 Div 30 1
30/30 1.0 10 Mod 3 1
6/8 0.75 10 Mod 2 0

Operadores Relacionales
Permiten realizar comparaciones de valores de tipo numérico o carácter. Estos operadores
sirven para expresar las condiciones en los algoritmos. Proporcionan resultados lógicos.
Operador Significado
< Menor que
> Mayor que
= Igual que
<= Menor o igual que
>= Mayor o igual que
<> Diferente de


Operadores Lógicos
Son aquéllos que permiten la combinación de condiciones para formar una sola expresión lógica.
Utilizan operandos lógicos y proporcionan resultados lógicos también.
Operador Relación
not Negación (No)
and Conjunción (Y)
or Disyunción (O)
xor Disyunción Exclusiva (O/SOLO)




X Y NOT(X) NOT(Y) X AND Y X OR Y X XOR Y
F F V V F F F
V F F V F V V
F V V F F V V
V V F F V V F
Se obtiene Verdadero si:
NOT El operando es falso
AND Ambos operandos son verdaderos
OR Al menos un operando es verdadero
XOR Solo uno de los operandos son verdadero

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

23

1.5.4 Asignación
La operación de asignación es el modo de darle valores a una variable. La operación de
asignación se conoce como instrucción o sentencia de asignación cuando se refiere a un
lenguaje de programación.
A fin de manejar datos por medio de variables, estos pueden recibir valores determinados. El tipo
de los valores que pueden recibir dependen de la declaración previa de tales variables.
En una asignación se resuelve, primeramente la expresión (al lado derecho del símbolo de
asignación) y se asigna el resultado en la variable.
El formato general de asignación es:
Nom_variable ← Expresión
Donde Expresión puede ser una variable o constante, operación, función.
Ejemplo:
A  9
Significa que la variable A se le ha asignado el valor 9. La acción de asignar es destructiva, ya
que el valor que tuviera la variable antes de la asignación se pierde y se reemplaza por el nuevo
valor. Así en la secuencia de operaciones:
A  30
A 189
A  9
Cuando se ejecutan, el último valor que toma A será 9, ya que los valores anteriores a este han
desaparecido.
Las acciones de asignación se clasifican según sea el tipo de expresiones: Aritméticas,
Lógicas y de Caracteres.
Asignación Aritmética
Las expresiones en las operaciones de asignación son aritméticas:
Suma  5+10+2
Se evalúa la expresión 5+10+2 y se asigna a la variable Suma, es decir, 17 será el valor que
toma Suma.
Asignación Lógica

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

24
La expresión que se evalúa en la operación de asignación es lógica. Supóngase que M, N, y P
son variables de tipo lógico.
M  8 < 5
N  M o (7 <= 12)
P  7 > 6
Tras ejecutar las operaciones anteriores, las variables M,N,P toman los valores, falso, verdadero,
verdadero respectivamente.
Asignación de caracteres
La operación que se evalúa es de tipo carácter.
x  29 de Julio del 2006'
La acción de asignación anterior asigna la cadena de caracteres '29de Julio del 2006' a la
variable de tipo carácter x.
1.5.5 Precedencia de Operadores
Cuando una expresión aritmética se evalúa, el resultado es un número. Ahora bien,
cuando aparecen dos o más expresiones aritméticas, qué operaciones se realizan
primero?
Una expresión aritmética en programación tiene una sintaxis de la forma:
x
2
+1/2
Hay que observar que esta expresión es totalmente diferente a esta otra (x
2
+1)/2, por lo que es
importante codificar las expresiones aritméticas correctamente.
Para realizar esto se deberán conocer las reglas de evaluación de los operadores, que se
estudian a continuación.

1.5.6 Reglas de Evaluación
Todas las subexpresiones entre paréntesis se evalúan primero. Las subexpresiones entre
paréntesis anidados se evalúan de adentro hacia afuera, es decir, que el paréntesis más interno
se evalúa primero.

Prioridad de Operaciones: Dentro de una misma expresión o subexpresión, los operadores se
evalúan en el siguiente orden:







* , / Multiplicación y división
Div,mod División y Módulo de enteros
+,- Suma y Resta

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

25
Nota:
Los operadores en una misma expresión o subexpresión con igual nivel de prioridad se evalúan de
izquierda a derecha.

1.5.7 Conversión de expresiones aritméticas a expresiones algorítmicas.

Una expresión aritmética tiene una sintaxis de la forma:
( )
4 3 6
3 27 33 4
8
16
* 8 *
2
1
+ ÷ + ÷ |
.
|

\
|

Una expresión algorítmica tiene una sintaxis de la forma:
½* raíz(8*(16/8))-4^6 +(33 – raiz3(27))+potencia(3,4)

La función raíz, utilizada en expresiones algorítmicas me permite obtener la raíz cuadrada de un
número, si a esta sintaxis le agrego un numero como raiz4(numero), estaría referenciando a la raíz
cuarta de un número.
Así mismo para la potencia se puede utilizar la sintaxis: base^exponente, también podemos usar la
palabra reservada potencia(base, exponente).

 Taller N° 2

Explora ahora tu nivel de aprendizaje.

1. Cuáles de los siguientes identificadores no son válidos.
a. Xrayo.
b. X_Rayo.
c. R2D2.
d. X.
e. 45
f. N14
g. ZZZ.
h. 3µ

2. Cuál de las siguientes constantes no son válidas:
a. 234.
b. -8.975
c. 12E - 5.
d. 0
e. 32,767
f. 1/2
g. 3.6 E +7.
h. 3.5 * 10.


3. Evaluar la siguiente Expresión para A=2 y B=5:
3 * A – 4 * B / A ^ 2

4. Escribir las siguientes expresiones algorítmicas como expresiones algebraicas:
a. b^2 – 4 * a * c

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

26
b. 3 * X ^ 4 – 5 * X ^ 3 + X 21 – 17
c. (b + d) / ( c + 4)
d. ( x ^ 2 + y ^ 2 ) ^ (1 / 2)

5. ¿Cuál es el resultado de las siguientes expresiones?
a. -4 * 7+ 2 ^ 3/4- 5
b. 12+ 3 * 7+ 5 * 4
c. (33+ 3 * 4)/ 5
d. 7 mod 5(mod 3)
e. B^2- 4 * A * C
f. (X ^ 2 + Y ^ 2) ^(1/2)
g. (7* (10 – 5) mod 3) * 4+ 9
h. ((-14 / 2) raiz 64 + 100)/ 2*2
i. ((12 + 30) div 2) / (8 – (5 *1))
j. 14 div 3 + 3+(3*3/3)+5/ 3


1.6 Construcción y Representación de Algoritmos
1.6.1 Técnicas para la formulación de Algoritmos
Las herramientas de programación más utilizadas comúnmente para diseñar algoritmos son:
- Descripción Narrada
- Pseudocódigos
- Diagramas de flujo
- Diagramas N-S
Siendo el pseudocódigo el más popular por su sencillez y su parecido al lenguaje humano
correctos del programa.
Para representar un algoritmo se debe utilizar algún método que permita independizar dicho
algoritmo del lenguaje de programación elegido. Ello permitirá que un algoritmo pueda ser
codificado indistintamente en cualquier lenguaje. Para conseguir este objetivo se precisa que el
algoritmo sea representado gráfica o numéricamente, de modo que las sucesivas acciones no
dependan de la sintaxis de ningún lenguaje de programación, sino que la descripción pueda
servir fácilmente para su transformación en un programa, es decir, su codificación.
Descripción Narrada.

Este algoritmo es caracterizado porque sigue un proceso de ejecución común y lógico,
describiendo textualmente paso a paso cada una de las actividades a realizar dentro de
una actividad determinada.

Ejemplo 1 Algoritmo para asistir a clases a la USS:

1. Levantarse
2. Bañarse
3. Vestirse
4. Desayunar

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

27
5. Cepillarse los dientes
6. Salir de casa
7. Tomar el autobús
8. Llegar a la USS
9. Buscar el aula
10. Ubicarse en un asiento

PSEUDOCÓDIGOS
Pseudo = falso. El pseudo código no es realmente un código sino una imitación y una versión
abreviada de instrucciones reales para las computadoras. Es una técnica para diseño de
programas que permite definir las estructuras de datos, las operaciones que se aplicarán a los
datos y la lógica que tendrá el programa de computadora para solucionar un determinado
problema. Utiliza un pseudolenguaje muy parecido a nuestro idioma, pero que respeta las
directrices y los elementos de los lenguajes de programación. Se concibió para superar las dos
principales desventajas de los flujogramas: lento de crear y difícil de modificar sin un nuevo
redibujo.
Palabras reservadas
Inicio ó Start
Sentencia 1 sentencia 1
Sentencia 2 sentencia 2
……. …….
Fin end
Estilo de escritura de algoritmos / programas
Algoritmo identificador //cabecera
Inicio
// sección de declaraciones //
Var tipo de datos: lista de identificadores
Const lista de identificadores = valor
<sentencia 1>
<sentencia 2> // cuerpo del algoritmo //
……
Fin


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

28
Notas:
*Las cadenas de caracteres se encerraran entre comillas
*En ocasiones la declaración de constantes y variables la omitiremos.
*Utilizar siempre sangrías en los bucles para dar legibilidad al algoritmo/ programa.

Ejemplo:
1. Escriba un algoritmo para expresar en centímetros y pulgadas una cantidad dada en
metros. Utilizando conceptos computacionales de variable, entrada de datos y salida de
resultados.
La solución considera que 1 metro = 100 centímetros y que 1 pulgada = 2.54 centímetros.
Algoritmo ConversioMetros_Pulgadas_Centimetros
INICIO
Definir metros,centi,pulg Como Real;
Escribir "Ingrese la cantidad en metros: "; //mensaje de salida
Leer metros; // ingreso de datos
centi<- metros*100;
pulg<-centi/2.54;
Escribir "La cantidad de metros convertida a centimetros es: ",centi;
Escribir "La cantidad de metros convertida a pulgadas es: ",pulg;
FIN

Otra forma:

Algoritmo ConversioMetros_Pulgadas_Centimetros
START
Definir metros,centi,pulg Como Real;
write "Ingrese la cantidad en metros: "; //mensaje de salida
read metros; // ingreso de datos
centi<- metros*100;
pulg<-centi/2.54;
write "La cantidad de metros convertida a centimetros es: ",centi;
write "La cantidad de metros convertida a pulgadas es: ",pulg;
EDN

El algoritmo empieza con el nombre del algoritmo: ConversioMetros_Pulgadas_Centimetros,
el cual se escribe con la primera letra con mayúscula, no contiene espacios entre las
palabras.
Luego continua la palabra Start(inicio) y finaliza con la palabra end (fin), entre estas palabras
solo se escribe una instrucción o acción por línea.

Continuamos con la definición de variables, las cuales pueden tener las siguientes
estructuras:
- Var: tipo_dato variable o variables;
Ejemplo:
Var: real metro, centi, pulg;

- Definir variable o variables Como tipo_dato;
Ejemplo
Definir metros,centi,pulg Como Real;


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

29
La línea precedida por // se llama comentario
Recordar que cada sentencia finaliza con un punto y coma, a excepción de las estructuras
de control.
El objetivo del pseudocódigo es permitir que el programador se centre en los aspectos
lógicos de la solución, evitando las reglas de sintaxis de los lenguajes de programación.
No siendo el pseudocódigo un lenguaje formal, los pseudocódigos varían de un
programador a otro, es decir, no hay un pseudocódigo estándar.

Diagrama de Flujo (flowchart)
Es una de las técnicas de representación de algoritmo más antigua y a la vez
más utilizada, aunque se empleo ha disminuido considerablemente, sobre todo
desde la aparición de lenguajes de programación estructurados. Un diagrama de
flujo es un diagrama que utiliza los símbolos (cajas) estándar mostrados en la
figura 3.1 y que tiene los pasos del algoritmo escritos en esas cajas unidas por
flechas, denominadas líneas de flujo, que indican la secuencia en que se deben
ejecutar.

FIGURA 3.1:





Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

30



Reglas para la construcción de diagramas de flujo
a) Todo Diagrama de flujo debe de tener un inicio y un fin








b) Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser
rectas, verticales y horizontales.
INICIO
FIN
Figura.- Inicio/Fin de un diagrama de flujo


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

31



c) Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben
estar conectadas. La conexión puede ser a un símbolo que exprese lectura,
proceso, decisión, impresión, conexión o fin de diagrama.








Ejemplo:

1. Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio
de la hora de trabajo y considerando unos descuentos fijos al salario bruto en concepto de
impuestos (25%).

INICIO
nombre, bruto, hora, precio, tasa, neto
Leer:
nombre,hora, precio
bruto<- hora*precio
tasa <- 0.25*bruto
Neto<- bruto - tasa
Escribir
nombre,bruto, tasa,
neto
FIN

No valido
Valido
No valido
Figura 1.18. Uso correcto de flechas en un Diagrama de Flujo.

Figura 1.19. Uso Incorrecto de flechas en un Diagrama de Flujo.


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

32

El diagrama anterior representa la resolución de un programa que deduce el salario neto de un
trabajador a partir de la lectura del nombre, horas trabajadas, precio de la hora, y sabiendo que
los impuestos aplicados son el 25 por 100 sobre el salario bruto.
Los símbolos estándar normalizados por ANSI (abreviatura de America National Standard
Institute) son muy variados.

Para el curso de Algoritmos solo se usarán los SÍMBOLOS:
- TERMINAL
- ENTRADA/SALIDA (O TAMBIÉN EL SÍMBOLO DE TECLADO PARA ENTRADA Y
EL SÍMBOLO PANTALLA PARA SALIDA)
- PROCESO
- DECISIÓN
- CONECTOR


Reglas para el uso de algoritmos

- El Diagrama se dibuja de arriba hacia abajo, las figuras se conectan con flechas, en caso
de faltar espacio en el papel, se usan conectores para saber dónde continua el diagrama.

- Se debe de declarar las variables que se van a utilizar, algunas variables que se
reutilizaran constantemente para almacenar un valor, deben de inicializar en 0.
a, b, suma<-0, prod<-0

- Las variables deben de ser utilizadas de la mismas manera como fueron declaradas,
respetando las mayúsculas y minúsculas.
- En un Símbolo de Entrada/Salida o Leer/Mostrar debe especificarse si se está usando
para entrada o salida en el encabezado del símbolo.
- El Símbolo de entrada puede representar la entrada de varias variables a la vez pero
deben estar separadas por comas.
Leer:
a, b

- El símbolo de salida puede representar la salida de varias variables a la vez pero deben
estar separadas por comas

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

33
Escribir:
suma, prod

- El símbolo de Proceso puede incluir hasta 3 procesos separados por línea
suma<-a+b
prod<- a*b


- Todo diagrama debe tener un terminal de INICIO y uno de FINAL.
- Los Rombos de Decisión solo pueden tener una flecha de llegada, pero deben tener 2
salidas obligatorias y el participante debe indicar con un SI el flujo en caso el TEST sea
verdadero y con un NO el flujo a seguir en caso el TEST sea Falso.






Diagramas N-S (Nassi-Schneiderman o de Chapin)
Son una herramienta que favorece la programación estructurada y reúne características
gráficas propias de diagramas de flujo y lingüísticas propias de pseudocódigos. Constan
de una serie de cajas contiguas que se leerán siempre de arriba-abajo.









Nota: Mas adelante vamos ir viendo el resto de representaciones de los diagramas N-S




Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

34

EJERCICIOS RESUELTOS

1. Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio de
la hora de trabajo y considerando unos descuentos fijos al salario bruto en concepto de
impuestos (25%).
Solución2:
En Pseudocódigo
Inicio
Var:
Enteros: ht,ph,sb,sn,igv
Leer (ht, ph)
sb← ht*ph
igv←sb*0.25
sn←sb-igv
escribir (sb,sn,igv)
Fin
En Diagrama de Flujo

ht,ph,sb,igv,sn
sb<- ht*ph
igv<- sb*0.25
sn<- sb-igv
Inicio
Leer:
ht,ph
Escribir:
sb,igv,sn
Fin




ht: Horas Trabajadas
ph: Pago por hora trabajada
sb: Salario bruto
sn: Salario Neto
igv: Impuesto peruano IGV

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

35
2. Construya un Algoritmo, para ingresar 3 notas de un estudiante y publicar su promedio.

Algoritmo NotaFinal
INICIO
Definir n1,n2,n3,nf Como Real;
Escribir "Ingrese nota 1: ";
Leer n1;
Escribir "Ingrese nota 2: ";
Leer n2;
Escribir "Ingrese nota 3: ";
Leer n3;
nf<-(n1+n2+n3)/3;
Escribir "El promedio obtenido es:",nf;
FIN

3. Construya un algoritmo para calcular el total de 3 ventas realizadas por un vendedor y la
comisión del vendedor que es el 10% del total de las ventas, así mismo el sueldo del trabajador
que se obtiene de sumar su sueldo base más la comisión.
Proceso Sueldo
Definir sb,vt,v1,v2,v3,ganancia,comision Como Real;
comision<-0.10;
Escribir "Ingrese el sueldo base: ";
Leer sb;
Escribir "Ingrese venta 1: ";
Leer v1;
Escribir "Ingrese Venta 2: ";
Leer v2;
Escribir "Ingrese Venta 3: ";
Leer v3;
vt<-v1+v2+v3;
ganancia<-sb+(vt*comision);
Escribir "Las ventas todales es: ",vt;
Escribir "La ganancia del trabajador es: ",ganancia;
FinProceso




Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

36
INICIO
sb,vt,v1,v2,v3,ganancia,comision
Leer:
sb,vt,v1,v2,v3
vt<-v1+v2+v3;
ganancia<-sb+(vt*comision);
Escribir
vt,ganancia
FIN



4. Construya un Algoritmo para calcular el salario neto de un trabajador en función del número de
horas trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al sueldo
bruto en concepto de impuestos (20 por 100).
Aquí se representa mediante un Diagrama N-S



















 Taller N° 03

Explora ahora tu nivel de aprendizaje.

Escribir un algoritmo para:

a. Sumar dos números enteros.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

37
b. Leer un número y escriba su cuadrado
c. Calcular la superficie de un circulo
d. Convertir metros a pies y a pulgadas ( 1 metro = 39.37 pulgadas, 1 pie=12 pulgadas)
e. Convierta una temperatura dada en grados Celsius a grados Fahrenheit. Formula: (9/5)C +
32.
f. Calcula la longitud de la Hipotenusa de un triángulo rectángulo, conociendo las longitudes
de sus catetos.
g. Hacer un programa que pida 2 Radios R1 y R2. Calcule las respectivas áreas de los
círculos y halle la diferencia de áreas y muestre esta diferencia como respuesta.
h. Convertir el valor 15 dado en Km. a Decámetro, metros y milímetros.
i. Convertir N pulgadas a Metros y a Yardas.
j. Calcule el monto parcial (cantidad * precio), el IGV (18% del monto parcial) y el monto total
(monto parcial + IGV) que debe pagarse por comprar una determinada cantidad de un
producto, que cuesta determinado precio.
k. En un curso se han establecido tres notas: nota de trabajos T, nota de medio ciclo M y nota
de fin de ciclo F, cada una con un peso de 40%, 30% y 30% respectivamente. Calcular el
promedio de un alumno.
l. Calcular el salario que recibirá un trabajador, si se conoce el número de horas trabajadas
y el pago que recibe por hora. Considere además que por concepto de AFP se le
descuenta el 7%.
m. Calcular el número de días que ha vivido una persona a partir de su edad. Considere cada
año como 365 días.
n. Ingresar un número que represente segundos y determinar a cuanto equivale en horas,
minutos y segundos.
o. La distancia entre dos puntos (X1, Y1) y (X2, Y2) de un plano se puede obtener sacando la
raíz cuadrada de la expresión (X2 – X1)2 + (Y2 – Y1)2. Escribir un programa que dados dos
puntos por el usuario, calcule la distancia entre esos dos puntos.
p. La gasolina se almacena en tanques cilíndricos de un radio específico. Se necesita un
programa que ingresando el valor del radio y la altura hasta que se llene la gasolina, calcule
el volumen de gasolina que se tiene. (Volumen del cilindro = PI*Radio*Altura).

Nota: Elija usted la forma que más esté familiarizado de representar los algoritmos.


 Lecturas recomendadas

Un algoritmo utilizando seudocódigos puede ser escrito en un editor de texto (el block de notas
por ejemplo), y utilizando diagramas de flujo puede ser editado en un diagramador como es
Microsoft Visio (software propietario) o en día (software libre, puede descargarlo en http://dia-
installer.de/).

Tomando en cuenta al alumnado que recibirá el curso, consideramos adecuado usar una IDE
más atractivo y apropiado para el desarrollo de los algoritmos y los diagramas de flujo. Para ello
este curso estará basado en PESEINT, ya que es una IDE de software libre, pensado y
documentado para un sencillo uso.

Se le sugerirá al alumno que simplemente baje PESEINT y lo instale.

- Se puede bajar PESEINT gratuito de
http://pseint.sourceforge.net/index.php?page=descargas.php

- Podrá revisar el manual de uso en:
http://pseint.sourceforge.net/index.php?page=documentacion.php

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

38

- Deberá revisar los videos tutoriales desarrollados por nuestro colaborador
Jonathan Fred Sánchez Hinostroza, vea:
http://www.youtube.com/playlist?list=PLA5ED193B23ACD2D5


Estimado estudiante pon aprueba tus conocimientos adquiridos en el manejo del PESEINT.

Te reto a desarrollar los talleres 1, 2 y 3 utilizando el software PSEINT.

 Conclusiones
 En esta primera semana se presentaron los conceptos básicos para la elaboración de
algoritmos, desde el nombre que le damos al algoritmo, la declaración de variables, las
funciones de entrada, y salida y el proceso de manejo de variables, hasta finalizar el algoritmo.
 Se ha utilizado algunas técnicas como los diagramas de flujo, los pseudocódigos y los
diagramas N-S, para la elaboración de los algoritmos, así como también se propuso el uso del
software libre PSEINT que permite generar pseudocódigos y diagramas de flujo, siendo su
codificación similar a la los lenguajes de programación.

 Metacognición de la primera semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un ejercicio
recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad es regular nuestras
acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?
¿Qué acciones realizaste para aprender?

 Control de lectura primera semana

¡Muy bien! Hemos llegado al final de la primera semana, ahora, para comprobar tus logros y nivel
de aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes
preguntas:

1. Elaborar un algoritmo en pseudocódigo para Encender el auto.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
INICIO
Abrir la puerta
Ubicarse en el asiento del piloto
Buscar la llave del auto
Insertar la llave en la ranura de contacto
Establecer en neutro la palanca de cambio
Accionar la llave de contacto.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

39
Presionar el acelerador.
FIN

2. Elaborar un algoritmo en pseudocódigo para Ir a la playa.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
INICIO
Seleccionar playa de destino
Preparar los elementos que se llevaran a la playa
Comprar bloqueador adecuado
Tomar movilidad de traslado hasta la playa elegida
Buscar una ubicación en la playa
Instalarse en la playa
Desarrollar actividades de recreación
Disfrutar de las olas del mar
Volver a casa
FIN


3. Escribir un algoritmo en pseudocódigo que lea las cuatro notas de un estudiante (practica, exposición, oral, examen
parcial), e imprima la nota definitiva del curso.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
INICIO
notaPractica es real
notaExposición es real
notaExamenOral es real
notaExamenParcial es real
promedio es real

Leer "Ingrese nota de práctica", notaPractica
Leer "Ingrese nota de exposición", notaExposición
Leer "Ingrese nota de examen oral", notaExamenOral
Leer "Ingrese nota de examen parcial", notaExamenParcial

promedio=(notaPractica+notaExposición+notaExamenOral+notaExamenParcial)/4
Escribir "El promedio del curso es: ", promedio
FIN



4. Elaborar un programa en JAVA para determinar la hipotenusa de un triángulo rectángulo conocidas las longitudes de
sus catetos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana1;
import java.util.Scanner;
public class preg9 {
public static void main(String[] args) {
double ladoA;
double ladoB;
Scanner teclado=new Scanner(System.in);
System.out.println("Ingrese el primer lado del triángulo en cm");
ladoA=teclado.nextDouble();
System.out.println("Ingrese el segund lado del triángulo en cm");
ladoB=teclado.nextDouble();
System.out.println("La hipotenisa del triángulo es::
"+Math.sqrt((ladoA*ladoB)+(ladoB*ladoB)));
}
}

5. Elaborar un programa en JAVA que calcule el monto parcial (cantidad * precio), el IGV (18% del monto parcial) y el
monto total (monto parcial + IGV) que debe pagarse por comprar una determinada cantidad de un producto, que
cuesta determinado precio.
Alternativas Fundamenta tu respuesta (Código de la solución)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

40
Solución
package Semana1;
import java.util.Scanner;
public class Preg10 {
public static void main(String[] args) {

float precio;
int cantidad;
double igv;
double subtotal;

Scanner teclado=new Scanner(System.in);
System.out.println("Ingrese la cantidad de productos a comprar");
precio=teclado.nextFloat();
System.out.println("Ingrese el precio del producto");
cantidad=teclado.nextInt();
subtotal= cantidad* precio;
igv=subtotal*0.18;
System.out.println("Subtotal: "+subtotal);
System.out.println("IGV: "+igv);
System.out.println("Subtotal: "+subtotal);
System.out.println("Total a pagar: "+(subtotal+igv));
}
}



































Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

41





Durante toda la vida, mientras vamos pasando de un ambiente a otro, encontramos novedad y nuevos retos,
pequeños y grandes. Si estamos preparados para ellos, vivir y aprender son inseparables.
Peter Senge













 Bienvenida

Estimados estudiantes ¡bienvenidos! a la segunda semana del curso, En la cual conoceremos los
conceptos básicos de un programa y la sintaxis de un lenguaje de programación, así como también las
primeras estructuras de control, útiles para desarrollar nuestros algoritmos y su respectiva codificación.

 Ruta de aprendizaje

Durante la segunda semana que corresponde del 13 al 19 de mayo realizaremos las siguientes
actividades, emprendiendo la siguiente ruta:

 Estructuras Secuenciales
 Estructuras Condicionales
 Conversión de Algoritmos a Programas
 Creación de programas en Java

Es preciso recordarte que para que cumplas los objetivos planteados debes planificar tu tiempo, pues
estas actividades demandan 10 horas de estudio semanales.




Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura


Segunda Semana
“Analizaremos las diferentes estructuras de control desde las secuenciales, seguidas de las
condicionales simples, dobles y múltiples hasta llegar a estructuras anidadas, desarrollando
ejercicios algorítmicos y llevando a programarlo en un lenguaje de programación actual”
(13 al 19 de mayo)
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

42
Tema 2

Estructuras de Control: Condicionales
Simples y Múltiples













 Introducción al tema

Los problemas desarrollados en el capítulo anterior usando técnicas algorítmicas, se ejecutan de
forma secuencia, es decir una secuencia después de otra, donde el flujo de datos trascurre
secuencialmente, esto quiere decir que la entrada de una sentencia es la salida de la anterior
sentencia.
Esta forma de programar se aprecia en ejercicios sencillos, pero en la vida nada es secuencial,
siempre existe alternativas de decisiones que pueden ser dos o muchas alternativas. Esta semana
estudiaremos las estructuras de control de selección, para luego aprender estructuras de iteración o
repetitivas en los próximos capítulos.

 Aprendizajes esperados
Conozcamos ahora las capacidades y actitudes a desarrollar en este segundo tema:
Capacidad
- Comprende los conceptos y principios básicos de la algoritmia y la programación, para la
resolución de problemas.

Actitudes
- Reconoce la oportunidad de aplicar algoritmos y programas en situaciones reales.
- Distingue entre los diversos problemas la oportunidad de utilizar estructuras de control.
- Es creativo al generar planteamientos y soluciones innovadoras a los problemas que se le
presentan.
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

43
 Mapa conceptual referido al tema

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera sintetizada los
principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te llaman la atención?









Fuente: elaboración propia












Esquema2: Mapa conceptual

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

44
 Desarrollo de los contenidos de aprendizaje

Las estructuras de control refieren al orden en que las instrucciones de un algoritmo se ejecutarán. El
orden de ejecución de las sentencias o instrucciones determina el flujo de control.
Estas estructuras de control son por consiguiente fundamentales en los lenguajes de programación y en
los diseños de algoritmos especialmente los pseudocódigos. Las tres estructuras de control básico son:
- Secuencial
- Selección (Simples y Múltiples)
- Iterativas (Repetición)

2.1. Estructura Secuencial
Es aquélla en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden
de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin
del proceso. La estructura secuencial tiene una entrada y una salida. Su representación gráfica
es la siguiente:
DIAGRAMA DE FLUJO






DIAGRAMA N-S DE UNA ESTRUCTURA SECUENCIAL








Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

45
PSEUDOCODIGO DE UNA ESTRUCTURA SECUENCIAL






Ejemplos
Algoritmo haciendo uso de Pseudocódigo en el software PSeInt
1. Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio
de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en concepto de
impuestos (20 por 100).
Algoritmo Nombre_Algoritmo
Inicio
Definir variables como tipo_dato // Definición de variables
variable ← valor // Asignando valor a la variable
entrada de datos
proceso
salida de datos
Fin


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

46

La ejecución del programa es la siguiente:



La programación del algoritmo en un lenguaje de programación Java, usando una interfaz de desarrollo
como Netbeans es la siguiente:



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

47
Diagrama de Flujo
ht,ph,sb,igv,sn
sb<- ht*ph
igv<- sb*0.20
sn<- sb-igv
Inicio
Leer:
ht,ph
Escribir:
sb,igv,sn
Fin


2.2. Estructuras selectivas
Las estructuras selectivas se utilizan para tomar decisiones lógicas, de ahí que se suelan
denominar también estructuras de decisión o alternativas.
En las estructuras selectivas se evalúa una condición y en función del resultado de la misma
se realza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La
representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then,
else o bien en español si, entonces, si_no), con una figura geométrica en forma de rombo o
bien con un triángulo en el interior de una caja rectangular. Las estructuras selectivas o
alternativas pueden ser:
- Simples.
- Dobles.
- Múltiples.
2.3. Alternativa simple ( si-entonces / if-then)
La estructura alternativa simple si-entonces ejecuta una determinada acción cuando se
cumple una determinada condición. La selección si- entonces evalúa la condición y

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

48
- Si la condición es verdadera, entonces ejecuta la acción S1 (o acciones casi de ser
S1 una acción compuesta y constar de varias acciones)
- Si la condición es falsa, entonces no hace nada

a) Diagrama de Flujo
Condición
Acciones

b) Pseudocódigo en español



Pseudocódigo en ingles



c) Diagrama N-S












si (condición) entonces
Acciones
fin_si
if (condición) then
Acciones
endif
Condición
Verdadera Falsa
Acciones
Figura 1.22. Estructuras alternativas simples: a) Diagrama de
Flujo; b) Pseudocódigo; c) Diagrama N-S


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

49
2.3.1. Alternativa Doble (si-entonces-sino / if-then-else)
La estructura anterior es muy limitada y normalmente se necesitara una estructura
que permita elegir entre dos opciones o alternativas posibles, en función del
cumplimiento o no de una determinada condición. Si la condición es verdadera, se
ejecuta la acción S1, si es falsa, se ejecutara la acción S2.
a) Diagrama de Flujo
Condición
Acciones S1 Acciones S2

b) Pseudocódigo en español





Pseudocódigo en ingles





c) Diagrama N-S







si (condición) entonces
Acciones S1
si_no
Acciones S2
fin_si
if (condición) then
Acciones S1
Else
Acciones S2
endif
Condición
Verdadera Falsa
Acciones
S1
Acciones
S2
Figura 1.23. Estructuras alternativas dobles: a) Diagrama de Flujo;
b) Pseudocódigo; c) Diagrama N-S


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

50
Ejemplo 4.3.
Construya un programa que pida un número A y muestre si el número ingresado es PAR o
IMPAR
Solución:
Aquí usaremos el operador MOD. Mod devuelve el residuo de una división por ejemplo 20
MOD 2 resulta 0 ya que al dividir 20 entre 2 da 10 sobrando 0 de residuo, lo cual quiere decir
que el numero ingresado es par. Si el residuo fuese diferente de 0, entonces el número
ingresado es impar.
En Pseudocódigo
Inicio
Var:
Entero: num
escribir(“Ingrese un numero”)
leer(num)
si (num mod 2 == 0) entonces
Escribir(“El numero ingresado es par”)
si_no
escribir(“El numero ingresado es impar”)
fin_si
Fin
En Diagrama de Flujo
num
Inicio
Leer:
num
Escribir:
El numero
es par
Fin
num mod 2 == 0 Si No
Escribir:
El numero es
par


Ejemplo 4.4

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

51
Hacer un algoritmo que determine qué número es el mayor de 2 números ingresados
Solución:
En Pseudocódigo
Inicio
Var:
Entero: a,b
escribir(“Ingrese numero A: ”)
leer(a)
escribir(“Ingrese numero B: ”)
leer(b)
si (a>b) entonces
Escribir(“El numero, a , es mayor”)
si_no
Escribir(“El numero, b , es mayor”)
fin_si
Fin
En Diagrama de Flujo
a,b
Inicio
Leer:
a,b
Escribir:
El numero a
es mayor
Fin
a>b Si No
Escribir:
El numero b
es mayor

Ejemplo 4.5
Elaborar un diagrama de flujo que permita mostrar en pantalla un mensaje de mayoría o
minoría de edad según sea el caso.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

52
Solución:
En Pseudocódigo
Inicio
Var:
Entero: edad
escribir(“Ingrese su edad: ”)
leer(edad)
si (edad>=18) entonces
Escribir(“Ud. es mayor de edad”)
si_no
Escribir(“Ud aun no cumple la mayoría de edad”)
fin_si
Fin
En Diagrama de Flujo
edad
Inicio
Leer:
edad
Escribir:
UD. es mayor de
edad
Fin
edad >=18 Si No
Escribir:
Ud. aun no cumple
la mayoría de edad






Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

53
2.4. Alternativa múltiple ( según_sea, caso de)
La estructura de decisión múltiple evaluara una expresión que podrá tomar n valores distintos:
1, 2, 3, 4,…., n. Según que elija uno de estos valores en la condición, se realizara una de las n
acciones o lo que es igual, el flujo del algoritmo seguirá un determinado camino entre los n
posibles.



























Pseudocódigo en castellano

Según_sea (expresión) hacer
Caso valor1_de_la_expresion:
Sentencia,
Sentencia,

roptura,
Caso valor2_de_la_expresion:
Sentencia,
Sentencia,

roptura,
Caso valor3_de_la_expresion:
Sentencia,
Sentencia,

roptura,
Caso valor4_de_la_expresion:
Sentencia,
Sentencia,

roptura,
por_defecto
Sentencia,
Sentencia,

roptura,
fin_según






Figura 1.24. Estructuras según_sea: Pseudocódigo en castellano

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

54






















Condición
Acción S1 Acción S2 Acción S3 Acción S4 Acción n





Pseudocódigo en Ingles

switch (expresión)
Case valor1_de_la_expresion:
Sentencia,
Sentencia,

break,
Case valor2_de_la_expresion:
Sentencia,
Sentencia,

break,
Case valor3_de_la_expresion:
Sentencia,
Sentencia,

break,
Case valor4_de_la_expresion:
Sentencia,
Sentencia,

break,
default
Sentencia,
Sentencia,

break,
fin_según






Figura 1.25. Estructuras según_sea: Pseudocódigo en ingles
Figura 1.26. Estructuras según_sea: Diagrama de flujo
1 2 3 4 n

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

55
Ejemplo 4.6
Se desea diseñar un algoritmo que escriba los nombres de los días de la semana en función
del valor de una variable DIA introducida por teclado.
Solución:
En Pseudocódigo
Algoritmo diasSemana
Inicio
Var:
entero: dia
escribir(“Ingrese un numero del 1 – 7 para saber q día de la `
semana es: ”)
leer(dia)
Según_sea (dia) hacer
Caso 1:
escribir(“Domingo”)
roptura,
Caso 2:
escribir(“Lunes”)
roptura,
Caso 3:
escribir(“Martes”)
roptura,
Caso 4:
escribir(“Miércoles”)
roptura,
Caso 5:
escribir(“Jueves”)
roptura,
Caso 6:
escribir(“Viernes”)
roptura,
Caso 7:
escribir(“Sábado”)
roptura,
Por_defecto
escribir(“Valor no permitido”)
roptura,
fin_según

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

56
Fin
Ejemplo 4.7
Hacer un algoritmo que permita ingresar un día de la semana y según el día permita ingresar al
Restaurant “Gourmet” el plato del día. Teniendo en cuenta que el día 1 es lunes y el menú es
espesado, martes el menú es arroz con pato, el miércoles el menú es arroz con pollo, el jueves
el menú es lomito saltado, el viernes el menú es tallarines con salsa roja, el sábado el menú es
ceviche y cabrito, el día domingo buffet dominical.
Algoritmo Plato_dia
Inicio
Var:
entero: dia
escribir(“Ingrese un numero del 1 al 7: ”)
leer(dia)
Según_sea (dia) hacer
Caso 7:
escribir(“Domingo”)
escribir(“Buffet dominical”)
roptura,
Caso 1:
escribir(“Lunes”)
escribir(“Hoy toca Espesado”)
roptura,
Caso 2:
escribir(“Martes”)
escribir(“Hoy arroz con pato”)
roptura,
Caso 3:
escribir(“Martes”)
escribir(“Hoy arroz con pollo”)
roptura,
Caso 4:
escribir(“Jueves”)
escribir(“Hoy Lomito saltado”)
roptura,
Caso 5:
escribir(“Viernes”)
escribir(“Hoy Tallarines con salsa roja”)
roptura,
Caso 6:
escribir(“Viernes”)
escribir(“Hoy ceviche y cabrito”)
roptura,
Por_defecto
escribir(“Día no valido”)
roptura,
fin_según
Fin


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

57
2.5. Estructuras de decisión anidadas
Las estructuras de selección si-entonces y si-entonces-si_no implican la selección de una de
dos alternativas. Es posible también utilizar la instrucción si para diseñar estructuras de
selección que contengan más de dos alternativas. Por ejemplo, una estructura si-entonces
puede contener otra estructura si-entonces, y esta estructura si-entonces puede contener
otra, y así sucesivamente cualquier número de veces; a su vez, dentro de cada estructura
pueden existir diferentes acciones.
Las estructuras si interiores a otras estructuras si se denominan anidadas o encajadas.
Así, una estructura de selección de n alternativa o decisión múltiple puede ser construida
utilizando una estructura si con este formato:



si (expresión) entonces
acciones
si_no
si (expresión) entonces
Acciones
si_no
si (expresión) entonces
Acciones
si_no
si (expresión) entonces
Acciones
si_no
.
.
.
fin_si
fin_si
fin_si
fin_si


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

58

Ejemplo 4.8.
Diseñar un algoritmo que lea tres números A, B, C y visualice por pantalla el valor del más
grande. Se supone que los tres valores son diferentes.
Solución:
En Pseudocódigo
Inicio
Var:
entero: a,b,c
leer(a,b,c)
si (a<b) entonces
si (a<c)entonces
escribir(“a es mayor”)
si_no
escribir(“c es mayor”)
fin_si
si_no
si (b>c)entonces
escribir(“b es mayor”)
si_no
escribir(“c es mayor”)
fin_si
fin_si
Fin







Figura 1.27. Estructuras anidadas

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

59
En Diagrama de Flujo
Inicio
a,b,c
Leer
a,b,c
a<b
a<c
Escribir
a es
mayor
Escribir
c es
mayor
b<c
Escribir
b es
mayor
Escribir
c es
mayor
Inicio

Ejemplo 4.9.
Diseñar un algoritmo que lea tres números A, B, C e imprima los valores máximo y mino. El
procedimiento consistirá en comparaciones sucesivas de parejas de números.
Solución:
En Pseudocódigo
Algoritmo ordenar
Inicio
Var:
real: a,b,c
escribir (“Deme 3 números: ”)
leer(a,b,c)
si (a>b) entonces
si (b>c)entonces
escribir(“a,b,c”)
si_no
si (c>a)entonces

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

60
escribir(“c,a,b”) entonces
si_no
escribir(“a,c,b”) entonces
fin_si
fin_si
si_no
si (a>c)entonces
escribir(“b, a, c”) entonces
si_no
si (c>b)entonces
escribir(“c, b, a”)entonces
si_no
escribir(b, c, a)entonces
fin_si
fin_si
fin_si
Fin

Algunos conceptos:
1. Contador: Es una variable que sirve para llevar la cuenta de las veces que se repite
una operación o proceso (procesos). Generalmente se incrementa o decrementa de
uno en uno.
2. Acumulador: Es una variable en la cual se va almacenando la suma de los valores
sucesivos que va tomando otra variable
3. Inicializar variables: Consiste en indicar o asignar qué valor tiene inicialmente una
variable. Este valor por lo general se indica al inicio del algoritmo.










Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

61
 Lecturas recomendadas

 Documento 1: " Estructura o esquema de decisión condicional en JAVA. IF ELSE, IF
ELSE IF, Ejemplos de uso"
Dirección: Ver carpeta de lecturas: 2_Estructura esquema de decisión condicional en
JAVA.pdf
Breve Descripción: Alex Rodriguez en este artículo aborda la naturaleza de los
esquemas de control básicos como IF ELSE, IF ELSE IF, muy utilizado en lenguaje JAVA
para implementar algoritmos, describiendo su sintaxis, mostrando un ejemplo bastante
sencillo comprender.

 Documento 2: "Estructuras de control JAVA"
Dirección: Ver carpeta de lecturas: Estructuras de control JAVA.pdf
Breve Descripción: Enrrique García Hernández en su blog presenta ejemplos sencillos
pero bastante didácticos de cómo utilizar las estructuras de decisión simple, estructuras
condicional, alternativa o selectiva, condiciones dobles, condición múltiple.

 Conclusiones
 En esta semana de estudio se presentaron las estructuras de control básico, que se utiliza para
controlar el flujo de la información dentro de un algoritmo, esto nos permite darle poder
decisión a nuestros algoritmos.
 Así mismo se presentó como implementarlo en un lenguaje de programación, los ejemplos
ilustran de forma clara como sigue el curso de ejecución línea a línea del algoritmo de solución.
 Las estructuras de control IF ELSE, pueden anidarse para conseguir controlar múltiples
condiciones, sin embargo con la estructura de control múltiple es más sencillo seleccionar entre
muchas opciones.

 Metacognición de la segunda semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un ejercicio
recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad es regular nuestras
acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?
¿Qué acciones realizaste para aprender?

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

62
 Control de lectura segunda semana

¡Muy bien! Hemos llegado al final de la segunda semana, ahora, para comprobar tus logros y nivel de
aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes preguntas:
Elabore los siguientes programas en JAVA.

1. Elaborar un programa en pseudocódigo para determinar si un estudiante aprueba o reprueba un curso, sabiendo que
aprobara si su promedio de tres calificaciones es mayor o igual a 10.5; reprueba en caso contrario.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
INICIO
nota1 es real
nota2 es real
nota3 es real
promedio es real

Leer "Ingresa la primera nota: ",nota1
Leer "Ingresa la segunda nota:", nota2
Leer "Ingresa la tercera nota:", nota3

promedio=(nota1+nota2+nota3)/3

SI(promedio>=10.5) ENTONCES
Escribir "Alumno aprobado con: ",promedio
SI_NO
Escribir "Alumno desaprobado con: ",promedio
FIN_SI
FIN


2. Elabore un programa en JAVA para Ingresar un número que represente segundos y determinar a cuanto equivale en
horas, minutos y segundos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana2;
import java.util.Scanner;
public class preg4 {
public static void main(String[] args) {
long cantidadSegundos;

Scanner teclado=new Scanner(System.in);
System.out.println("Ingresa la hora en segundos");
cantidadSegundos=teclado.nextLong();

System.out.println("Cantidad de segundos: "+cantidadSegundos);
System.out.println("Cantidad de minutos: "+cantidadSegundos/60);
System.out.println("Cantidad de Horas: "+(cantidadSegundos/60)/60);
}
}

3. Hacer un algoritmo en JAVA que lea los nombres y edades de dos personas e imprima cuál de ellas tiene más edad.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana2;
import java.util.Scanner;
public class Prog5 {
public static void main(String[] args) {
String nombre1;

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

63
String nombre2;
int edad1;
int edad2;

Scanner teclado=new Scanner(System.in);
System.out.println("Ingrese el nombre de la primera persona");
nombre1=teclado.nextLine();
System.out.println("Ingrese la edad de la primera persona");
edad1=Integer.parseInt(teclado.next());

System.out.println("Ingrese el nombre de la segunda persona");
nombre2=teclado.next();
System.out.println("Ingrese la edad de la segunda persona");
edad2=teclado.nextInt();

if (edad1>edad2)
{
System.out.println("La persona mayor es: "+nombre1);
}else
{
System.out.println("La persona mayor es: "+nombre2);
}
}
}

4. Hacer un algoritmo en JAVA para una granja donde existen N conejos, N1 blancos y N2 negros. Se venden X negros y
Y blancos. Hacer un algoritmo que:
- Imprima la cantidad de conejos vendida.
- Si P1 es el precio de venta de los conejos blancos y P2 es el precio de venta de los conejos negros, imprima el
monto total de la venta.
- Imprima el color de los conejos que se vendieron más.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana2;
import java.util.Scanner;
public class preg6 {
public static void main(String[] args) {
int cantidadConejosBlancos;
int cantidadConejosNegros;
int cantidadConejosBlancosVendidos=0;
int cantidadConejosNegrosVendidos=0;

Scanner teclado=new Scanner(System.in);
System.out.println("Ingrese la cantidad de conejos blancos");
cantidadConejosBlancos=teclado.nextInt();

System.out.println("Ingrese la cantidad de conejos negros");
cantidadConejosNegros=teclado.nextInt();

System.out.println("Total de conejos en la granja: " +
(cantidadConejosBlancos+cantidadConejosNegros) +"\n");

System.out.println("Ingrese la cantidad de conejos blancos que desea
comprar");
cantidadConejosBlancosVendidos=teclado.nextInt();
System.out.println("Ingrese la cantidad de conejos negros que desea
comprar");
cantidadConejosNegrosVendidos=teclado.nextInt();

//10 es el precio de cada conejo

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

64
System.out.println("Monto recaudado:" +
(cantidadConejosBlancosVendidos*10)+(cantidadConejosNegrosVendidos*10));

if (cantidadConejosBlancosVendidos>cantidadConejosNegrosVendidos){
System.out.println("Se ha vendido mas conejos blancos");
}
else
{
System.out.println("Se ha vendido mas conejos negros");
}
System.out.println("cantidad de conejos blancos vendidos: " +
cantidadConejosBlancosVendidos );
System.out.println("cantidad de conejos negros vendidos: " +
cantidadConejosNegrosVendidos +"\n");
System.out.println("cantidad de conejos blancos disponible: " +
(cantidadConejosBlancos-cantidadConejosBlancosVendidos ));
System.out.println("cantidad de conejos negros disponibles: " +
(cantidadConejosNegros-cantidadConejosNegrosVendidos) );
}
}

5. Hacer un algoritmo en JAVA traductor de los meses del año, si se ingresa 1: imprimir “Enero”, 2: “febrero”, 3: “Marzo”
así hasta diciembre.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana2;
import java.util.Scanner;
public class Prog8 {
public static void main(String[] args) {
int mes;
Scanner teclado=new Scanner(System.in);
System.out.println("Ingrese monto total de la factura");
mes=teclado.nextInt();

switch(mes){
case 1: System.out.println("Enero"); break;
case 2:System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("Mayo"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto"); break;
case 9: System.out.println("Setiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
default: System.out.println("Ingreso incorrecto"); break;
}
}
}







Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

65







La democracia sólo es posible con el acceso fácil a la información
y las buenas comunicaciones.
Y la tecnología es una forma de facilitar las comunicaciones.
Tom Clancy


 Bienvenida

Estimados estudiantes ¡bienvenidos! a la tercera semana del curso, En la cual conoceremos las
estructuras de control repetitivas, útiles para desarrollar nuestros algoritmos y su respectiva codificación.

 Ruta de aprendizaje

Durante la tercera semana que corresponde del 20 al 26 de mayo realizaremos las siguientes actividades,
no sin antes haber descargado y revisado el silabo del curso, la guía de aprendizaje, luego
emprenderemos la siguiente ruta:

- Estructuras Repetitivas
- Mientras / Hacer
- Mientras (While, Do-while)
- Estructura Repetitiva Desde (For)
- Conversión de Algoritmos a Programas
- Creación de programas en Java

Es preciso recordarte que para que cumplas los objetivos planteados debes planificar tu tiempo, pues
estas actividades demandan 10 horas de estudio semanales.


Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura
Tema 3:
Tercera Semana
“Explicaremos las estructuras repetitivas while, do-while y for, desarrollando
ejercicios algorítmicos y llevando a programarlo en un lenguaje de
programación actual”
Del 20 al 26 de mayo
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

66

Estructura repetitivas WHILE, DO-WHILE Y FOR


 Introducción al tema

Son aquellas aplicaciones en las cuales una operación o conjunto de ellas deben repetirse muchas
veces.
Las estructuras de control que repiten una secuencia de instrucciones un número determinado de
veces se denomina bucles y se denomina iteración, cuando se repite la ejecución de una secuencia
de acciones.

Entre las Estructuras Repetitivas que utilizaremos en el curso veremos:

- Estructura repetitiva WHILE
- Estructura repetitiva DO-WHILE
- Estructura repetitiva FOR

 Aprendizajes esperados

Conozcamos ahora las capacidades y actitudes a desarrollar en este cuarto tema:

Capacidades
- Comprende los conceptos y principios básicos de la algoritmia y la programación, para la
resolución de problemas.
Actitudes
- Reconoce la oportunidad de aplicar algoritmos y programas en situaciones reales.
- Distingue entre los diversos problemas la oportunidad de utilizar estructuras de control.
- Es creativo al generar planteamientos y soluciones innovadoras a los problemas que se le
presentan.





 Mapa conceptual referido al tema
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

67

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera
sintetizada los principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te
llaman la atención?




Fuente: Elaboración propia






 Desarrollo de los contenidos de aprendizaje
3.1. Estructura mientras (while)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

68
Mientras (while), pertenece a las estructuras repetitivas y nos permite repetir
el cuerpo del bucle mientras se cumpla una determinada condición. Cuando
se ejecuta la instrucción mientras, se evalúa una expresión lógica (una
expresión booleana), si la expresión evaluada resulta verdadera el programa
ejecuta las sentencias que se encuentran dentro de la estructura mientras, el
proceso se repite hasta que la expresión lógica sea falsa, este proceso se
repite una y otra vez mientras la expresión booleana (condición) sea
verdadera. El ejemplo anterior quedaría así:
Condición
Acciones
Si
No




En las estructuras mientras se distingue dos partes:
- Ciclo: Conjunto de instrucciones que se ejecutaran repetidamente.
- Condición: La evaluación de esta condición permite decidir cuando
finaliza la ejecución del ciclo. La condición se evalúa al inicio del mismo.
Ejemplo 5.1
Pseudocódigo en castellano
mientras (condición) hacer
Acción S1
Acción S2
.
.
.
Acción n
fin_mientras
mientras condición
Acciones
Pseudocódigo en ingles
while (condición) do
Acción S1
Acción S2
.
.
.
Acción n
end_while
Figura 1.28. Estructuras mientras: Diagrama de flujo,
Pseudocódigo en castellano y Pseudocódigo en ingles

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

69
Lee por teclado un número que represente una cantidad de números que a
su vez se leerán también por teclado. Calcular la suma de todos esos números.
Solución:
En Pseudocódigo
Inicio
Var:
Enteros: n, total
Real: número, suma←0
leer(n)
total←n
mientras(total>0) hacer
Leer(número)
suma←suma+número
total←total-1
fin_mientras
escribir(“la suma de los”,n, “números es”,suma)
Fin

En Diagrama de Flujo




Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

70
Total>0
Suma<-suma+numero
Si
No
Inicio
n,total,numero,suma<-0
Leer
n
n<-total
Leer
numero
total<-total-1
mostrar
suma
Inicio

Ejemplo 5.2
Contar los números enteros positivos introducidos por teclado. Se
consideran dos variables enteras número y contador (contara el número
de enteros positivos). Se supone que se leen números positivos y se
detiene el bucle cuando se lee un número negativo o cero.
Solución:
En Pseudocódigo
Inicio
Var:
Enteros: numero,contador
contador←0
leer(numero)
mientras(numero>0) hacer
Leer(numero)
contador←contador-1

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

71
fin_mientras
escribir(“El numero de enteros positivos es”, contador)
Fin
En Diagrama de Flujo
numero>0
Si
No
Inicio
numero,contador<-0
Leer
numero
Leer
numero
contador<-contador+1
mostrar
contador
Inicio

Ejemplo 5.3
Considere los siguientes algoritmos. ¿Qué visualizará y cuántas veces se
ejecuta el bucle?
a) i←0
mientras(i<6) hacer
escribir(i)
i←i+1
fin_mientras
La salida es el valor de la variable de control I al principio de cada
ejecución del cuerpo del bucle: 0, 1, 2, 3, 4, 5. El bucle se ejecuta seis
veces.
b) i←0

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

72
mientras(i<6) hacer
i←i+1
escribir(i)
fin_mientras
La salida será entonces 1, 2, 3, 4, 5 y 6. El cuerpo del bucle se ejecuta
también seis veces. Obsérvese que cuando i=5, la expresión booleana
es verdadera y el cuerpo del bucle se ejecuta; con i=6 la sentencia
escribir se ejecuta, pero a continuación evalúa la expresión booleana y
se termina el bucle.
Métodos para terminar un bucle de entrada

1. Preguntar antes de la iteración

Ejemplo:

Solicito un mensaje al usuario si existen más entradas

Suma ←0
Escribir (`Existen más números en la lista S/ N`)
leer (resp) // variable resp es tipo carácter //
mientras (resp = `S` o resp= `N`) hacer
Escribir (número)
leer (N)
Suma←suma + N
escribir (´Existen más números (S/N)`)
leer (resp)
fin_mientras

- El método correcto para terminar un bucle que lee una lista de
valores es con un centinela, es un valor especial usado para indicar
el final de una lista de datos.
- Si la lista de datos son números positivos un valor centinela será
un número negativo, que indique el final de la lista.


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

73
Otro Ejemplo:

Calcular la media de un conjunto de notas de alumnos valor centinela -99
que detecte el fin del bucle.
En Pseudocódigo usando un valor centinela:
Inicio
Total←0
N←0 // Número de alumnos//
leer(nota) // la primera nota debe ser distinta de -99 //
mientras (nota <> -99) hacer
Total←total + nota
N←n+ 1
Leer(nota)
fin_mientras
Media←total / N
Escribir (`La media es`, media)
Fin

3.2. Estructura hacer-mientras (“do-while”)
El bucle mientras al igual que el bucle desde que se verá con posterioridad
evalúa la expresión al comienzo del bucle de repetición; siempre se utilizara
para crear bucle pre-test. Los bucles pre-test se denominan también bucles
controlados por la entrada. En numerosas ocasiones se necesita que el
conjunto de sentencias que componen el cuerpo del bucle se ejecuten al
menos una vez sea cual sea el valor de la expresión o condición de evaluación.
Estos bucles se denominan bucles post-test o bucles controlados por la salida.
El bucle hacer-mientras es análogo al bucle mientras y el cuerpo del bucle se
ejecuta una y otra vez mientras la condición (expresión booleana) es
verdadera. Existe, sin embargo, una gran diferencia y es que el cuerpo del
bucle está encerrado entre las palabras reservadas hacer y mientras, de modo
que las sentencias de dicho cuerpo se ejecutan, al menos una vez, antes de
que se evalué la expresión booleana. En otras palabras, el cuerpo del bucle
siempre se ejecuta, al menos una vez, incluso aunque la expresión booleana
sea falsa.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

74
Acciones
Condición
No
Si



Ejemplo 5.4
Desarrollar un algoritmo necesario para calcular el factorial de un numero N.
Solución:
En Pseudocódigo
Algoritmo FACTORIAL
Inicio
Var:
entero: i, n
real: factorial
escribir(¨Ingrese un numero¨)
leer(n)
factorial←1
i←1
hacer
factorial←factorial*i
i←i+1
mientras(i<=n)
escribir(“El factorial del numero”, n, “es”, factorial)
hacer
Acciones
mientras (condición)
Figura 1.29. Estructuras hacer-mientras: Diagrama de flujo,
Pseudocódigo en castellano.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

75
Fin
i<=n
Inicio
n, factorial<-1,i<-1
Leer
n
factorial<-factorial*i
mostrar
factorial
Inicio
i<-i+1
Si
No

Ejemplo 5.5
Escribir los números 1 al 100
Algoritmo uno_cien
Inicio
Var:
Entero: num←1
hacer
escribir(num)
num←num+1
mientras(num<100)
Fin

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

76
i<100
Inicio
num<-1
factorial<-factorial*i
mostrar
n
Inicio
n<-n+1
Si
No

3.3. Estructura desde/para (“for”)
En muchas ocasiones se conoce de antemano el número de veces que se
desean ejecutar las acciones de un bucle. En estos casos en el que el número
de iteraciones es fija, se debe usar la estructura for.
La estructura for ejecuta las acciones del cuerpo del bucle un número
específico de veces y de modo automático controla el número de iteraciones
o pasos a través del cuerpo del bucle. Su representación gráfica es:














Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

77






























Su sintaxis:
for (sentencia inicial; condición; incremento/decremento)
Sentencia;
O para la ejecución repetida de un grupo de sentencias:
for (sentencia inicial; condición; incremento/decremento)
{
grupo de sentencias;
}

La primera parte de la construcción for acostumbra a ser una sentencia de
asignación donde se inicializa alguna variable que controla el número de veces

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

78
que debe ejecutarse el cuerpo del bucle. Esta sentencia se ejecuta una sola
ocasión, antes de entrar por primera vez al cuerpo del bucle.
La segunda parte corresponde a la condición que indica cuando finaliza el
bucle, de la misma forma que en las construcciones iterativas anteriores. En
este caso, la condición se evalúa antes de ejecutar el cuerpo del bucle, por lo
que al igual que en la construcción while, el cuerpo puede ejecutarse entre ( )
y N N veces, donde N depende de la condición.
La tercera parte corresponde normalmente a una sentencia de incremento o
decremento sobre la variable de control del bucle. Esta sentencia se ejecuta
siempre después de la ejecución del cuerpo del bucle.

 Lecturas recomendadas

 Documento 1: " Estructuras de control repetitivo"
Dirección: Carpeta de lecturas: 3_F_Estructuras de control repetitiva JAVA.pdf
Breve Descripción: Enrrique García Hernández en su blog presenta ejemplos sencillos
pero bastante didácticos de cómo utilizar las estructuras de decisión simple, estructuras
condicional, alternativa o selectiva, condiciones dobles, condición múltiple.

 Documento 2: " Estructuras de control repetitivo 2”
Dirección: Carpeta de lecturas: 3_F_Estructuras de control repetitiva 2 JAVA.pdf
Breve Descripción: Este documento encontrado en www.javaya.com.ar se presenta
ejercicios y su algoritmo de resolución en lenguaje JAVA, donde utiliza estructuras
repetitivas, necesarias para este tipo de problemas.
 Conclusiones
 En esta semana de estudio se presentaron las estructuras repetitivas, que son una de
las estructuras importantes para controlar el flujo del algorimo en forma repetitiva de
acuerdo a una condición evaluada cada vez que se desee procesar un grupo de
instrucciones.
 También en este tema nos hemos dedicado desarrollar algunos ejemplo que ilustran
como el flujo del algoritmo se repite hasta el límite establecido, pudiendo comprender la
naturaleza de la estructura y su utilización en un cierto tipo de problemas de la
realidad.



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

79
 Metacognición de la tercera semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un
ejercicio recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad
es regular nuestras acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?
¿Qué acciones realizaste para aprender?

 Control de lectura tercera semana

¡Muy bien! Hemos llegado al final de la tercera semana, ahora, para comprobar tus logros y nivel
de aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes
preguntas:

1. Elaborar un programa en JAVA para ayudar a una persona que debe realizar un muestreo de 50 personas para
determinar el promedio de peso de los niños, jóvenes y viejos que existen en su distrito. Se determina las categorías
con base en la tabla siguiente:
Categoría Edad
Niños 0-12
Jóvenes 13-29
Adultos 30-59
Viejos 60 en adelante
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana3;
import java.util.Scanner;
public class preg1 {

public static void main(String[] args) {
int edad;
int cantidadNiños=0;
int cantidadJovenes=0;
int cantidadAdultos=0;
int cantidadviejos=0;

Scanner teclado=new Scanner(System.in);

for (int i=1;i<=10;i++){
System.out.println("Ingrese la edad de la "+i+"° persona");
edad=teclado.nextInt();
if (edad>=60){
cantidadviejos=cantidadviejos+1;
}else if(edad>=30){
cantidadAdultos=cantidadAdultos+1;
}else if(edad>=13){
cantidadJovenes=cantidadJovenes+1;
}else if(edad>=0){
cantidadNiños=cantidadNiños+1;
}
}
System.out.println("Cantidad de niños "+cantidadNiños);

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

80
System.out.println("Cantidad de jovenes "+cantidadJovenes);
System.out.println("Cantidad de adultos "+cantidadAdultos);
System.out.println("Cantidad de Viejos "+cantidadviejos);
}
}


2. Elaborar un programa en JAVA para ayudar a un entrenador que le ha propuesto a un atleta recorrer una ruta de cinco
kilómetros durante 10 días, para determinar si es apto para la prueba de 5 kilómetros o debe buscar otra especialidad.
Para considerarlo apto debe cumplir por lo menos una de las siguientes condiciones:
- Que ninguna de las pruebas haga un tiempo mayor a 16 minutos.
- Que al menos en una de las pruebas realice un tiempo mayor de 14 minutos
- Que su promedio de tiempos sea menor o igual a 15 minutos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana3;
import java.util.Scanner;
public class preg3 {
public static void main(String[] args) {
int tiempo;
boolean estado=true;
boolean estado2=false;
boolean estado3=false;
int suma=0;
int contador=1;

Scanner teclado=new Scanner(System.in);

for (int i=1;i<=10;i++){
System.out.println("Ingrese tiempo del "+i+"° día.");
tiempo=teclado.nextInt();
if (tiempo>16)
{
estado=false;
}

if (tiempo>=14)
{
estado2=true;
}
suma=suma+tiempo;
contador=i;
}
if ((suma/contador)<=15){
estado3=true;
}

if (estado==true && estado2==true && estado3==true){
System.out.println("Apto para la prueba");
}else{
System.out.println("No apto para la prueba");
}
}
}

3. Elaborar un programa en JAVA para una frutería que al cerrar el expendio de naranjas al finalizar el día, 15 clientes
que aún no han pagado recibirán un 15% de descuento si compran más de 10 kilos. Determinar cuánto percibirá la
tienda por esas compras.
Alternativas Fundamenta tu respuesta (Código de la solución)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

81
Solución
package Semana3;
import java.util.Scanner;
public class preg5 {
public static void main(String[] args) {
double venta=0;
double total=0;
double cantidad;
double precio;

Scanner teclado=new Scanner(System.in);
for (int i=1;i<=5;i++){
System.out.println("Ingrese la cantidad de producto");
cantidad=teclado.nextDouble();
System.out.println("Ingrese el precio producto");
precio=teclado.nextDouble();

venta=cantidad*precio;

if (cantidad>10){
total=total+((venta-(venta*0.15)));
}else{
total=total+venta;
}
}
System.out.println("Ingrese totales: "+ total );
}
}


4. Elaborar un programa en JAVA para ingresar dos números enteros A y B, y obtener la lista de los números que se
encuentran entre A y B, donde A > B.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Semana3;
import java.util.Scanner;
public class preg7 {
public static void main(String[] args) {
int numeroInicial;
int numeroFinal;

Scanner teclado=new Scanner(System.in);
System.out.println("Ingresa número de inicio");
numeroInicial=teclado.nextInt();
System.out.println("Ingresa número final");
numeroFinal=teclado.nextInt();
if (numeroInicial<numeroFinal) {
for(int i=numeroInicial;i<=numeroFinal;i++){
System.out.print(i+" ");
}
}else
{
System.out.println("El número inicial es mayor que el número final");
}
}
}

5. Elaborar un programa en JAVA para ingresar N números y calcular el promedio de los pares y el promedio de los
impares.
Alternativas Fundamenta tu respuesta (Código de la solución)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

82
Solución
package Semana3;
import java.util.Scanner;
public class preg10 {
public static void main(String[] args) {
int cantidad;
int sumaPares=0;
int sumaImpares=0;
int numero;
int cantidadPares=0;
int cantidadImpares=0;
Scanner teclado=new Scanner(System.in);
System.out.println("Ingrese cantidad de términos de la serie");
cantidad=teclado.nextInt();

for (int i=1;i<=cantidad;i++){
System.out.println("Ingrese número");
numero=Integer.parseInt(teclado.next());

if (numero%2==0){
sumaPares=sumaPares+numero;
cantidadPares=cantidadPares+1;
}else{
sumaImpares=sumaImpares+numero;
cantidadImpares=cantidadImpares+1;
}
}
System.out.println("Promedio de pares: " + (sumaPares/cantidadPares));
System.out.println("Promedio de impares: " +
(sumaImpares/cantidadImpares));
}
}
























Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

83







La socialización sólo se presenta cuando la coexistencia aislada de los individuos
adopta formas determinantes de cooperación y colaboración
que caen bajo el concepto general de la acción recíproca.
Georg Simmel



 Bienvenida

Estimados estudiantes ¡bienvenidos! a la cuarta semana del curso, En la cual conoceremos las
estructuras de datos e iniciaremos explicando los arreglos unidimensionales, llamados vectores, sus
operaciones y los métodos de ordenamiento y búsqueda de datos, desarrollando algoritmos y llevándolo
a un lenguaje de programación

 Ruta de aprendizaje
Durante la cuarta semana que corresponde del27 mayo al 02 junio realizaremos las siguientes
actividades, luego emprenderemos la siguiente ruta:
- Arreglos unidimensionales
- Operaciones con vectores
- Métodos de ordenamiento y búsqueda

Es preciso recordarte que para que cumplas los objetivos planteados debes planificar tu tiempo, pues
estas actividades demandan 10 horas de estudio semanales.


Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura
Cuarta Semana
“Analizaremos las estructuras de datos e iniciaremos explicando los arreglos
unidimensionales, llamados vectores, sus operaciones y los métodos de
ordenamiento y búsqueda de datos, desarrollando algoritmos y llevándolo a un
lenguaje de programación.
(27 mayo al 02 junio)
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

84
Tema 4

Introducción a la Estructura de Datos


 Introducción al tema

Una estructura de datos es una colección de datos, los tipos de datos utilizados con mayor
frecuencia en los diferentes lenguajes de programación son:
a. Datos simples:
- Integer
- Real
- Char
- boolean
b. Datos estructurados:
b.1. Estáticos
- Arrays (vectores y matrices)
- Registros (record)
- Ficheros (archivos)
- Conjuntos (set)
- Cadenas (string)
b.2. Dinámicos
- Listas (pilas/ colas)
- Listas enlazadas
- Árboles
- Grafos
 Aprendizajes esperados
Conozcamos ahora las capacidades y actitudes a desarrollar en este cuarto tema:
Capacidades
- Utiliza eficientemente estructuras de datos estáticas en la solución de problemas.
- Aplica adecuadamente algoritmos y programas recursivos para resolver problemas
específicos.

F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

85
- Implementa apropiadamente archivos de datos para su aplicación en problemas de nivel
intermedio.
- Comprende el manejo de memoria de las estructuras estáticas.
- Resuelve problemas asociados a la manipulación de cadenas
Actitudes
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las
diversas actividades.
- Demuestra solidaridad en el trabajo cooperativo y tolerancia en la resolución de
discrepancias en las opiniones y actitudes de los demás.
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las
diversas actividades.

 Mapa conceptual referido al tema

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera
sintetizada los principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te
llaman la atención?


Fuente: Elaboración propia

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

86
 Desarrollo de los contenidos de aprendizaje

Las variables que hemos utilizado hasta ahora nos permiten el almacenamiento de un solo valor a
la vez.
Para resolver cierto tipo de problemas con datos múltiples en forma eficiente, se requiere
almacenamiento en conjunto. A esta organización de elementos se le conoce con el nombre de
arreglo.
Otra definición de arreglo más completa (Luis Joyanes A.), es un conjunto finito y ordenado de
elementos homogéneos. La propiedad "ordenado" significa que el elemento primero, segundo,
tercero…enésimo de un arreglo puede ser identificado. Los elementos de un arreglo deberán ser
homogéneos, es decir, del mismo tipo de datos. Por ejemplo un arreglo puede estar compuesto
de todos sus elementos de tipo cadena, otro puede tener sus elementos de tipo entero, etc.

Al tratar el tema de arreglos es necesario conocer el término de dimensión.

Dimensión Descripción
0 Un solo punto.
1 (vector o lista) Una recta. Contiene largo.
2 (matriz o tabla) Contiene largo y ancho.
3 (cubo) Tiene largo, ancho y fondo.

4.1. Declaración de un arreglo

Nom_variable : Arreglo [dimensión] de Nom_tipo
En donde dimensión especifica:
<subíndice inferior> …<subíndice superior>
En el orden : Fila, Columna, Fondo.

Ejemplo de una declaración:
- 0 Dimensión:
x =20 donde x, es de tipo Entero.

- 1 Dimensión:

5
1 2 3 4

x[2]= 5

x : arreglo [1..4] de Enteros.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

87

- 2 Dimensiones :
1 2 3 4

8



x[2,4] = 8

x : arreglo [1..4, 1..4] de Enteros.

- Dimensiones:
x[1,4,2] = 3

x : arreglo[1..3, 1..4, 1..2] de Enteros.

4.2. Vectores
Son aquellos de una sola dimensión, por lo que también son llamados arreglos
Unidimensionales.

Ejemplo:

Un vector de una dimensión llamado CALIF, que consta de n elementos.

calif(1) calif(2) … calif(n-2) calif(n-1) calif(n)

El subíndice o índice de un elemento (1, 2 …n) designa su posición en la ordenación del vector.
Otras posibles notaciones del vector son:
a1, a2,…,an En matemáticas y algunos lenguajes(BASIC)
A(1), A(2),…A(n)
A[1], A[2],…A[n] En programación (Pascal)

Los vectores se almacenan en memoria central de la computadora en un orden adyacente. Así,
un vector de 50 elementos denominado NUMEROS se representa gráficamente por 50
posiciones de memoria sucesivas.
Memoria


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

88
NUMEROS(1) Dirección x
NUMEROS(2) Dirección x+1
NUMEROS(3) Dirección x+2
:
:
NUMEROS(50) Dirección x+49

Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una
posición de memoria. Así:
NUMEROS(25) 75 almacena el valor 75 en la posición 25
a
del vector NUMEROS y la
instrucción de salida : escribir NUMEROS(25).

Declaración
nom _arreglo = arreglo[liminf..limsup] de tipo

Donde:
nom_arreglo : nombre válido del arreglo.
liminf..limsup : límites inferior y superior del rango del arreglo.
tipo : tipo de datos de los elementos del arreglo : entero, real, carácter.

NOMBRES= arreglo [1..10] de carácter

Significa que NOMBRES es un arreglo (array) unidimensional de 10 elementos (1 a 10) de tipo
carácter.
4.2.1. Llenado de un vector
- Hacer para I = 1 a 10
Leer vec[I]
Fin-para

- Hacer mientras I <= 10
Leer vec[I]
Fin-mientras

- I=1
Repetir
Leer vec[I]
I = I + 1
Hasta-que I>10



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

89
4.2.2. Operaciones con Vectores
Las operaciones que se pueden realizar con arreglos durante el proceso
de resolución de un problema son:

- Asignación
- Lectura/Escritura
- Recorrido (acceso secuencial)
- Actualizar (añadir, borrar, insertar)

Asignación
NOMBRES(8) „Ana‟
Asigna el valor „Ana‟ al elemento 8 del vector NOMBRES

Lectura/Escritura de Datos
La Lectura/Escritura de datos en un arreglo u operaciones de entrada/salida normalmente se
realizan con estructuras repetitivas, aunque puede también hacerse con estructuras selectivas.
Las instrucciones simples de lectura/escritura se representarán como:
leer A Lectura del vector A
escribir A Escritura del vector A
leer V(5) Leer el elemento V(5) del vector V


Acceso Secuencial al Vector (recorrido)
Se puede acceder a los elementos de un vector para introducir datos (escribir) en el o bien
para visualizar su contenido (leer). Estas operaciones se realizan utilizando estructuras
repetitivas, cuyas variables de control (por ejemplo I) se utilizan como subíndices del vector
(por ejemplo, X(I). El incremento del contador del bucle producirá el tratamiento sucesivo de los
elementos del vector.

Ejemplo :
Lectura de 15 valores enteros de un vector denominado TOTAL.

TOTAL= array [1.15] de entero
desde i 1 hasta 15 hacer
leer TOTAL(i)
fin _desde

Si se cambian los límite inferior y superior, por ejemplo, 5 y 12, el bucle de lectura sería :
desde i 5 hasta 12 hacer
leer TOTAL(i)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

90
fin_desde

La salida o escritura de vectores se representa de un modo similar.
desde i 1 hasta 15 hacer
escribir TOTAL(i)
fin_desde
Visualiza todo el vector completo (un elemento en cada línea independiente).

Actualización de un Vector
Puede constar de tres operaciones más elementales:

a) Añadir elementos (añade un nuevo elemento al final del vector)
Un arreglo A se ha dimensionado a 6 elementos, pero solo se han asignado 4 valores a los
elementos A(1), A(2), A(3), A(4), se podrán añadir dos elementos más con una simple acción
de asignación.
A(5) 15
A(6) 9

b) Insertar elementos (introduce un elemento en el interior de un vector)

Ejemplo:
Se tiene un arreglo NOM de 6 elementos de nombres de personas, en orden alfabético y se
desea insertar un nuevo nombre.

{Calcular la posición ocupada por el elemento a insertar} P
{Inicializar contador de inserciones} i n.
mientras i >= P hacer
{transferir el elemento actual hacia abajo, a la posición i+1}
NOM(i+1) NOM(i)
{decrementar contador}
i i-1
fin_mientras
{Insertar el elemento en la posición P}
NOM(P) „nuevo elemento‟
{Actualizar el contador de elementos del vector}
n n+1
fin

c) Borrar elementos (Elimina elementos de un vector)

Algoritmo de Borrado

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

91
Inicio
{se utilizará una variable auxiliar AUX, que contendrá el valor del elemento que se desea
borrar}
AUX NOM(i)
desde i j hasta N-1 hacer
{llevar elemento j+1 hacia arriba}
NOM(i) NOM(i+1)
fin_desde
{actualizar contador de elementos}
{ahora tendrá un elemento menos, N-1}
N N-1
Fin

Ejercicio:

Se desea la lectura y desplegado de 5 nombres. Resuelva el problema por cada uno de los
siguientes criterios:
a) Lectura y desplegado alternados.
b) Todas las lecturas, todos los desplegados.

a) variables:
string : nom
entero : x

Inicio
Para x 1 hasta 5 hacer
escribir(„Nombre ? „)
leer(nom)
escribir( „La persona número‟, x, „ se llama : „,nom)
Fin
Nota: No se utilizaron arreglos porque no se requería de almacenamiento múltiple.
b) variables :
nom : Arreglo[1..5] de string
x : Entero

Inicio
para x 1 hasta 5 hacer
escribir(„Dame el nombre número‟,x,‟ ?‟)
leer(nom[x])
para x 1 hasta 5 hacer
escribir(„La persona número „, x,‟ se llama : „,nom[x])

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

92
Fin

EJERCICIOS RESUELTOS
EJERCICIO 7.1:
Ingresar n números dentro de un arreglo y luego imprimirlos.
DIAGRAMA N/S:







EJERCICIO 7.2:
Calcular la media aritmética de un conjunto de datos.
DIAGRAMA N/S:




















CAPITULO 8: MÉTODOS DE
BÚSQUEDAS Y

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

93
ORDENAMIENTOS EN ARREGLOS
4.3. Algoritmos de ordenamientos
4.3.1. ¿Qué es ordenamiento?
Es la operación de arreglar los elementos de vector en algún orden secuencial de acuerdo a un
criterio de ordenamiento.
El ordenamiento se efectúa con base en el valor de algún campo en un registro.
El propósito principal de un ordenamiento es el de facilitar las búsquedas de los miembros del
conjunto ordenado.
Ejemplo de ordenamientos
Directorio telefónico, tablas de contenido, bibliotecas y diccionarios, etc.
El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una
secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso
alfanumérico, ascendente o descendente.
¿Cuándo conviene usar un método de ordenamiento?
Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el factor
tiempo.

4.3.2. Tipos de ordenamientos:
Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos.
4.3.2.1. Los internos:
Son aquellos en los que los valores a ordenar están en memoria principal, por lo que se
asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo
(a[1], a[500], etc.).
4.3.2.2. Los externos:
Son aquellos en los que los valores a ordenar están en memoria secundaria (disco,
cinta, cilindro magnético, etc.), por lo que se asume que el tiempo que se requiere para
acceder a cualquier elemento depende de la última posición accesada (posición 1,
posición 500, etc.).

Algoritmos de ordenamiento:
Internos:
1. Inserción directa.
1. Inserción directa.
2. Inserción binaria.
2. Selección directa.
1. Selección directa.
3. Intercambio directo.
1. Burbuja.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

94
2. Shake.
4. Inserción disminución incremental.
1. Shell.
5. Ordenamiento de árbol.
1. Heap.
2. Tournament.
6. Sort particionado.
1. Quick sort.
7. Merge sort.
8. Radix sort.
9. Cálculo de dirección.
Externos:
1. Straight merging.
2. Natural merging.
3. Balanced multiway merging.
4. Polyphase sort.
5. Distribution of initial runs.
4.3.3. Clasificación de los algoritmos de ordenamiento de información:
El hecho de que la información está ordenada, nos sirve para poder encontrarla y accesarla
de manera más eficiente ya que de lo contrario se tendría que hacer de manera secuencial.

A continuación se describirán 4 grupos de algoritmos para ordenar información:

4.3.3.1. Algoritmos de inserción:
En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la
vez. Cada elemento es INSERTADO en la posición apropiada con respecto al resto de los
elementos ya ordenados.
Entre estos algoritmos se encuentran el de INSERCION DIRECTA, SHELL SORT,
INSERCIÓN BINARIA y HASHING.
4.3.3.2. Algoritmos de intercambio:
En este tipo de algoritmos se toman los elementos de dos en dos, se comparan y se
INTERCAMBIAN si no están en el orden adecuado. Este proceso se repite hasta que se ha
analizado todo el conjunto de elementos y ya no hay intercambios.
Entre estos algoritmos se encuentran el BURBUJA y QUICK SORT.
Algoritmos de selección:
En este tipo de algoritmos se SELECCIONA o se busca el elemento más pequeño (o
más grande) de todo el conjunto de elementos y se coloca en su posición adecuada.
Este proceso se repite para el resto de los elementos hasta que todos son analizados.
Entre estos algoritmos se encuentra el de SELECCION DIRECTA.
Algoritmos de enumeración:

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

95
En este tipo de algoritmos cada elemento es comparado contra los demás. En la
comparación se cuenta cuántos elementos son más pequeños que el elemento que se
está analizando, generando así una ENUMERACION. El número generado para cada
elemento indicará su posición.
Los métodos simples son: Inserción (o por inserción directa), selección, burbuja y shell,
en dónde el último es una extensión al método de inserción, siendo más rápido. Los
métodos más complejos son el quick-sort (ordenación rápida) y el heap sort.
A continuación solo se mostrará el método de ordenamiento más simple.
Método burbuja.
El bubble sort, también conocido como ordenamiento burbuja, funciona de la siguiente
manera: Se recorre el arreglo intercambiando los elementos adyacentes que estén
desordenados. Se recorre el arreglo tantas veces hasta que ya no haya cambios.
Prácticamente lo que hace es tomar el elemento mayor y lo va recorriendo de posición
en posición hasta ponerlo en su lugar.
Const MAX = 100
A = arreglo[1..MAX] de enteros
Variable N:entero

Ordenamiento directo. Método de burbuja.
Ordena los elementos del arreglo usando el método de burbuja. Transporta en cada
pasada el elemento más pequeño a la parte izquierda del arreglo A de N elementos.














Ordenamiento directo. Método de la burbuja. Contrario al anterior.
La lógica de este algoritmo cambia con el anterior, en el hecho de que en cada pasada
se lleva el valor más grande a hacia la parte derecha del arreglo A de N elementos.
Burbuja1(A,N)
Inicio
Declarar i,j,aux:entero
Para i 2 hasta N haga
Para j  i hasta 2 inc (–1) haga
Si (A[j-1]>A[j]) entonces
Aux  A[j-1]
A[j-1]  A[j]
A[j]  aux
Fin si
Fin para
Fin para
Fin

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

96















4.3.4. Métodos de búsqueda interna (búsqueda en memoria principal)
Para todos los algoritmos se cuenta con la siguiente estructura de datos

Const MAX = 100
V = arreglo[1..MAX] de enteros
Variable N:entero

Existen 4 métodos principales de búsqueda interna:
- Secuencial lineal
- Binaria
- Por transformación de Claves (Solo se menciona, después se añadirán los
algoritmos)
- Árboles de búsqueda (no se tratan aquí)

Búsqueda secuencial lineal.
Consiste en la revisión elemento por elemento del arreglo hasta encontrar el dato
buscado, o hasta llegar al final del arreglo, sin haberlo encontrado. Se puede diferenciar
entre buscar en un arreglo desordenado y buscar en un arreglo ordenado.
Búsqueda en arreglos desordenados.
Algoritmo que busca secuencialmente el elemento X en el arreglo desordenado V, con
N elementos.

Burbuja2(A,N)
Inicio
Declarar i,j,aux:entero
Para i 1 hasta N-1 haga
Para j  1 hasta N-i haga
Si (A[j]>A[j+1]) entonces
Aux  A[j]
A[j]  A[j+1]
A[j+1]  aux
Fin si
Fin para
Fin para
Fin
Secuencialdesordenado(V, N, X)
Inicio
Declarar i:entero

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

97


















Búsqueda en arreglos ordenados
Este algoritmo es similar al anterior, pero se agrega una nueva condición basada en el
orden de los elementos. Busca secuencialmente un elemento X en un arreglo ordenado
V de N elementos. El orden de V es creciente. {V[1]≤V[2] ≤...≤V[N]}
Declarar bandera: booleano

i  1
Bandera  FALSO
Mientras Que ((i<=N) y (Bandera=FALSO)) haga
Si (V[i]=X) entonces
Bandera  VERDADERO
Sino
i  i+1
Fin si
Fin MQ
Si (bandera=VERDADERO) entonces
Imprimir(“El elemento está en la posición i”);
Sino
Imprimir(“El elemento no está en el arreglo”)
Fin si
Fin
Secuencialordenado(V, N, X)
Inicio
Declarar i:entero
Declarar bandera: booleano

i  1
Bandera  FALSO
Mientras Que ((i<=N) y (Bandera=FALSO) y (X>=V[i]) haga
Si (X=V[i]) entonces
Bandera  VERDADERO
Sino
i  i+1
Fin si
Fin MQ
Si (bandera=VERDADERO) entonces
Imprimir(“El elemento está en la posición i”);
Sino
Imprimir(“El elemento no está en el arreglo”)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

98



Búsqueda binaria
La búsqueda binaria, sirve exclusivamente para arreglos ordenados, consiste en dividir el
intervalo de búsqueda en dos partes, comparando el elemento buscado con el central, en
caso de no ser iguales se redefinen los extremos del intervalo (según si el elemento
central es mayor o menor que el buscado). El proceso termina cuando se encuentra el
elemento o cuando se anula el intervalo de búsqueda.
Algoritmo que busca el elemento X mediante búsqueda binaria en el arreglo ordenado V
con N elementos.






























Fin si
Fin
binaria(V, N, X)
Inicio
Declarar izq, cen, der: entero
Declarar bandera: booleano

Izq  1
Der  N
Bandera  FALSO
Mientras Que ((izq<=der) y (Bandera=FALSO)) haga
Cen  parteentera((izq+der)/2)
Si (X=V[cen]) entonces
Bandera  VERDADERO
Sino
Si (X>V[cen]) entonces
izq  cen+1
Sino
der  cen-1
Fin si
Fin si
Fin MQ
Si (bandera=VERDADERO) entonces
Imprimir(“El elemento está en la posición cen”);
Sino
Imprimir(“El elemento no está en el arreglo”)
Fin si
Fin

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

99
EJERCICIOS RESUELTOS

EJERCICIO 4.1:
Diga si un elemento se encuentra en un arreglo, utilice la búsqueda secuencial.

DIAGRAMA N/S:
















EJERCICIO
4.2.
Ordenar un conjunto de datos de menor a mayor por el método de la burbuja.
DIAGRAMA N/S:












Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

100

 Lecturas recomendadas

 Documento 1: " Ejemplo de vectores en JAVA"
Dirección: Ver carpeta de lectura: 4_Ejemplo de vectores en JAVA.pdf
Breve Descripción: Javier García comparte con la comunidad de internet ejemplo de
cómo declarar vectores en java, como recorrerlos utilizando la estructura repetitiva FOR y
cómo utilizar sentencias de decisión dentro de las repetitivas.

 Documento 2: "Introducción a los sistemas de Bases de Datos "
Dirección: Ver carpeta de lectura: 4_Ejemplo de vectores en JAVA 2.pdf
Breve Descripción: www.javaya.com.ar, esta página presenta ejemplos de cómo trabajar
con vectores, explicando paso a paso la implementación en lenguaje JAVA, tiene tres
problemas propuestos y resueltos utilizando vectores unidimensionales.

 Conclusiones
 En esta semana de estudio se presentaron los diferentes tipos y modelos de base de datos
que fueron apareciendo en el transcurso del desarrollo de estas herramientas que tienen como
finalidad, aclarar y tener conceptos claros sobre las bases de datos utilizadas actualmente y en
particular tratar de entender la complejidad de este tema.
 También se sabe que la Normalización se debe realizar de manera correcta para realizar una
buena planificación y organización de los datos que van a almacenarse, el analista debe prever
la necesidad de accesar los datos para cumplir con requerimientos inesperados, objetivo que
se puede alcanzar mediante la normalización ya mencionada.
 Un Sistema Gestor de Base de Datos no es más que un programa que permitirá que los
usuarios almacenen, realicen consultas y recuperen los datos a tratar, por tanto permitirá la
manipulación de la base de datos para un fin determinado


 Metacognición de la cuarta semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un ejercicio
recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad es regular nuestras
acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

101
¿Qué acciones realizaste para aprender?

 Control de lectura cuarta semana

¡Muy bien! Hemos llegado al final de la cuarta semana, ahora, para comprobar tus logros y nivel
de aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes
preguntas:
Elabore el Diagrama de Flujo, seudocódigo y programación en Java de las siguientes estructuras:
Vectores

1. Elaborar un programa en JAVA para ingresar 20 números en un arreglo y mostrar luego,
primero la lista de todos los números pares que fueron ingresados y luego la lista de los
números negativos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana4;
import java.util.Scanner;
public class Ejercicio1 {

public static void main(String args[])
{
int arreglo[]=new int [20];
ingresa(arreglo);
imprime_pares(arreglo);
imprime_negativos(arreglo);
}

private static void imprime_negativos(int[] arreglo) {
int i;
System.out.println("Los valores negativos del arreglo son");
for(i=0;i<arreglo.length;i++)
if (arreglo[i] < 0)
System.out.println(arreglo[i]);
}

private static void ingresa(int[] arreglo) {
int i;
Scanner teclado=new Scanner(System.in);

for(i=0;i<arreglo.length;i++){
System.out.println("Ingresa 20 números al arreglo - Numero "+(i+1)+ "
==>");
arreglo[i]=teclado.nextInt();
}

}

private static void imprime_pares(int[] arreglo) {
int i;
System.out.println("Los valores pares del arreglo son");
for(i=0;i<arreglo.length;i++)
if (arreglo[i] % 2 == 0)
System.out.println(arreglo[i]);
}

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

102
}

2. Elaborar un programa en JAVA para que calcule y devuelva la suma al cuadrado de las
componentes de un vector: ∑

Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana4;
import java.util.Scanner;
public class Ejercicio2 {
public static void main(String[] args) {
int arreglo[]=new int [10];
ingresa(arreglo);
suma(arreglo);

}

private static void suma(int[] arreglo) {
int i;
int suma = 0;
for(i=0;i<arreglo.length;i++)
suma = (int) (suma + Math.pow(arreglo[i],2));

System.out.println("la suma al cuadrado de los componentes del vector son:
"+ suma );
}

private static void ingresa(int[] arreglo) {
int i;
Scanner teclado=new Scanner(System.in);

for(i=0;i<arreglo.length;i++){
System.out.println("Ingresa 10 numeros al arreglo - Numero "+(i+1)+ " ==>");
arreglo[i]=teclado.nextInt();
}
}
}

3. Elaborar un programa en JAVA para ingresar N enteros en un arreglo (como máximo 30) y
luego de calcular el promedio, muestra la diferencia de cada entero ingresado con relación
al promedio.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana4;

import java.util.Scanner;
public class Ejercicio4 {

public static void main(String[] args) {

int arreglo[] = null;
int n = tama();
arreglo = new int [n];
ingresa(arreglo);
double promedio = promediar(arreglo);
diferencias(arreglo,promedio);
}

private static void diferencias(int[] arreglo, double promedio) {
int i;

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

103
System.out.println("Diferencias ==> ");
double diferencia;
for(i=0;i<arreglo.length;i++){
if( promedio>arreglo[i])
diferencia = promedio-arreglo[i];
else
diferencia = arreglo[i]-promedio;
System.out.println(arreglo[i] + " ==> " + diferencia);
}
}

private static double promediar(int[] arreglo) {
int i;
double suma = 0;
for(i=0;i<arreglo.length;i++)
suma = (int) (suma + arreglo[i]);

double promedio = suma / arreglo.length;
System.out.println("Promedio ==> "+ promedio);
return promedio;
}

private static void ingresa(int[] arreglo) {
int i;
Scanner teclado=new Scanner(System.in);

for(i=0;i<arreglo.length;i++){
System.out.println("Ingresa "+arreglo.length+" numeros al arreglo - Numero
"+(i+1)+ " ==>");
arreglo[i]=teclado.nextInt();
}

}

private static int tama() {

Scanner teclado=new Scanner(System.in);
int n;
do{
System.out.println("Ingrese el tamaño del Vector máximo 30 ==>");
n= (int) teclado.nextInt();
}while(n > 30 || n <0);
return n;
}
}


4. Se tienen almacenados en la memoria dos vectores M y N de 10 elementos cada uno.
Elaborar un programa en JAVA que escriba la palabra “Iguales” si ambos vectores son
iguales y “Diferentes” si no lo son. Serán iguales cuando en la misma posición de ambos
vectores se tenga el mismo valor para todos los elementos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana4;
import java.util.Scanner;
public class Ejercicio8 {

public static void main(String[] args) {

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

104
int arregloM[]=new int [10];
int arregloN[]=new int [10];
ingresa(arregloM,"M");
ingresa(arregloN,"N");
igualdad(arregloM,arregloN);
}

private static void igualdad(int[] arregloM, int[] arregloN) {
int i;
boolean indicador=true;
for(i=0;i<arregloM.length;i++){
if(arregloM[i]!=arregloN[i]){
indicador=false;
break;
}
}
if(indicador){
System.out.println("SON IGUALES");
}else{
System.out.println("NO SON IGUALES");
}


}

private static void ingresa(int[] arreglo, String nom) {
int i;
@SuppressWarnings("resource")
Scanner teclado=new Scanner(System.in);

System.out.println("Vector"+nom);

for(i=0;i<arreglo.length;i++){
System.out.println("Ingresa "+arreglo.length+" numeros al arreglo "+nom+" -
Numero "+(i+1)+ " ==>");
arreglo[i]=teclado.nextInt();
}
}
}


5. Elaborar un programa en JAVA que lea un número cualquiera y lo busque en el vector X, el
cual tiene almacenados 10 elementos. Escribir la posición donde se encuentra almacenado
el número en el vector o el mensaje “NO” si no lo encuentra. Búsqueda secuencial.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana4;
import java.util.Scanner;
public class Ejercicio10 {


public static void main(String[] args) {
int arreglo[]=new int [10];
ingresa(arreglo);
buscar(arreglo);

}

private static void buscar(int[] arreglo) {

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

105
int i;
boolean indicador=true;

Scanner teclado=new Scanner(System.in);
System.out.print("Ingrese el numero a buscar ==>");
int busca = teclado.nextInt();

for(i=0;i<arreglo.length;i++){
if(arreglo[i]==busca){
System.out.println("Se encontro en la posicion ==> "+i);
indicador=false;
break;
}
}

if(indicador){
System.out.println("NO");
}
}

private static void ingresa(int[] arreglo) {
int i;

Scanner teclado=new Scanner(System.in);

for(i=0;i<arreglo.length;i++){
System.out.println("Ingresa 10 numeros al arreglo - Numero "+(i+1)+ "
==>");
arreglo[i]=teclado.nextInt();
}
}

}






















Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

106







La tarea del programador no es sólo escribir un programa, sino que su tarea principal es dar una prueba formal de
que el programa que propone cumple la especificación funcional.

Edsger Dijkstra














 Bienvenida

Estimados estudiantes ¡bienvenidos! a la quinta semana del curso, En la cual conoceremos el uso de
vectores con datos de tipo carácter o cadenas de caracteres, sus operaciones y su desarrollo en técnicas
algorítmicas y llevándolo a un lenguaje de programación.

 Ruta de aprendizaje

Durante la quinta semana que corresponde del 03 al 09 de junio realizaremos las siguientes actividades,
emprendiendo la siguiente ruta:

- Cadena de Caracteres
- Operaciones y funciones de cadenas.

Es preciso recordarte que para que cumplas los objetivos planteados debes planificar tu tiempo, pues
estas actividades demandan 10 horas de estudio semanales.
Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura


Quinta Semana
“Explicaremos el uso de vectores con datos de tipo carácter o
cadenas de caracteres, sus operaciones y su desarrollo en técnicas
algorítmicas y llevándolo a un lenguaje de programación”
(03 al 09 de junio)
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

107
Tema 5

Cadenas de Caracteres















 Introducción al tema

La manipulación de cadenas está presente en todos los lenguajes de programación, se utiliza para
procesar la información con significado para el usuario que utiliza el lenguaje natural representado
por caracteres para representar el significado al mundo real.

Se necesita conocer los conceptos, métodos y reglas para manipular cadena de caracteres en el
desarrollo de nuestro código, la comparación, concatenación, conteo son algunas de las funciones
que estudiaremos esta semana.


 Aprendizajes esperados
Conozcamos ahora las capacidades y actitudes a desarrollar en este segundo tema:
Capacidad
- Utiliza eficientemente estructuras de datos estáticas en la solución de problemas.
- Aplica adecuadamente algoritmos y programas recursivos para resolver problemas específicos.
- Implementa apropiadamente archivos de datos para su aplicación en problemas de nivel
intermedio.
- Comprende el manejo de memoria de las estructuras estáticas.
- Resuelve problemas asociados a la manipulación de cadenas

Actitudes
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las diversas
actividades.

- Demuestra solidaridad en el trabajo cooperativo y tolerancia en la resolución de discrepancias
en las opiniones y actitudes de los demás.
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las diversas
actividades.
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

108
 Mapa conceptual referido al tema

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera sintetizada los
principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te llaman la atención?





Fuente: elaboración propia







Esquema1: Mapa conceptual sobre cadena de caracteres

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

109
 Desarrollo de los contenidos de aprendizaje

5.1. Definición de cadena
Una cadena (string) de caracteres es un conjunto de caracteres (incluido el blanco), que se
almacenan en un área contigua de la memoria. Pueden ser entradas o salidas a/desde una
computadora.

La longitud de una cadena es el número de caracteres que contiene. La cadena que no contiene
ningún carácter se le denomina cadena vacía o nula y su longitud es cero; no se debe confundir con
una cadena compuesta de solo espacios en blanco.

La representación de las cadenas suele ser con comillas simples o dobles, las comillas actúan como
separadores, algunos ejemplos:
‟12 de Octubre de 1492‟
„¿Hola, cómo estás?‟
„ ‟
„MEXICO ES GRANDE‟

La cadena puede contener entre sus separadores, cualquier carácter válido del código aceptado por
el lenguaje y la computadora; el blanco es uno de los caracteres más utilizado.

Una Subcadena es una cadena de caracteres que ha sido extraída de otra de mayor longitud.

‟12 de‟ es una subcadena de ‟12 de Octubre de 1492‟
„como estás‟ es una subcadena de „Hola, cómo estás?‟
„XI? es una subcadena de „MEXICO ES GRANDE‟

5.2. Datos Tipo Carácter
Anteriormente se analizaron los diferentes tipos de datos y entre ellos existía el dato tipo carácter
(char) que se incorpora en diferentes lenguajes de programación, bien con este nombre, o bien como
datos tipo cadena.

5.3. Constantes
Una constante tipo carácter es un conjunto de caracteres válidos encerrados entre comillas, para
evitar confundirlos con nombres de variables, operadores, enteros, etc.




Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

110
5.4. Variables
Una variable de cadena o tipo carácter es una variable cuyo valor es una cadena de caracteres. Las
variables de tipo carácter se deben declarar en el algoritmo y según el lenguaje tendrán una notación
u otra.
var NOMBRE, DIRECCION, PAIS: carácter

5.4.1. Cadenas de Longitud Fija
Se consideran vectores de la longitud declarada, con blancos a izquierda o derecha si la cadena no
tiene la longitud declarada. Así el ejemplo siguiente:

E S T A C A S A E S U N A R U I N A /// ///
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Se declaró con una dimensión de 24 caracteres y los dos últimos se rellenan con blancos.

5.4.2. Cadenas de Longitud Variable con un Máximo
Se considera un puntero, con dos campos que contienen la longitud máxima y la longitud actual.

20 17 E S T A C A S A E S G U A Y /// /// ///
Dónde:
20 = Longitud máxima
17 = Longitud actual

5.4.3. Instrucciones Básicas con Cadenas
Las instrucciones básicas: asignar y entrada/salida (leer/escribir) se realizan de un modo similar al
tratamiento de dichas instrucciones con datos numéricos.

Asignación
Si la variable NOMBRE ha sido declarada como carácter.

var NOMBRE : caracter
La instrucción de asignación debe contener en el lado derecho de la asignación una constante tipo
carácter (una cadena) o bien otra variable tipo carácter. Así:

NOMBRE ← „Juan González‟
Significa que la variable NOMBRE toma por valor la cadena „Juan González‟


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

111
Entrada/Salida
La entrada/salida desde una computadora se puede realizar en modo carácter, para ello se
asignará una cadena de caracteres a una variable tipo cadena.

var A,B,C,D: carácter
las instrucciones:
leer A,B
escribir C,D

Asignarán a A y B las cadenas introducidas por el teclado y visualizará o imprimirán en el
dispositivo de salida las cadenas que representan las variables C y D.

5.4.4. Función de cadenas de caracteres
El tratamiento de cadenas es un tema importante, debido esencialmente a la gran cantidad
de información que se almacena en ellas. Según el tipo de lenguaje de programación
elegido se tendrá mayor o menor facilidad para la realización de operaciones.
Las operaciones con cadenas más usuales son:

- Cálculo de la longitud
- Comparación
- Concatenación
- Extracción de subcadenas
- Búsqueda de información


Cálculo de la longitud de una cadena
La longitud de una cadena, como ya se ha comentado, es el número de caracteres de
la cadena. Así:

'Hola' Tiene 4 caracteres

La operación de determinación de la longitud de una cadena se
representará por la función Longitud, cuyo formato es:

Longitud (cadena)
La función longitud tiene como argumento una cadena, pero su resultado es un valor
numérico entero.
Ejemplo:
longitud('Cómo estás?') Proporciona 11.
longitud(' ') Cadena de un blanco, proporciona 1.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

112
longitud('Hola') Cadena 'Hola' rellenada de un blanco a la izquierda para
tener longitud de 5.

Comparación
Es una operación muy importante sobre todo en la clasificación de datos tipo carácter, que se
utiliza con mucha frecuencia en aplicaciones de proceso de datos (clasificaciones de listas,
tratamiento de textos, etc.).
Los criterios de comparación se basan en el orden numérico del código o juego de caracteres que
admite la computadora o el propio lenguaje de programación. En nuestro lenguaje algorítmico
utilizaremos el código ASCII como código numérico de referencia.
En la comparación de cadenas se pueden considerar dos operaciones más elementales: igualdad
y desigualdad.
Ejemplos:
'LUIS' < 'LUISITO' verdadera
'ANA' < 'MARTA' verdadera
'BARTOLO' >= 'BARTOLOME' falsa

Concatenación
La concatenación es la operación de reunir varias cadenas de caracteres en una sola, pero
conservando el orden de los caracteres en cada una de ellas. El símbolo que representa la
concatenación varía de unos lenguajes a otros. Los más utilizados son:
+ // & o
Las cadenas para concatenarse pueden ser constantes o variables.

Ejemplos:
'Mayo ' + 'de 1999' = 'Mayo de 1999'
x 'Lenguaje'
y 'Ensamblador'
z x+' '+y z= 'Lenguaje Ensamblador'

Subcadenas
Esta operación permite la extracción de una parte específica de una cadena: subcadena.
Subcadena (cadena, inicio, longitud)
Cadena: Es la cadena de la que debe extraerse una subcadena.

Inicio: Es un número o expresión numérica entera que corresponde a la posición inicial de la
subcadena.
Longitud: Es la longitud de la subcadena.

Ejemplos:
subcadena ('abcdefgh',3,6) Equivale a 'cdef'

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

113
subcadena ('Tecnológico',1,3) Equivale a 'Tec'
subcadena ('México',5,2) Equivale a 'co'

Búsqueda
Esta operación localiza si una determinada cadena forma parte de otra cadena más grande o
buscar la posición en que aparece un determinado carácter o secuencia de caracteres en un texto.
El resultado de la función es un valor entero

Posición (cadena, subcadena)
subcadena: Es el texto que se trata de localizar.

Ejemplo:
nombre 'Marielena'
Posición (nombre, 'elena') Produce 5.

La función Posición, al tomar también un valor numérico entero se puede utilizar en expresiones
aritméticas o en instrucciones de asignación a variables numéricas.
5.4.5. Funciones internas
Las operaciones que se requieren en los programas exigen en numerosas ocasiones, además de las
operaciones aritméticas básicas, ya tratadas, un número determinado de operaciones especiales que
se denominan funciones internas, incorporadas o estándar. Por ejemplo la función ln se puede
utilizar para determinar logaritmo de un n se puede utilizar para determinar logaritmo de un número y
la función sqrt calcula la raíz cuadrada de un número positivo. Existen otras funciones que se utilizan
para determinar las funciones trigonométricas.

La siguiente tabla muestra las funciones internas más usuales, siendo x el argumento de la función.
Función Descripción Tipo de Argumento Resultado
abs(x) Valor absoluto de x Entero o real igual que
argumento
arctan(x) Arcotangente de x Entero o real real
cos(x) Coseno de x Entero o real real
exp(x) Exponencial de x Entero o real real
ln(x) Logaritmo de x Entero o real real
log10(x) Logaritmo decimal de x Entero o real real
round(x) Redondeo de x Real entero
sin(x) Seno de x Entero o real real
sqr(x) Cuadrado de x Entero o real igual que
argumento
sqrt(x) Raíz cuadrada de x Entero o real real
trunc(x) Truncamiento de x real entero



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

114
EJERCICIOS RESUELTOS

Ejercicio 10.1
Contar el número de letras 'i' de una frase terminada en un punto. Se supone que las letras
pueden leerse independientemente.

Algoritmo letras_i
var
N: entera
Letra: carácter
Inicio
N 0
repetir
leer(Letra)
si Letra = 'i' entonces
N N+1
fin si
hasta que Letra = '.'
escribir('La frase tiene :', N,' letras i')
Fin

Ejercicio 10.2.
Aceptar un nombre y proporcionar la cantidad de caracteres que contiene.

Inicio
escribir('Cuál es el nombre : ')
Leer(nom)
escribir('Tu nombre tiene ', Longitud(nom),' letras')
Fin

Ejercicio 10.3.
Pedir una cadena que contenga una vez la letra F ('F'). Deberá informarse la posición donde
fue encontrada, el carácter previo y el siguiente.

Inicio
escribir('Dame cadena que contenga [F] ')
leer(cad)
x Posición('F', cad)
escribir('La letra 'F' se encuentra en la posición : ',x)
escribir('El carácter anterior es : ' , Subcadena(cad, x-1,1))
escribir('El carácter siguiente es : ', Subcadena(cad, x+1, 1))

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

115
Fin

Ejercicio 10.4.
Leer dos caracteres y deducir si están en orden alfabético.
variables:
CAR1, CAR2 : carácter.
Algoritmo Comparación
Inicio
Leer CAR1, CAR2
Si CAR1 <= CAR2 entonces
escribir('Si se encuentran en orden')
sino
escribir('Desordenados')
Fin_si
Fin

Ejercicio 10.5:
Se desea eliminar los blancos de una frase dada terminada en un punto. Se supone que es
posible leer los caracteres de la frase de uno a uno.

Análisis del problema
Para poder efectuar la lectura de la frase, almacena ésta en un arreglo de caracteres (F), de
modo que F(1) contiene el primer caracter i-ésimo del a frase dada. Construiremos una frase
nueva sin blancos en otro arreglo G.

Algoritmo
Los pasos a dar para la realización del algoritmo son:
- Inicializar contador de letras de la nueva frase G.
- Leer el primer carácter.
- Repetir

Si el primer carácter no es en blanco, entonces escribir en el lugar siguiente del arreglo F leer
carácter siguiente de la frase dada.
Hasta que el último carácter se encuentre.

- Escribir la nueva frase (G), ya sin blancos.

Variables:
F : array de caracteres de la frase dada.
G : array de caracteres de la nueva frase dada.
i : Constador del array F.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

116
j : Constador del array G.

Algoritmo Blanco
Inicio
i 1
j 0
leer F(i)
Repetir
Si F(i) <> ' ' entonces
j j+1
G(j) F(i)
Fin si
i i+1
leer F(i)
Hasta que F(i) = '.'
{escritura de la nueva frase G}
Desde i 1 a j hacer
escribir G(i)
Fin Desde
Fin

Ejercicio 10.6.
Encontrar un espacio en blanco en una cadena.
Inicio
variables:
x: entero
nom,a,b : cadena
Inicio
leer(nom)
x=Posición (' ',nom)
a= Subcadena (nom,1,x-1)
b= Subcadena (nom, x+1, x)
Fin

Ejercicio 10.7.
Solicitar un nombre y mostrarlo con la inicial en mayúscula.
variables:
nom,a,b: cadena
x,y : carácter
z : entero
Inicio

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

117
escribir('Introduce nombre : ')
leer(nom)
x= Subcadena(nom,1,1)
y= MAYUSCULA(x)
z= Longitud (nom)
a = Subcadena (nom, 2, z-1)
Concatenación y+a
Escribir('Te llamas : ' , concatenación)
Fin
Nota: MAYÚSCULA es una función para convertir letras minúsculas a mayúsculas.


 Lecturas recomendadas

 Documento 1: " Cadena de caracteres en JAVA"
Dirección: ver carpeta de lecturas: Ejemplos de cadena de caracteres en JAVA.pdf
Breve Descripción: www.javaya.com.ar, esta página presenta ejemplos de cómo trabajar
en JAVA con cadena de caracteres, explicando paso a paso la implementación en lenguaje
tiene tres problemas propuestos y resueltos utilizando los métodos para el manejo de
cadenas.

 Conclusiones
 En esta semana de estudio se presentó como manipular los caracteres y su formación en
cadenas que nos permite conocer si son iguales, la longitud, la unión o si se encuentra un
conjunto de caracteres dentro de otro conjunto de caracteres
 Lo presentado en esta semana se aplica a cualquier lenguaje de programación imperativo,
claro que en cada lenguaje el nombre las funciones pude cambiar pero el principio de manejo
es el mismo.
 Algunas funciones especiales tales como búsqueda de subcadenas dentro de otro conjunto,
están sostenidas en la comparación de caracteres, que es la base de las búsquedas en un
conjunto más grande de grupos de cadenas, que permiten implementar buscadores de internet,
de documentos, de archivos entre otras aplicaciones.

 Metacognición de la quinta semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un ejercicio
recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad es regular nuestras
acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

118
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?
¿Qué acciones realizaste para aprender?

 Control de lectura quinta semana

¡Muy bien! Hemos llegado al final de la quinta semana, ahora, para comprobar tus logros y nivel
de aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes
preguntas:
1. Elaborar un programa en JAVA que contenga una función que convierta una cadena de caracteres a mayúsculas y
otra que convierta una cadena de caracteres a minúsculas. Escribir una función que reciba como parámetros 2
cadenas de caracteres y determinar si son iguales o si no son diferentes cuál de ellas es la mayor.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicios;
import javax.swing.JOptionPane;
public class Ejercicio1 {
public static void main(String[] args) {


String cMenu = " Elija una de las opciones\n"
+ " \n"
+ " 1----Convertir una cadena de caracteres a mayúsculas\n"
+ " 2----Convertir una cadena de caracteres a minúsculas\n"
+ " 3----Comparar tamaño de cadenas\n"
+ " ---------------------------------------------------\n"
+ " \n"
+ " *Escriba el número del menú, de la función que desee ejecutar";

JOptionPane.showMessageDialog(null, cMenu, "Conversiones con
Cadenas",JOptionPane.INFORMATION_MESSAGE);

int option_menu;

do{
option_menu = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese la opción
a operar","Sistema",JOptionPane.QUESTION_MESSAGE ));
if(option_menu != 1 && option_menu!=2 && option_menu!=3){
JOptionPane.showMessageDialog(null, "Opción no Válida, intente
nuevamente","Sistema",JOptionPane.ERROR_MESSAGE);
}
}while(option_menu != 1 && option_menu!=2 && option_menu!=3);


switch(option_menu){

case 1:
cMayusculas();
break;

case 2:
cMinusculas();
break;


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

119
case 3:
cComparation();
break;

default:
JOptionPane.showMessageDialog(null,
"Gracias","Sistema",JOptionPane.INFORMATION_MESSAGE);
break;
};

}

public static void cMayusculas(){

String cCadena;
cCadena = JOptionPane.showInputDialog(null, "Ingrese su
cadena","Mayúsculas",JOptionPane.QUESTION_MESSAGE);
JOptionPane.showMessageDialog(null, "Cadena Ingresada antes de la
conversión\n\n"+cCadena,"Conversiones",JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, "Cadena Convertida a
Mayúsculas\n\n"+cCadena.toUpperCase(),"Sistema",JOptionPane.INFORMATION_MESSAGE);
}

public static void cMinusculas(){
String cCadena;
cCadena = JOptionPane.showInputDialog(null, "Ingrese su
cadena","Minúsculas",JOptionPane.QUESTION_MESSAGE);
JOptionPane.showMessageDialog(null, "Cadena Ingresada antes de la
conversión\n\n"+cCadena,"Conversiones",JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null, "Cadena Convertida a
Minúsculas\n\n"+cCadena.toLowerCase(),"Sistema",JOptionPane.INFORMATION_MESSAGE);
}

public static void cComparation(){
String c1Cadena;
String c2Cadena;

c1Cadena = JOptionPane.showInputDialog(null, "Ingrese su primera
cadena","Comparación",JOptionPane.QUESTION_MESSAGE);
c2Cadena = JOptionPane.showInputDialog(null, "Ingrese su segunda
cadena","Comparación",JOptionPane.QUESTION_MESSAGE);

if (c1Cadena.compareTo(c2Cadena) == 0)
JOptionPane.showMessageDialog(null, "Ambas cadenas tienen la misma
longitud","Sistema",JOptionPane.INFORMATION_MESSAGE);
else
if (c1Cadena.compareTo(c2Cadena) < 0)
JOptionPane.showMessageDialog(null, "La cadena 1 es mayor que la cadena
2","Sistema",JOptionPane.INFORMATION_MESSAGE);
else
if (c1Cadena.compareTo(c2Cadena) > 0)
JOptionPane.showMessageDialog(null, "La cadena 2 es mayor que la cadena
1","Sistema",JOptionPane.INFORMATION_MESSAGE);
}
}

2. Elaborar un programa en JAVA que contenga una función que reciba como parámetros 2 cadenas
de caracteres y determine si son iguales o si son diferentes cuál de ellas es el mayor.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

120
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicios;
import javax.swing.JOptionPane;
public class Ejercicio3 {
public static void main(String[] args) {

String c1Cadena;
String c2Cadena;

c1Cadena = JOptionPane.showInputDialog(null, "Ingrese su primera
cadena","Comparación",JOptionPane.QUESTION_MESSAGE);
c2Cadena = JOptionPane.showInputDialog(null, "Ingrese su segunda
cadena","Comparación",JOptionPane.QUESTION_MESSAGE);

if (c1Cadena.equals(c2Cadena))
JOptionPane.showMessageDialog(null, "Ambas cadenas son
iguales","Sistema",JOptionPane.INFORMATION_MESSAGE);
else
if (c1Cadena.compareTo(c2Cadena) < 0)
JOptionPane.showMessageDialog(null, "No son iguales, pero la cadena 1
es mayor que la cadena 2","Sistema",JOptionPane.INFORMATION_MESSAGE);
else
if (c1Cadena.compareTo(c2Cadena) > 0)
JOptionPane.showMessageDialog(null, "No son iguales, pero la cadena 2
es mayor que la cadena 1","Sistema",JOptionPane.INFORMATION_MESSAGE);
}
}

3. Elaborar un programa en JAVA que lea una lista de n nombres de personas (1 nombre y 1 o 2
apellidos) y presente la lista ordenada alfabéticamente pero por apellidos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicios;
import javax.swing.JOptionPane;
import java.util.Arrays;
import java.util.Comparator;
public class Ejercicio5 {
public static void main(String[] args) {

int n;
n = Integer.parseInt(JOptionPane.showInputDialog(null, "¿Cuántas personas
ingresara?","Sistema",JOptionPane.QUESTION_MESSAGE));

String lista[][] = new String[n][3];

for(int i=0;i<n;i++){
JOptionPane.showMessageDialog(null, "Persona ["+(i+1)+"]");
lista[i][0]= JOptionPane.showInputDialog(null, "Ingrese Nombre
["+(i+1)+"]","Sistema",JOptionPane.QUESTION_MESSAGE);
lista[i][1]= JOptionPane.showInputDialog(null, "Ingrese Apellido Paterno
["+(i+1)+"]","Concatenación por Posición",JOptionPane.QUESTION_MESSAGE);
lista[i][2]= JOptionPane.showInputDialog(null, "Ingrese Apellido Materno
["+(i+1)+"]","Concatenación por Posición",JOptionPane.QUESTION_MESSAGE);
}

String conc="Lista de Personas Ingresadas\n"
+ "-------------------------------------\n\n";
for(int i=0;i<n;i++){
String result="";

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

121
result="["+(i+1)+"] --> "+ lista[i][0]+" "+lista[i][1]+" "+lista[i][2]+"\n";
conc=conc+result;
}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);


Arrays.sort(lista, new Comparator<String[]>() {

public int compare(String[] entry1, String[] entry2) {
final String apell1 = entry1[1];
final String apell2 = entry2[1];
return apell1.substring(0,1).compareTo(apell2.substring(0,1));
}
});

conc="Lista de Personas Ordenadas Alfabéticamente "
+ "\npor Apellido Paterno\n"
+ "-------------------------------------\n\n";

for(int i=0;i<n;i++){
String result="";
result="["+(i+1)+"] --> "+ lista[i][0]+" "+lista[i][1]+" "+lista[i][2]+"\n";
conc=conc+result;
}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);
}
}

4. Elaborar un programa en JAVA que lea los nombres y notas de n alumnos y presenta en pantalla la
lista en orden de méritos y la lista de alumnos aprobados en orden alfabético.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicios;
import javax.swing.JOptionPane;
import java.util.Arrays;
import java.util.Comparator;
public class Ejercicio8 {
public static void main(String[] args) {

int n;
n = Integer.parseInt(JOptionPane.showInputDialog(null, "¿Cuántas alumnos
ingresara?","Sistema",JOptionPane.QUESTION_MESSAGE));

String lista[][] = new String[n][2];

for(int i=0;i<n;i++){
JOptionPane.showMessageDialog(null, "Alumno ["+(i+1)+"]");
lista[i][0]= JOptionPane.showInputDialog(null, "Ingrese Nombre
["+(i+1)+"]","Sistema",JOptionPane.QUESTION_MESSAGE);
lista[i][1]= JOptionPane.showInputDialog(null, "Ingrese Nota de Alumno
["+(i+1)+"]","Sistema",JOptionPane.QUESTION_MESSAGE);
}

String conc="Lista de Alumnos y sus Notas\n"
+ "-------------------------------------\n\n";

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

122
for(int i=0;i<n;i++){
String result="";
result="["+(i+1)+"] --> "+ lista[i][0]+" --->["+lista[i][1]+"]\n";
conc=conc+result;
}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);

Arrays.sort(lista, new Comparator<String[]>() {

public int compare(String[] entry1, String[] entry2) {
final String nota1 = entry1[1];
final String nota2 = entry2[1];
return -nota1.compareTo(nota2);
}
});

conc="Lista de Alumnos y sus Notas en Orden de Mérito\n"
+ "-------------------------------------\n\n";
for(int i=0;i<n;i++){
String result="";
result="["+(i+1)+"] --> "+ lista[i][0]+" --->["+lista[i][1]+"]\n";
conc=conc+result;
}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);

Arrays.sort(lista, new Comparator<String[]>() {

public int compare(String[] entry1, String[] entry2) {
final String nombre1 = entry1[0];
final String nombre2 = entry2[0];
return nombre1.substring(0,1).compareTo(nombre2.substring(0,1));
}
});

conc="Lista de Alumnos Aprobados en Orden Alfabético\n"
+ "-------------------------------------\n\n";
for(int i=0;i<n;i++){
if(Double.parseDouble(lista[i][1])>=10.5){
String result="";
result="["+(i+1)+"] --> "+ lista[i][0]+" --->["+lista[i][1]+"]\n";
conc=conc+result;
}

}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);
}
}

5. Elaborar un programa en JAVA que lea una lista de n nombres de personas (1 nombre y 1 o 2
apellidos) y presente la lista ordenada alfabéticamente pero por apellidos.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución package Ejercicios;

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

123
import javax.swing.JOptionPane;
import java.util.Arrays;
import java.util.Comparator;
public class Ejercicio10 {
public static void main(String[] args) {

int n;
n = Integer.parseInt(JOptionPane.showInputDialog(null, "¿Cuántas personas
ingresara?","Sistema",JOptionPane.QUESTION_MESSAGE));

String lista[][] = new String[n][3];

for(int i=0;i<n;i++){
JOptionPane.showMessageDialog(null, "Persona ["+(i+1)+"]");
lista[i][0]= JOptionPane.showInputDialog(null, "Ingrese Nombre
["+(i+1)+"]","Sistema",JOptionPane.QUESTION_MESSAGE);
lista[i][1]= JOptionPane.showInputDialog(null, "Ingrese Apellido Paterno
["+(i+1)+"]","Concatenación por Posición",JOptionPane.QUESTION_MESSAGE);
lista[i][2]= JOptionPane.showInputDialog(null, "Ingrese Apellido Materno
["+(i+1)+"]","Concatenación por Posición",JOptionPane.QUESTION_MESSAGE);
}

String conc="Lista de Personas Ingresadas\n"
+ "-------------------------------------\n\n";
for(int i=0;i<n;i++){
String result="";
result="["+(i+1)+"] --> "+ lista[i][0]+" "+lista[i][1]+" "+lista[i][2]+"\n";
conc=conc+result;
}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);


Arrays.sort(lista, new Comparator<String[]>() {

public int compare(String[] entry1, String[] entry2) {
final String apell1 = entry1[1];
final String apell2 = entry2[1];
return apell1.substring(0,1).compareTo(apell2.substring(0,1));
}
});

conc="Lista de Personas Ordenadas Alfabéticamente "
+ "\npor Apellido Paterno\n"
+ "-------------------------------------\n\n";

for(int i=0;i<n;i++){
String result="";
result="["+(i+1)+"] --> "+ lista[i][0]+" "+lista[i][1]+" "+lista[i][2]+"\n";
conc=conc+result;
}

JOptionPane.showMessageDialog(null, conc, "Sistema",
JOptionPane.INFORMATION_MESSAGE);
}
}


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

124


















































Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

125







Una computadora puede ser llamada «inteligente» si logra engañar a una persona haciéndole creer que es un
humano.
Alan MathisonTuring













 Bienvenida

Estimados estudiantes ¡bienvenidos! a la sexta semana del curso, En la cual Analizaremos los flujos de
datos dentro de un algoritmo y un programa de forma modular, llevando a introducir al estudiante a la
programación orientada a Objetos.

 Ruta de aprendizaje

Durante la sexta semana que corresponde del 10 al 16 de junio realizaremos las siguientes actividades,
emprendiendo la siguiente ruta:

- Modularización
- Programación con métodos

Es preciso recordarte que para que cumplas los objetivos planteas debes planificar tu tiempo, pues estas
actividades demandan 10 horas de estudio semanales.




Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura

Sexta Semana
“Analizaremos los flujos de datos dentro de un algoritmo y un
programa de forma modular, llevando a introducir al estudiante a la
programación orientada a Objetos”
(10 al 16 de junio)
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

126
Tema 6

Introducción a métodos (modularización)
















 Introducción al tema

Cuando comenzamos a codificar la solución de un problema con algoritmos, poco a poco nos damos
cuenta que tenemos muchas líneas de código y que de vez en cuando debemos repetir el código,
porque hay rutinas que se repiten con frecuencia, entonces surge la idea de especializar la labor de
ciertas partes del código que realiza un mismo cálculo pero con datos distintos, a este proceso de
agrupar en procedimientos o funciones lo llamaremos modularización.

 Aprendizajes esperados
Conozcamos ahora las capacidades y actitudes a desarrollar en este segundo tema:
Capacidad
- Utiliza eficientemente la especialización de porciones de código en funciones y procedimientos.
- Comprende los diferentes tipos de funciones utilizados en la modularización.

Actitudes
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las diversas
actividades.
- Demuestra solidaridad en el trabajo cooperativo y tolerancia en la resolución de discrepancias
en las opiniones y actitudes de los demás.
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las diversas
actividades.
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

127
 Mapa conceptual referido al tema

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera sintetizada los
principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te llaman la atención?





Fuente: elaboración propia





Esquema1: Mapa conceptual sobre métodos

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

128
 Desarrollo de los contenidos de aprendizaje
6.1. Concepto
Es aquel que está constituido por una o varias instrucciones físicamente contiguas y lógicamente
encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde
diferentes puntos de un programa.

Un módulo puede ser:
- Un Programa
- Una Función
- Una Subrutina (o Procedimiento)
6.2. Características de un módulo
Los módulos deben tener la máxima cohesión y el mínimo acoplamiento. Es decir, deben tener la
máxima independencia entre ellos.
La salida del módulo debe ser función de la entrada, pero no de ningún estado interno. En la
creación de los módulos deben cumplirse tres aspectos básicos: descripción, rendimiento y
diseño.

En la descripción se definen las funciones y objetivos del programa. Para obtener el máximo
rendimiento se ha de comprobar que el programa realice el proceso aprovechando al máximo
todos los recursos de los que dispone. En cuanto al diseño, se debe comprobar la estructura
que sigue el módulo, así como la estructura de los datos y la forma de comunicaciones entre los
diversos y diferentes módulos.

Conforme se extiende el tamaño de los algoritmos, se hace más difícil su revisión, actualización
y/o corrección.

Una política común para solventar este problema consiste en la modularización. Esto significa
que el algoritmo se fragmenta en partes llamadas módulos. En realidad, es un método de
diseño que tiende a dividir el problema, de forma lógica, en partes perfectamente diferenciadas
que pueden ser analizadas, programadas y puestas a puntos independientes.

Realmente la programación modular es un intento para diseñar programas, de forma tal que
cualquier función lógica pueda ser intercambiada sin afectar a otras partes del programa.

Algunas ventajas de utilizar módulos son:
- Un programa modular es fácil de mantener y modificar.
- Un programa modular es más fácil de escribir y depurar (ejecutar, probar y poner a punto).
- Un programa modular es más fácil de controlar. El desglose de un problema en módulos
permite encomendar los módulos más complejos a los programadores más experimentados
y los más sencillos a los programadores nóveles.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

129
- Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas.

Desventajas del uso de módulos:
- No se dispone de algoritmos formales de modularidad, por lo que a veces los
programadores no tienen claras las ideas de los módulos.
- La programación modular requiere más memoria y tiempo de ejecución.

Objetivos de la programación modular:
- Disminuir la complejidad.
- Aumentar la claridad y fiabilidad.
- Disminuir el coste.
- Aumentar el control del proyecto.
- Facilitar la ampliación del programa mediante nuevos módulos.
- Facilitar las modificaciones y correcciones al quedar automáticamente localizadas en un
módulo.

6.3. Clasificación de los módulos
Pueden ser de dos tipos:
- Funciones
- Procedimientos

Estas funciones y procedimientos se escriben solamente una vez, pero pueden ser
referenciados (invocadas) en diferentes puntos de un programa, tantas veces como se requiera
de modo que se puede evitar la duplicación innecesaria del código.

Funciones
Las funciones son bloques de instrucciones que tienen por objeto el alcanzar un resultado que
sustituirá a la función en el punto de invocación (las funciones devuelven un resultado).
Cada función se invoca utilizando su nombre en una expresión con los argumentos actuales o
reales encerrados entre paréntesis.

Para hacer una referencia a una función se invoca mediante un nombre y en caso de existir, una
lista de parámetros actuales necesarios (argumentos). Los argumentos deben coincidir en
cantidad, tipo y orden con los de la función que fue definida. La función devuelve un valor único.

Las funciones a que se hace referencia, se conocen como funciones de usuario puesto que son
definidas por él mismo y permiten su uso en forma idéntica a las funciones estándares. Para
coordinar e iniciar el procesamiento, se utiliza un módulo principal que es colocado al final del
algoritmo.


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

130
Declaración de funciones

función nombre_función (par1, par2,par3,...) : tipo_del_resultado

Inicio
acción1
acción2
:
nombre_función Resultado_Obtenido
Fin

Donde:
par1,par2 .... : Lista de parámetros formales o argumentos.
nombre_función : Nombre asociado de la función, que será un nombre de identificador
válido.

acción1, acción2: Instrucciones que constituyen la definición de la función, y que debe
contener una acción sola de asignación que asigne un valor al nombre de la función.

Ejemplo:
Obtener el sexto carácter de un nombre y si dicho carácter no existe, se asumirá un
asterisco como tal.

Función SEXTO(n : string) : carácter
Inicio
si longitud(n) >= 6 entonces
SEXTO Subcadena(n,6,1)
en caso contrario
SEXTO „*‟
Fin

Invocación a las funciones
Una función puede ser llamada sólo mediante referencia de la forma siguiente:
nombre_función (lista de parámetros actuales)

Donde:
nombre_función : Función que llama.
Lista de parámetros actuales: Constantes, variables, expresiones, valores de funciones, nombres
de funciones o procedimientos.


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

131
Una llamada a la función implica los siguientes pasos:
- A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual
(esta correspondencia se verá más tarde y se denomina llamada por valor).
- Se ejecuta el cuerpo de acciones de la función.
- Se devuelve el valor de la función y se retorna al punto de llamada.

Ejercicio:
Calcular la potencia de un número.

funcion POTENCIA(x,n :entero): entero
Inicio
y 1
Desde i 1 hasta abs(n) hacer
y y*x
fin Desde
si n < 0 entonces
y 1/y
Fin si
POTENCIA y
Fin

6.4. Operación de módulos y sus parámetros
6.4.1. Paso de parámetros
Existen diferentes métodos para el paso de parámetros a subprogramas, un mismo programa puede
producir diferentes resultados bajo diferentes sistemas de paso de parámetros.

Los parámetros se clasifican de la siguiente manera:

1. Entradas: Las entradas proporcionan valores desde el programa que llama y que se utilizan
dentro de un procedimiento. En los subprogramas función las entradas son los argumentos en el
sentido tradicional.
2. Salidas: Las salidas producen los resultados del subprograma; de nuevo si se utiliza el caso una
función, mientras que con procedimientos pueden calcularse cero, una o varias salidas.
3. Entradas/Salidas: Un solo parámetro se utiliza para mandar argumentos a un programa y para
devolver resultados.

Los métodos más empleados para realizar el paso de parámetros son:
- Paso por valor (parámetro valor).
- Paso por referencia o dirección (parámetro variable).

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

132

6.4.1.1. Paso por valor
Se utiliza en muchos lenguajes de programación (pascal, basic, modula-2, algol, etc.), debido a su
analogía con los argumentos de una función, donde los valores se proporcionan en el orden de
cálculo de resultados. Los parámetros se tratan como variables locales y los valores iniciales se
proporcionan copiando los valores de los correspondientes argumentos.
Los parámetros formales (locales a la función), reciben como valores iniciales los valores de los
parámetros actuales y con ello se ejecutan las acciones descritas en el subprograma.
La llamada por valor no devuelve información al programa que llama.

6.4.1.2. Paso por referencia
Se utiliza cuando se requiere que ciertos parámetros sirvan como parámetros de salida, es decir,
devuelvan los resultados a la unidad o programas que llama. La unidad que llama pasa a la unidad
llamada la dirección del parámetro actual (que está en el ámbito de la unidad llamante). Una
referencia al correspondiente parámetro formal se trata como una referencia a la posición de
memoria, cuya dirección se ha pasado. Entonces una variable pasada como parámetro real es
compartida, es decir, se puede modificar directamente por el subprograma. Si el parámetro actual es
una expresión, el subprograma recibe la dirección de la posición temporal que contiene el valor de la
expresión.

3.5. Criterios de modularización
Criterios de la programación modular
Con independencia de las técnicas, los requisitos que debe cumplir la programación modular
son:

- Establecimiento de un organigrama modular: Se realiza mediante bloques, en el que cada
bloque corresponde a un módulo y muestra gráficamente la comunicación entre el módulo
principal y los secundarios.

- Descripción del módulo principal: Debe ser claro y conciso, reflejando los puntos
fundamentales del programa.

- Descripción de los módulos básicos o secundarios: Los módulos básicos deben resolver
partes bien definidas del problema. Solo pueden tener un punto de entrada y un punto de
salida. Si un módulo es complejo de resolver, conviene ser subdivida en submódulos. Ningún
módulo puede ser llamado desde distintos puntos del módulo principal.


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

133
- Normas de la programación: Dependerán del análisis de cada problema y de las normas
generales o particulares que haya recibido el programador.

Ejercicios Resueltos

Problema 01:
Usando funciones encuentre los divisores comunes de dos números.

Solución:

Definición de variables:
a: primer número a inspeccionar
b: segundo número a inspeccionar
i: posibles divisores

El bloque principal leemos los dos números (a y b) cuyos divisores deseamos y los pasamos
como argumento a la función comunes ( ), la cual evalúa los posibles probando cada i, desde
i=1, y mientras i sea menor o igual a ambos números, preguntamos si i los divide en cuyo caso
imprimiremos i.



Diagrama N/S












Problema.2:

Usando funciones. Escriba un algoritmo que diga si un número es primo o no.

Solución:


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

134
Definición de variables:
n: número a evaluar
i: posible divisor

Una vez leído el número que deseamos saber si es o no primo, invocamos a la función EsPrimo
( ) con el argumento n para su evolución. EsPrimo ( ), comienza tomando como posible divisor a
i = n / 2 y mientras i sea mayor que 1, preguntará si i divide exactamente a n, en cuyo caso
retornará el valor de 0, indicando que no es primo. En caso contrario, tomará el siguiente i para
su evolución. Si el bucle mientras llega a terminar significa que ningún i, divide exactamente a n,
por lo que n será primo retornando el valor de 1.
De regreso al bloque principal en if ( ), el 0 es considerado como falso y por lo tanto se imprimirá
“no es primo”, mientras que un 1 significará verdadero imprimiendo el mensaje “Es primo”.

Diagrama N/S
















Problema 3:

Usando funciones, calcula el promedio ponderado de un conjunto de datos.

Solución:

Definición de variables:
n: número de elementos
i: subíndice del término actual
valores [ ]: conjunto de elementos
pesos [ ]: pesos de los valores[i]

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

135
sv: suma de los valores[i]
sp: suma de los pesos[i]
array [ ]: variable local a LeerArray ( )





EL bloque principal se encarga de Leer n e invocar a la función LeerArray ( ) con argumentos n
y valores [ ]. En esta llamada se leerán n elementos correspondientes al array valores [ ].
Seguidamente se vuelve a invocar LeerArray ( ), pero ahora con argumentos n y pesos [ ]. En
esta llamada se leerán n elementos correspondientes al array pesos [ ]. Observe que la función
LeerArray ( ), es invocada dos veces, pero ha sido definida una única vez. Aquí usted puede
notar una de las ventajas de definir funciones: puede invocarlas varias veces, sin necesidad de
volver a escribirlas, ahorrándonos considerable trabajo.
Luego de leer valores [ ] y pesos [ ], invocamos a la función PromPonderado ( ), en donde se
calculará el promedio ponderado mediante la fórmula mostrada.

Diagrama N/S



















Problema 4:
Usando funciones, ordene un conjunto de datos de menor a mayor por el método de la burbuja.
Solución:
+ valores[i] * pesos[i]
P. ponderado=
+ pesos[i]

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

136

Definición de variables:
n: número de elementos.
i: indica los elementos no ordenados
j: elementos a comparar e intercambiar
x [ ]: arreglo unidimensional
temp: utilizada para el intercambio
array[ ]: variable local

Comenzamos leyendo n e invocando a LeerArray ( ), esta función es la misma utilizada en el
ejemplo anterior. Observe otra de las ventajas de definir funciones: las escribimos para una
aplicación, pero podemos usarlas en otras.
Esto es una propiedad importante conocida como “Reusabilidad del código”.

Una vez leídos los elementos del arreglo x[ ], invocamos a la función Burbuja( ), en donde se
procede al ordenamiento; después de ordenar x [ ] y de regreso al bloque principal, sólo nos
queda imprimir los elementos ordenados, labor que delegamos a la función MuestraArray ().
Diagrama N/S


























Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

137
 Lecturas recomendadas

 Documento 1: “Funciones en JAVA”
Dirección: Ver carpeta de lecturas: 6_ Funciones en JAVA.pdf
Breve Descripción: El departamento de matemáticas de la universidad del cauca, publica
en su blog Foro de Matemáticas una entrada sobre el uso de Funciones en JAVA,
mostrando de forma sencilla como implementar este concepto en el lenguaje de
programación.

 Documento 2: "Programación Fácil - Procedimientos "
Dirección: Ver carpeta de lecturas: 6_ Procedimiento en JAVA.pdf
Breve Descripción: La página www.programaciónfacil.com/java:procedimientos, tiene una
publicación sobre el uso de procedimientos en JAVA, mostrando de forma sencilla como
implementar este concepto en el lenguaje de programación.

 Conclusiones
 En esta semana de estudio se presentó un tema muy importante en este proceso de aprender
a programar computadoras, la modularización permite que el algoritmo sea fragmentado para
ser programados, analizados y modificados con mayor facilidad.
 Con la división del código se logra disminuir la complejidad del algoritmo, aumentando la
claridad y fiabilidad del mismo, así mismo los costes por la reutilización del código y su
mantenibilidad más rápida.
 Dependiendo del algoritmo aprendimos a utilizar una función o un procedimiento que tiene
diferencias establecidas de acuerdo a la necesidad del algoritmo de solución.

 Metacognición de la sexta semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un ejercicio
recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad es regular nuestras
acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?
¿Qué acciones realizaste para aprender?


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

138
 Control de lectura sexta semana

¡Muy bien! Hemos llegado al final de la sexta semana, ahora, para comprobar tus logros y nivel de
aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes preguntas:

1. Elaborar un programa en JAVA que contenga un método que acepte como parámetros un
numero entero y devuelva su factorial (No existe factorial de números negativos. N!=1, si N
es cero; n!=1*2*3..(N-1),*N, si N>0).
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicio1;
import java.io.*;
public class Factorial {
public static void main(String args[]) throws IOException{
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader b =new BufferedReader(in);
System.out.println("Ingrese Número:");
int num = Integer.parseInt(b.readLine());
factorial(num);
}

public static void factorial(int n){
int fact =1;
int i;
if (n==0)
fact=1;
else
for(i=1;i<=n;i++)
{fact=fact*i;}
System.out.println("El factorial es: "+fact);
}
}

2. Elaborar un programa en JAVA que contenga un método que acepte como parámetros una
base real y un exponente entero positivo y calcule su potencia.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicio3;
import java.io.*;
public class Potencia {
public static void main(String args[]) throws IOException {
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader b =new BufferedReader(in);
System.out.println("Ingrese Base");
double base = Double.parseDouble(b.readLine());

System.out.println("Ingrese Exponente");
int expo = Integer.parseInt(b.readLine());
System.out.println("Resultado: "+potencia(base,expo));
}


public static double potencia(double base,int expo){
double Resultado=1;
for(int i=0;i<expo;i++) {
Resultado=Resultado*base;
}
return Resultado;

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

139
}
}

3. Elaborar un programa en JAVA que contenga un método que acepte como parámetros 3
números y determine el mayor y el menor.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicio4;
import java.io.*;
public class MayorMenor {
public static void main(String args[]) throws IOException {
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader b =new BufferedReader(in);
System.out.println("Ingrese Primer Número");
int n1 = Integer.parseInt(b.readLine());

System.out.println("Ingrese Segundo Número");
int n2 = Integer.parseInt(b.readLine());

System.out.println("Ingrese Tercer Número");
int n3 = Integer.parseInt(b.readLine());

Evaluar(n1,n2,n3);
}

public static void Evaluar(int n1, int n2, int n3){
int mayor=n1, menor=n1;
if (n2>mayor)
mayor=n2;
if (n3>mayor)
mayor=n3;
if (n2<menor)
menor=n2;
if(n3<menor)
menor=n3;
System.out.println("El mayor es: " + mayor);
System.out.println("El menor es: " + menor);
}
}

4. Elaborar un programa en JAVA que contenga un método que calcule el promedio de tres
números enteros positivos
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicio6;
import java.io.*;
public class Promedio {
public static void main(String args[]) throws IOException {
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader b =new BufferedReader(in);

System.out.println("Ingrese Primer Número");
int num1 = Integer.parseInt(b.readLine());

System.out.println("Ingrese Segundo Número");
int num2 = Integer.parseInt(b.readLine());

System.out.println("Ingrese Tercer Número");
int num3 = Integer.parseInt(b.readLine());

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

140

System.out.println("El Promedio es: "+Calculo(num1,num2,num3));

}
public static double Calculo(int num1, int num2, int num3){
double Resultado=1;

Resultado=(num1+num2+num3)/3;

return Resultado;
}
}

5. Desarrollo un programa en JAVA para registrar los datos de un alumno (apellido paterno,
apellido materno y edad), desarrolle métodos para registrar, para ordenar por apellido
paterno, método para ordenar por edad y un método que imprima los resultados.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package Ejercicio10;
import java.util.Scanner;
public class ListaAlumnos {
public static Scanner teclado;
private static String[][] mat;

public static void main(String[] ar) {
Registrar();
imprimir();
}

public static void Registrar() {
teclado=new Scanner(System.in);
System.out.print("Cuantas fila tiene la matriz:");
int filas=teclado.nextInt();
mat=new String[filas][4];
System.out.print("---------------Registrando personas----------------- ");
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
if (c==0)
System.out.print("Ingrese Apellido Paterno: ");
if (c==1)
System.out.print("Ingrese Apellido Materno: ");
if (c==2)
System.out.print("Ingrese Apellido Nombre: ");
if (c==3)
System.out.print("Ingrese Edad: ");
mat[f][c]=teclado.next();
}
}
}

public static void imprimir() {
System.out.print("---------------Reporte----------------- ");
for(int f=0;f<mat.length;f++) {
for(int c=0;c<mat[f].length;c++) {
System.out.print(mat[f][c]+" ");
}
System.out.println();
}
}

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

141
}






















“La imaginación es más importante que el conocimiento. El conocimiento es limitado,
mientras que la imaginación no”
– Albert Einstein


 Bienvenida

Estimados estudiantes ¡bienvenidos! a la séptima semana del curso, En la cual Analizaremos las
estructuras de datos e iniciaremos explicando los arreglos bidimensionales, llamados matrices, sus
operaciones y los métodos de ordenamiento y búsqueda de datos, desarrollando algoritmos y llevándolo
a un lenguaje de programación.

F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t


Sétima Semana
“Analizaremos las estructuras de datos e iniciaremos explicando los arreglos
bidimensionales, llamados matrices, sus operaciones y los métodos de
ordenamiento y búsqueda de datos, desarrollando algoritmos y llevándolo a un
lenguaje de programación”.
Del 17 al 23 de junio

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

142
 Ruta de aprendizaje
Durante la sétima semana que corresponde del 17 al 23 de junio realizaremos las siguientes actividades:

- Arreglos bidimensionales
- Operaciones con arreglos bidimensionales
- Exposiciones Finales

Es preciso recordarte que para que cumplas los objetivos planteados debes planificar tu tiempo, pues
estas actividades demandan 10 horas de estudio semanales.



Cordialmente
Ing. Luis Alberto Vives Garnique
Docente experto de la asignatura

Tema 7
Arreglos dimensionales



 Introducción al tema

Los datos se organizan de acuerdo a estructuras, tales como las matrices que agrupan datos
relacionados bajo una misma denominación, dichos datos deben ser manipulados
realizándose inserción, búsqueda, ordenamiento, también es posible realizar operaciones
sobre los datos de dichas estructuras.

Muchas soluciones a problemas del mundo real se implementan con arreglos dimensionales
es por ello que en esta semana estudiaremos como manipular las estructuras.

 Aprendizajes esperados
Conozcamos ahora las capacidades y actitudes a desarrollar en este cuarto tema:
F
u
e
n
t
e
:

I
m
a
g
e
n

e
x
t
r
a
í
d
a

d
e


i
n
t
e
r
n
e
t



Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

143

Capacidades
- Utiliza eficientemente estructuras de datos estáticas en la solución de problemas.
- Aplica adecuadamente algoritmos y programas recursivos para resolver problemas
específicos.
- Implementa apropiadamente archivos de datos para su aplicación en problemas de nivel
intermedio.
- Resuelve problemas asociados a la manipulación de matrices
Actitudes
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las
diversas actividades.
- Demuestra solidaridad en el trabajo cooperativo y tolerancia en la resolución de
discrepancias en las opiniones y actitudes de los demás.
- Asume una actitud de respeto ante sus semejantes, mostrándose responsable en las
diversas actividades.

 Mapa conceptual referido al tema

Observa detenidamente el siguiente esquema, en el encontrarás de un “vistazo” de manera
sintetizada los principales concepto de la temática que abordaremos. ¿Qué conceptos o categorías te
llaman la atención?

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

144


Fuente: Elaboración propia







 Desarrollo de los contenidos de aprendizaje
7.1. Matrices:
Se puede considerar como un vector de vectores. Es, por consiguiente, un conjunto de elementos,
todos del mismo tipo, en el cual el orden de los componentes es significativo y en el que se necesitan
especificar dos subíndices para poder identificar a cada elemento del arreglo.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

145

También se les llama arreglos Bidimensionales, ya que una tabla será utilizada cuando se requiere
de establecer relaciones por renglones y columnas entre datos de un tipo común.

1 2 3 4 . . . J . . . N



B(I,J)



Se considera que este arreglo tiene dos dimensiones (una dimensión por cada subíndice) y necesita
un valor para cada subíndice, y poder identificar un elemento individual. En notación estándar,
normalmente el primer subíndice se refiere a la fila del arreglo, mientras que el segundo subíndice se
refiere a la columna del arreglo. Es decir, B(I,J), es el elemento de -b que ocupa la I
a
y la J
a
columna
como se muestra en la figura anterior.
7.1.1. Representación gráfica de una matriz.


Una matriz de 2 x 5 seria: entero x [2] [5] // filas y columnas
Los elementos se numeran y referencia con un índice.

Un ejemplo típico de un arreglo Bidimensional es un tablero de ajedrez. Se puede
representar cada posición o casilla del tablero mediante un arreglo, en el que cada elemento
es una casilla y en el que su valor será un código representativo de cada figura del juego.
Ejemplo:
Cada elemento puede contener un número de tipo entero. Gráficamente esta matriz M se puede
definir así:

M[3][4]

FILAS
COLUMNAS
Columnas

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

146

0 1 2 3
0
0,0 0,1 0,2 0,3
1
1,0 1,1 1,2 1,3
2
2,0 2,1 2,2 2,3

7.2. Inicialización de una matriz

Veamos la siguiente sentencia:

for (i=0; i<5; i++)
{
for (j=0; j<5; j++)
{
m [ i ][ j ] = 10;
}
}

En esta sentencia se está variando un índice i desde 0 hasta 4 y un índice j desde 0 hasta 4. En
cada variación se está asignando al elemento m [ i ] [ j ] el número 10. El efecto es asignar a cada
elemento de una matriz 5 por 5 el número 10.

7.3. Consulta
El acceso a un elemento de una matriz se realiza mediante el nombre de ésta y dos índices (uno
para cada dimensión) entre corchetes. El primer índice representa la fila y el segundo la columna
en que se encuentra dicho elemento. Tal como muestra la figura 7.2, el índice de las filas tomará
valores entre 0 y el número de filas menos 1, mientras que el índice de las columnas tomará
valores entre 0 y el número de columnas menos 1. Es responsabilidad del programador
garantizar este hecho.
Nombre_matriz[índice 1][índice 2];



7.4. Asignación
Comentaremos únicamente la inicialización de una matriz en la propia declaración. El siguiente
ejemplo declara una matriz de tres filas y cuatro columnas y la inicializa. Por claridad, se ha usado
identación en los datos, aunque hubiesen podido escribirse todos en una sola línea.

Filas

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

147
int mat[3][4] = 24, 12, 6, 17,15, 28, 78, 32,0, 44, 3200 , -34 ;

La inicialización de matrices, y en general de tablas multidimensionales, puede expresarse de
forma más clara agrupando los valores mediante llaves ({}) siguiendo la estructura de la matriz.

Ejemplo 7.1:
Se desea registrar las edades de 4 grupos de personas, cada uno de ellos con 5 elementos.
Los datos deberán ser mostrados en forma posterior.

variables:
edad: arreglo(1..4,1..5) de entero
g,p: enteros

Inicio
para g = 1 hasta 4 hacer
escribir(„Grupo : „,g)
para p =1 hasta 5 hacer
escribir(„Edad de la persona „,p)
leer(edad[g,p])
para g =1 hasta 4 hacer
escribir(„Grupo „,g)
para p = 1 hasta 5 hacer
escribir(?persona „,p,‟ Tiene‟,edad[g,p],?años?)
Fin

Ejemplo 7.2:

Ingresar los siguientes datos en una matriz de 3 x 5.

4 7 1 3 5
2 0 6 9 7
3 1 2 6 4

Y luego mostrar sus valores en la siguiente forma:

4 2 3
7 0 1
1 6 2
3 9 6
5 7 4


Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

148
DIAGRAMA N/S:














 Lecturas recomendadas

 Documento 1: “Matriz en JAVA”
Dirección: Ver carpeta de lecturas: 7_ Matriz en JAVA.pdf
Breve Descripción: Javier García escribe un interesante artículo en GarBedo.es, con un
ejemplo en JAVA del uso de matriz, mostrando de forma sencilla como implementar este
concepto en el lenguaje de programación.

 Documento 2: "Ordenamiento para ordenar una matriz en JAVA "
Dirección: Ver carpeta de lecturas: 7_Ordenamiento de datos de una Matriz en java.pdf
Breve Descripción: Sergio Palay publica en su página persona
sergiopalay.wordpress.com un ejemplo en JAVA, de ordenamiento de valores almacenados
en una matriz mostrando de forma sencilla como implementar este concepto en el lenguaje
de programación.




 Conclusiones
 En esta semana de estudio se presentaron los conocimientos base, de cómo trabajar
con matrices, la realización de consultas y asignación son cuestiones básicas en la
manipulación de datos en este tipo de estructuras.

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

149
 También en este tema nos hemos dedicado a mostrar ejemplos de cómo manipular
datos organizados en una matriz, que como se habrán dado cuenta es sencillo, claro
que para ello es necesario dominar la temática desarrollada en las semanas anteriores,
tales como estructuras de control y estructuras repetitivas.
 Es importante graficar la matriz para tener mayor facilidad en su comprensión de la
manipulación de datos en la memoria, dicha representación es una abstracción que
nos facilita la comprensión.

 Metacognición de la séptima semana
Las siguientes preguntas te ayudarán a reflexionar sobre tus propios aprendizajes, es un
ejercicio recomendado para razonar e identificar nuestro esfuerzo intelectual, la finalidad
es regular nuestras acciones y procesos mentales
¿De la temática abordada que te llamó más la atención?
¿Consideras que aprendiste con los contenidos abordados? ¿Qué parte te tomó más tiempo?
¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?
¿Qué acciones realizaste para aprender?
 Control de lectura séptima semana

¡Muy bien! Hemos llegado al final de la séptima semana, ahora, para comprobar tus logros y
nivel de aprendizaje alcanzado en relación a la temática estudiada, responde a las siguientes
preguntas:

1. Elaborar un programa en JAVA que llene una matriz de 3 * 4 y determine la posición [fila,
columna] del número mayor almacenado en la matriz. Los números son diferentes.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana7;
import java.util.Scanner;
public class Ejercicio1 {

public static void main(String[] args) {

int matriz[][] = new int[3][4];

ingresar(matriz);
mayor(matriz);

}

private static void mayor(int[][] matriz) {
int mayor=matriz[0][0],i = 0,j = 0;

for (int x=0; x < matriz.length; x++) {
for (int y=0; y < matriz[x].length; y++) {
if(matriz[x][y]>mayor){
mayor=matriz[x][y];
i=x;
j=y;
}

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

150
}
}

System.out.print("el número mayor es ==> "+mayor+"[" + i + "," + j + "]");

}

private static void ingresar(int[][] matriz) {

Scanner teclado=new Scanner(System.in);

for (int x=0; x < matriz.length; x++) {
for (int y=0; y < matriz[x].length; y++) {
System.out.print("Introduzca el elemento [" + x + "," + y + "] ==>");
matriz[x][y] = teclado.nextInt();
}
}
}
}

2. Elaborar un programa en JAVA que llene una matriz de 3 * 3. Sumar las columnas e
imprimir que columna tuvo la máxima suma y la suma de esa columna.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana7;
import java.util.Scanner;
public class Ejercicio3 {

public static void main(String[] args) {
int matriz[][] = new int[3][3];
ingresar(matriz);
sumar(matriz);
}

private static void sumar(int[][] matriz) {
int columnas[] = new int[3];


for (int x=0; x < matriz.length; x++) {
columnas[x]=0;
for (int y=0; y < matriz[x].length; y++) {
columnas[x] = columnas[x] + matriz[y][x];
}
}
mayor_vector(columnas);
}

private static void mayor_vector(int[] columnas) {
int mayor=columnas[0],i=0;
for (int x=0; x < columnas.length; x++) {
if(mayor<columnas[x]){
mayor=columnas[x];
i=x;
}

}

System.out.println("el mayor es la columna ==> "+i+" con la cantidad de ==>
"+mayor);

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

151

}

private static void ingresar(int[][] matriz) {

Scanner teclado=new Scanner(System.in);

for (int x=0; x < matriz.length; x++) {
for (int y=0; y < matriz.length; y++) {
System.out.print("Introduzca el elemento [" + x + "," + y + "] ==>");
matriz[x][y] = teclado.nextInt();
}
}
}
}

3. Elaborar un programa en JAVA que llene una matriz de 3 * 3 y que almacene toda la matriz
en un vector. Imprimir el vector resultante.
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana7;
import java.util.Scanner;
public class Ejercicio6 {
public static void main(String[] args) {
int matriz[][] = new int[3][3];
ingresar(matriz);
almacenar(matriz);
}

private static void almacenar(int[][] matriz) {
int vector[] = new int [9];
int cont=0;
System.out.println("VECTOR");
for (int x=0; x < matriz.length; x++) {
for (int j = 0; j < 3; j++) {
vector[cont]=matriz[x][j];
System.out.println("[" + cont + "] ==> "+vector[cont]);
cont++;
}
}
}

private static void ingresar(int[][] matriz) {

Scanner teclado=new Scanner(System.in);

for (int x=0; x < matriz.length; x++) {
for (int y=0; y < matriz.length; y++) {
System.out.print("Introduzca el elemento [" + x + "," + y + "] ==>");
matriz[x][y] = teclado.nextInt();
}
}
}
}

4. Elaborar un programa en JAVA que dada una matriz de filas F y C Columnas, de números
enteros, permita: Borrar una Fila determinada, Borrar una Columna determinada.
Alternativas Fundamenta tu respuesta (Código de la solución)

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

152
Solución
package semana7;
import java.util.Scanner;
public class Ejercicio9 {

static int fila;
static int col;
public static void main(String[] args) {
int matriz[][] = null;
fila = tama("filas");
col = tama("columnas");
matriz = new int[fila][col];
ingresar(matriz);
mostrar(matriz);
eliminar_fila(matriz);
mostrar(matriz);
eliminar_columna(matriz);
mostrar(matriz);

}

private static void eliminar_columna(int[][] matriz) {
Scanner teclado=new Scanner(System.in);
System.out.println("ELIMINAR COLUMNA");
int c=-1;
do{
System.out.print("Ingrese el numero de columna ==> ");
c = teclado.nextInt();
}while(c<0||c>=col);

for (int i = 0; i < fila; i++) {
for (int j = c; j < col-1; j++) {
matriz[i][j]=matriz[i][j+1];
}
}

if(c == col-1){
for (int j = 0; j < fila; j++) {
matriz[j][c]=0;
}
}

col--;
}

@SuppressWarnings("resource")
private static void eliminar_fila(int[][] matriz) {
Scanner teclado=new Scanner(System.in);
System.out.println("ELIMINAR FILA");
int f=-1;
do{
System.out.print("Ingrese el numero de fila ==> ");
f = teclado.nextInt();
}while(f<0||f>=fila);

for (int i = f; i < fila-1; i++) {
for (int j = 0; j < col; j++) {
matriz[i][j]=matriz[i+1][j];
}

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

153
}

if(f == fila-1){
for (int j = 0; j < col; j++) {
matriz[f][j]=0;
}
}

fila--;
}

private static void mostrar(int[][] matriz) {
System.out.println("Presentacion de la matriz");
for (int i = 0; i < fila; i++) {
for (int j = 0; j < col; j++) {
System.out.print("[" + i + "," + j + "]"+matriz[i][j] + "\t");
}
System.out.print("\n");
}

}

private static void ingresar(int[][] matriz) {

Scanner teclado=new Scanner(System.in);

for (int x=0; x < fila; x++) {
for (int y=0; y < col; y++) {
System.out.print("Introduzca el elemento [" + x + "," + y + "] ==>");
matriz[x][y] = teclado.nextInt();
}
}
}

private static int tama(String nom) {
Scanner teclado=new Scanner(System.in);
int n;

do{
System.out.print("Ingrese la cantidad de "+nom+" ==> ");
n= (int) teclado.nextInt();
}while(n <1);
return n;

}
}

5. Elaborar un programa en JAVA, que dada una matriz de filas F y C Columnas, de números
enteros, permita: Determinar si la Matriz es escalar o no (Es escalar si los elementos de la
diagonal principal son todas iguales).
Alternativas Fundamenta tu respuesta (Código de la solución)
Solución
package semana7;
import java.util.Scanner;
public class Ejercicio10 {
static int fila;
static int col;

public static void main(String[] args) {

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

154
int matriz[][] = null;
fila = tama("filas");
col = tama("columnas");
matriz = new int[fila][col];
ingresar(matriz);
mostrar(matriz);
diagonal(matriz);

}
private static void diagonal(int[][] matriz) {
boolean indicador=true;
for (int x=0; x < matriz.length-1; x++) {
for (int y=0; y < matriz.length-1; y++) {
if(x==y){
if(matriz[x][y] != matriz[x+1][y+1]){
indicador = false;
break;
}
}
}
}
if(indicador){
System.out.println("Es escalar");
}else{
System.out.println("NO es escalar");
}
}

private static void mostrar(int[][] matriz) {
System.out.println("Presentacion de la matriz");
for (int i = 0; i < fila; i++) {
for (int j = 0; j < col; j++) {
System.out.print("[" + i + "," + j + "]"+matriz[i][j] + "\t");
}
System.out.print("\n");
}

}

private static void ingresar(int[][] matriz) {

Scanner teclado=new Scanner(System.in);

for (int x=0; x < fila; x++) {
for (int y=0; y < col; y++) {
System.out.print("Introduzca el elemento [" + x + "," + y + "] ==>");
matriz[x][y] = teclado.nextInt();
}
}
}

private static int tama(String nom) {

Scanner teclado=new Scanner(System.in);
int n;

do{
System.out.print("Ingrese la cantidad de "+nom+" ==> ");

Guía temática de aprendizajes para entorno virtuales
Fundamentos de programación

155
n= (int) teclado.nextInt();
}while(n <1);
return n;
}
}