212
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 Asignatur Material para

2 Guía temática de aprendizaje V4.0

Embed Size (px)

Citation preview

Page 1: 2 Guía temática de aprendizaje V4.0

Guía temática de aprendizajes

para entornos virtuales

Chiclayo noviembre de 2012

Luis Alberto Vives GarniqueDocente experto PEaD – USS Virtual

Introducción a la Ingeniería de

Sistemas

Asignatura

Material para el

Page 2: 2 Guía temática de aprendizaje V4.0

Introducción a la Ingeniería de SistemasAsignatura

Guía temática de aprendizajespara entornos virtuales

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

RectorDr. Humberto Llempén Coronel

Vicerrector AcadémicoMg. 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 HumanidadesMg. Nicolás Valle Palomino

Decano de la Facultad de Ciencias EmpresarialesMg. Alfredo Díaz Jave

Directora del PEaDMg.. Lady Lora Peralta

Guía temática de aprendizajes para entornos virtuales __________________________Introducción a la Ingeniería de SistemasLuis Alberto Vives Garnique

Universidad Señor de SipánPrograma 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 CorderoTeléf. 481615 Campus USS: Carretera a Pimentel km. 5 / Teléf.: 51 – 74 – 481615 Fax: 51 – 74 – 236091http://www.uss.edu.pe/

2

Page 3: 2 Guía temática de aprendizaje V4.0

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

Í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ón1.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 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

0506

07

08

3

Page 4: 2 Guía temática de aprendizaje V4.0

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

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 unidimensionales4.2 Operaciones con vectores4.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 Programa6.2 Una Función6.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

“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…………………………………………………………………………………………

4

Page 5: 2 Guía temática de aprendizaje V4.0

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

Desarrollo de los contenidos de aprendizaje7.1 Arreglos bidimensionales7.2 Operaciones con arreglos bidimensionales7.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

5

Page 6: 2 Guía temática de aprendizaje V4.0

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

PresentaciónEs 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 GarniqueDocente experto PEaD – USS Virtual

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

6

Page 7: 2 Guía temática de aprendizaje V4.0

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

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

CapacidadesComprende 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 I1.1. Estructuras Secuenciales 1.2. Estructuras Condicionales

- Simples (if) - Dobles (if – else) - Múltiples (Switch)

1.3. Conversión de Algoritmos a Programas 1.4. Creación de programas en Java

Semana 3 Tema3: Estructuras de Control II

1.5. Estructuras Repetitivas Mientras / Hacer Mientras (While, Do-while)Estructura Repetitiva Desde (For)

1.6. Conversión de Algoritmos a Programas 1.7. Creación de programas en Java

Semana 4Tema4: Introducción a la Estructura de Datos 1.1. Arreglos unidimensionales1.2. Operaciones con vectores1.3. Métodos de ordenamiento y búsqueda

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

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

1.4. Cadena de Caracteres Operaciones y funciones de cadenas.

Semana 6 Tema6: Introducción a métodos1.5. Modularización1.6. Programación con métodos

Semana 7 Tema7: Arreglos dimensionalesArreglos bidimensionales1.7. Operaciones con arreglos bidimensionales1.8. Exposiciones Finales

7

Page 8: 2 Guía temática de aprendizaje V4.0

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

«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 GarniqueDocente experto de la asignatura

Tema 1

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)

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

8

Page 9: 2 Guía temática de aprendizaje V4.0

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

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.

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?

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

9

Page 10: 2 Guía temática de aprendizaje V4.0

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

Fuente: Elaboración propia

Desarrollo de los contenidos de aprendizaje

1.1 ALGORITMOSSe 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.

10

Page 11: 2 Guía temática de aprendizaje V4.0

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

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.

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.

11

Page 12: 2 Guía temática de aprendizaje V4.0

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

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.

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

12

Page 13: 2 Guía temática de aprendizaje V4.0

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

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.

1.4 Fases para la Resolución de ProblemasEn 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 ProblemaEsta 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 AlgoritmoEn 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

13

Page 14: 2 Guía temática de aprendizaje V4.0

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

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 AlgoritmoPara 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: 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.

14

Page 15: 2 Guía temática de aprendizaje V4.0

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

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.

Expresionesa. El algoritmo es independiente del Lenguaje de Programación V Fb. Un Algoritmo debe ser preciso V Fc. Si se sigue dos veces un algoritmo, llegamos a obtener dos

respuestas diferentesV F

d. El diagrama de flujo se presenta por medio de códigos V F

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

Taller N° 01Como 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 celular16. Quitar un foco quemado de un techo17. Encontrar la media de una lista indeterminada de números positivos terminada con un número

negativo.

15

Page 16: 2 Guía temática de aprendizaje V4.0

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

1.5 ENTIDADES BÁSICAS PARA EL DESARROLLO DE ALGORITMOS

1.5.1 DatosTodos 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éricosDentro 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.

Reconoce los siguientes caracteres:

Caracteres Alfabéticos (A,B,C,…Z,a,b,c…z)

16

Page 17: 2 Guía temática de aprendizaje V4.0

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

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ógicosLos 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.

And Y Or O Not Negación

1.5.2 Los Identificadores

17

Page 18: 2 Guía temática de aprendizaje V4.0

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

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’

‘Feliz Aniversario’

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

VariablesLas 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

18

Page 19: 2 Guía temática de aprendizaje V4.0

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

Debe ser significativo y debe tener relación con el objeto que representan.Por Ejemplo:

EDADNOMBRENOTA

Pueden ser de tipo: entero, real o punto flotante; carácter.Siguiendo el Ej.

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

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

19

Page 20: 2 Guía temática de aprendizaje V4.0

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

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 OperadoresOperadores Div y Mod

El símbolo / se utiliza para la división real, y el operador Div representa la división entera.

El símbolo mod o % se usa para obtener el residuo de la división de dos números ENTEROS

Expresiónvalores reales

Resultado Expresiónvalores enteros

Resultado

10.5/3.0 3.5 10 Div 3 31/4 0.25 18 Div 2 9

2.0/4.0 0.5 30 Div 30 130/30 1.0 10 Mod 3 16/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

20

Expresión Resultado

1. Aritméticas

2. Relacionales

3. Lógicas

4. Carácter

Aritméticas

Lógica

Lógica

Carácter

Page 21: 2 Guía temática de aprendizaje V4.0

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

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ónnot 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 YF F V V F F FV F F V F V VF V V F F V VV V F F V V F

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:

21

Se obtiene Verdadero si:NOT El operando es falsoAND Ambos operandos son verdaderosOR Al menos un operando es verdadero

XOR Solo uno de los operandos son verdadero

Page 22: 2 Guía temática de aprendizaje V4.0

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

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

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 OperadoresCuando 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:x2+1/2 Hay que observar que esta expresión es totalmente diferente a esta otra (x2+1)/2, por lo que es importante codificar las expresiones aritméticas correctamente.

22

Page 23: 2 Guía temática de aprendizaje V4.0

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

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ónTodas 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:

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:

12∗√8∗(16

8 )−46+(33−3√27 )+34

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. 45f. N14g. ZZZ.h. 3µ

2. Cuál de las siguientes constantes no son válidas: a. 234.b. -8.975c. 12E - 5.

23

* , / Multiplicación y divisiónDiv,mod División y Módulo de enteros

+,- Suma y Resta

Page 24: 2 Guía temática de aprendizaje V4.0

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

d. 0e. 32,767f. 1/2g. 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

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 Algoritmos1.6.1 Técnicas para la formulación de AlgoritmosLas 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.

24

Page 25: 2 Guía temática de aprendizaje V4.0

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

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 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ÓDIGOSPseudo = 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 //

25

Page 26: 2 Guía temática de aprendizaje V4.0

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

……

Fin

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_CentimetrosINICIO

Definir metros,centi,pulg Como Real;Escribir "Ingrese la cantidad en metros: "; //mensaje de salidaLeer metros; // ingreso de datoscenti<- 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_CentimetrosSTART

Definir metros,centi,pulg Como Real;write "Ingrese la cantidad en metros: "; //mensaje de salidaread metros; // ingreso de datoscenti<- 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;

26

Page 27: 2 Guía temática de aprendizaje V4.0

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

EjemploDefinir metros,centi,pulg Como Real;

La línea precedida por // se llama comentarioRecordar 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:

27

Page 28: 2 Guía temática de aprendizaje V4.0

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

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.

Valido

Figura.- Inicio/Fin de un diagrama de flujo

Figura 1.18. Uso correcto de flechas en un Diagrama de Flujo.

28

Page 29: 2 Guía temática de aprendizaje V4.0

No valido

No valido

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

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

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

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

29

Page 30: 2 Guía temática de aprendizaje V4.0

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

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.

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.

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

El símbolo de Proceso puede incluir hasta 3 procesos separados por línea

30

Page 31: 2 Guía temática de aprendizaje V4.0

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

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

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ódigoInicio

Var:

31

Page 32: 2 Guía temática de aprendizaje V4.0

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

Enteros: ht,ph,sb,sn,igvLeer (ht, ph)sb← ht*phigv←sb*0.25sn←sb-igvescribir (sb,sn,igv)

FinEn Diagrama de Flujo

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

Algoritmo NotaFinalINICIO

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

ht: Horas Trabajadasph: Pago por hora trabajadasb: Salario brutosn: Salario Netoigv: Impuesto peruano IGV

32

Page 33: 2 Guía temática de aprendizaje V4.0

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

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

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

33

Page 34: 2 Guía temática de aprendizaje V4.0

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

Taller N° 03

Explora ahora tu nivel de aprendizaje.

Escribir un algoritmo para:

a. Sumar dos números enteros.b. Leer un número y escriba su cuadradoc. Calcular la superficie de un circulod. 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

34

Page 35: 2 Guía temática de aprendizaje V4.0

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

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

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 semanaLas 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

35

Page 36: 2 Guía temática de aprendizaje V4.0

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

¡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. 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 casaFIN

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: ", promedioFIN

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

36

Page 37: 2 Guía temática de aprendizaje V4.0

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

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)

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)); }}

37

Page 38: 2 Guía temática de aprendizaje V4.0

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

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.

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)

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

38

Page 39: 2 Guía temática de aprendizaje V4.0

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

Cordialmente Ing. Luis Alberto Vives Garnique

Docente experto de la asignatura

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

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

39

Page 40: 2 Guía temática de aprendizaje V4.0

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

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

Desarrollo de los contenidos de aprendizaje

Esquema2: Mapa conceptual

40

Page 41: 2 Guía temática de aprendizaje V4.0

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

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)

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

PSEUDOCODIGO DE UNA ESTRUCTURA SECUENCIAL

 Algoritmo Nombre_Algoritmo

InicioDefinir variables como tipo_dato // Definición de variablesvariable ← valor // Asignando valor a la

variableentrada de datos

41

Page 42: 2 Guía temática de aprendizaje V4.0

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

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

La ejecución del programa es la siguiente:

 Algoritmo Nombre_Algoritmo

InicioDefinir variables como tipo_dato // Definición de variablesvariable ← valor // Asignando valor a la

variableentrada de datos

42

Page 43: 2 Guía temática de aprendizaje V4.0

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

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

Diagrama de Flujo

43

Page 44: 2 Guía temática de aprendizaje V4.0

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

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

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

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

44

Page 45: 2 Guía temática de aprendizaje V4.0

si (condición) entoncesAccionesfin_si

if (condición) thenAccionesendif

CondiciónVerdadera 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 virtualesFundamentos de programación

a) Diagrama de Flujo

b) Pseudocódigo en español

Pseudocódigo en ingles

c) Diagrama N-S

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

45

Page 46: 2 Guía temática de aprendizaje V4.0

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

b) Pseudocódigo en español

Pseudocódigo en ingles

c) Diagrama N-S

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.

46

Page 47: 2 Guía temática de aprendizaje V4.0

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

En PseudocódigoInicio

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

FinEn Diagrama de Flujo

Ejemplo 4.4Hacer un algoritmo que determine qué número es el mayor de 2 números ingresadosSolución:En PseudocódigoInicio

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

47

Page 48: 2 Guía temática de aprendizaje V4.0

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

si_noEscribir(“El numero, b , es mayor”)

fin_siFinEn Diagrama de Flujo

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

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

FinEn Diagrama de Flujo

48

Page 49: 2 Guía temática de aprendizaje V4.0

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

1.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) hacerCaso 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,…

49

Page 50: 2 Guía temática de aprendizaje V4.0

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

Pseudocódigo en castellano

Según_sea (expresión) hacerCaso 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,…

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

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,

defaultSentencia,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

50

Page 51: 2 Guía temática de aprendizaje V4.0

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

Ejemplo 4.6Se 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ódigoAlgoritmo diasSemanaInicio

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_defectoescribir(“Valor no permitido”)roptura,

fin_segúnFinEjemplo 4.7Hacer 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

51

Page 52: 2 Guía temática de aprendizaje V4.0

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

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_diaInicio

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_defectoescribir(“Día no valido”)roptura,

fin_segúnFin

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

52

Page 53: 2 Guía temática de aprendizaje V4.0

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

Así, una estructura de selección de n alternativa o decisión múltiple puede ser construida

utilizando una estructura si con este formato:

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ódigoInicio

Var:entero: a,b,c

leer(a,b,c)si (a<b) entonces

si (expresión) entoncesacciones

si_nosi (expresión) entonces

Accionessi_no

si (expresión) entoncesAcciones

si_nosi (expresión) entonces

Accionessi_no

.

.

.fin_si

fin_sifin_si

fin_si

Figura 1.27. Estructuras anidadas

53

Page 54: 2 Guía temática de aprendizaje V4.0

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

si (a<c)entoncesescribir(“a es mayor”)

si_noescribir(“c es mayor”)

fin_sisi_no

si (b>c)entoncesescribir(“b es mayor”)

si_noescribir(“c es mayor”)

fin_sifin_si

Fin

En Diagrama de Flujo

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:

54

Page 55: 2 Guía temática de aprendizaje V4.0

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

En PseudocódigoAlgoritmo ordenarInicio

Var:real: a,b,c

escribir (“Deme 3 números: ”)leer(a,b,c)si (a>b) entonces

si (b>c)entoncesescribir(“a,b,c”)

si_nosi (c>a)entonces

escribir(“c,a,b”) entoncessi_no

escribir(“a,c,b”) entoncesfin_si

fin_sisi_no

si (a>c)entoncesescribir(“b, a, c”) entonces

si_nosi (c>b)entonces

escribir(“c, b, a”)entoncessi_no

escribir(b, c, a)entoncesfin_si

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

55

Page 56: 2 Guía temática de aprendizaje V4.0

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

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?

56

Page 57: 2 Guía temática de aprendizaje V4.0

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

¿Qué acciones realizaste para aprender?

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

INICIOnota1 es realnota2 es realnota3 es realpromedio es real

Leer "Ingresa la primera nota: ",nota1Leer "Ingresa la segunda nota:", nota2Leer "Ingresa la tercera nota:", nota3

promedio=(nota1+nota2+nota3)/3

SI(promedio>=10.5) ENTONCES Escribir "Alumno aprobado con: ",promedioSI_NO Escribir "Alumno desaprobado con: ",promedioFIN_SIFIN

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; String nombre2;

57

Page 58: 2 Guía temática de aprendizaje V4.0

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

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 System.out.println("Monto recaudado:" +

58

Page 59: 2 Guía temática de aprendizaje V4.0

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

(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; } }}

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 59

Page 60: 2 Guía temática de aprendizaje V4.0

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

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:

Estructura repetitivas WHILE, DO-WHILE Y FOR

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

60

Page 61: 2 Guía temática de aprendizaje V4.0

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

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

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?

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

61

Page 62: 2 Guía temática de aprendizaje V4.0

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

Fuente: Elaboración propia

Desarrollo de los contenidos de aprendizaje 1.1. Estructura mientras (while)

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

62

Page 63: 2 Guía temática de aprendizaje V4.0

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

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

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

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

Pseudocódigo en castellanomientras (condición) hacer

Acción S1Acción S2...Acción n

fin_mientras

mientras condición

Acciones

Pseudocódigo en ingleswhile (condición) do

Acción S1Acción S2...Acción n

end_while

Figura 1.28. Estructuras mientras: Diagrama de flujo, Pseudocódigo en castellano y Pseudocódigo en ingles

63

Page 64: 2 Guía temática de aprendizaje V4.0

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

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

Ejemplo 5.2

64

Page 65: 2 Guía temática de aprendizaje V4.0

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

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

InicioVar:

Enteros: numero,contadorcontador←0 leer(numero)mientras(numero>0) hacer

Leer(numero)contador←contador-1

fin_mientrasescribir(“El numero de enteros positivos es”, contador)

Fin

En Diagrama de Flujo

Ejemplo 5.3

Considere los siguientes algoritmos. ¿Qué visualizará y cuántas veces se

ejecuta el bucle?

65

Page 66: 2 Guía temática de aprendizaje V4.0

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

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

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)

66

Page 67: 2 Guía temática de aprendizaje V4.0

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

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.

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

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

67

Page 68: 2 Guía temática de aprendizaje V4.0

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

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.

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

hacerAcciones

mientras (condición)

Figura 1.29. Estructuras hacer-mientras: Diagrama de flujo, Pseudocódigo en castellano.

68

Page 69: 2 Guía temática de aprendizaje V4.0

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

i←i+1

mientras(i<=n)

escribir(“El factorial del numero”, n, “es”, factorial)

Fin

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

69

Page 70: 2 Guía temática de aprendizaje V4.0

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

1.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:

70

Page 71: 2 Guía temática de aprendizaje V4.0

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

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

71

Page 72: 2 Guía temática de aprendizaje V4.0

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

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.

Metacognición de la tercera semana

72

Page 73: 2 Guía temática de aprendizaje V4.0

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

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 EdadNiños 0-12Jóvenes 13-29Adultos 30-59Viejos 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); System.out.println("Cantidad de jovenes "+cantidadJovenes); System.out.println("Cantidad de adultos "+cantidadAdultos); System.out.println("Cantidad de Viejos "+cantidadviejos);

73

Page 74: 2 Guía temática de aprendizaje V4.0

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

}}

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)Solución package Semana3;

import java.util.Scanner;public class preg5 { public static void main(String[] args) {

74

Page 75: 2 Guía temática de aprendizaje V4.0

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

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)Solución package Semana3;

import java.util.Scanner;public class preg10 { public static void main(String[] args) {

75

Page 76: 2 Guía temática de aprendizaje V4.0

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

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)); }}

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

Page 77: 2 Guía temática de aprendizaje V4.0

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

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

Tema 4

Introducción a la Estructura de Datos

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

77

Page 78: 2 Guía temática de aprendizaje V4.0

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

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

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.

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

78

Page 79: 2 Guía temática de aprendizaje V4.0

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

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

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.

79

Page 80: 2 Guía temática de aprendizaje V4.0

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

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.

1.4. Declaración de un arreglo

Nom_variable : Arreglo [dimensión] de Nom_tipoEn 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.

2 Dimensiones :

1 2 3 4

8

80

Page 81: 2 Guía temática de aprendizaje V4.0

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

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.

1.5. VectoresSon 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

NUMEROS(1) Dirección xNUMEROS(2) Dirección x+1NUMEROS(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 25a del vector NUMEROS y la instrucción de salida : escribir NUMEROS(25). Declaración

81

Page 82: 2 Guía temática de aprendizaje V4.0

Guía temática de aprendizajes para entorno virtualesFundamentos de programació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.

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

1.5.2. Operaciones con VectoresLas 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ónNOMBRES(8) ‘Ana’ Asigna el valor ‘Ana’ al elemento 8 del vector NOMBRES

Lectura/Escritura de Datos

82

Page 83: 2 Guía temática de aprendizaje V4.0

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

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 Aescribir A Escritura del vector Aleer 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 enterodesde 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)fin_desde La salida o escritura de vectores se representa de un modo similar. desde i 1 hasta 15 hacer escribir TOTAL(i)fin_desdeVisualiza todo el vector completo (un elemento en cada línea independiente). Actualización de un VectorPuede 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) 15A(6) 9

83

Page 84: 2 Guía temática de aprendizaje V4.0

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

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+1fin

c) Borrar elementos (Elimina elementos de un vector) Algoritmo de BorradoInicio{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-1Fin 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:

84

Page 85: 2 Guía temática de aprendizaje V4.0

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

string : nomentero : x InicioPara x 1 hasta 5 hacer escribir(‘Nombre ? ‘) leer(nom) escribir( ‘La persona número’, x, ‘ se llama : ‘,nom) FinNota: No se utilizaron arreglos porque no se requería de almacenamiento múltiple. b) variables :nom : Arreglo[1..5] de stringx : Entero Iniciopara x 1 hasta 5 hacerescribir(‘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]) Fin

EJERCICIOS RESUELTOSEJERCICIO 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:

85

Page 86: 2 Guía temática de aprendizaje V4.0

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

CAPITULO 8: MÉTODOS DE BÚSQUEDAS Y ORDENAMIENTOS EN ARREGLOS

1.6. Algoritmos de ordenamientos

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

86

Page 87: 2 Guía temática de aprendizaje V4.0

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

1.6.2. Tipos de ordenamientos: Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos.

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

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

1.6.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:

1.6.3.1. Algoritmos de inserción:

87

Page 88: 2 Guía temática de aprendizaje V4.0

Guía temática de aprendizajes para entorno virtualesFundamentos de programació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.

1.6.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:

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 = 100A = arreglo[1..MAX] de enterosVariable 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.

88

Page 89: 2 Guía temática de aprendizaje V4.0

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

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.

89

Burbuja1(A,N)Inicio

Declarar i,j,aux:enteroPara i 2 hasta N haga

Para j i hasta 2 inc (–1) hagaSi (A[j-1]>A[j]) entonces

Aux A[j-1]A[j-1] A[j]A[j] aux

Fin siFin para

Fin paraFin

Burbuja2(A,N)Inicio

Declarar i,j,aux:enteroPara i 1 hasta N-1 haga

Para j 1 hasta N-i hagaSi (A[j]>A[j+1]) entonces

Aux A[j]A[j] A[j+1]A[j+1] aux

Fin siFin para

Fin paraFin

Page 90: 2 Guía temática de aprendizaje V4.0

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

1.6.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 = 100V = arreglo[1..MAX] de enterosVariable 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.

90

Secuencialdesordenado(V, N, X)Inicio

Declarar i:enteroDeclarar bandera: booleano

i 1Bandera FALSOMientras Que ((i<=N) y (Bandera=FALSO)) haga

Si (V[i]=X) entoncesBandera VERDADERO

Sinoi i+1

Fin siFin MQSi (bandera=VERDADERO) entonces

Imprimir(“El elemento está en la posición i”);Sino

Imprimir(“El elemento no está en el arreglo”)Fin si

Fin

Page 91: 2 Guía temática de aprendizaje V4.0

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

Búsqueda en arreglos ordenadosEste 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]}

Búsqueda binariaLa 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.

91

Secuencialordenado(V, N, X)Inicio

Declarar i:enteroDeclarar bandera: booleano

i 1Bandera FALSOMientras Que ((i<=N) y (Bandera=FALSO) y (X>=V[i]) haga

Si (X=V[i]) entoncesBandera VERDADERO

Sinoi i+1

Fin siFin MQSi (bandera=VERDADERO) entonces

Imprimir(“El elemento está en la posición i”);Sino

Imprimir(“El elemento no está en el arreglo”)Fin si

Fin

Page 92: 2 Guía temática de aprendizaje V4.0

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

EJERCICIOS RESUELTOS

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

DIAGRAMA N/S:

92

binaria(V, N, X)Inicio

Declarar izq, cen, der: enteroDeclarar bandera: booleano

Izq 1Der NBandera FALSOMientras Que ((izq<=der) y (Bandera=FALSO)) haga

Cen parteentera((izq+der)/2)Si (X=V[cen]) entonces

Bandera VERDADEROSino

Si (X>V[cen]) entoncesizq cen+1

Sino der cen-1

Fin si Fin si

Fin MQSi (bandera=VERDADERO) entonces

Imprimir(“El elemento está en la posición cen”);Sino

Imprimir(“El elemento no está en el arreglo”)Fin si

Fin

Page 93: 2 Guía temática de aprendizaje V4.0

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

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

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.

93

Page 94: 2 Guía temática de aprendizaje V4.0

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

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 semanaLas 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 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];

94

Page 95: 2 Guía temática de aprendizaje V4.0

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

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

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

componentes de un vector: ∑i=1

n

V i2

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 );}

95

Page 96: 2 Guía temática de aprendizaje V4.0

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

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

96

Page 97: 2 Guía temática de aprendizaje V4.0

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

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

97

Page 98: 2 Guía temática de aprendizaje V4.0

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

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) { 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++){

98

Page 99: 2 Guía temática de aprendizaje V4.0

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

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

}

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

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)

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

99

Page 100: 2 Guía temática de aprendizaje V4.0

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

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

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.

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

100

Page 101: 2 Guía temática de aprendizaje V4.0

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

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

101

Page 102: 2 Guía temática de aprendizaje V4.0

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

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

Desarrollo de los contenidos de aprendizaje

Esquema1: Mapa conceptual sobre cadena de caracteres

102

Page 103: 2 Guía temática de aprendizaje V4.0

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

1.7. Definición de cadenaUna 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’

1.8. Datos Tipo CarácterAnteriormente 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.

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

1.10. VariablesUna 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

103

Page 104: 2 Guía temática de aprendizaje V4.0

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

1.10.1. Cadenas de Longitud FijaSe 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.

1.10.2. Cadenas de Longitud Variable con un MáximoSe 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áxima17 = Longitud actual

1.10.3. Instrucciones Básicas con CadenasLas 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ónSi la variable NOMBRE ha sido declarada como carácter.

var NOMBRE : caracterLa 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’

Entrada/SalidaLa 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ácterlas instrucciones:leer A,Bescribir 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.

104

Page 105: 2 Guía temática de aprendizaje V4.0

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

1.10.4. Función de cadenas de caracteresEl 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 cadenaLa 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. longitud('Hola') Cadena 'Hola' rellenada de un blanco a la izquierda para tener longitud de 5.

ComparaciónEs 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

105

Page 106: 2 Guía temática de aprendizaje V4.0

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

'BARTOLO' >= 'BARTOLOME' falsa ConcatenaciónLa 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:

+ // & oLas 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' SubcadenasEsta 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' subcadena ('Tecnológico',1,3) Equivale a 'Tec' subcadena ('México',5,2) Equivale a 'co'

BúsquedaEsta 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.

1.10.5. Funciones internas

106

Page 107: 2 Guía temática de aprendizaje V4.0

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

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 Resultadoabs(x) Valor absoluto de x Entero o real igual que

argumentoarctan(x) Arcotangente de x Entero o real realcos(x) Coseno de x Entero o real realexp(x) Exponencial de x Entero o real realln(x) Logaritmo de x Entero o real reallog10(x) Logaritmo decimal de x Entero o real real

round(x) Redondeo de x Real enterosin(x) Seno de x Entero o real realsqr(x) Cuadrado de x Entero o real igual que

argumentosqrt(x) Raíz cuadrada de x Entero o real real

trunc(x) Truncamiento de x real entero

EJERCICIOS RESUELTOS

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

Algoritmo letras_ivar N: enteraLetra: 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

107

Page 108: 2 Guía temática de aprendizaje V4.0

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

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))Fin Ejercicio 10.4.Leer dos caracteres y deducir si están en orden alfabético.variables: CAR1, CAR2 : carácter.Algoritmo ComparaciónInicio Leer CAR1, CAR2 Si CAR1 <= CAR2 entonces escribir('Si se encuentran en orden') sino escribir('Desordenados') Fin_siFin 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 problemaPara 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.

108

Page 109: 2 Guía temática de aprendizaje V4.0

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

AlgoritmoLos 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. j : Constador del array G. Algoritmo BlancoInicio 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 DesdeFin

Ejercicio 10.6.Encontrar un espacio en blanco en una cadena.Iniciovariables: x: entero nom,a,b : cadena

109

Page 110: 2 Guía temática de aprendizaje V4.0

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

Inicioleer(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 : enteroInicio 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)FinNota: 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.

110

Page 111: 2 Guía temática de aprendizaje V4.0

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

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 semanaLas 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 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){

111

Page 112: 2 Guía temática de aprendizaje V4.0

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

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;

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

112

Page 113: 2 Guía temática de aprendizaje V4.0

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

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.

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

113

Page 114: 2 Guía temática de aprendizaje V4.0

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

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); }}

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 {

114

Page 115: 2 Guía temática de aprendizaje V4.0

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

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"; 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";

115

Page 116: 2 Guía temática de aprendizaje V4.0

Guía temática de aprendizajes para entorno virtualesFundamentos de programació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;

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

116

Page 117: 2 Guía temática de aprendizaje V4.0

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

} });

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); }}

117

Page 118: 2 Guía temática de aprendizaje V4.0

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

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

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)

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

118

Page 119: 2 Guía temática de aprendizaje V4.0

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

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

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

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

119

Page 120: 2 Guía temática de aprendizaje V4.0

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

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

120

Page 121: 2 Guía temática de aprendizaje V4.0

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

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

Desarrollo de los contenidos de aprendizaje

Esquema1: Mapa conceptual sobre métodos

121

Page 122: 2 Guía temática de aprendizaje V4.0

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

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

1.12. Características de un móduloLos 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.

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.

122

Page 123: 2 Guía temática de aprendizaje V4.0

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

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.

1.13. Clasificación de los módulosPueden 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.

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

Declaración de funciones

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

Inicioacción1acción2:nombre_función Resultado_Obtenido

123

Page 124: 2 Guía temática de aprendizaje V4.0

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

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ácterIniciosi longitud(n) >= 6 entonces

SEXTO Subcadena(n,6,1)en caso contrarioSEXTO ‘*’Fin

Invocación a las funcionesUna 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.

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

124

Page 125: 2 Guía temática de aprendizaje V4.0

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

Desde i 1 hasta abs(n) hacer y y*xfin Desdesi n < 0 entonces y 1/yFin siPOTENCIA yFin

1.14. Operación de módulos y sus parámetros1.14.1. Paso de parámetrosExisten 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).

1.14.1.1. Paso por valorSe 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.

1.14.1.2. Paso por referenciaSe 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

125

Page 126: 2 Guía temática de aprendizaje V4.0

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

una expresión, el subprograma recibe la dirección de la posición temporal que contiene el valor de la expresión.

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

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

126

Page 127: 2 Guía temática de aprendizaje V4.0

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

Problema.2:

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

Solución:

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

127

Page 128: 2 Guía temática de aprendizaje V4.0

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

Problema 3:

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

Solución:

Definición de variables:n: número de elementosi: subíndice del término actualvalores [ ]: conjunto de elementospesos [ ]: pesos de los valores[i]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

+ valores[i] * pesos[i]P. ponderado= + pesos[i]

128

Page 129: 2 Guía temática de aprendizaje V4.0

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

Problema 4:Usando funciones, ordene un conjunto de datos de menor a mayor por el método de la burbuja.Solución:

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

129

Page 130: 2 Guía temática de aprendizaje V4.0

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

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 semanaLas 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?

130

Page 131: 2 Guía temática de aprendizaje V4.0

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

¿Tuviste dificultad con algún tema o actividad? ¿Cómo los solucionaste?

¿Qué acciones realizaste para aprender?

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

131

Page 132: 2 Guía temática de aprendizaje V4.0

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

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

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");

132

Page 133: 2 Guía temática de aprendizaje V4.0

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

int num2 = Integer.parseInt(b.readLine()); System.out.println("Ingrese Tercer Número"); int num3 = Integer.parseInt(b.readLine()); 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]+" ");

133

Page 134: 2 Guía temática de aprendizaje V4.0

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

} System.out.println(); } } }

“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

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

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

134

Page 135: 2 Guía temática de aprendizaje V4.0

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

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 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 7Arreglos 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 esperadosConozcamos ahora las capacidades y actitudes a desarrollar en este cuarto tema:

Fue

nte:

Im

agen

ext

raíd

a de

int

erne

t

135

Page 136: 2 Guía temática de aprendizaje V4.0

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

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?

136

Page 137: 2 Guía temática de aprendizaje V4.0

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

Fuente: Elaboración propia

Desarrollo de los contenidos de aprendizaje 1.15. 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.

137

Page 138: 2 Guía temática de aprendizaje V4.0

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

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 Ia y la Ja columna como se muestra en la figura anterior.

1.15.1. Representación gráfica de una matriz.

Una matriz de 2 x 5 seria: entero x [2] [5] // filas y columnasLos 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]

0 1 2 3

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

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

FILAS

COLUMNAS

Filas

Columnas

138

Page 139: 2 Guía temática de aprendizaje V4.0

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

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

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

1.17. ConsultaEl 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];

1.18. AsignaciónComentaremos ú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.

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.

139

Page 140: 2 Guía temática de aprendizaje V4.0

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

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

Iniciopara 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 52 0 6 9 73 1 2 6 4

Y luego mostrar sus valores en la siguiente forma:

4 2 37 0 11 6 23 9 65 7 4

DIAGRAMA N/S:

140

Page 141: 2 Guía temática de aprendizaje V4.0

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

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.

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?

141

Page 142: 2 Guía temática de aprendizaje V4.0

Guía temática de aprendizajes para entorno virtualesFundamentos de programació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; } } }

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

142

Page 143: 2 Guía temática de aprendizaje V4.0

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

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

}

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;

143

Page 144: 2 Guía temática de aprendizaje V4.0

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

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

144

Page 145: 2 Guía temática de aprendizaje V4.0

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

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

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"); }

}

145

Page 146: 2 Guía temática de aprendizaje V4.0

Guía temática de aprendizajes para entorno virtualesFundamentos de programació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) { 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; } } } }

146

Page 147: 2 Guía temática de aprendizaje V4.0

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

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+" ==> "); n= (int) teclado.nextInt(); }while(n <1); return n; }}

147