ModuloFundamentosProg.pdf

Page 1

UNIVERSIDAD TÉCNICA DE MACHALA FACULTAD DE CIENCIAS SOCIALES CENTRO DE PROFESIONALIZACIÓN SEMIPRESENCIAL Y MEJORAMIENTO DOCENTE (CEPSYMED) ESPECIALIZACIÓN: INFORMATICA

SEGUNDO AÑO

MÓDULO DE: FUNDAMENTOS DE PROGRAMACIÓN Luis Edgar Sánchez L. AUTOR - MEDIADOR Dr. Rubén Lema Ruíz DIRECTOR DEL CEPSYMED AÑO LECTIVO 2010

.


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

MÓDULO DE FUNDAMENTOS DE PROGRAMACIÓN 1. Introducción

En el contexto actual de la sociedad, las TICs se han convertido en un elemento esencial para el desarrollo de las más variadas actividades de un profesional, y dentro de este ámbito la programación de computadoras es el punto más alto que se puede alcanzar en la utilización de equipos informáticos, siendo de este modo la herramienta más poderosa para poner toda la potencialidad de dichas máquinas a nuestro servicio.

Para el Licenciado en Ciencias de la educación con especialidad en informática, la programación de computadoras debe estar dentro de su conocimiento de primera mano, tomando en cuenta que, dada su especialidad, debe dominar dichas herramientas a un nivel aceptable, entendiendo las ténicas utilizadas y las diversas formas que pueden utilizar las mismas, así como ser capaz de desarrollar soluciones y elementos de apoyo a su labor docente a través de las tecnologías mencionadas.

Es así que en el presente módulo, se aborda el principio o punto inicial para esta amplia rama del conocimiento en informática, desde sus aspectos más básicos y esenciales para sacar provecho de estas tecnologías en pro de

desarrollar

elementos de apoyo a la labor docente, poner la computadora a nuestro servicio y transmitir estos conocimientos los estudiantes que estarán a su cargo, según como lo disponen las necesidades educativas en el nivel medio, sobretodo en instituciones de carácter técnico. 2. Instrucciones generales para el manejo del modulo. 2.1. Indicadores Generales

Luis Edgar Sánchez


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

El módulo de FUNDAMENTOS DE PROGRAMACIÓN como parte de la organización académica de la Escuela de Ciencias de la Educación, se ha estructurado atendiendo los siguientes aspectos: • La relevancia que tiene los fundamentos de programación en la labor docente en del profesor de Informática. • Desarrollo

de

concepciones

generales

independientes

del

lenguaje

de

programación a utilizar posteriormente. • Solucionar problemas de procesamiento de datos mediante conjuntos de instrucciones que la computadora pueda seguir. 2.2. Procesos formativos: El proceso de formación del participante, durante este modulo, se basará en el auto-estudio, auto-compromiso, tareas individuales y colectivas intra y extraáulicas, contrastación de los conocimientos aprendidos entre los binomios educativos: alumno-alumno, alumno-maestro y maestro-alumno. El abordaje de los contenidos se realizó a través de las siguientes estrategias de aprendizaje. A.- Metodología: Se requiere de la participación permanente de todos, en cada una de las sesiones de trabajo, del estudio individual de los contenidos propuestos o de investigación, de la realización de propuestas, talleres y trabajos de grupo que permitan el logro de los objetivos del módulo. El proceso didáctico esta sustentado en la expresión laboral individual-grupal, con apoyaturas de juicio analíticos-práctico-científicocrítico-creativos. B.- Evaluación: Será sistemática y permanente sustentada en los siguientes elementos: a) Metodología de estudio. b) Pertinencia, claridad y coherencia de los conocimientos; Luis Edgar Sánchez


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

c) Fundamentación experimental y comprometida (aparato crítico); d) Relación del binomio: alumno-alumno, alumno-maestro. e) Compromiso de estudio intra y extra-áulico; f) Sustentación de informes (cuestionarios, consultas, talleres, etc.) g) Nivel de compañerismo, criticidad, habilidades y destrezas. h) Pruebas escritas, automatizadas y prácticas (por unidad y final). i) Requisitos de acreditación. C.- Acreditación Para acreditar el módulo de TECNOLOGÍAS DE INTERNET se requiere: a) Mínimo un 90% de asistencia a clases, como valoración ético académico. b) Presentación total de las tareas adquiridas, según las circunstancias requeridas. c) Integración significativa al desarrollo y construcción del conocimiento científico. d) Puntualidad a clase y entrega de informes. e) Acreditación cualitativa particularidades establecidas por el binomio educativo. f) Acreditación cuantitativa mínimo 01 y máximo 10. g) Requisitos de aprobación del módulo mínimo 07. h) Otros de acuerdo a lo estipulado en el orgánico funcional del CEPSYMED.

Objetivos

1. Reconocer de forma acertada las diversas formas y metodologías que emplea la programación de computadoras. 2. Reconocer y utilizar las instrucciones y estructuras básicas de control dentro de la programación de computadoras. 3. Proponer y resolver problemas de procesamiento de datos a través de algoritmos que sistematicen la solución.

Luis Edgar Sánchez


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Método y Técnicas Fase presencial:

Exposición y diálogo con los participantes. Taller: trabajo de grupo sobre la base de lecturas previas y tareas prácticas en casa, para analizar el contenido del módulo, problematizar y resolver situaciones. Socialización de los trabajos grupales, en función de resultados obtenidos y organizadores gráficos y/o presentaciones interactivas.

Fase post-presencial: Elaboración de resúmenes y organizadores gráficos sobre el contenido del módulo y documentos complementarios requeridos, resolución de cuestionarios que complementen o refuercen los contenidos, desarrollo de material y ejercicios que lleven lo estudiado al nivel práctico de implementación.

Luis Edgar Sánchez


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ÍNDICE GENERAL

Unidad 1 “Aspectos básicos de la programación de computadoras” Tema 1.1 ¿Qué es la programación de computadoras?

7 8

Tema 1.2 Desarrollar programas

14

Unidad 2 “Poner a prueba los algoritmos” Tema 2.1 Probar diagramas de flujo con DFD

22

Tema 2.2 Implementar algoritmos en un lenguaje de programación Unidad 3 “Estructuras de control”

33

24

47

Tema 3.1 Estructuras de selección

49

Tema 3.2 Estructuras de repetición Unidad 4 “Subrutinas”

58

Tema 4.1 Funciones Anexos

69

Anexo 1 Problemas algorítmicos

66

75 76

Luis Edgar Sánchez


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

UNIDAD 1 Aspectos básicos de la programación de computadoras.

Luis Edgar Sánchez

7


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ACTIVIDADES DE ASIMILACIÓN EXTRACLASE Actividad 1.1: 1. Mediante un organizador gráfico resuma lo siguiente: a) ¿Qué es un programa? b) ¿Qué es un lenguaje de programación? c) Tipos de lenguajes de programación. d) ¿Qué son algoritmos?

Estrategias de trabajo: a. Revise detenidamente el tema 1.1 “¿Qué es la programación de computadoras?”. b. Contraste la información vertida en la lectura con otras fuentes de consulta investigadas por su parte. c. Responda los numerales de la actividad prestando mucha atención a lo solicitado en cada punto.

Tema 1.1: ¿Qué es la programación de computadoras?

Programas de computadora. Como se sabe, la principal división en una computadora se la hace entre Hardware y Software. El Hardware es toda la parte física, mientras que el software son los códigos (intangibles) mediante los cuales la computadora funciona. La programación de computadoras se ocupa de la parte software, ya que es la que hace que trabaje el Hardware. Si los programas de computadora o software son las instrucciones o codificación que sigue un ordenador para realizar acciones o resolver problemas, la programación de computadoras será entonces el uso de métodos, herramientas, lenguaje y todo lo necesario para crear esos códigos.

Luis Edgar Sánchez

8


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Lenguajes de programación. El asunto con las instrucciones o códigos que debe seguir la computadora para resolver un problema es que, para que la computadora entienda las instrucciones, estas deben estar en su idioma o lenguaje, o sea, en lenguaje máquina, el mismo que se compone de 1 y 0, algo así:

0100101110101000100101011011101010000010111110101000101000101101100011101 1010100011101001110101011100010101001101010101001010101110110100001010010 101001101010101010101101101010101010101010101001

Al ser solo dos símbolos, para expresar algo tan simple como una palabra, se necesitaran muchos unos y ceros, por otro lado, para los seres humanos se nos hará muy difícil entender o escribir este tipo de codificación(que en realidad está hecha a nivel de circuitos en el procesador). Para solucionar este problema surgen los lenguajes de programación, estos son programas en los cuales se escriben las instrucciones en lenguajes más simples que el lenguaje máquina, luego éste, mediante procesos conocidos como COMPILACION o INTERPRETACION, los traduce al lenguaje de la computadora para que ésta pueda seguir las instrucciones.

Por el nivel de complejidad del lenguaje existen de dos Tipos: Lenguajes de Bajo nivel: No son tan complejos como el lenguaje máquina, pero siguen teniendo un nivel de dificultad alto para los seres humanos, son un paso intermedio entre los lenguajes de alto nivel y el lenguaje máquina, normalmente se lo llama lenguaje ensamblador o Assembler, por su nombre en Inglés:

Ej:

Luis Edgar Sánchez

9


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Ejemplo2 (programa que saca el texto “Hola mundo” por pantalla): DATOS SEGMENT saludo db "Hola mundo!!!","$" DATOS ENDS CODE SEGMENT assume cs:code,ds:datos START PROC mov ax,datos mov ds,ax mov dx,offset saludo mov ah,9 int 21h mov ax,4C00h int 21h START ENDP CODE ENDS END START

Lenguajes de alto nivel: Son los que utilizan una sintaxis, o forma de escribir más parecida al lenguaje humano, generalmente en Inglés. Éstos son primeramente traducidos a un lenguaje de bajo nivel como assembler, para luego pasar al lenguaje máquina. Ej: class Program { static void Main(string[] args) { int Edad; Console.WriteLine("Ingrese la Edad:"); Edad=Convert.ToInt32(Console.ReadLine()); if (Edad >= 18) { Console.WriteLine("Es Mayor de edad"); } else {

Luis Edgar Sánchez

10


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Console.WriteLine("Es menor de edad");

} Console.ReadLine(); } }

(Programa en C# que pide una edad e informa si es mayor de edad o no.) Algunos Lenguajes de Programación de Alto nivel Son: • • • • • • • • • • • • • • • •

Ada ALGOL Basic C++ C# Clipper COBOL Fortran Java Lexico Logo Object Pascal Pascal Perl PHP FOX

Metodologías de Programación. De la misma forma que los lenguajes de programación han ido evolucionando su nivel de complejidad, también lo ha hecho la metodología de programación, de tal manera que los lenguajes están creados para trabajar más óptimamente en una metodología determinada. Programación no estructurada: En un principio los lenguajes de alto nivel se implementaban de tal forma que la secuencia de las instrucciones fluctuaba tanto en una dirección u otra sin ningún control, lo que hacía difícil su seguimiento y detección de errores. A éste tipo de programación se la conoció posteriormente como no estructurada o “programación en espagueti”, siendo la principal instrucción empleada la “Go to”, que permitía saltar a una determinada línea de código pero no había la condición de retorno, uno de los sobrevivientes de este tipo de lenguajes es COBOL. Programación estructurada: Para poner orden al caos de la programación en espagueti se ideó una solución sencilla pero poderosa, los lenguajes de programación debían respetar Luis Edgar Sánchez

11


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

una condición, ejecutar las sentencias en un solo sentido, de arriba hacia abajo, de tal manera que el flujo del programa ahora tendría una estructura coherente. Si el programa necesita dirigir el flujo hacia una línea de código diferente, se lo hace pero con la condición de que el flujo retorne al final de un determinado conjunto de instrucciones exactamente al lugar de donde se desvió. De esta manera el programa ahora tendrá un inicio y fin bien determinados, creando además el concepto de programa o instrucción principal así como el de funciones y procedimientos. A partir de aquí proliferaron lenguajes como C y PASCAL. Programación modular: A medida que los programas crecían en tamaño y complejidad, se necesitó ordenar las centenares de líneas de código que se generaban, así como limar un nuevo tipo de problemas, tales como la recurrente repetición de instrucciones, de esta manera se pensó en dividir el problema general de un sistema en problemas de menor índole, y éstos a su vez en sub-problemas, así un programador puede concentrarse en un problema pequeño a la vez, una vez resuelto el conjunto, se habrá resuelto el sistema, en esta serie de metodologías se basan programas como Fox y algunas versiones posteriores de Basic. Programación Orientada a Objetos(POO): Si bien la programación modular había resuelto en parte los detalles derivados de la complejidad de los grandes sistemas, ésta no satisfizo en su totalidad las aspiraciones de los desarrolladores, de tal manera que llevaron al máximo las técnicas de la modularidad creando sub programas que imitan a la vida real, la cual está compuesta de objetos que interactúan entre sí (los objetos poseen características diferenciadas y pueden realizar acciones por sí mismas). De esta forma cada objeto se crea de manera muy particular, con su propia estructura de datos y funciones, luego el sistema o programa principal se convierte en el ambiente donde estos objetos interactúan. Con esto se acuñan conceptos como: clases, propiedades, métodos, y se crean características especiales y de mucha utilidad orientadas a la optimización y ahorro de código como la herencia, encapsulación, sobrecarga y polimorfismo. Aunque Pascal trataba de implementar algunos de éstos conceptos, el verdadero impulso en esta línea lo dio una versión especializada del lenguaje C que se conoció como C++. Actualmente (a partir del año 2000) el paradigma de orientación a objetos es el estándar en todos los niveles del desarrollo de sistemas, y aunque se han explorado algunas propuestas desde hace décadas que han pretendido reemplazar la POO, ninguno ha repercutido entre el gusto de los desarrolladores. Lenguajes como JAVA, C#, y versiones más actuales de Visual Basic son los preferidos por implementar de manera muy efectiva este paradigma.

Luis Edgar Sánchez

12


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

TALLERES INTRA CLASE Taller1.1: 1. En grupo realice en un papelote un organizador gráfico que resuma los aspectos más relevantes del tema 1.1 y susténtelo frente a sus compañeros.

Estrategias de trabajo: a. Analice detenidamente el tema 1.1. b. Discuta con los miembros de su grupo cuáles son los puntos más importantes del tema. c. Lleguen a un consenso extrayendo las ideas más importantes. d. Escojan un tipo de organizador gráfico o idee uno original para dibujarlo en el papelote. e. Elijan uno o dos representantes para expliquen frente a todos lo hecho en el gráfico.

Luis Edgar Sánchez

13


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Tema 1.2: Desarrollar programas.

Desarrollar Programas Como se vio anteriormente, un programa es un conjunto de instrucciones que se deben seguir detalladamente, por ejemplo: “Programa para el juramento de la bandera”, hablando de un acto típico en nuestras instituciones educativas. En este caso, quién escriba el programa pondrá instrucciones como la siguiente. 1. 2. 3. 4. 5. 6. 7. 8.

Himno nacional del Ecuador, coreado por los asistentes. Entrada del pabellón nacional. Apertura del acto a cargo del Rector. Juramento colectivo. Juramento individual. Cierre del acto. Himno al colegio, coreado por los asistentes. Salida del pabellón Nacional.

Para crear un programa cualquiera se debe tomar en cuenta quién ejecutará el mismo, en concreto, debemos tener cuidado con el tipo de instrucciones que el ejecutante podrá cumplir; por ejemplo, no podríamos dar la siguiente instrucción a un niño de 7mo. Año de educación general básica: 4) Despeje la variable en la ecuación: 3X2 + 4x -2=10. Lo más probable es que el niño no esté en capacidad de ejecutar dicha instrucción. Así como una instrucción a un ser humano no podría ser: “teletranspórtese al cuarto contiguo”. Al escribir programas para una computadora, se debe tomar en cuenta las instrucciones que ésta será capaz de cumplir, tomando en cuenta que un ordenador es una máquina construida especialmente para el procesamiento de datos, el tipo de instrucciones base que ésta puede cumplir se reduce a las siguientes: 1. 2. 3. 4.

Recibir (pedir o ingresar) datos. Mostrar o presentar datos. Procesar datos: esto es sólo como operaciones lógico-matemáticas. Almacenar datos.

Luis Edgar Sánchez

14


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

En el siguiente ejemplo se demuestra de una manera muy sencilla como daríamos instrucciones a la computadora sabiendo el tipo de instrucciones que se le pueden dar. 1. 2. 3. 4.

Mostrar en pantalla el mensaje “Ingrese un número”. Recibir un número por teclado y almacenarlo en X. Procesar lo siguiente: X + X/2. Mostrar en pantalla el valor almacenado e X.

Pero para desarrollar un programa de computadora, hay que conocer la forma de escribir las instrucciones en un determinado lenguaje, ya que no son capaces de entender o interpretar nuestro lenguaje natural, también se debe conocer la manera como se resuelven los problemas planteados mediante la programación. Para realizar un programa se utilizan algoritmos que la computadora ha de seguir para encontrar la solución. Un algoritmo es la serie de pasos que se siguen para resolver un problema, se define también como un conjunto de procedimientos, instrucciones y/o ecuaciones mediante las cuales se logra un efecto. Se aplica normalmente al núcleo del proceso ideado para resolver una cierta tarea. El del último ejemplo sería un algoritmo válido para computadora, pero no lo podríamos ejecutar por la sencilla razón de que, aunque la computadora esté en capacidad de seguir dichas instrucciones, no entendería el lenguaje en el que están escritos. Hay algunas formas de representar algoritmos para computadora, como por ejemplo: Diagramas de flujo y pseudocódigos, sin embargo, una computadora no podrá ejecutarlos mientras no se los realice en un lenguaje de programación. Pero antes de comenzar a programar en determinado lenguaje primeramente analizamos el problema mediante Diagramas de flujo o pseudocódigos. PSEUDOCODIGOS Un Pseudocódigo es el código no ejecutable de un programa que se usa como una ayuda para desarrollar y documentar programas estructurados. Un pseudocódigo (falso lenguaje), es una serie de normas léxicas y gramaticales parecidas a la mayoría de los lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de software.

Ejemplo de pseudocódigo:

Luis Edgar Sánchez

15


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Una discoteca no deja entrar a menores de edad, para lo cual se implementa un algoritmo que comprueba quien puede entrar y quien no. El pseudocódigo para el problema anterior sería algo como lo siguiente:

1) INICIO 2) Pedir(Edad) 3) Si(Edad>=18) 4) Mostrar(“Puede pasar”) 5) Caso contrario 6) Mostrar(“Entrada negada”) 7) Fin si 8) FIN

Nota: se uso las siguientes palabras reservadas: ♦ Pedir() paréntesis.

:Pide algún dato, el dato pedido se coloca en el

♦ Si() : realiza pruebas de condición, entre paréntesis va la condición en lenguaje matemático. Ej: si (edad>18). ♦ Caso contrario contrario. ♦ Fin si

: si la condición del si() es falsa se realiza lo del caso

: Indica que finaliza el bloque “si”.

♦ Mostrar(“ “) : Muestra información en un dispositivo, por ejemplo monitor, lo que se va a mostrar se pone entre comillas dentro del paréntesis. ♦ Edad

: el dato que almacena la edad en números .

Luis Edgar Sánchez

16


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

DIAGRAMAS DE FLUJO Se conocen con este nombre las técnicas utilizadas para representar esquemáticamente bien sea la secuencia de instrucciones de un algoritmo o los pasos de un proceso. Esta última se refiere a la posibilidad de facilitar la representación de cantidades considerables de información en un formato gráfico sencillo. Un algoritmo esta compuesto por operaciones, decisiones lógicas y ciclos repetitivos que se representan gráficamente por medio de símbolos estandarizados por la ISO [1]: óvalos para iniciar o finalizar el algoritmo; rombos para comparar datos y tomar decisiones; rectángulos para indicar una acción o instrucción general; etc. Son Diagramas de Flujo porque los símbolos utilizados se conectan en una secuencia de instrucciones o pasos indicada por medio de flechas. Utilizar algoritmos en el aula de clase, para representar soluciones de problemas, implica que los estudiantes: se esfuercen para identificar todos los pasos de una solución de forma clara y lógica (ordenada); se formen una visión amplia y objetiva de esa solución; verifiquen si han tenido en cuenta todas las posibilidades de solución del problema ; comprueben si hay procedimientos duplicados; lleguen a acuerdos con base en la discusión de una solución planteada; piensen en posibles modificaciones o mejoras (cuando se implementa el algoritmo en un lenguaje de programación, resulta más fácil depurar un programa con el diagrama que con el listado del código). Adicionalmente, los diagramas de flujo facilitan a otras personas la comprensión de la secuencia lógica de la solución planteada y sirven como elemento de documentación en la solución de problemas o en la representación de los pasos de un proceso. En el gráfico que se presenta continuación se ve un ejemplo de un diagrama de flujo.

Luis Edgar Sánchez

17


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

El anterior es un diagrama de Flujo que representa un algoritmo que lee tres notas para cada uno de los 22 estudiantes de un curso, las promedia y determina si el estudiante aprobó la asignatura.

NOTA: La estandarización de los símbolos para la elaboración de Diagramas de Flujo tardó varios años. Con el fin de evitar la utilización de símbolos diferentes para representar procesos iguales, la Organización Internacional para la Estandarización (ISO, por su sigla en inglés) y el Instituto Nacional Americano de Estandarización (ANSI, por su sigla en inglés), estandarizaron los símbolos que mayor aceptación tenían en 1985.

Luis Edgar Sánchez

18


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Los siguientes son los principales símbolos para elaborar Diagramas de Flujo: Inicio/Final

Decisión

Se utiliza para indicar el

Indica la comparación de dos datos

inicio y el final de un

y dependiendo del resultado lógico

diagrama; del Inicio sólo

(falso o verdadero) se toma la

puede salir una línea de

decisión de seguir un camino del

flujo y al Final sólo debe

diagrama u otro.

llegar una línea. Entrada General

Iteración

Entrada/Salida de datos en

Indica que una instrucción o grupo

General (en esta guía, solo

de instrucciones deben ejecutarse

la usaremos para la

varias veces.

Entrada). Entrada por teclado

Salida Impresa

Instrucción de entrada de

Indica la presentación de uno o

datos por teclado. Indica

varios resultados en forma

que el computador debe

impresa.

esperar a que el usuario teclee un dato que se guardará en una variable o constante. Llamada a subrutina

Salida en Pantalla

Indica la llamada a una

Instrucción de presentación de

subrutina o procedimiento

mensajes o resultados en pantalla.

determinado. Acción/Proceso General

Conector

Indica una acción o

Indica el enlace de dos partes de

instrucción general que

un diagrama dentro de la misma

debe realizar el computador

página.

(cambios de valores de variables, asignaciones, operaciones aritméticas, etc). Flujo

Conector

Indica el seguimiento lógico

Indica el enlace de dos partes de

del diagrama. También

un diagrama en páginas diferentes.

indica el sentido de ejecución de las operaciones.

CRÉDITOS:Documento elaborado por EDUTEKA

En base al documento anterior, representamos de forma gráfica por medio de diagrama de flujo el algoritmo para saber si un número es positivo, negativo o cero sería de la siguiente forma:

Luis Edgar Sánchez

19


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Luis Edgar Sánchez

20


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

TALLERES INTRA CLASE Taller1.2: 1. Usando pseudocódigos y diagramas de flujo realice algoritmos para resolver los siguientes problemas: a. Desplegar por pantalla el siguiente mensaje: “El hombre no será sustituido por el computador hasta que este pueda reírse de los chistes del jefe”. b. Solicite al usuario que teclee su nombre y despliegue un mensaje de saludo por pantalla (Ejemplo: “Hola Clara María!”). c. Recibir dos valores enteros M y N, obtener su suma. d. Recibir un valor numérico por teclado, y a continuación presentar dicho valor multiplicado por 2 y sumado 1. e. Un pagador debe dar un bono a los empleados de una empresa utilizando el siguiente criterio: si ganan 300 dólares o más se le da $ 150, caso contrario se le da $100. Realice un algoritmo que solicite el sueldo del empleado y a continuación presente un mensaje indicando cuánto se le debe pagar.

Nota: use las siguientes palabras reservadas para el pseudocódigo: o Pedir() :Pide algún dato, el dato pedido se guarda en una o Si() : realiza pruebas de condición, entre paréntesis va la condición en lenguaje matemático. Ej: si (edad>18). o Caso contrario : si la condición del si() es falsa se realiza lo del caso contrario. o Fin si: indica que finaliza el bloque “si”. o Mostrar(“ “) : Muestra información en un dispositivo, por ejemplo monitor, lo que se va a mostrar se pone entre comillas dentro del paréntesis. o X , Y, M , N :variable que almacena un dato para ser utilizado. o X= y + z . Ejemplo de cómo realizar una operación con variables.

Luis Edgar Sánchez

21


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

UNIDAD 2 Poner a prueba los algoritmos.

Luis Edgar Sánchez

22


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ACTIVIDADES DE ASIMILACIÓN EXTRACLASE Actividad 1.1: 1. Consulte y ponga un ejemplo de lo siguiente: a) Prioridad de operaciones aritméticas. b) ¿Qué son las variables en programación? c) ¿Qué es Turbo C? d) ¿Qué es C#? e) ¿Cómo se realizan las pruebas de escritorio? 2. Plantee un problema de programación sencillo, con lo visto hasta el momento, y resuélvalo expresando la solución tanto en pseudocódigos como en diagrama de flujo.

Estrategias de trabajo: a. Consulte en distintas fuentes los literales pedidos, enfocándose siempre a lenguajes de programación. b. Sintetice la información recabada. c. Después de comprender bien cada punto consultado, cree un ejemplo personal. d. Para el segundo punto, revise cuidadosamente los temas tratados en clase, así como los ejercicios planteados, luego de eso piense en uno propio.

Luis Edgar Sánchez

23


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Tema 2.1: Probar diagramas de flujo con DFD.

Si bien con diagramas de flujo no podemos hacer un programa verdadero y funcional, estos nos sirven para analizar el algoritmo para solucionar un problema de automatización de datos, dentro de este contexto nos podemos ayudar de la computadora para probar, y aclaro que sólo para probar, la funcionalidad de nuestro diagrama de flujo a través de programas creados para este propósito. DFD es un programa creado precisamente con este fin y muy sencillo de utilizar. DIAGRAMAS DE FLUJO CON EL PROGRAMA Dfd.1 DFD es un programa con herramientas gráficas que ayuda ha diseñar algoritmos expresados en diagramas de flujo (DF). INICIO DEL Dfd. Al abrir el Dfd se ve en la pantalla la ventana de edición la cual consta de inicio y fin ya que todo algoritmo debe ser finito.

Barra de herramientas. 1

BUENO VERGARA Carlos, BUENO VERGARA JORGE; “Uso de los objetos del programa dfd”, Universidad de Pereira – 2008. Luis Edgar Sánchez

24


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Zoom. Este submenú posee los comandos que manejan el tamaño de los objetos en pantalla y el tamaño con el que pueden ser impresos.

Ejecución. El bloque de permite poner en funcionamiento el algoritmo.

Ejecutar. Este comando da paso a la ejecución del algoritmo. En caso de que un error sea encontrado, un mensaje será desplegado indicando el tipo de error y el objeto en el que se presentó. Si el diagrama está libre de errores, se ejecutará el algoritmo a partir del objeto Inicio. Detener. Este comando detiene la ejecución del algoritmo. Este comando estará disponible cuando la acción actual sea diferente de Edición.

Pausar. Luis Edgar Sánchez

25


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Este comando hace una pausa en la ejecución del algoritmo.

Objetos.

Nos permite seleccionar los distintos elementos (objetos) que vamos a introducir en los diagramas de flujo.

Salida.

El objeto Salida muestra valores por pantalla. Puede ser visualizada cualquier cantidad de valores utilizando un objeto Salida. Al darle doble clic despliega un cuadro de diálogo que muestra el valor obtenido en cada una de las expresiones en su respectivo orden. El cuadro de diálogo para la edición del objeto contiene un espacio para ingresar una lista de expresiones separadas por comas y entre comillas simples (‘). Debeexistir por lo menos una expresión. Lectura. El objeto Lectura permite la entrada de valores constantes desde el teclado y se los asigna a campos variables. Podrá ser leída cualquier cantidad de variables utilizando un objeto Lectura. Al ejecutarse, el objeto despliega un cuadro de diálogo por cada variable presente en la lista, este cuadro de diálogo espera que el usuario introduzca un valor constante que será asignado a la respectiva variable Luis Edgar Sánchez

26


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

en caso de ser un nombre debe ir entre comillas simples.

EJEMPLO. En el siguiente ejemplo consta en que el usuario ingrese su edad y el le responderá cuantos años tiene se usaran objetos como salidas y lectura. Abrir el programa (Dfd) y agregamos una salida.

Damos doble clic y escribimos entre comillas simples o apostrofes Luis Edgar Sánchez

27


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

(‘Ingrese su edad en números y presione el botón enter’).

Ahora agregamos una lectura.

Damos doble clic y escribimos la variable edad sin comillas.

Luis Edgar Sánchez

28


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Agregamos una nueva salida.

Damos doble clic y escribimos la respuesta entre comillas simples. Pero la variable (edad) debe ir fuera de las comillas y separada por comas. ('su edad es de ', edad,' años').

Luis Edgar Sánchez

29


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Ya terminado el algoritmo tendrá la siguiente forma en la pantalla.

Damos Clic en ejecutar

Luis Edgar Sánchez

30


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

El primer objeto en ejecutarse será la de SALIDA, que mostrará en pantalla el siguiente mensaje:

Seguidamente la de ENTRADA, que nos muestra un cuadro de texto donde introduciremos el valor que queramos darle a la variable edad (por ejemplo, 19):

Finalmente, la última SALIDA:

Luis Edgar Sánchez

31


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Cuando el algoritmo finaliza su ejecución y no tiene errores se muestra el siguiente mensaje:

Nota: Puede descargar el manual completo desde el sitio web dispuesto para este módulo: http://luisedsan.260mb.com/utm en la sección correspondiente de fundamentos de programación. En esa misma sección puede descargar el programa.

TALLERES INTRA CLASE Taller2.1: 1. Ponga a prueba todos los ejercicios planteados en el taller intraclase 1.2. a través del programa DFD. 2. Plantee un ejercicio propio y pruébelo a través de DFD.

Luis Edgar Sánchez

32


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Tema 2.2: Implementar algoritmos en un lenguaje de programación.

Programar en C# de Visual Studio. Para llevar la lógica analizada en pseudo-códigos a un lenguaje que realmente funcione se necesitan conocer algunos detalles:

La Sintaxis: Un lenguaje de programación se diferencia de otro principalmente por la sintaxis, esto es, la manera que se escribe la codificación, y las reglas que pone el lenguaje, las cuales hay que respetar estrictamente, de lo contrario nuestro programa nunca se ejecutará, por ejemplo tenemos una instrucción para escribir un mensaje en la pantalla modo consola del computador. En lenguaje Turbo C++ sería: printf(“Hola a todos los programadores”); o también: cout<<”Hola a todos los programadores”; nota: cuál de las dos instrucciones utilizar dependerá de la librería usada en la sección #include del encabezado del programa en turbo c. En C# sería: Console.WriteLine(“Hola a todos los programadores”); Ambos presentan el mismo mensaje y obtienen el mismo resultado, la diferencia es que se utiliza la sintaxis de un lenguaje diferente en cada caso. En C#, algunas de las reglas más importantes de sintaxis son: 1. Toda instrucción debe concluir con un punto y coma: Ej: Console.WriteLine(“Hola”); int MiVariable;

2. Toda estructura que agrupe instrucciones debe encerrar las mismas entre llaves. Luis Edgar Sánchez

33


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Ej.

if(A>B) { Console.WriteLine(“A Es Mayor que B”); } else { Console.WriteLine(“B es mayor o igual que A”); }

3. Respetar mayúsculas y minúsculas, es decir, C# diferencia entre Mayúsculas y minúsculas, si algo que es con mayúscula lo escribe con minúscula, el lenguaje no lo reconocerá.

Los errores: Básicamente existen tres tipos de errores que pueden hacer que nuestro programa no funcione, o por lo menos que no lo haga correctamente:

Errores de sintaxis: Son los que ocurren por no respetar las reglas del lenguaje al escribir, por ejemplo, no poner el punto y coma al final de una instrucción en lenguaje C. Si hay errores de sintaxis, el programa no se puede compilar para ejecutarse, es decir, ni siquiera se iniciará. En la mayoría de los casos el lenguaje mismo nos ayuda a corregirlos.

Errores Lógicos: Son los que ocurren por no haber analizado correctamente el problema, es decir, por un mal diseño del programa. El lenguaje no los puede detectar y nos damos cuenta de ellos porque los resultados no son los que esperamos, pueden llegar a ser muy difíciles de detectar.

Luis Edgar Sánchez

34


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Errores en tiempo de ejecución: Estos errores escapan al control del programador o del programa, se dan por ciertas condiciones al momento de ejecutarse, por ejemplo, al tratar de abrir un archivo cuando éste ya ha sido borrado, al intentar una división para cero, al tratar de acceder en red a una computadora que ha sido apagada. Cuando no se previenen estos tipos de errores, pueden provocar que el sistema se caiga.

Las Variables: Las variables son una forma de almacenar datos temporalmente en memoria mientras el programa se está ejecutando, por ejemplo, capturar un dato que el usuario ingresa por teclado y almacenarlo en una variable para utilizarlo posteriormente. Una variable realmente es una cantidad de memoria que se reserva y se hacer referencia con un nombre, este nombre no puede contener espacios en blanco, no puede empezar con números ni tener símbolos extraños o de puntuación. La computadora tiene dos formas principales de guardar datos en memoria (en formato de ceros y unos obviamente). La primera es guardar en ceros y unos el equivalente en binario (base 2) de un número dado en decimales. Por ejemplo: DECIMAL

EQUIVALENTE ENBINARIO

0

0

1

1

2

10

3

11

4

100

5

101

6

110

7

111

8

1000

9

1001

Luis Edgar Sánchez

35


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

10

1010

11

1011

12

1100

La otra forma es agrupar en conjuntos de 8 ceros o unos (un byte, 256 combinaciones posibles), para formar una tabla de equivalencias en símbolos llamados caracteres, entre los cuales se encuentran todas las letras del alfabeto, mayúsculas y minúsculas, la representación simbólica de los números, caracteres especiales, símbolos de puntuación, etc. Dicha tabla se denomina símbolos ASCII o ANSI. Ejemplo: Símbolo

Lugar en la tabla

Equivalente en binario

A

65

01000001

B

66

01000010

\

92

01011100

Espacio en blanco

255

11111111

@

64

01000000

Ñ

164

10100100

d

100

01100100

1

49

00110001

2

50

00110010

Luis Edgar Sánchez

36


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Todo esto se traduce en que tenemos dos grandes grupos de variables, Las numéricas y las tipo carácter (con éstas últimas se puede guardar texto). Hay que tomar en cuenta que un número podría ser almacenado como número o como carácter, en cada caso se trataría de manera diferente. Observemos en los ejemplos siguientes con la operación de suma como se comportarían los diferentes tipos de datos (Los tipo cadena de caracteres o carácter se escriben entre comillas, los numéricos directamente): Ejemplos:

2+3=5

“A” + “XZ” =“AXZ”

“2” + “3” = “23”

“2” + “AB” = “2AB”

1.2 + 1.4 = 2.6

“1.2” + “1.4” = “1.21.4” Nota: Dos tipos o subtipos de variables distintas no pueden mezclarse, asignarse o hacer operaciones entre sí sin una acción de conversión específica. Por ejemplo: 2 + “AB” = ERROR!!!! “2” + 2 = ERROR!!! En el siguiente cuadro podemos ver una clasificación de acuerdo a los tipos y subtipos de datos principales y su respectiva palabra reservada que lo identifica en C#:

Luis Edgar Sánchez

37


Módulo de Fundamentos de programación

Tipos de datos

UTM-FCS-CEPSYMED

Ejemplo

Palabra en C#

Enteros Cortos(int16)

146

short

EnterosNormales(int32)

1540

int

Enteros Largos(int64)

125648972

long

Con decimales de simple

12.52

simple

1256.256872

double

1.0000256894

float

‘a’

char

“abc123@/”

string

Verdadero o falso

bool

Una imagen, un

Object

Numéricos

precisión Con decimales de doble precisión Decimales de punto flotante

Carácter Carácter Cadena de caracteres

Lógicas Booleaneas

Objeto

control, un objeto definido por una clase, etc.

O dependiendo del tipo de objeto

Luis Edgar Sánchez

38


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Declarar variables en C. La sintaxis para la declaración de variables en C# o en turbo C es la siguiente: <tipo de datos> <Nombre de variable>(=<valor de inicialización>) (,<nombre de segunda variable>);

Lo que está entre paréntesis es opcional, Ejemplos:

long X; Declara una variable de tipo entero larga llamada X. int numero1=20; Declara una variable de tipo entera llamada número y la inicializa con el valor 20. string MiVar=”HolaMundo”; Declara una variablede tipo cadena y la inicializa con el texto “Hola Mundo”. double A,B=2.5; Declara dos variables de tipodoble, A y B e inicializa B con el valor de 2.5. int n1,n2,n3; Declara tresvariables de tipo entero llamadas n1, n2 y n3. Asignar Valores en C. Para asignar valores a variables en C# o turbo C se usa el operador "=", lo que este del lado derecho será el valor a asignar, y del lado izquierdo la variable donde se va a guardar. Variable=<valor>; Aquí un ejemplo de asignaciones en C#.

El resultado mostrado por pantalla será 8. Nota: Sólo se pueden asignar valores y variables del mismo tipo de datos.

Luis Edgar Sánchez

39


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Programación Orientada a Objetos: Es un tipo de programación mediante el cual se crean y utilizan objetos, los cuales poseen características y saben realizar funciones por sí mismo. Bajo este enfoque, lo que se debe hacer entonces es crear o reconocer el objeto que puede cumplir las funciones que requerimos, le configuramos sus propiedades (características) y utilizamos sus funciones(Métodos). Haciendo una analogía con la vida real. Un ser humano es una clase de la cual sacamos un objeto, por ejemplo: humano1. El tendrá ciertas propiedades y métodos que se podrán utilizar para programarlos.

Métodos

Propiedades

Caminar()

Nombre

Saltar()

Estatura

Dormir()

Actividad

Hablar()

Velocidad

Mirar()

Luis Edgar Sánchez

40


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Se podría programar a un Objeto de este tipo de la siguiente Forma: humano Humano1;

Declaro un objeto del tipo humano llamado humano1.

Humano1.Nombre=”Luis”; Humano1.Velocidad=20; Humano1.Actividad=”Estudiante”; Humano1.Saltar(); Humano1.Hablar(“Hola a todos”); Humano1.Caminar(50,”izq”);

Con las líneas de código anteriores se configura y da órdenes al objeto, cuando el programa se ejecute se realizará cada una de las líneas en secuencia, de esta manera, se dice que el Humano1 se va a llamar Luis, va a tener una velocidad de 20 km/h al caminar y su actividad será Estudiante. Luego se le ordena saltar, seguidamente hablar con un parámetro que seguramente servirá para definir lo que va a decir, y por último se le ordena caminar, los dos parámetros de caminar pueden significar: caminar 50 pasos a la izquierda, y lógicamente lo hará a 20 km/h.

Los Objetos en C#. El Lenguaje de programación C# es un lenguaje orientado a objetos casi en su totalidad, es decir, podemos crear objetos o utilizar la larga lista de los ya creados para ser usados. Los objetos ya creados y listos para ser usados, en su mayoría, no se necesita declararlos, sino que se usan directamente. Para comenzar con el aprendizaje, utilizaremos la interfaz de usuario más sencilla que hay, la consola, que es la pantalla negra de Windows, o la llamada ventana de comandos, se ve parecido al antiguo DOS y es una pantalla negra con letras blancas donde se presenta texto simple. Para utilizar los métodos o las propiedades lo haremos así:

Luis Edgar Sánchez

41


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Utilización de propiedades: <objeto>.<propiedad> Ejemplo:

Ob1.Text =”algo”;

Ob1.edad= Tiempo.AñoActual – Ob1.AñoNacimiento;Tratamos de calcular la edad a partir del año de nacimiento.

Utilización de Métodos:

<objeto>.<método>(<parámetro1>,<parámetro2>,….); Ejemplos: Documento1.ImprimirTodo(); Ob1.Mostrar(“Impresión concluida”);

El objeto Console: Es el objeto de C# que contienen los métodos para manejar la consola, de los cuáles utilizaremos 3: el método Write, WriteLine y ReadLine. Write.-Escribe un texto en la pantalla de consola y deja el cursor al final de lo escrito. Ej: Console.Write(“hola Mundo”); WriteLine.- Escribe un texto en la pantalla de consola y salta el cursor a la siguiente línea. Ej: Console.WriteLine(“hola Mundo”); ReadLine.-Toma los datos escritos por el usuario desde la última posición del cursor hasta el final de la línea, dejando la computadora en espera, y finaliza al presionar Enter, devuelve el valor ingresado. Ej: Texto1=Console.ReadLine()  Lee lo que ha escrito el usuario en la consola y lo almacena en una variable llamada Texto1.

Un Ejemplo: El siguiente programa pide que ingrese un nombre y luego lo vuelve a mostrar por pantalla. Luis Edgar Sánchez

42


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

static void Main(string[] args) { string nombre;

//Se declara una variable tipo cadena llamada Nombre.

Console.Write("Digite su nombre:");

//Se presenta por pantalla el mensaje para que el usuario //sepa que tiene que ingresar datos.

nombre =Console.ReadLine();

//Se lee lo que ingresó el usuario y se lo almacena en nombre.

Console.Write("Su nombre es:");

//Se muestra el mensaje Su nombre es, dejando el cursor en

Console.WriteLine(nombre);

//la misma línea, seguido se muestra el nombre y se salta a la //siguiente línea.

Console.ReadLine();

//Se hace un ingreso de datos sin asignación para que la //ejecución se detenga hasta pulsar Enter, // así se hará una pausa para poder ver los resultados.

}

El Objeto Convert: Es el objeto mediante el cual podemos convertir unos tipos de datos en otros, por ejemplo, los tipos string a cualquier subtipo de los numéricos, siempre y cuando esto sea posible. Este objeto tiene un Método para cada tipo de datos, por ejemplo el método ToDouble convierte al tipo doble.

Luis Edgar Sánchez

43


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Ejemplos: static void Main(string[] args) { int A; double B; string C; A = 5; C ="20"; A =Convert.ToInt32(C);

//Aquí se convierte el valor de C que está en tipo texto // a un Entero de32 Bits para poder almacenarlo en A.

B =Convert.ToDouble(Console.ReadLine());//Enesta línea se lee la entrada del //usuario, pero como el método ReadLine //Lo lee comotexto, se utiliza el //Objeto Convert para poder almacenarlo //en la variable tipo doble B.

……………………..

La Estructura del Programa: Cada lenguaje de Programación tiene su estructura, en el caso de los programas hechos en C#, éstos se componen de diferentes archivos donde se encuentran definidas las CLASES, y agrupados por ESPACIOS DE NOMBRES, el programa se iniciará siempre en una función Principal llamada MAIN. Cada uno de estos archivos tiene una estructura parecida a la siguiente:

Luis Edgar Sánchez

44


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

using System; using System.Collections.Generic; using System.Text;

namespaceConsoleApplication1 { class Program { static void Main(string[] args) { //Esta es el área en la que //se escribe el programa } } }

Construir una aplicación de Consola en C#: 1) Abrimos Microsoft Visual Studio. 2) Escogemos “Crear Proyecto”. 3) Elegimos el lenguaje de Programación C# y a la derecha “Aplicación de Consola”.

Luis Edgar Sánchez

45


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

4) Escriba el programa de ejemplo de la aplicación de Consola dentro de la función MAIN.

TALLERES INTRA CLASE Taller2.2: 1. Usando organizadores gráficos sintetice los siguientes contenidos: a. Tipos de errores en la programación. b. Tipos de variables. c. Operaciones de entrada y salida en C#. 2. Resuelva todos los ejercicios planteados en el taller intraclase 1.2. y el ejercicio planteado por ud. en el taller 2.1 utilizando C# y Turbo C.

Luis Edgar Sánchez

46


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

UNIDAD 3 Estructuras de control

Luis Edgar Sánchez

47


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ACTIVIDADES DE ASIMILACIÓN EXTRACLASE Actividad 3.1: 1. Resuelva los siguientes problemas de procesamiento de datos utilizando diagramas de flujo y programación en C. a) Realice un programa que simule un cajero automático que reciba como dato el monto que el usuario desea retirar, inmediatamente el programa debe proporcionar como dato la cantidad de billetes de 5, 10, 20 y 50 que le va a proporcionar. Tome en cuenta que los montos ingresados deben ser múltiplos de 5, el programa deberá dar el mensaje adecuado. b) Realice un programa que reciba las tres notas parciales de un estudiante, a continuación calcule el promedio y presente un mensaje en pantalla que avise si el alumno aprueba o reprueba, tomando como nota base para aprobar 14/20. c) Realice un programa que reciba un valor para x, y muestre el valor final de las siguientes ecuaciones dependiendo del valor ingresado a. Si x es cero o positivo: X2 +2x -3 b. Si x es negativo: X2 +4x +1 2. Realice una o dos pruebas de escritorio para cada caso del punto anterior. Estrategias de trabajo: a. Revise detalladamente el tema 3.1. b. Consulte información adicional y ejemplos alternativos. c. Consulte la forma de usar codificación en C++. d. Realice los ejercicios planteados. e. Realice las pruebas de escritorios solicitadas tomando en cuenta los distintos valores que puede tomar al pasar por la estructura de selección.

Luis Edgar Sánchez

48


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Tema 3.1: Estructuras de selección

Los programas se ejecutan en secuencia, línea a línea una después de otra, pero la mayoría de las veces se debe elegir entre distintas posibilidades dependiendo de los valores que vayan tomándose a lo largo de la ejecución, en ese caso se utilizarán las estructuras de selección. ESTRUCTURA DE SELECCIÓN SIMPLE IF La estructura de selección más utilizada es la estructura if(si condicional), la cual se puede complementar con un else(en otro caso o caso contrario), mediante esta estructura se puede condicionar la secuencia de ejecución dependiendo de una comparación lógica por ejemplo. if(A>5) { Console.WriteLine(“Lo ingresado es Mayora 5”); } else { Console.WriteLine(“Lo ingresado es menor o igual a 5”); }

Lo anterior se explica así: “ir ejecutando el programa, luego comparar, si el contenido de la variable A es mayor a 5, escriba en la consola <Lo ingresado es mayor a 5> caso contrario escriba en la consola <Lo ingresado es menor o igual a 5>”. Tanto el if como el else pueden contener un sinnúmero de instrucciones dentro de su estructura, para eso en C# se utilizan las llaves para delimitar cuáles son las instrucciones que están condicionadas al if o al else. Cabe destacar que la parte del else no siempre es necesario colocar, todo depende de la lógica del programa que diseñemos, recordando que si no ponemos else, lo que siga a continuación de la llave que cierre el if se ejecutará sin importar si la condición del if se cumplió o no, pero si colocamos el else, esto se ejecutará únicamente cuando no se ejecute la parte del if, es decir, son mutuamente excluyentes.

Luis Edgar Sánchez

49


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Las comparaciones lógicas las podemos hacer entre dos elementos del mismo tipo de datos utilizando los siguientes símbolos.

Símbolo

Significado

>

Mayor que

<

Menor que

>=

Mayor o igual a

<=

Menor o igual a

==

Es igual a

!

Negación(invierte el resultado de una operación) Verdadero

true

Falso false

Luis Edgar Sánchez

50


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Operador Y, sirve para unir dos comparaciones, es verdadero sólo si &&

ambas son verdaderas.

Operador O, sirve para unir dos ||

comparaciones, es verdadero si cualquiera de las dos es verdadera.

Aquí algunos ejemplos de if en C:

Estructura if

Se lee

If(A>5)

Si A es Mayor a 5

If(nom==”Carlos”)

Si nom es igual a “Carlos”.

If(numero != 0 )

Si número no es igual a cero.

Luis Edgar Sánchez

51


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

If(r>4 && r<9)

Si r es mayor a 4 y menor a 9

If(a==5|| a==8)

Si a es igual a 5 o igual a 8

If(x>10 && M<= 15)

Si x es mayor a 10 y M es menor o igual a 15

Utilizando diagramas de flujo y el programa dfd. El objeto Decisión esta asociado a dos bloques de objetos ubicados a lado y lado de este, y un objeto Cierre Decisión ubicado a continuación de ambos bloques. Si al evaluar la condición se obtiene el valor lógico .V., se ejecuta el bloque rotulado con la palabra Si, en caso contrario se ejecuta el bloque rotulado con No. En ambos casos la ejecución continúa en el objeto Cierre Decisión.

El cuadro de diálogo del objeto Decisión contiene espacio para la expresión que conforma la condición, y dos casillas por medio de las cuales se puede especificar por cual lado continuara el flujo en caso de que la condición sea verdadera.

Luis Edgar Sánchez

52


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

EJEMPLO. Diseñar y ejecutar un algoritmo que indique si un número a pedido por teclado es positivo o negativo. Colocamos un objeto de salida y escribimos (‘inserte un número).

Ahora colocamos un objeto de lectura con la variable (número).

Ahora colocamos una decisión y le damos doble clic.

Luis Edgar Sánchez

53


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Le escribimos que la variable número > 0 y le escogemos el lado para que la condición sea verdadera (derecho).

Luis Edgar Sánchez

54


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Colocamos un objeto de salida en lado donde la condición sea verdadera(derecho) y escribimos (‘El número que ingreso es positivo’).

También colocamos otro objeto de salida en el lado donde la condición sea falsa (izquierdo) y escribimos (‘El número que ingreso es negativo’). ESTRUCTURA DE SELECCIÓN MULTIPLE (SWITCH – CASE) En ocasiones se necesita escoger uno de una serie de valores, para lo cuál las estructuras de selección simples se tornan en una complejidad innecesaria. Para optimizar el uso de código en situaciones como la anteriormente descrita se utilizan las estructuras de selección múltiples, éstas permiten escoger un segmento de código dependiendo del valor tomado por una variable. Dentro del lenguaje C#, la estructura de selección se denomina switch y su sintaxis es la siguiente:

switch (<variable>) { case Valor_1: //Instrucciones break; case Valor_2: //Instrucciones break; case Valor_n: //Instrucciones break; ……… default: //Instrucciones que ocurrirán en caso de no ingresar a ninguna break; }

Luis Edgar Sánchez

55

d


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

El siguiente es un ejemplo típico de la utilización de la estructura de selección múltiple, se trata de un programa en el que se tiene que escoger entre una serie de opciones. En este caso escogeremos entre los colores del tricolor patrio, para hacer conocer al usuario su significado según como nos han enseñado en la escuela. Ejemplo en C#: static void Main(string[] args) { int op = 1; Console.Write("Escoja entre uno de los colores de la bandera "); Console.WriteLine("ecuatoriana para desplegar su significado"); Console.WriteLine("1) Amarillo, 2) Azul, 3) Rojo"); Console.Write("Escoja el nùmero de la opciòn deseada: "); op=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("\n Su significadoi es:\n"); switch (op) { case 1: Console.WriteLine("La riqueza de nuestra patria."); break; case 2: Console.WriteLine("Nuestro cielo y nuestro mar."); break; case 3: Console.WriteLine("La sangre derramada por nuestros héroes."); break; default: Console.WriteLine("Opción incorrecta."); break; } Console.ReadLine();

} El mismo ejemplo en turbo c: # include "iostream.h" # include "conio.h" void main(void) { int op=1; clrscr(); cout<<"Escoja entre uno de los colores de la bandera ecuatoriana\n"; cout<<"para desplegar su significado\n"; cout<<"1) Amarillo 2) Azul 3) Rojo\n"; cout<<"Digite su opci¢n: "; cin>>op; switch(op) { case 1: cout<<"La riqueza de nuestra patria\n"; break; case 2: cout<<"Nuestro cielo y nuestros mares\n"; break; case 3: cout<<"La sangre de nuestros heroes\n"; break; Luis Edgar Sánchez

56


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

} cout<<”pulse una tecla para terminar”; getch(); }

Se debe notar que la principal diferencia entre usar un lenguaje u otro viene dada en las operaciones de Entrada y salida (I/O), es decir, en cómo se muestra y cómo se obtiene la información.

TALLERES INTRA CLASE Taller 3.1: 1. Resuelva los siguientes problemas usando diagramas de flujo y programación en C. a) Calcular el valor de M, si : 1. M = 5N + (N + 1)^2 para N < 3 2. M = N3 + 7N para N > 9 3. M = N + 5 - (N + 2) / 3 para 3 <= N <= 9 b) Se tienen dos números M y N, tales que M diferente de N, reemplace el mayor de ellos con la suma de ambos, a no ser que el producto de los dos números sea menor que la suma de ellos; en este caso, el menor de los dos números se reemplazará por el producto. c) Realice un programa que reciba el valor del sueldo de un empleado, a continuación calcule un bono a recibir dependiendo del sueldo, de tal forma que, si gana menos de $400 recibe un bono del 20% de su sueldo, si gana entre 400 y 800 recibe un bono del 15% de su sueldo, mientras el empleado que gane más de 800 recibe un bono del 10% de su sueldo. d) Realice un programa que reciba un número, seguidamente de la opción de a) duplicarlo, b) tripicarlo, c) elevarlo al cuadrado y d) dividirlo entre 2.

Luis Edgar Sánchez

57


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Tema 3.2: Estructuras de repetición.

Una de las funciones más poderosas de una computadora es la de realizar tareas repetitivas de manera rápida y eficiente que pueden llegar a ser tediosas y lentas para los seres humanos. Los lenguajes de programación ofrecen algunas estructuras mediante las cuales se consigue que un grupo de instrucciones se repita un número definido o indeterminado de veces dependiendo de alguna condición dada. Estructura for Repite un bloque de código un número determinado de veces dependiendo del valor de una variable especial llamada contador. Sintaxis: for(<declarar e inicializar variable>;<condición de terminación>;<incremento>) { } Ejemplo: for(int num=1;num <=10;num=num+1) { Console.WriteLine("Repite"); } El ejemplo anterior imprime en la pantalla la palabra <Repite> 10 veces. El for del ejemplo anterior, interpretado en nuestro idioma diría algo así:"para la variable num que inicie desde uno, mientras sea menor o igual a 10 en incrementos de uno hacer...".

En la primera parte del for del ejemplo se declara una variable contador llamada num y se la inicializa con 1: Luis Edgar Sánchez

58


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

int num=1 En la segunda parte se encuentra la condición que dice "mientras número sea menor o igual a 10": num <=10 En la tercera parte se coloca el incremento que tendrá la variable num. Podemos reemplazarlo con una variante que utiliza el doble signo +, el cual significa un incremento de una unidad: num=num+1 o num++ Es equivalente a num=num+1. Si quisiéramos incrementar en otras unidades una forma puede ser num+=2 por ejemplo para incrementar de 2 en 2.

Ejemplo completo: Realizar un programa que muestre por pantalla los números del 1 al 10: Solución Gráfica:

Solución en C# Luis Edgar Sánchez

59


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { for (int num = 1; num <= 10; num = num + 1) { Console.WriteLine(num); } } } } Estructura while Repite un bloque de código mientras se cumpla una condición dada al inicio. Sintaxis: while(<condición> ) { //instrucciones. } Ejemplo: int num=1; while(num>0) { Console.WriteLine("ingrese un número: "); num=Convert.ToInt32(Console.ReadLine()); }

Luis Edgar Sánchez

60


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

En el ejemplo anterior se pide un número de forma reiterada, el programa continúa mientras el número ingresado almacenado en la variable num sea mayor a cero, en el momento que la condición deje de cumplirse, el bucle terminará.

Ejemplo completo: Realizar un programa que no permita salir de un bucle hasta haber ingresado una contraseña válida: Solución Gráfica:

Luis Edgar Sánchez

61


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Solución en C# using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string clave = " "; while (clave != "secreto") { Console.Write("Ingrese la contraseña"); clave = Console.ReadLine(); } Console.Write("Contraseña correcta, adiós"); } } }

Solución en Turbo C. # include "conio.h" # include "iostream.h" # include "string.h" void main(void) { clrscr(); char *clave=" "; while(strcmp(clave,"secreto")!=0) { cout<<"Ingrese la contrase¤a:"; cin>>clave; } cout<<"Contrase¤a correcta, adios"; getch(); }

Estructura do. Es muy parecido a la estructura while con la diferencia que while hace la comprobación al pricipio y do lo hace al final.

Sintaxis: Luis Edgar Sánchez

62


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

do { //instrucciones. }while(<condición> ); El mismo ejemplo usado en la estructura while, pero con una estructura do sería: int num; do { Console.WriteLine("ingrese un número: "); num=Convert.ToInt32(Console.ReadLine()); }while(num>0); Una diferencia entre el ejemplo de la estructura while y éste, es que al usar “do”, no es necesario inicializar la variable num, porque siempre entraría al bloque la primera vez, ya que la comparación la hace al final. En la estructura while en cambio necesitamos inicializar la variabe(para este ejemplo) porque se la usa antes de que pueda recibir un valor, lo que generaría un error de valor indeterminado.

Ejemplo completo: Realizar un programa que no permita salir de un bucle infinito hasta haber ingresado una contraseña válida (con estructura do):

Luis Edgar Sánchez

63


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Luis Edgar Sánchez

64


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Solución en C# using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string clave; do { Console.Write("Ingrese la contraseña:"); clave = Console.ReadLine(); } while (clave != "secreto") ; Console.Write("Contraseña correcta, adiós"); } } }

Solución en Turbo C. # include "conio.h" # include "iostream.h" # include "string.h" void main(void) { clrscr(); char *clave; do { cout<<"Ingrese la contrase¤a:"; cin>>clave; }while(strcmp(clave,"secreto")!=0); cout<<"Contrase¤a correcta, adios"; getch(); }

Luis Edgar Sánchez

65


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

TALLERES INTRA CLASE Taller 3.2: 1. Resuelva las siguientes interrogantes a) Realice un cuadro comparativo de las tres estructuras de repetición que se utilizan en C. b) Realice un gráfico que represente a una estructura for, señalando sus partes y explicando la función que cumple cada uno de los tres parámetros que posee. c) ¿Puede una estructura de repetición quedar en un ciclo infinito?, si es así, explique cuáles, en que casos y de un ejemplo. d) ¿Pueden las estructuras de repetición no ejecutarse ni una sola vez?, si es así, explique cuáles, en qué casos y de un ejemplo. e) Explique puntualmente cuál es la diferencia entre una estructura while y una do, de ejemplos de cuándo puede ser más conveniente la utilización de una y cuándo la de otra. 2. Resuelva los siguientes problemas usando diagramas de flujo y programación en C. a) Crear un programa que pida el ingreso de un número, lo guarde en una variable entera llamada n e imprima los números de 1 hasta n. Realizarlo utilizando una estructura FOR. b) Realizar el ejercicio 1 pero utilizando una estructura while y otro usando una estructura do. c) Realizar un programa que pida dos números, los sume, muestre la respuesta y que siga repitiendo el proceso hasta ingresar el valor de cero para ambos operandos. d) Hacer un programa que pida un número e imprima en pantalla la cuenta regresiva desde dicho número hasta cero. e) Realizar un programa que pida N números, los sume y presente el resultado. 3. Realice pruebas de escritorio para comprobar la efectividad de los algoritmos anteriores.

Luis Edgar Sánchez

66


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

UNIDAD 4 Subrutinas

Luis Edgar Sánchez

67


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ACTIVIDADES DE ASIMILACIÓN EXTRACLASE Actividad 4.1: 1. Resuelva los siguientes problemas de procesamiento de datos utilizando diagramas de flujo y programación en C. a) Realizar un programa que pida un número y seguidamente muestre la tabla de multiplicar de dicho número del 1 al 12. b) Realizar un programa que pida un número y muestre su cuenta regresiva hasta 0. c) Hacer un programa que calcule el promedio general de un curso de N estudiantes, el programa tendrá que pedir al inicio el número de estudiantes luego por cada estudiante el promedio para al final calcular el promedio general. d) Hacer un programa que pida y calcule la suma de dos números indefinidamente hasta que se ingresen dos números negativos. e) Cree una función que reciba tres notas parciales y devuelva el promedio de las mismas, use dicha función en el programa principal. f) Cree una función que reciba un número y a continuación devuelva su factorial. (El factorial de N se calcula multiplicando todos los números de 1 hasta N). Use la función en un programa principal.

Estrategias de trabajo: a. Revise detalladamente el tema 3.2 y 4.1. b. Consulte información adicional y ejemplos alternativos. c. Realice los ejercicios planteados.

Luis Edgar Sánchez

68


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Tema 4.1: Funciones

El emperador Julio Cesar solía decir para referirse a enemigos fuertes: “Divide y vencerás”; y aunque tenía otra connotación, se puede aplicar a la resolución de problemas, con lo cual se expresa de forma muy acertada la estrategia mediante la que, si se presenta un problema muy grande, es más efectivo dividirlo en problemas pequeños, que resueltos individualmente colaboran a solucionar de forma efectiva el problema principal. De la misma forma se puede aplicar la estrategia antes mencionada a la programación, es decir, si nuestro problema a solucionar ha comenzado a tornarse complejo y extenso, lo mejor será separar segmentos de código en bloques un poco más autónomos y que puedan ser simplemente invocados en un determinado momento desde otra parte de nuestro programa, o desde el programa principal, lo cual también evita la repetición de codificación de forma reiterada, a lo que se le conoce como reutilización de código. A la acción de separar un segmento de código del programa principal se le llama “crear una subrutina”, una subrutina será entonces un segmento de código separado del bloque principal y que puede ser invocado en cualquier momento desde éste o desde otra subrutina. Funciones o métodos A las subrutinas dentro de un programa estructurado en el lenguaje C se las conoce como funciones. Existen dos tipos de funciones, las que retornan valores y las que no, por otra parte, dentro del paradigma de orientación a objetos, a las subrutinas que se crean dentro de una clase se les llama métodos. Tomando en cuenta que el lenguaje C#, en el que estamos implementando el aprendizaje de este módulo, es casi en su totalidad orientado a objetos, analizaremos las subrutinas bajo la segunda denominación, los cuáles también podemos encontrar divididos en los que devuelven valor y los que no. Métodos que retornan valor Como se explicó anteriormente, un método es un segmento de código separado que realiza una acción específica, por lo general funcionan recibiendo uno o varios valores de entrada ( Parámetros) y retornando un único valor de respuesta (valor devuelto). En C# escribimos una subrutina en forma de método declarándola dentro de la clase en la que estamos trabajando. Una función se considera un método cuando es escrito dentro de una clase. Veamos cómo se define un método en C#: acceso tipo NombreMetodo(TipoArg1 arguento1, TipoArg2 arguento2 ...) { // Aquí se codifica lo que tiene que hacer el método return <ValorDevuelto>; // Este es el valor que devolverá. } Luis Edgar Sánchez

69


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

acceso: Es el modificador de acceso del método, que puede ser private, protected, internal

o public, en la POO estas palabras definen si los objetos dentro del mismo programa o de otros programas pueden acceder a esta subrutina, si no se coloca, C# la asume automáticamente como prívate, lo mismo se aplica a la declaración de variables dentro de una clase. tipo: Es el tipo de dato de retorno, es decir, el tipo de dato en el que estará el valor

devuelto por el método (que puede ser cualquier tipo). NombreMetodo: El nombre del método (sin espacios en blanco ni caracteres extraños), es

el nombre mediante el cual lo invocaremos desde otra parte de la clase o desde otra clase o programa. (TipoArg1 arguento1, TipoArg2 arguento2 ...): Entre paréntesis y separados unos

de otros por comas, la lista de argumentos que aceptará el método: cada uno de ellos se especificará poniendo primero el tipo y después el nombre del mismo. { // Aquí se codifica -> return <ValorDevuelto>; }: La llave de apertura de bloque seguida del código del método y, para terminarlo debemos retornar el valor de respuesta como resultado del proceso aplicado y por último, la llave de cierre del bloque. Ejemplo:

public int Sumar(int A, int B) { int res = 0; res = A + B; return res; }

El ejemplo anterior es un sencillo método, el cual recibe dos números enteros y devuelve la suma de los mismos. Para invocar a dicho método podemos implementar una codificación como la siguiente: ………… int Num1, num2, sum; Console.Write("Ingrese un número:"); Num1 = int.Parse(Console.ReadLine()); Console.Write("Ingrese otro número:"); Num2 = int.Parse(Console.ReadLine()); sum = Sumar(Num1, num2); -------------- LLAMADA AL MÉTODO Console.WriteLine("La suma es {0}", sum); ………….

En la codificación anterior se reciben por teclado dos números: Num1 y Num2, luego invocamos al método “sumar” que previamente habíamos creado, guardando el resultado devuelto por éste en la variable sum Para luego presentarlo por la consola.

Luis Edgar Sánchez

70


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

Ejemplo Completo: Observemos con atención el siguiente ejemplo: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { /// <summary> /// Función o método principal. /// </summary> static void Main(string[] args) { int edad, Calificacion; edad=LeerEnteroEnRango("Ingrese su edad:", 7, 40); Calificacion = LeerEnteroEnRango("Ingrese su calificación:",0,20); if (Calificacion >= 14) { Console.WriteLine("Nada mal para tener {0} años", edad); } else { Console.WriteLine("Con {0} años y tienes esas notas.", edad); } Console.WriteLine("Presione ENTER para terminar"); Console.ReadLine(); } /// <summary> ///Método que lee un entero dentro de un rango, controlando errores. /// </summary> public static int LeerEnteroEnRango(string MensajeIngreso, int minimo, int maximo) { int NumeroLeido = minimo-1; do { try { Console.Write(MensajeIngreso); NumeroLeido = int.Parse(Console.ReadLine()); if (NumeroLeido < minimo || NumeroLeido > maximo) { Console.WriteLine("Fuera de rango, el número debe estar entre {0} y {1}", minimo, maximo); } } catch(Exception e) { Console.WriteLine("Error de ingreso: " + e.Message); NumeroLeido = minimo - 1; continue; } } while (NumeroLeido < minimo || NumeroLeido > maximo); return NumeroLeido; } } }

En el ejemplo tenemos dos funciones o métodos dentro de la misma clase “program”, el primero es el ya conocido Main, que como sabemos será el que se ejecute inicialmente a manera de nuestro programa principal. Más abajo se puede apreciar que hemos creado un

Luis Edgar Sánchez

71


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

método llamado “LeerEnteroEnRango”, el cuál es de tipo estático 2, de acceso público y deberá devolver un entero (int). El método servirá, según se aprecia en su codificación, para leer un entero desde la consola, tomando en cuenta el control de errores de ingreso, así como cuidar que el número se mantenga dentro de un cierto rango. Para esto utilizamos tres parámetro, el primero: “MensajeIngreso” es un string que servirá como texto informativo para indicar al usuario lo que debe ingresar, seguidamente los parámetros “minimo” y “máximo” nos brindan la información necesaria para validar que el número ingresado esté dentro de un cierto rango. Finalmente, a través de la cláusula “return” devolvemos el número leído hacia el lugar desde donde se lo llamó. Analicemos ahora la llamada a la subrutina, ésta se realiza en dos ocasiones dentro del método Main, en las líneas 2 y 3; lo utilizamos para leer tanto la edad como una supuesta calificación; lo que se realiza después en ese mismo programa con los datos obtenidos es irrelevante para la presente explicación. Nótese que en el caso de no haber separado la codificación para la lectura del número en un método independiente, tendríamos que haber repetido la misma codificación dos veces, una para cada variable leída. El hecho de que podamos utilizar el mismo código varias veces para situaciones parecidas, sin caer en redundancias, es lo que se conoce como “reutilización de código”.

Métodos que no devuelven valor En algunos lenguajes se conoce a las funciones o métodos que no devuelven valor con el nombre de procedimientos, incluso se los declara de forma diferente, pero dentro de C#, los métodos que no devuelven valor son iguales a los que sí, las únicas diferencias son que, al declararlas, en el lugar del tipo de datos colocamos la palabra “void”, que precisamente significa que no retorna nada. Ejemplo: class Program { static void Main(string[] args) { Saludar(); } public static void Saludar() { Console.WriteLine("Hola a todos"); }

}

2

Sólo se puede invocar de manera directa dentro de un método estático a otro método estático, por esta razón es que se declara al método “LeerEnteroEnRango” de esta manera. Luis Edgar Sánchez

72


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

En el ejemplo vemos un método llamado “Saludar”, que no devuelve ningún valor, ya que lo único que hace es presentar el texto “hola a todos” en la consola. En la parte superior vemos al método MAIN desde donde se lo invoca. Los métodos que no devuelven valor pueden recibir parámetros igualmente como se demuestra con el siguiente ejemplo:

class Program { static void Main(string[] args) { MostrarTextoEn("Llamada de metodos que no devuelven valor", 20, 4); MostrarTextoEn("Fin del Programa", 20, 6); } public static void MostrarTextoEn(string Texto, int PosX, int PosY) { Console.SetCursorPosition(PosX, PosY); Console.Write(Texto); } }

En este ejemplo tenemos el método “MostrarTextoEn”, que recibe tres parámetros: el primero es el texto que se va a mostrar, los otros dos son las posiciones de la consola donde queremos que dicho texto se muestre. En el método Main podemos apreciar la forma en que se los invoca. Debemos notar que los métodos declarados con la palabra “void”, al no devolver valores, se los invoca directamente; sin asignarlos a alguna variable, hacerlos que intervengan en alguna operación o como parte de un parámetro; cosas que sí se pueden hacer con los métodos que devuelven valor. Métodos estáticos Como se habrá notado en los ejemplos anteriores, los métodos static, son aquellos que se pueden ejecutar sin necesidad de instanciar la clase 3 donde está escrito. Son métodos que existen en una clase como un todo y en todo momento. Es por esto qué el método Main tiene que ser “static”, ya que, de lo contrario, el CLR(Núcleo de ejecución de Visual Studio .NET) no sería capaz de encontrarlo, pues antes de que se ejecute la aplicación, lógicamente, no puede haber instancias de ninguna de las clases que la componen. Estos métodos suelen usarse para hacer una serie de operaciones globales que tienen mucho más que ver con la clase como tal que con una instancia específica de la misma: por ejemplo, si tenemos una clase Automóvil y queremos listar todas las marcas de las que disponemos, lo más propio es un método static. ¿Qué necesidad tenemos de instanciar un 3

Revisar el tema “Clases”. Luis Edgar Sánchez

73


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

objeto de esa clase, si solamente queremos ver las marcas disponibles? Algo que hemos señalado anteriormente es que, como los métodos static existen desde un principio de la ejecución y no dependen de las instancias, sólo se puede invocar desde éstos a otros métodos static, claro está, salvo el caso de que lo hagamos a través de una instancia de una clase específica dentro de nuestra codificación.

TALLERES INTRA CLASE Taller 3.2: 1. Realice un organizador gráfico que resuma el tema de las subrutinas. 2. Resuelva los siguientes problemas usando diagramas de flujo y programación en C. a) Realizar un programa que permita calcular el pago que deberán recibir N obreros, pidiendo como ingreso para cada uno el valor que cobra por hora, las horas trabajadas y el número de cargas familiares, el pago se calculará dependiendo de las horas trabajadas, además se le dará un bono adicional de $5 por cada carga familiar con un limite de 4 cargas. Resolver el problema usando funciones: Ingresar, Calcular y MostrarResultado. b) Realizar el ejercicio a pero ingresando obreros reiteradamente hasta que se ingrese cero para todos los valores. c) Hacer un programa que presente el menú: 1) Ingresar 2) Calcular suma 3) Multiplicar 4) Salir. La opción 1 permitirá el ingreso de dos números, la opción 2 presentará la suma de los dos números ingresados, la opción 3 su producto, el programa seguirá funcionando hasta escoger la opción 4. Usar subrutinas para las 3 primeras opciones y presentar el mensaje de “opción incorrecta” si escoge una opción que no se encuentre entre las mostradas.

Luis Edgar Sánchez

74


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ANEXOS Fundamentos de programación

Luis Edgar Sánchez

75


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

ANEXO 1 Problemas algorítmicos

Nivel 1. Resolver lo siguiente: 1. Se tienen 21 vasos desigualmente llenos, a saber: siete totalmente llenos, siete llenos hasta la mitad y siete vacíos. Repártalos entre tres personas, sin vaciar el liquido, de forma a cada uno le toque el mismo número de vasos e igual cantidad de líquido. 2. Un viajero extraviado en una montaña del Tibet, le pide ayuda pecuniaria a un monje para financiar su regreso. El religioso le responde: Está bien, le duplicare el dinero que traiga cuantas veces quiera, pero cada vez le cobrare 200 rupias”. El viajero acepta. A la tercera vez el viajero queda con cero rupias, el monje ha ganado todo. ¿Qué cantidad traía el viajero? 3. Tres hombres en fila india miran hacia delante una misma pared. Se les informa que hay cinco gorras: dos blancas y tres negras. Una persona pone una a cada uno, sin que ellos puedan ver cual les tocó. El de atrás dice: no se de que color es la que traigo. El de en medio comenta: no se de que color es la mía. El de adelante dice: la mía es negra. a) Identifique que razonamiento le condujo a esta conclusión? b) Cual sería la situación si se tuviesen tres gorras blancas y dos negras? 4. Una persona agoniza victima de un asalto. La Fiscalía conduce hasta su lecho de muerte a tres sospechosos; Ruiz, Díaz y López. El moribundo no puede moverse pero alcanza a decir sin señalar a nadie: “Fue él el asesino”. La Fiscalía concluye que fue Ruiz. ¿Porque? 5. 22:00: Juán llega a su cómodo apartamento en el centro de la ciudad. 23:00: Juán se revuelve en su cama sin poder dormir. Tres horas más tarde, Juán aún no logra conciliar el sueño. Entonces decide actuar: toma el teléfono, marca un número y espera. Momentos después una voz le contesta: a la orden! Juán cuelga el teléfono, se acuesta y duerme placidamente! Explique porque? 6. Si María viste de rojo, Pilar viste de verde. Mientras Pilar no vista de verde, la que va de azul es Silvia. Pero Silvia nunca va de azul si María va de rojo. Por lo tanto: a) (V o F): Si Silvia va de azul Pilar puede ir de verde. b) (V o F): Mientras María no vaya de rojo Silvia no tiene porque ir de azul. c) (V o F): Si Pilar no va de verde, María no puede ir de rojo. 7. Represente cada uno de los diez dígitos, mediante expresiones que empleen cuatro cuatros. 8. Represente cada uno de los diez dígitos, mediante expresiones que empleen cuatro tres(es). 9. Represente el número cien, mediante expresiones que empleen cinco cincos. Realice como mínimo ocho representaciones diferentes.

Luis Edgar Sánchez

76


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

10. Se tiene un lote de 55 monedas buenas cuyo peso correcto es de diez gramos cada una. Entre estas hay una falsa que pesa once gramos. Hay ocho máquinas para pesar. Con una sola pesada en cada máquina debe saber cual es la falsa. Minimice el número de pesadas. 11. Se tienen doce monedas aparentemente iguales, pero una de éstas es falsa y pesa diferente (no se sabe si más o menos). Identifique la falsa si se dispone de una balanza (de dos brazos) en la que no se pueden realizar más de tres pesadas. 12. Una señora le dice a su jardinero: aquí tiene diez arbolitos, quiero que me los siembre en mi jardín, de modo que formen cinco hileras de cuatro árboles cada una. Como resuelve el problema? 13. Mi tren sale a las 10:00. Si voy a la estación caminando a una velocidad constante de 4 kms/Hora, llego cinco minutos mas tarde. Si voy corriendo a 48 Kms/Hora, a velocidad constante, llego con diez minutos de adelanto. ¿A que distancia estoy de la estación? 14. Perdí el autobús por un minuto. Si hubiera por hora tres autobuses más de los que hay y hubiera yo perdido uno por un minuto, hubiera tenido que esperar el próximo un minuto menos de lo que esperé. Cuanto tiempo esperé? 15. Se tienen tres ruedas (R1, R2 y R3), con longitudes de circunferencia de 15 cms, 50 cms y 72 cms respectivamente. Las ruedas reposan en el piso sobre los puntos A, B y C respectivamente. Si hacemos rodar la ruedas paralelamente en la misma dirección, al cabo de que distancia coincidirán nuevamente (en el piso) los puntos A, B y C.

Nivel 2 Elaborar algoritmos que permitan resolver los siguientes problemas: 1. Escribir un mensaje en la esquina superior derecha del tablero por parte de un estudiante, que se encuentra sentado en su puesto durante la clase de Informática. Escrito el mensaje, el estudiante debe regresar a su silla. Asuma que se dispone de todos los elementos requeridos : tiza y borrador. 2. Un batallón de 10 soldados tiene que cruzar un río profundo y ancho. Se dispone únicamente de un pequeño bote propiedad de dos muchachos cuyos pesos son de 38 y 40 kilogramos respectivamente. El bote tiene una capacidad máxima de 80 kilogramos. El peso de cada soldado oscila entre 65 y 75 kilogramos. Ninguno de ellos es capaz de cruzar el río nadando. ¿Como llega el batallón a la otra orilla ? 3. Cambiar una bombilla quemada del techo. Se dispone de todos los elementos requeridos: bombillos de repuesto, escalera, etc. 4. Cambiar la llanta de un automóvil. Suponga que dispone de la llanta de repuesto, gato y demás elementos requeridos. 5. Elaborar palomitas de maíz en una olla puesta al fuego, usando mantequilla, sal y maíz.

Luis Edgar Sánchez

77


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

6. Cambiar el vidrio quebrado de una ventana. Se dispone de todos los materiales requeridos. 7. Desarrolle un algoritmo para salir de la casa en la mañana. Comience desde el estado de “adormecido en la cama” e inclúyanse todas las actividades normales que se efectúan antes de salir a la calle. 8. Llamar al servicio de Salomón (del Colombiano) y averiguar: a. Los cines del sector 5 (Poblado). b. Las tasas de interés. 9. Realizar una llamada telefónica desde un teléfono público. 10. Cocinar una tortilla. 11. Buscar el significado de una palabra en el diccionario de español. 12. Una fórmula médica especifica dos drogas : la droga A y la droga B como sustituto de A. Suponga que dispone de dos droguerías cerca a su residencia (La Número 1 y la Número 2) y desea pedir la droga A siempre y cuando exista en una de las dos farmacias. Resuelva el problema para las siguientes condiciones adicionales : a) Se da prioridad a la droga A pero se compra donde esté la más barata. Si no existe la droga A se pide la droga B, sin importar el precio, siempre exista en alguna de las droguerías. b) Se da prioridad a la droga A pero se compra donde esté la más barata. Si no existe la droga A se pide la droga B donde esté la más barata.

Nivel 3. Elaborar algoritmos y codificar en C# o turbo C los siguientes problemas :

1. Desplegar por pantalla el siguiente mensaje: “Cuando los individuos y las familias han aprendido la bondad, entonces la nación entera ha aprendido la cortesía”. (Confucio). 2. Solicite al usuario que teclee su nombre y ciudad de origen, luego despliegue un mensaje de saludo por pantalla (Ejemplo: “Hola Luis de Machala”). 3. Dados dos valores enteros M y N, obtener su suma. 4. Dado un valor entero M determinar si es par o impar. 5. Dado un valor entero M, obtener su cubo. 6. Dado un valor entero M, obtener su factorial. 7. Suponga que se tienen 12 objetos de los cuales 11 tienen el mismo peso. Desarrolle un algoritmo para seleccionar el objeto de peso diferente. Cual es el mínimo de pesadas que deben efectuarse?.

Luis Edgar Sánchez

78


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

8. Se tienen dos números M y N, tales que M diferente de N, reemplace el mayor de ellos con la suma de ambos, a no ser que el producto de los dos números sea menor que la suma de ellos; en este caso, el menor de los dos números se reemplazará por el producto.

Nivel 4. Elaborar algoritmos y codificar en C# o turbo C los siguientes problemas :

1. Dados dos números enteros M y N. aplique el Algoritmo de Euclides(consultar) para: a) Hallar el Máximo Común Divisor (MCD);. b) Determinar si dos números M y N son primos entre si. 2. Dado un valor entero N: a) Determinar si es par o impar. b) Calcular su factorial. c) Calcule los N primeros términos de la serie de Fibonacci. La siguiente es la serie de los números de Fibonacci : 0, 1, 2, 3, 5, 8, 13, 21, 44, ... La serie se construye de la siguiente manera : los tres primeros números por definición, son cero, uno y dos; cada uno de los siguientes términos se obtiene sumando los dos números que lo preceden. 3. Dado un valor entero N, determinar los “Números Perfectos” en el rango de 1 a N. Nota: Un “Número Perfecto” es aquel que es igual a la suma de sus factores incluyendo el 1. 4. Dado un valor entero N, determinar las “Tripletas Pitagóricas” en el rango de 1 a N. Nota: Las “Tripletas Pitagóricas” son los conjuntos de tres números enteros que corresponden a los lados de un triangulo rectangulo.

5. Dado un valor entero N, determinar las “Tripletas” en el rango de 1 a N, que satisfacen la ecuación: X3 – 9Y2 – 8Z = 0 6. Dados dos valores enteros M y N: a) Calcular la suma de los cuadrados de los números impares comprendidos entre dichos valores a) Obtener su producto mediante sumas sucesivas. b)Obtener su división mediante restas sucesivas. 7. Calcular las raíces de la ecuación AX2 + BX + C = 0 ; para valores A, B y C dados. 8. Dado un punto (X0, Y0) y una recta dada y = mx + b. Determinar si dicho punto queda sobre o bajo (m y b son conocidos).

Luis Edgar Sánchez

79


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

9. Dados tres puntos (X1, Y1), (X2, Y2) y (X3, Y3), determine si forman un triángulo y clasificarlo. 10. Convertir a base diez (10) un número entero N en base b (1 < b < 11). 16. Convertir a base c (1 < c < 11) un número entero N en base b (1 < b < 11). 17. Cuanto deberá ahorrar mensualmente un estudiante de primer año para disponer de $5.550,00 al terminar su carrera, con miras a emplearlo en una excursión. 18. Cuanto se tendrá ahorrado dentro de 3 años si se depositan $1000 mensuales a una tasa de interés del 3% mensual. 19. El trabajo X tiene una duración de N días y se paga a $ 12 diarios ; el trabajo Y tiene igual duración, pero se paga así : $1 el primer día, $2 el segundo, $ 3 el tercero y así sucesivamente. Cual trabajo es mejor pagado? 20. Dado un valor N en pesos, elabore un algoritmo que determine cuantos billetes y monedas y, de que denominaciones, se necesitan para cubrir dicha cantidad. 21. Se realiza un préstamo de un capital c (dólares) en p meses y a una tasa mensual de interés compuesto i. Calcule los intereses generados y el saldo adeudado para cada uno de los periodos. 17. Elabore un programa con tres Juegos (Computador Versus Usuario): a)Simulación del lanzamiento de una moneda (Resultado: Cara o Sello). b)Simulación del lanzamiento de un dado. c)Simulación del lanzamiento de dos dados. 18. Usted ahorra A dólares durante P meses y a una tasa mensual de interés compuesto I, Calcular: a) Los intereses generados y el saldo de la cuenta para cada uno de los meses. b) Con un gradiente de g dolares adicionales que se ahorran por periodo. 19. Ordenar ascendentemente un vector S de N elementos. 20. Dado un vector S de N elementos y un valor V, determinar: a) Cuantos elementos son mayores que V. b) El elemento que se repite con más frecuencia. 21. Dada una matriz A de n filas por m columnas, encontrar la suma de los elementos:

a) De la diagonal principal de. b) Que no pertenecen a la primera y última fila ni a la primera y última columna. 22. Dada una matriz A de n filas por m columnas, Intercambiar: a) Las filas por columnas.

b) Los elementos de la primera y última columna. 23. Dadas dos matrices A y B (ambas de n filas por m columnas) se pide hallar la matriz C como resultado de la sumar A y B.

Luis Edgar Sánchez

80


Módulo de Fundamentos de programación

UTM-FCS-CEPSYMED

24. Se tiene una matriz de N filas y 3 columnas. Cada fila contiene los valores de los tres lados de un triángulo (lados a, b y c que corresponden a las columnas 1, 2 y 3 respectivamente). Se pide calcular: a) El área de cada triángulo (S = (p(p - a)(p - b)(p - c))1/2 y p = (a + b + c) / 2). b) El área del mayor círculo inscrito por cada triángulo (Ri = S / p donde Ri es el radio del mayor circulo inscrito). c) El área del menor círculo circunscrito por cada triángulo (Rc = abc / p donde Rc es el radio del menor circulo circunscrito).

25. Cadenalco tiene N almacenes en todo el país, Se tienen las ventas totales de cada uno de estos durante los 12 meses del año. Se pide determinar lo siguiente : a) Total de ventas de la compañía. b) Total de ventas de cada almacén. c) El almacén que mas vendió en el mes de diciembre. d) El almacén que mas vendió durante el año. e) El almacén que menos vendió durante el año. f) El almacén con mejor promedio de ventas mensuales.

Luis Edgar Sánchez

81


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.