Apuntes De Algoritmos
Upcoming SlideShare
Loading in...5
×
 

Apuntes De Algoritmos

on

  • 5,499 views

 

Statistics

Views

Total Views
5,499
Views on SlideShare
5,478
Embed Views
21

Actions

Likes
0
Downloads
252
Comments
2

2 Embeds 21

http://www.a01004642.blogspot.com 14
http://a01004642.blogspot.com 7

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…

  • Are you sure you want to
    Your message goes here
    Processing…
  • no puedoo jaj
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Apuntes De Algoritmos Apuntes De Algoritmos Document Transcript

  • ALGORITMOS Y PROGRAMACIÓN Algoritmosy programación
  • ALGORITMOS Y PROGRAMACIÒN Segundo Cuatrimestre Lic. Laura Gisela Velázquez Marmolejo Estado de México, México Teléfono (55) 50626468 y 69 i
  • Objetivo Desarrollar la capacidad en el alumno para desarrollar y programar algoritmos, que le permitan resolver problemas o realizar una tarea específica, mediante el uso de algún lenguaje de programación, utilizando la computadora como herramienta de análisis de datos y solución de problemas. 2 View slide
  • Contenido Temático TEMA CAPITULO Introducción 3 Conceptos Básicos de Algoritmos 5 Estructuras Algorítmicas Selectivas 20 Estructuras Algorítmicas Cíclicas 30 Arreglos 41 Introducción a los Lenguajes de Programación 46 Expresiones 50 Sentencias de Control 58 Arreglos en Programación 66 Funciones 70 Punteros 74 Estructuras de Datos 77 Conclusiones 81 Bibliografía 82 3 View slide
  • Introducción El curso de Algoritmos y Programación representa una herramienta teórica y práctica tanto para la solución de problemas genéricos como para estandarizar y automatizar cualquier proceso o actividad, mediante la creación de programas para computadora. El curso promueve en primera instancia desarrollar las capacidades y habilidades del participante para analizar problemas, comprender situaciones implícitas y modelar dichas situaciones para la propuesta de la mejor solución, dando como resultado una secuencia de pasos orientados a resolver dicha problemática además de detectar y considerar los parámetros que afectan a dichos problemas, todo con la finalidad de crear un algoritmo. Para el eficiente diseño de algoritmos se conocerán las principales herramientas y representaciones graficas a efecto de ser comprendidas e implementadas. Asimismo, el participante aplicará los conocimientos de creación de algoritmos para la automatización de tareas desarrollando habilidades para la selección de los correctos comandos en algún lenguaje para trasladar esos algoritmos en un programa. Esto implica que el participante también conocerá las bases de lenguaje y principios de programación en lenguaje C, utilizando la computadora como herramienta de análisis de datos y solución de problemas. Este curso le servirá al participante como base para cursos subsecuentes como Métodos Numéricos, Control, Robótica y Procesos Industriales, tanto en el desarrollo de solución de problemas, creación de algoritmos y programas. 4
  • Unidad 1 Asignación Conceptos Básicos de Algoritmos Objetivo: Al término de la modulo el participante manipulará adecuadamente las reglas de construcción de algoritmos, usando los distintos tipos de datos mediante operaciones aritméticas y lógicas M uchas veces aplicamos el algoritmo de manera inadvertida, inconciente o automáticamente. Esto generalmente se produce cuando el problema que tenemos enfrente lo hemos resuelto con anterioridad un gran número de veces. Supongamos que simplemente tenemos que abrir una puerta. Lo hemos hecho tantas veces que difícilmente nos ponemos a enumerar los pasos para alcanzar este objetivo. Por otra parte existen una gran cantidad de problemas que requieren de un análisis profundo y de un pensamiento flexible y estructurado para su solución. Este curso abordará este tipo de problemas. Construcción de Algoritmos Objetivo: El participante nombrará las reglas de construcción de algoritmos con diagramas de flujo y lenguaje algorítmico Existen técnicas y herramientas metodológicas que nos permiten flexibilizar y estructurar el razonamiento utilizado en la solución de un problema. Lo que permitirá finalmente la construcción de algoritmos eficientes. Concepto de Algoritmo Un conjunto de pasos, procedimientos o acciones que nos permiten alcanzar un resultado o resolver un problema “La superación es la base del éxito” 5
  • Características de los Algoritmos Precisión: Los pasos a seguir en el algoritmo deben ser precisados claramente Determinismo: El algoritmo, dado un conjunto de datos idénticos de entrada, siempre debe arrojar los mismos resultados. Finitud: El algoritmo, independientemente de la complejidad del mismo, siempre debe ser de longitud finita. Algoritmo Datos de Impresión de Entrada Procesamiento de Resultados los datos Modulo 1 Modulo 2 Modulo 3 Ilustración A : Módulos o secciones de un algoritmo Por otra parte, un algoritmo consta de tres secciones o módulos principales, en la figura A podemos observarlas secciones que constituyen un algoritmo. Modulo1 Representa la operación o acción que permite el ingreso de los datos del problema Modulo2 Representa la operación o conjunto de operaciones secuenciales, cuyo objetivo es obtener la solución del problema Modulo3 Representa una operación o conjunto de operaciones que permiten comunicar al exterior el o los resultados alcanzados. 6
  • Diagramas de Flujo Un diagrama de flujo representa la esquematización gráfica de un algoritmo, es decir, muestra gráficamente los pasos o procesos a seguir para alcanzar la solución de un problema. Su correcta construcción es sumamente importante porque a partir del mismo se escribe un programa en algún lenguaje de programación. Figura 1.2.1 Este símbolo se utiliza para representar el inicio o el fin de un diagrama de flujo. Ese símbolo se utiliza para representar la lectura de datos desde el dispositivo de entrada Este símbolo se utiliza para representar un bloque de instrucciones. También se le conoce con el nombre de símbolo de proceso. Este símbolo se utiliza para representar una pregunta. Es conocido con el nombre de diamante de decisión Este símbolo representa la salida de información, hacia el dispositivo de presentación de datos Este símbolo se utiliza para representar los ciclos de repetición por medio de sentencias FOR, o su equivalente en el lenguaje de programación que se esté trabajando. Conector Indica el orden de las acciones del algoritmo Ilustración B Símbolos utilizados en diagramas de flujo Reglas para la construcción de un Diagrama de Flujo 1. Todo diagrama de flujo debe tener un inicio y un fin 7
  • 2. Las líneas utilizadas para indicar la dirección del flujo del diagrama debe ser rectas, verticales y horizontales 3. 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 4. El diagrama de flujo debe ser construido de arriba hacia abajo (top-down) y de izquierda a derecha (right to left) 5. La notación utilizada en el diagrama de flujo debe ser independiente del lenguaje de programación. La solución presentada en el diagrama puede escribirse posteriormente y fácilmente en diferentes lenguajes de programación 6. Es conveniente cuando realizamos una tarea compleja poner comentarios que expresen o ayuden a entender lo que hicimos. 7. Si el diagrama de flujo requiera mas de una hoja para su construcción, debemos utilizar los conectores adecuados y enumerar las p{aginas convenientemente 8. No puede llegar más de una línea a un símbolo. Reglas para la construcción de un Diagrama de Flujo 1. Todo diagrama de flujo debe tener un inicio y un fin 2. Las líneas utilizadas para indicar la dirección del flujo del diagrama debe ser rectas, verticales y horizontales 3. 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 4. El diagrama de flujo debe ser construido de arriba hacia abajo (top-down) y de izquierda a derecha (right to left) 5. La notación utilizada en el diagrama de flujo debe ser independiente del lenguaje de programación. La solución presentada en el diagrama puede escribirse posteriormente y fácilmente en diferentes lenguajes de programación 6. Es conveniente cuando realizamos una tarea compleja poner comentarios que expresen o ayuden a entender lo que hicimos. 7. Si el diagrama de flujo requiera mas de una hoja para su construcción, debemos utilizar los conectores adecuados y enumerar las p{aginas convenientemente 8. No puede llegar mas de una línea a un símbolo. Tipos de datos usados en algoritmos Objetivo: Identifica los distintos tipos de datos que pueden ser usados en algoritmos Los datos se clasifican en simples y estructurados: Simples Ocupan una sola casilla de memoria, por lo tanto hace referencia a un único valor a la vez 8
  • Estructurados.- Se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria, es decir, tiene varios componentes. Cada uno de los componentes puede ser a su vez un dato simple o estructurado Dentro de los simples encontramos los numéricos, alfanuméricos y los lógicos; dentro de los estructurados encontramos .la cadena de caracteres, los arreglos, los registros y los conjuntos. En la siguiente tabla podemos ver algunos ejemplos de estos tipos de datos. Ejemplos Nombre Descripción (No Muestra Sintaxis de ningún Lenguaje de Programación) Enteros (int) Pueden estar precedidos de los signos + y - 128, 1528, -714, 25469, -56245 , además no tiene parte decimal. Reales Tambien pueden estar precedidos de los 7.5, 128.0, -37.256, 25.3, 160000.0, -15.60 (float y signos + y -, y tiene una parte decimal. double) Caracteres Contiene un solo carácter, y se escribe „a‟, „B‟, „$‟, „9‟ , „-‟, „#‟ (char) entre apóstrofes Boleanos Son datos que solo pueden tomar dos 10>32 (boolean) valores: verdadero (trae), falso (false). Cadena de Contiene un conjunto de caracteres, y se Letras del alfabeto, dígitos (0, 1, 2….9) o símbolos caracteres escribe entre comillas. especiales (#, $, ^, *, %, /, !, +, -…etc). (String) Arreglos Colección finita, homogénea y ordenada de UNIDIMENSIONALES O LINEALES (Cualquier (array) elementos; puede almacenar a N elementos elemento es referenciado por un único índice) del mismo tipo y además permite el acceso Ident_arreglo = ARREGLO [limiteinf...limsup] DE a cada uno d estos elementos tipo MULTIDIMENSIONALES *BIDIMENSIONALES (Hace referencia a cada elemento por medio de dos indices) Id_arreglo =ARREGLO [limitteinf...limitesup, liminfcol...limsupcol] DE tipo Registros Cada uno de sus componentes se Ident_registro = REGISTRO denomina campo. Los campos de un Id_campo1:tipo1 registro pueden ser todos de diferente tipo. Id_campo2:tipo2 ......... Id_campoN: tipoN {Fin de la identificación del registro} Tabla 1 Identificadores, constantes y variables Los datos a procesar por la computadora, ya sean simples estructurados, deben almacenarse en casillas o celdas de memoria para su posterior utilización. Estas casillas o celdas de memoria (constantes o variables), tienen un nombre que permite su identificación, al cual se le llama identificador. 9
  • Memoria SUMA ACUM NUM_1 AUX X7 Ilustración C : Casillas de Memoria con los nombres de los Identificadores Identificadores Es el nombre que se les da a las casillas de memoria. Como se puede observaren la figura 1.2.1 la memoria contiene casillas de memoria, en las cuales almacenan los datos, y para que estos datos sean identificados se les asigna un identificador. En el ejemplo de la figura 1.2.1 hay una casilla de memoria llamada suma, otra acum. etc. así la memoria las identifica. Un identificador se forma de acuerdo a ciertas reglas (las mimas pueden tener alguna variante dependiendo del lenguaje de programación): El primer que forma un identificador debe ser una letra Los demás caracteres pueden ser letras, dígitos o el siguiente símbolo especial: _ La longitud del identificador es igual a 7 en la mayoría de los lenguajes de programación. Así mismo, cada dato puede tratarse dentro de un programa de computadora como un dato constante o variable, para entenderse mejor aquí se explica mas a detalle. Constantes Son datos que no cambian durante la ejecución del programa. Existen tipos de constantes como tipos de datos. (entero, real, carácter, cadena de carácter, etc..) NUM RESU 5 “resultado” NREAL NUMREA 7.25 8.59 Ilustración D : Constantes representadas en memoria La figura 1.2.2 muestra una constante llamada NUM, este es un espacio de memoria que almacena un dato tipo entero y contiene el valor 5, mismo que no cambiara durante la ejecución del programa; 10
  • el dato NUMERA almacena un dato de tipo real con un valor de 8.59 mismo que no cambiara su valor: Sin embargo, existe también datos que funcionan al contrario de estos, esas son las variables. Variables Las variables son objetos que pueden cambiar su valor durante la ejecución de un programa. Para nombrar las variables utilizarem os los identificadores que hemos explicado con anterioridad, al igual que las constantes, pueden existir tipos de variables como tipos de datos. Los nombres de las variables deben ser representativos de la función que cumplen en el programa. La figura 1.2.3 muestra un dato llamado I, mismo que almacena un valor entero y esta dándole un valor de inicio de 0, mismo que en cualquier momento cambiará de valor por medio de una operación aritmética, una asignación, etc. I 0 SUMA SUEL 0 0 Ilustración E: Variables representadas en memoria Operaciones aritméticas y lógicas Objetivo: Opera correctamente los distintos tipos de operaciones aplicables a algoritmos Los datos por si solos no nos servirían de nada si con ellos no realizáramos ninguna tarea, en el caso de la programación los datos constantemente los utilizamos para realizar operaciones aritméticas, lógicas, asignaciones, etcétera, para ello necesitamos una herramienta que nos permita realizarlas, para ellos nos auxiliamos de operadores, los mimos que estudiaremos a continuación: 11
  • Operadores aritméticos Operador Operación Ejemplo Resultado aritmético ** Potencia 4**3 64 * Multiplicación 8.25*7 57.75 / división 15/4 3.75 + suma 125.78 + 62.50 188.28 - resta 65.30 – 32.33 32.97 mod Modulo(residuo) 15 mod 2 1 div División entera 17 mod 3 5 Tabla 2 Con estos operadores se puede realizar cualquier operación aritmética, sin embargo, al evaluar expresiones que contienen operadores aritméticos debemos respetar la jerarquía en el orden de aplicación. es decir, debemos aplicar primero el operador de mayor jerarquía, resolver esa operación, y así sucesivamente. El operador () es un operador asociativo que tiene la prioridad mas alta en cualquier lenguaje de programación. Jerarquía de los operadores aritméticos Operador Jerarquía Operación ** (mayor) Potencia *, /, mod, div Multiplicación, división, modulo, división entera +, - (menor) Suma, resta Tabla 3 Ejemplos: Caso 1: 7+5-6 12 – 2 6 Caso 2: 9 + 7 * 8 – 36 / 5 9 + 56 – 36 / 5 9 + 56 – 7.2 65 – 7.2 57.8 Caso 3 7 * 5 ** 3 / 4 div 3 12
  • 7 * 125 / 4 div 3 875 / 4 div 3 218.75 div 3 72 Expresiones lógicas o booleanas. El valor que pueden tomar estas expresiones es el de verdadero o falso. Se utilizan frecuentemente en las estructuras selectivas (dependiendo del resultado de la evaluación se toma por un determinado camino alternativo) y en las estructuras repetitivas (dependiendo del resultado de la evaluación se continua con el ciclo o se interrumpe el mismo) Operadores relacionales Son operadores que permiten comparar dos operándoos. El resultado de una expresión con operadores relacionales es verdadero o falso. Los cuales pueden ser números, alfanuméricos, constantes o variables. Las constantes o variables pueden ser entero, real, carácter o cadena de carácter. Operadores relacionales Operador Operación > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que == Igual <> Diferente que Tabla 4 Ejemplo: A=5 B=16 (A ** 2 ) > (B * 2 ) 25 > (B * 2 ) 25 > 32 FALSO Nota Cuando se utilizan los operadores de relación con los operadores lógicos, falso es menor que verdaderos VERDADERO > FALSO = VERDADERO. 13
  • Nota No se pueden realizar la comparación entre un valor lógico y uno numérico, utilizando un operador relacional. Operadores lógicos Los operadores lógicos son operadores que permiten formular condiciones complejas partir de condiciones simples. Los operadores lógicos son de conjunción (y), disyunción (o) y negación (no). Operadores Lógicos Operador Lógico Jerarquía Expresión lógica Significado NO Mayor No P No P No es cierto que P Es falso que P Y PyQ PyQ P sin embargo Q O Menor PoQ PoQ O P o Q o ambas Mínimo P o Q Tabla 5 Ejemplo: No (15 >= 7 ** 2 ) O ( 43 – 8 * 2 div 4 <> 3 * 2 div 2 ) No FALSO O ( 43 – 8 * 2 div 4 <> 3 * 2 div 2 ) No FALSO O ( 43 – 16 div 4 <> 3 * 2 div 2 ) No FALSO O ( 43 – 16 div 4 <> 6 div 2 ) No FALSO O ( 43 – 16 div 4 <> 3 ) No FALSO O ( 43 – 39 <> 3 ) No FALSO O VERDADERO VERDADERO O VERDADERO VERDADERO Bloque de asignación Se utiliza para asignar valores o expresiones a una variable la asignación es una operación destructiva. Variable – expresión o valor La expresión puede ser aritmética (-+*etc) o lógica (operadores relacionales = etc y operadores lógicos: no y o) 14
  • Elaboración de algoritmos Objetivo: Diseña diagramas de flujo de situaciones específicas Ejercicios 1. Construya un diagrama de flujo tal que dados los datos A, B, C Y D que representan números enteros, escriba los mismos en orden inverso. Datos: A, B, C y D son variables de tipo entero INICIO A,B,C,D D,C,B,A INICIO Ilustración F Observemos que el programa, primeramente tiene un inicio y un fin, como lo indican las reglas de construcción de algoritmos, posteriormente recibe los datos tipo entero A, B, C y D, y los imprime de forma inversa. Si dicho programa deseáramos traducirlo a lenguaje algorítmico, tendríamos que utilizar las siguientes instrucciones, mismas que corresponden a los signos del diagrama de flujo. Instrucciones en lenguaje algorítmico Leer .. Leer A, B, C 15
  • Hacer.. Hacer A ---- A + SUE Escribir.. Escribir A, B Tabla 6 Considerando el diagrama de flujo No. 1, para ejemplificar las instrucciones en lenguaje algorítmico en ese programa. INVIERTE _ DATOS {El programa dado un conjunto de datos enteros de entrada invierte el orden de los mismos cuando los imprime} {A, B, C y D son variables de tipo entero} 1. Leer A, B, C, D 2. Escribir D, C, B, A 2. Construya un diagrama de flujo tal que dado los datos enteros A y B, escriba el resultado de la siguiente expresión (A+B)2 3 Datos: A, B (variables de tipo entero) INICIO A,B Explicación de la variable A, B: Variables de tipo entero RES: Variable tipo variable. C  (A+B) ** 2/3 C FIN Ilustración G A continuación veremos el seguimiento del algoritmo para diferentes corridas 16
  • A B RES 10 5 75 8 7 75 2 4 12 6 3 27 Instrucciones en lenguaje algorítmico en ese programa del diagrama No. 2 CALCULA {El programa, dados como datos los enteros A y B, calcula el resultado de una expresión} {A y B son variables de tipo entero. RES es una variable de tipo real} 1. Leer A, B 2. Hacer RES  (A + B) ** 2 / 3 3. Escribir RES Ejercicios 1. Resuelve los siguientes casos tomando en cuenta la jerarquía de los operadores aritméticos, lógicos y relacionales 13 * 4 / ( 9 -(56 – 22 * 10 + (9 ** 3 / 14) + 2 ) / 12) -22 ((2634 div 3 / 4 ** 4 ) > ( 152 + 18 * 3 ** 2 ) ) <= ((126 * 2 ) < (22 * 5 / 3 )) ( 15 >= 4 * 8 ** 2 O 5 > 5 Y 12 > 21 ) O NO ( 5 * 3 < 9 + 7 * 2 mod 4 ** 2 ) 2. Instrucciones: Elabore en cada caso el diagrama de flujo y cuadro de datos con 3 corridas diferentes. Tal que dado el costo de un artículo vendido y la cantidad de dinero entregada por el cliente, calcule e imprima el cambio que se debe entregar. Resuelva el problema que tienen en una gasolinera. Los surtidores de la misma registran lo que “surten” en galones, pero el precio de la gasolina esta fijado en litros. El diagrama de flujo debe calcular e imprimir lo que hay que cobrarle al cliente. Nota: galón = 3.875 litros; precio de la gasolina es de $8.20 Calcule e imprima el número de segundos que hay en un determinado número de días. 3. De los siguientes algoritmos en lenguaje algorítmico, construye el diagrama de flujo correspondiente 17
  • a. algoritmo_sumar variables entero a, b, c inicio escribir( "Introduzca el primer número (entero): " ) leer( a ) escribir( "Introduzca el segundo número (entero): " ) leer( b ) c←a+b escribir( "La suma es: ", c ) fin b. algoritmo_doble variables real numero inicio escribir( "Introduzca su nombre: " ) leer( nombre ) escribir( "Introduzca un número real: " ) leer( numero ) escribir( nombre, ", el doble de ", numero, " es: ", numero * 2 ) fin c. Area_de_una_circunferencia /* Cabecera */ algoritmo Area_de_una_circunferencia /* Declaraciones */ constantes PI = 3.141592 variables real area, radio 18
  • /* Cuerpo */ inicio escribir( "Introduzca radio: " ) leer( radio ) area ← PI * radio ** 2 escribir( "El área de la circunferencia es: ", area ) fin d. /* Cabecera */ Area_de_una_circunferencia /* Declaraciones */ constantes PI = 3.141592 variables real area, radio /* Cuerpo */ inicio escribir( "Introduzca radio: " ) leer( radio ) area ← PI * radio ** 2 escribir( "El área de la circunferencia es: ", area ) fin 19
  • Unidad 2 Asignación Estructuras Algorítmicas Selectivas Objetivo: Al término de la unidad el participante diseñara algoritmos que incluyan estructuras de selección usadas en algoritmos computacionales L as estructuras algorítmicas selectivas las utilizamos cuando debemos tomar una decisión, para establecer un proceso o señalar un camino alternativo a seguir. Esta toma de decisión expresada en el diagrama de flujo con un rombo, se basa en la evaluación de una o mas condiciones que nos señalaran como alternativa o consecuencia, la rama a seguir. Hay situaciones en las que la toma de decisiones se realiza en cascada. Por lo que para alcanzar la solución de un problema o subproblema debemos aplicar prácticamente un árbol de decisión. Clasificación: SI ENTONCES (estructura selectiva simple) SI ENTONCES / SINO (Estructura selectiva doble) SI MÚLTIPLE (Estructura selectiva múltiple) Cabe señalar que cuando a las estructuras selectivas las aplicamos en cascada, podemos utilizar una combinación de las estructuras señaladas anteriormente en la clasificación Estructura selectiva simple SI ENTONCES Permite que el flujo del diagrama siga por un camino específico si se cumple una condición o conjunto de condiciones. Si al evaluar la condición (condiciones) el resultado es verdadero, entonces se ejecutan ciertas operaciones. Luego se continúa con la secuencia normal del diagrama de flujo. Ejemplo examen “Lucha por tus ideales” 20
  • Donde Condición expresa CONDICIÓN la condición o conjunto de condiciones a evaluar. Operación expresa la operación o conjuntote operaciones que se van a realizar si la condición OPERACIÓN resulta verdadera Ilustración H Diagrama de Flujo de la Estructura Si Entonces El lenguaje algorítmico de la estructura selectiva si entonces, es el siguiente: . . . Si condición entonces Hacer operación {Fin del condicional} . . . Ejemplos: Construya un diagrama de flujo talque dado como dato la calificación de un alumno en un examen, escriba “aprobado” en caso de que esa calificación sea mayor a 8 21
  • INICIO Lenguaje Algorítmico Examen_selectiva_simple CAL 1. INICIO 2. Leer CAL 3. Si CAL > 8 entonces Escribir “Aprobado” 4. Fin de Condicional paso 3 5. FIN N A continuación se presenta el O seguimiento del algoritmo para CAL diferentes m corridas >8 S NUMERO DE I DATO RESULTADO CORRIDA “Aprobado ” 1 8.75 Aprobado 2 7.90 3 8.00 4 9.50 Aprobado 5 8.35 Aprobado FIN Tabla 7 Ilustración I Diagrama de Flujo INICIO Construya un diagrama de flujo talque dado como dato el sueldo de un trabajador, aplíquele un aumento del 15% si su sueldo es inferior a SUE $1000.00. Imprima en este caso el nuevo sueldo del trabajador. Lenguaje Algorítmico Aumento_selectiva NO 1. INICIO 2. Leer SUE SUE < 1000 3. Si SUE < 1000 entonces Hacer AUM SI ← SUE * 1.15 y AUM ← SUE * 1.15 NSUE ← NSUE ← SUE +AUM SUE +AUM Escribir NSUE NSUE 4. Fin de Condicional paso 3 5. FIN FIN Ilustración J 22
  • Ejercicios Construya un diagrama de flujo tal que dado como datos los valores enteros P y Q, determine si los mismos satisfacen la siguiente expresión: P3 + Q2 - 2*P2 < 680 Estructura selectiva doble si entonces / sino Las estructura selectiva si entonces / sino permite que el flujo del diagrama se bifurfique por dos ramas diferentes en el punto de la toma de decisión. Si al evaluar la condición el resultado verdadero, entonces se sigue por un camino especifric1o y se ejecutan ciertas operaciones. Por otra parte si el resultado es falso entonces se sigue por otro camino y se ejecutan otras operaciones. En ambos casos, luego de ejecutarse las operaciones indicadas se continúa con las secuencia normal del diagrama. SI NO CONDICIÓN OPERACION1 OPERACION2 Ilustración K Diagrama de flujo que ilustra la estructura selectiva. Donde: Condición expresa la condición o conjunto de condiciones a evaluar. Operación1 expresa la operación o conjuntote operaciones que se van a realizar si la condición resulta verdadera Operación2 expresa la operación o conjuntote operaciones que se van a realizar si la condición resulta falsa Se representa en lenguaje algorítmico de la siguiente forma 23
  • . . . Si condición Entonces Hacer operación1 Sino Hacer operación2 {Fin del condicional} . . . Ejercicios: Retomemos los programas de la selectiva simple: Construya un diagrama de flujo tal quedado como dato la calificación de un alumno en un examen, escriba “aprobado” si su calificación es mayor o igual a 8 y “reprobado” en caso contrario. Elabora el Diagrama de Lenguaje Algorítmico Flujo Examen_selectiva_doble {El programa, dado como dato la calificación de un alumno en un examen, escribe “aprobado” si su calificación es mayor o igual que 8 y “reprobado” en caso contrario} {CAL es una variable de tipo real} 1. Inicio 2. Leer CAL 3. Si CAL>=8 Entonces Escribir “Aprobado” Sino Escribir “Reprobado” 4. {Fin del condicional} Fin 24
  • Construya un diagrama de flujo talque dado como dato el sueldo de un trabajador, aplíquele un aumento del 15% si su sueldo es inferior a $1000.00. y 12% en caso contrario. Imprima en este caso el nuevo sueldo del trabajador. Elabora el Diagrama de Lenguaje Algorítmico Flujo Aumento_selectiva_doble {el programa talque dado como dato el sueldo de un trabajador, aplíquele un aumento del 15% si su sueldo es inferior a $1000.00. y 12% en caso contrario } {SUE y NSUE son variables de tipo real} 1. Inicio 2. Leer SUE 3. Si SUE < 1000 Entonces Hacer NSUE – SUE * 1.15 Sino Hacer NSUE – SUE * 1.12 4. {Fin del condicional} 5. Escribir NSUE 6. Fin Estructura selectiva múltiple si múltiple La estructura selectiva si múltiple permite que el flujo del diagrama se bifurque por varios ramas en. Punto de la toma de decisiones, esto en función del valor que tome el selector. Así si el selector toma el valor 1 se ejecutara la acción 1, si toma el valor 2 se ejecutara la acción 2,si tómale valor N se realizara la acción N, y si toma un valor distinto de los valores comprendidos entre 1 y N, se continuará con el flujo normal del diagrama realizándose la acción N + 1.. SELECTOR Es la variable o expresión a evaluarse, según la cual se tomara una de las “múltiples” decisiones o alternativas ACCIÓN 1 expresa la operación o conjunto de operaciones que se van a realizar si el selector toma el valor 1. ACCIÓN 2 expresa la operación o conjunto de operaciones que se van a realizar si el selector toma el valor 2. ACCIÓN N expresa la operación o conjunto de operaciones que se van a realizar si el selector toma el valor N. ACCIÓN 1 expresa la operación que se van a realizar cuando se continué con el flujo normal del diagrama. 25
  • SELECTOR ACCION1 ACCION2 ACCION3 ACCION N + 1 Donde: . . . Si el selector igual Valor 1: Hacer acción 1 Valor 1: Hacer acción 2 . . Valor 1: Hacer acción N {Fin del condicional} Hacer acción N + 1 . . 26
  • Debido a que esta estructura es muy flexible permite aplicarse de diferentes formas, observe el lenguaje algorítmico que se presenta a continuación. . . . . . . Si selector igual Si selector igual VALOR 1: Hacer acción 1 VALOR 1, 2: Hacer acción 1 VALOR 2: Hacer acción 2 VALOR 3, 4, 5: Hacer acción 2 VALOR 3: Hacer acción 3 De otra forma: Hacer acción 3 De otra forma: Hacer acción X {Fin del condicional} {Fin del condicional} Hacer acción X Hacer acción Y . . . . . . Ejemplo: Construya un diagrama de flujo tal que dado como datos la categoría y el sueldo de un trabajador, calcule el aumento correspondiente, teniendo en cuenta la siguiente tabla. Imprima la categoría del trabajador y su nuevo sueldo Aumento Categoría % 1 15 2 10 3 8 Aumento_selectiva_multiple {El programa calcula el aumento de sueldo de los trabajadores, teniendo en cuenta su categoría. El aumento se incorpora al salario} {CATE es una variable de tipo entero, SUE y NSUE son variables de tipo real} 1. Inicio 2. Leer CATE, SUE 3. Si CATE igual 1: Hacer NSUE ← SUE * 1.15 2: Hacer NSUE ← SUE * 1.10 3: Hacer NSUE ← SUE * 1.08 4. {Fin del condicional del paso 3} 5. Escribir CATE, NSUE 6. Fin 27
  • INICIO CATE, SUE CATE 1 3 2 NSUE ← SUE * NSUE ← SUE * NSUE ← SUE * 1.15 1.10 1.08 CATE, SUE FIN Estructura selectivas en cascada Encontramos numerosos casos en el desarrollo de la solución de problemas en el que luego de toma la decisión y marcar el camino correspondiente a seguir, es necesario tomar otra decisión. Se señala luego de evaluar las condiciones la rama correspondiente a seguir, nuevamente podemos tomar otra decisión. El proceso puede repetirse numerosas veces NO CONDICIÓ N1 SI SI NO CONDICIÓ N2 OPERACION OPERACION22 21 . 28
  • Ejercicio: Desarrolla el diagrama de flujo del siguiente programa: DESCENDENTE_SELECTIVA_CASCADA {el programa, dados como datos tres números enteros diferentes, escribe estos números en forma descendente} {A, B y C son variables de tipo entero} 1. Leer A, B, C 2. Si A > B Entonces 2.1 Si A > C entonces 2.1.1 Si B > C entonces Escribir A, B y C sino Escribir A, C y B 2.1.2 {Fin del condicional del paso 2.1.1} Sino Escribir C, A y B 2.2 {Fin del condicional del paso 2.1} Sino 2.3 Si B > C Entonces 2.3.1 Si A > C Entonces Escribir B, A y C Sino Escribir B, C y A 2.3.2 {Fin del condicional del paso 2.3.1} Sino Escribir C, B y A 2.4 {Fin del condicional del paso 2.3} 3. {Fin del condicional del paso 2} Construya un diagrama de flujo tal que dado los datos como dados los valores enteros P y Q, determine si los mismos satisfacen la siguiente expresión: P3 +Q3 -2 * P < 680 29
  • U.A. 3 Estructuras Algorítmicas Cíclicas Objetivo: Al finalizar el modulo el participante usará las distintas estructuras cíclicas aplicables a algoritmos E n la practica es común encontrar algoritmos cuyas operaciones se debe ejecutar un número repetido de veces. Las instrucciones son las mismas, pero los datos sobre los que se trabaja varían. El conjunto de instrucciones que se ejecuta repetidamente se llama ciclo. Tipos de estructuras cíclicas Objetivo: Comparara las distintas estructuras cíclicas aplicables a algoritmos Todo ciclo debe terminar de ejecutarse luego de un número finito de veces, por lo que es necesario en cada iteración del mismo, evaluar las condiciones necesarias para decidir si se va a seguir ejecutando o si debe detenerse. en todo ciclo debe existir una condición de parada de ciclo o fin de ciclo. En algunos ciclo podemos establecer el número de veces que deseamos que se repita, el cual lo llamaremos repetir La estructura repetitiva repetir FOR Repetir (FOR), es adecuada para utilizar en un ciclo que s ejecutará un número definido de veces. La estructura FOR tiene Una variable de control del ciclo Un valor inicial Un valor final Un incremento o decremento “Con constancia lograras todo lo que te propongas” 30
  • Lenguaje algorítmico de la estructura repetir Hacer <-- VI Repetir con V desde VI hasta VF {Proceso} . . . Hacer V  V + ID {Fin del ciclo} Representa el lenguaje del diagrama de flujo VVI VVI NO NO SI V(<)VF SI V(>)VF …(<) …(>) PROCESO PROCESO V V+ID V V-ID ASCENDENTE DESCENDENTE V- Control de ciclo VI – valor inicial VF – valor final ID - incremento Ilustración 12Diagrama de Flujo Las estructura repetitiva mientras (WHILE) Es la estructura adecuada para utilizar en un ciclo cuando no sabemos el número de veces que este se ha de repetir. Dicho número depende de las posiciones dentro del ciclo. ciclo: conjunto de instrucciones que se ejecutaran repetidamente Condición de terminació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. 31
  • PIPROP.INIC Hacer PI  PRIOPOSICION INICIAL I Mientras PI es verdadero repetir . EVALUAC NO . IÓN DE . PI {PROCESO} SI . . PROCESO . Hacer PI  modificación de PI {Fin de ciclo} PI MODIF. de PI Diagrama de flujo Lenguaje algorítmico del diagrama de flujo 3.2 estructura cíclica mientras Creación de programas con estructuras cíclicas Objetivo.- Usara las distintas técnicas de creación de ciclos en algoritmos. Ejemplo: Dados como datos los sueldos de 10 trabajadores de una empresa, obtenga el total de la nomina de la misma. Considere además que no puede utilizar estructuras algorítmicas repetitivas. Datos: SUE1, SUE2, SUE3….SUE10 DONDE: SUEi Es una variable de tipo real que representa el sueldo del trabajador i (1 <= i <= 10) Explicación de las variables I: Es una variable de tipo entero que representa la variable de control del ciclo. Contabiliza el número de veces que se ha de repetirse una determinada acción. El contador toma un valor inicial (generalmente 0 ó 1) y se incrementa en la mayoría de los casos en una unidad en cada vuelta del ciclo. NOMINA: Es una variable de tipo real que representa un acumulador. Este se utiliza cuando debemos obtener el total acumulado de un conjunto de cantidades. Generalmente se inicializa en cero. 32
  • Inicio NOMINA {Calcula el total de la nomina de un grupo de 10 empleados} NOMINA 0 {I variable de tipo entero. SUE y NOMINA tipo real} I1 Variables entero i, real SUE, NOMINA I < 10 1. Inicio 2. Hacer Nomina  0 e I 1 3. Repetir con I desde 1 hasta 10 Leer SUE SUE Hacer NOMINA  NOMINA + SUE e II+1 4. {Fin del paso 2} NOMINA  NOMINA + SUE 5. Escribir NOMINA 6. Fin II+1 NOMINA Inicio Diagrama de flujo 3.2 Ejercicios: Escriba un diagrama de flujo tal que dado un grupo de números naturales positivos, calcule e imprima el cubo de estos números. Datos: Num1, num2, num3…-1 (NUMi es una variable de tipo entero que representa el numero entero positivo i, El fin de datos esta dado por -1) Explicación de las variables NUM Variable de tipo entero CUB: Variable de tipo real. Almacena el cubo de l numero que se ingresa 33
  • CUBO Elabore el diagrama de flujo {El programa calcula el cubo de un grupo de números enteros positivos que se ingresan} {NUM variable de tipo entero. CUB de tipo real} 1. Leer NUM 2. Mientras (NUM <> -1) Repetir Hacer CUB  NUM**3 Escribir CUB Leer NUM 3. {Fin del paso 2} Escriba un diagrama de flujo tal que como datos 270 números enteros, obtenga la suma de las números impares y el promedio de los números pares WHILE 1. Hacer SUMPAR 1, SUMIMP 0, CUEPAR 0 e i 1 2. Repetir con I desde 1 hasta 270 Leer NUM 2.1 SI (NUM <> 0) entonces 2.1.1 Si (-1 ** NUM )> 0 Entonces Hacer SUMPAR  SUMPAR + NUM Y CUEPAR CUEPAR + 1 Sino Hacer SUMIMP  SUMIMP + NUM 2.1.2 {fin del condicional del paso 2.1.1} 2.2 {fin del condicional del paso 2.1} Hacer I  i + 1 3. {fin del ciclo del paso 2} 4. Hacer PROBAR  SUMPAR / CUEPAR 5. Escribir PROBAR Y SUMPAR Calcule el aumento de sueldo para un grupo de empelados de una empresa teniendo en cuenta el siguiente criterio WHILE Si el sueldo es inferior a $ 1000 – aumento 15% Si el sueldo es mayor o igual a $1000 – aumento 12% Imprima el sueldo suevo del trabajador y el total de nomina de la empresa, considerando este nuevo aumento 34
  • Elabore diagrama de flujo Elabore lenguaje algorítmico Dado N números enteros como dato haga un diagrama de flujo que: FOR Obtenga cuantos números leídos fueron mayores que cero Calcule el promedio de los números positivos Obtenga el promedio de todos los números Elabore diagrama de flujo Elabore lenguaje algorítmico 35
  • Declaración variables Enteros Vchi, Vmed,Vgra, { Vchi, Vmed,Vgra: acumulan en numero de ventas} Entero I {I Representa la variable de control de ciclo} Real TVchi, TVmed, TVgra, TVentaDia { TVchi, TVmed, TVgra,, almacena el total de ventas de cada tipo} { TVentaDia almacena el total de la venta del día} Real Venta {Indica la venta de I del vendedor} Cuerpo Inicio 1. Inicio 2. Hacer Vchi0, Vmed0, Vgra0, TVchi0, Temed0, TVgra0, 3. Escribir “Desea realizar una venta S – N: ” 4. Leer Respuesta 5. Repetir con I desde 1 hasta Respuesta<>”S” 5.1 Escribir “introduce el importe de la venta” 5.2 Leer Venta 5.3 Si Venta<=200 entonces Hacer VchiVchi+1 y TVchiTVchi+Venta Sino 5.4 Si Venta<400 entonces Hacer VmedVmed+1 y TVmedTVmed+Venta Sino Hacer VgraVgra+1 y TVgraTVgra+Venta {Fin del condicional 5.4} {Fin del condicional 5.3} Hacer I  I + 1 6 {Fin del condicional del paso 5} 7 TVentaDia TVchi + Temed + TVgra 8 Escribir “Se realizaron” Vchi “ventas menores de $200.00, con un total de ” TVchi 9 Escribir “Se realizaron” Vmed “ventas entre $200.00 y $400.00, con un total de ” TVmed 10 Escribir “Se realizaron” Vgra “ ventas mayores de $400.00, con un total de ” TVgra 11 Escribir “El importe total de ventas del días es: ” TVentaDia 12 Fin 36
  • Elabore Diagrama de Flujo 37
  • Elabora el diagrama de flujo y lenguaje algorítmico de cada caso En una reciente elección hubo cuatro candidatos con identificadores 1,2,3,4). Usted habrá de encontrar, mediante un programa, el número de votos correspondiente a cada candidato y el porcentaje que obtuvo respecto al total de los votantes. El usuario tecleará los votos de manera desorganizada, tal y como se obtuvieron en la elección, el final de datos esta representado por un cero. {WHILE} Elabore diagrama de flujo Elabore lenguaje algorítmico De una empresa con N empleados, necesitamos obtener el número de empleado y sueldo de un trabajador con el mayor sueldo de la empresa. {FOR} 38
  • Elabore diagrama de flujo Elabore lenguaje algorítmico En el centro meteorológico de Argentina se llevan los promedios mensuales de las lluvias caídas en las principales regiones cerealeras del país. Existen tres regiones importantes denominadas NORTE, CENTRO y SUR. Haga un diagrama de flujo para calcular lo siguiente. {WHILE} El promedio anual de la región centro El mes y registro con menor lluvia en la región sur La región con mayor lluvia anual (Considere que los registros anuales de las regiones son diferentes). Elabore diagrama de flujo Elabore lenguaje algorítmico 39
  • En un estadio se tienen 5 tipos diferentes de localidades, las cuales se identifican por una clave numérica que es un valor comprendido entre 1 y 5. Los precios de cada localidad y los datos referentes a las ventas de boletos para el próximo juego se proporcionan como sigue: Haga un programa que: Lea los precios, Lea los datos de las ventas de boletos imprima para cada venta, la clave, la cantidad y el importe total de los boletos vendido es esta venta Calcule e imprima la cantidad de boletos vendidos de cada tipo Calcule e imprima la recaudación total del estadio Elabore diagrama de flujo Elabore lenguaje algorítmico 40
  • Unidad 4 Asignación Arreglos Objetivo: Al finalizar el participante aplicara los arreglos en algoritmos U n array es una colección de variables del mismo tipo que se referencia por un nombre común. A un elemento específico de un array se accede mediante un índice. Concepto y clasificación de arreglos Objetivo: Al finalizar el participante definirá el concepto de arreglos Un arreglo se define como una colección fuinita, homogénea y ordenada de elementos Finita: Todo arreglo tiene un límite, es decir, se debe determinar cual será el número máximo de elementos que podrán formar parte del arreglo Homogénea: todos los elementos de un arreglo son del mismo tipo (enteros, reales) pero nunca una combinación d estos. Ordenada: Se puede determinar cual es el primer elemento, el segundo… y el n-esimo elemento. Su característica principal es que puede almacenar N elementos del mismo tipo y además permite el acceso a cada uno de estos elementos. Así se distinguen dos partes en los arreglos. los componentes los índices Los componentes hacen referencia a los elementos que componen o forman el arreglo. Es decir son los valores que se almacenan en cada una de sus casillas. Los índices, por otra parte, son los que permiten acceder a los componentes del arreglo en forma individual. Para hacer referencia a un componente de un arreglo se necesitan: el nombre del arreglo el índice del elemento “Lucha por tus ideales” 41
  • Arreglo palabras nombre[0] nombre[1] nombre[2] nombre[3] nombre[4] nombre[5] Definición de arreglos: ident_arreglo = ARREGLO [limitinf……. limitsup] DE tipo palabras = ARREGLO [0..5] DE cadena de caracteres limitinf . . . . . limitsup: Con estos se declara el tipo de los índices así como el número de elementos que tendrá el arreglo. (tipo carácter, entero, etc. cualquier tipo ordinal) ejemplo: 1..10 a..f Tipo: declara el tipo de datos para todos los elementos del arreglo. El tipo de los elementos no tiene que ser necesariamente el mismo de que el de los índices. (cualquier tipo: entero, carácter, cadena de carácter, etc.) [ ] se utilizan para indicar el índice del arreglo OPERACIONES CON ARREGLOS Lectura / Escritura asignación actualización: - Inserción - eliminación - modificación Ordenación Búsqueda LECTURA El proceso relectura de un arreglo consiste en leer y asignar un valor a cada uno de sus elementos Leer ARRE [1] Leer ARRE [2] . . . Leer ARRE [5] 42
  • Escritura Se debe escribir el valor de cada uno de los componentes. supóngase que se desea escribir los p rimeros componentes del arreglo ARRE en forma consecutiva. Los pasos a seguir son: Asignación En general no es posible asignar directamente un valor a todo el arreglo, sino que se debe asignar el valor deseado a cada componente. en seguida se analizan algunos ejemplos de asignación. En los dos primeros casos se asigna un valor a una determinada casilla del arreglo ARRE [1]  120 ARRE [3]  ARRE [1]/4 En el tercer caso se asigna el 0 a todas las casillas del arreglo. Actualización En un arreglo se pueden insertar, eliminar y/o modificar elementos. Para ello se debe tener en cuenta si el arreglo esta ordenado o desordenado, es decir, si sus componentes respetan algún orden entre sí Ejercicios 1) Pida por teclado la base (dato real) de un triángulo. 2) Pida por teclado la altura (dato real) de un triángulo. 3) Calcule el área del triángulo. 4) Muestre por pantalla el resultado (dato real).*/ #include <stdio.h> #include <conio.h> int main(){ float altura, area, base; clrscr(); printf( "Introduzca base: " ); scanf( "%f", &base ); printf( "Introduzca altura: " ); scanf( "%f", &altura ); area = base * altura / 2; printf( "El area del triangulo es: %f", area ); getch(); return 0; } 43
  • /* 1º) Pida por teclado la base (dato real) de un triángulo. 2º) Pida por teclado la altura (dato real) de un triángulo. 3º) Calcule el área del triángulo. 4º) Muestre por pantalla el resultado (dato real). Nota: la operación aritmética se deberá hacer directamente en la instrucción de impresión a pantalla*/ #include <stdio.h> #include <conio.h> int main() { float altura, base; clrscr(); printf( "Introduzca base: " ); scanf( "%f", &base ); printf( "Introduzca altura: " ); scanf( "%f", &altura ); printf( "El area del triangulo es: %f", base * altura / 2 ); getch(); return 0; } /*División entera (Entrada y salida estándar - Lenguaje C) /* 1) Pida por teclado dos números (datos enteros). 2) Muestre por pantalla el resultado de realizar la división entera del primer número introducido por el usuario entre el segundo, y el modulo. */ #include <stdio.h> #include <conio.h> int main() { int dividendo, divisor, cociente, modulo; clrscr(); printf( "Introduzca dividendo (entero): " ); scanf( "%d", &dividendo ); printf( "Introduzca divisor (entero): " ); scanf( "%d", &divisor ); cociente = dividendo / divisor; modulo = dividendo % divisor; 44
  • printf( "%d div %d = %d , Modulo = %d ",dividendo, divisor, cociente, modulo ); printf("nPresione cualquier tecla para continuar"); getch(); return 0; } /* convierta venda dolares al precio del momento*/ #include<conio.h> #include<stdio.h> main() { float precio, pdollar, dollar; clrscr(); printf("CASA DE CAMBIOn"); printf("Cuantos dolares a comprar: "); scanf("%f",&dollar); printf("Teclea el costo del dolar frente al peso: "); scanf("%f",&pdollar); precio = dollar * pdollar; printf("El pago es de= %f pesos",precio); printf("nnnPresione cualquier tecla para terminar"); getch(); } 45
  • 5 U. A. Introducción a los Lenguajes de Programación Objetivo: Al finalizar el modulo el participante usara software adecuado para la creación e programas específicos C es un lenguaje estructurado de nivel medio hecho para programadores, la característica distintiva de un lenguaje estructurado es la compartimentalización de código y datos, se trata de la capacidad de un lenguaje de seccionar y esconder del resto del programa toda la información y todas las instrucciones necesarias para levar acabo una determinada tarea Ambientes de Lenguajes de programación Objetivo: Identifica el tipo de software a emplear para realizar un programa Un compilador lee el programa entero y lo convierte a código objeto, que es una traducción del código fuente del programa a una forma que puede ser ejecutada directamente por la computadora. Una vez que el programa esta compilado, las líneas de código fuente dejan de tener sentido durante la ejecución del programa. Forma de un programa en C declaraciones globales int main (lista de parámetros) { tipo_devuelto función1 (lista de parámetros) { secuencias de instrucciones } tipo_devueklto función2 (lista de parámetros) { secuencia de instrucciones) 46
  • } . . . tipo_devuelto funciónN (lista de parámetros) { secuencia de instrucciones) } Compiladores Turbo C++ 3.0 Este manual supone que has descargado el siguiente archivo: Turbo C++ 3.0 (tc3.zip) Instalación del compilador 1. Descomprime el archivo en la ruta: C:TC 2. Ejecuta el programa: INSTALL.EXE, y, nos aparece la siguiente ventana: 3. Debemos pulsar Intro para continuar. Entonces nos aparecerá otra ventana. 4. Ahora debemos escribir la letra de la unidad donde se encuentran los ficheros de instalación. Si éstos 5. se encuentran en la unidad C, pulsaremos la tecla C y después Intro: 6. A continuación se muestra otra ventana en la que aparece por defecto el directorio donde se 7. encuentran los archivos de instalación. Lo normal será que aquí simplemente pulsemos Intro para 8. continuar. 9. La siguiente ventana nos indica en primer lugar el directorio donde se instalará Turbo C++, que 10. siguiendo el ejemplo será: C:TC Con los cursores nos desplazamos hasta la opción Start 11. Installation y pulsamos Intro, que iniciará la instalación. 12. Mientras se instala, en la parte inferior de la ventana aparecerán los ficheros que se están copiando, 13. como se muestra en la siguiente figura: 14. Una vez se hayan copiado todos los archivos, saldrá una un cuadro (como el que se muestra bajo este 15. párrafo) que nos informa de los últimos pasos de la instalación. Pulsamos Intro para continuar. 16. Tras pulsar Intro nos aparece el contenido del fichero "leeme" de Turbo C++: 17. Para finalizar pulsamos Escape. 18. La instalación ha concluido. 47
  • 19. Según los pasos realizados en este ejemplo de instalación, el programa Turbo C++ es TC.EXE y se encuentra en C:TCBIN Esta versión de Turbo C-C++ 3.0 para D.O.S, por lo tanto DEBE ser copiado en el directorio RAIZ del disco rígido (c:) y NO dentro de c:archivos de programas, porque cuando se intente ejecutar el compilador C, emitirá un mensaje de error, indicando queno encuentra las librerías. Ya que por defecto buscará a las mismas en c:tc. El resultado de la instalación debe ser el siguiente: C:TC | |__BGI | |__BIN | |__INCLUDE | |__LIB Configuración del modo gráfico Esto es para que no tengas problemas al compilar los programas que usan funciones gráficas. 1. Ejecuta el programa: TC.EXE, que está en: C:TCBIN 2. Ve a: Options -> Linker -> Libraries, y dentro de este marca la opción Graphics library, entonces pulsa el botón OK Una vez creado tu programa deberás compilarlo con la combinación de teclas Alt + F9, y una vez que no contenga errores deberás ejecutarlos con la combinación de teclas Control + F9. C++Builder Para hacer un programa en C++ Builder, en lenguaje c siempre se deben de seguir los siguientes pasos: 1. Se ingresa al programa dando doble clic en el icono 2. Una vez en el programa ingresamos al menú File, opción New y seleccionamos Console Wizard, en el 48
  • siguiente cuadro seleccionar Console y presionar finish. 3. Capturar en la pagina que aparece, nuestro código. (borrar las instrucciones que parecen por default) 4. para guardar el programa en el menú File, Save Proyect As, indicas el nombre en la ventana que aparece, indicas la ruta donde deseas guardarlo. Prueba del compilador 1. Abre el programa: TC.EXE, vas a File -> New, esto crea un nuevo archivo O haga lo indicado en C++ builder 2. y escribe lo siguiente en el: #include <stdio.h> #include <conio.h> void main( ) { printf("Hola mundo"); getch(); } 3. Guarda el programa con el nombre: hola (automáticamente se añade la extensión .CPP al archivo en Turbo C++ 3.1; en Buider se agrega la extensión .bpr 4. Compila y ejecuta el programa, presionando: CTRL+F9 ó F9 según sea el caso, entonces aparecerá en pantalla el mensaje: 49
  • 6 U. A. Expresiones Objetivo: Al finalizar el modulo el participante será capaz de escribir sentencias y expresiones en el lenguaje de programación designado E n sentido mas general, podemos decir, que una instrucción es una parte del programa que puede ejecutarse. Es decir, una instrucción especifica una acción. C clasifica las instrucciones en estos grupos: Selección, Iteración, Salto, Etiquetado, Expresión y Bloque. Las cuales se describirán más adelante Tipos de expresiones Objetivo: Escribirá sentencias y expresiones en el lenguaje de programación designado Tipos de datos básicos char int float double void Nombres de los identificadores En C, los nombres de las variables, funciones, etiquetas y otros objetos definidos por el usuario de denominan identificadores. La longitud de un identificador puede variar entre uno y varios caracteres. *el primer carácter debe ser una letra o un símbolo de subrayado y los caracteres siguientes pueden ser letras, letras números o símbolos de subrayado En C las minúsculas y la mayúsculas se tratan como distintas, Ej. Cuenta, Cuenta y CUENTA son tres identificadores diferentes. Una variable es una posición de memoria con nombre que se usa para mantener un valor que puede ser modificado por el programa. Todas las variables deben de estar declaradas antes de poder ser utilizadas. 50
  • Declaración de variables tipo lista_de_variables; int i, j, y; short int nio; unsigned int, u; etc.. Donde se declaran las variables Existen sitios basicvos donde se pueden declarer las variables: Dentro de las funciones (variables locales) En ladefinición de parámetros de funciones ( parámetros formales) Fuera de todas las funciones (variables globales) Variables locales Las variables locales pueden ser utilizadas solo en las instrucciones que estén dentro del bloque en el que han sido declaradas. Estas variables solo existen mientras se esta ejecutando el bloque de código en el que fueron declaradas, ósea se crea al entrar y se destruye al salir, ósea que puede haber dos variables con el mismo nombre en diferente bloque de código y cada una será distinta de la otra. Recuerde que un bloque de código comienza con una llave de apertura y termina con una llave de cierre. Por costumbre las variables se declaran después de la llave de apertura y antes de cualquier instrucción, sin embargo pu8ede hacerse en cualquier línea, antes de que esta se utilizada. Las variables locales no pueden retener sus valores entre llamadas, sin embargo se puede indicar al compilador que retenga sus valores mediante el uso del modificador static. Parámetros formales Si una función va a usar argumentos, debe declarar las variables que van a aceptar los valores de los argumentos. Esas variables son los parámetros formales de la función. Se comportan como cualquier otra variables local de la función, sus declaraciones se dan tras el nombre de la función y entre paréntesis. #/* Devuelve 1 si c es parte de la cadena s; si no, 0 */ Int esta_en (char *s, char c) { 51
  • While (*s) if (*s == c) return 1; else s++; return 0; } Variables globales Se conocen a lo largo de todo el programa y se pueden usar en cualquier parte del código. Además mantiene sus valores durante toda la ejecución del programa, pueden ser accedidas por cualquier expresión, independientemente de la función. Lo mejor es declara todas las variables globales al principio del programa antes de la función main. Const Las variables tipo const no pueden ser modificadas por el programa, sin embargo a una variable const se le puede dar un valorinicial. El compilador es libre de situar las variables de este tipo en memoria de solo lectura. Especificadores de formato Cuando a la función printf se le pase una lista de argumentos (expresiones), se debe escribir un especificador de formato por cada argumento. En la printf, los especificadores de formato establecen el formato de salida por pantalla de los argumentos. La forma más sencilla de escribir un especificador de formato es con el carácter tanto por ciento (%) seguido de un carácter de conversión que indique el tipo de dato del argumento. Los especificadores de formato mas utilizados que se pueden usar en la función printf: %c Salida de un carácter %d salida de un numero entero %f salida de un número real %s salida de una cadena Un programa escrito en C está compuesto por una o más funciones. Como ya es sabido, una función es un programa que sirve para realizar una tarea determinada, por ejemplo, la función scanf sirve para leer datos desde el teclado. Existe una función que está presente en todos los programas escritos en C, su misión es marcar el inicio y fin de la ejecución de cada uno de ellos; es la función principal, la primera que se ejecuta; es la función main. Su sintaxis "básica" es: int main() { <bloque_de_instrucciones>} 52
  • Todas las funciones de la biblioteca estándar de C son subprogramas que ya están compilados, es decir, junto a cualquier compilador de C se acompañan los códigos objeto de todas las funciones de su biblioteca estándar, pero no sus códigos fuente. Por tanto, aunque no sea posible modificar sus códigos fuente, sí se puede hacer uso de dichas funciones en cualquier programa. Por ejemplo, se puede llamar a la función printf para que muestre por pantalla el saludo "Hola mundo". printf( "Hola mundo" ); Dentro de los paréntesis "()" de la función printf, se debe escribir, entre comillas dobles ("), el mensaje o cadena de caracteres que se desea mostrar por pantalla. Obsérvese que, después del carácter cerrar paréntesis ")" se ha escrito un punto y coma (;), esto implica que la llamada a la función printf es considerada como una instrucción de expresión Para que el compilador conozca la declaración de la función printf, hay que utilizar la directiva del preprocesado #include: #include <stdio.h> En este caso, la directiva #include indica, al preprocesador que debe incluir, antes de la compilación, en el código fuente del programa, el contenido del archivo <stdio.h> (stdio, Standard Input/Output). En dicho archivo están escritas las declaraciones de todas las funciones de entrada y salida estándar de la biblioteca estándar de C, como printf. Si el compilador no sabe quien es printf, no podrá generar el código objeto del programa. Toda función retorna un valor. return 0; Esto quiere decir que la función main devuelve el valor 0. Precediendo a main se ha escrito la palabra reservada int, indicando así, que la función retornará un valor de tipo int (entero). int main() En general, la instrucción return suele ser la última del bloque de instrucciónes de la función main. Al retornar el valor 0, indica (informa al sistema operativo) que el programa finalizó correctamente, es decir, sin producirse ningún error en su ejecución. Cuando la función main devuelva un valor distinto de cero, esto siginificará que se ha producido algún error en la ejecución del programa, o que ha ocurrido algo fuera de lo normal. 53
  • La instrucción return es una de las instrucciones de control que existen en C. Por tanto, es una palabra reservada. Después del valor de retorno (que es una expresión) se debe escribir un punto y coma (;). La sintaxis de la instrucción return es: return <expresión>; La sintaxis "básica" de un programa escrito en c es: [ <directivas_del_preprocesador> ] int main() { <bloque_de_instrucciones> } Tipos de datos basicos (simples predefinidos) en c: Numéricos: Entero (int) Real (float y double) Carácter (char) sin valor (void) La mayoría de los elementos de un programa se diferencian entre sí por su nombre. Por ejemplo, los tipos de datos básicos en C se nombran como: char, int, float, double y void Cada uno de ellos es un identificador. Un identificador es el nombre que se le da a un elemento de un algoritmo (o programa). Por ejemplo, el tipo de dato int hace referencia a un tipo de dato que es distinto a todos los demás tipos de datos, es decir, los valores que puede tomar un dato de tipo entero, no son los mismos que los que puede tomar un dato de otro tipo. Los identificadores char, int, float, double y void están predefinidos, forman parte del lenguaje C. No obstante, en el código de un programa también pueden existir identificadores definidos por el programador. Por ejemplo, un programa puede utilizar variables y constantes definidas por el programador. En C, a la hora de asignar un nombre a un elemento de un programa, se debe tener en cuenta que todo identificador debe cumplir las siguientes reglas de sintaxis: 1. Consta de uno o más caracteres. 54
  • 2. El primer carácter debe ser una letra o el carácter subrayado (_), mientras que, todos los demás pueden ser letras, dígitos o el carácter subrayado (_). Las letras pueden ser minúsculas o mayúsculas del alfabeto inglés. Así pues, no está permitido el uso de las letras 'ñ' y 'Ñ'. 3. No pueden exitir dos identificadores iguales, es decir, dos elementos de un programa no pueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador no pueda aparecer más de una vez en un programa. De la segunda regla se deduce que un identificador no puede contener caracteres especiales, salvo el carácter subrayado (_). Es importante resaltar que las vocales no pueden llevar tilde ni diéresis. #define y const La directiva #define indica al preprocesador que debe sustituir, en el código fuente del programa, todas las ocurrencias del <nombre_de_la_constante> por la <secuencia_de_caracteres>, antes de la compilación. Ejemplo 2: Dos constantes muy habituales son: #define PI 3.141592 #define NUMERO_E 2.718281 En programación es una buena práctica escribir los identificadores de las constantes en mayúsculas, de esta forma es más fácil localizarlos en el código de un programa. Nótese que, después de la declaración de una constante simbólica no se escribe un carácter punto y coma (;), cosa que sí se debe hacer al declarar una variable. Por otra parte, no se puede declarar más de una constante simbólica en una misma línea de código. Ejemplo 3: Para declarar las constantes simbólicas PI y NUMERO_E, no se puede escribir: #define PI 3.141592, NUMERO_E 2.718281 Por otra parte, en C, es posible declarar una variable indicando que su valor es inalterable. Para ello, se utiliza el cualificador const. Ejemplo 4: Uso de const: const int temperatura = -5; Operadores Aritméticos + Suma - Resta * Multiplicación / División / División (div) % Modulo 55
  • + Signo mas - Signo menos Operadores logicos && Conjuncion || Disyunción ! Negación Programación de expresiones Programación de expresiones Objetivo: Creara programas que manipulen datos de forma específica Ejercicios: /*Escribir un programa (en lenguaje C) que: 1º) Pida por teclado la base (dato real) de un triángulo. 2º) Pida por teclado la altura (dato real) de un triángulo. 3º) Calcule el área del triángulo. 4º) Muestre por pantalla el resultado (dato real). Nota: la operación aritmética se deberá hacer directamente en la instrucción de impresión a pantalla*/ #include <stdio.h> #include <conio.h> int main() { float altura, area, base; printf( "Introduzca base: " ); scanf( "%f", &base ); printf( "Introduzca altura: " ); scanf( "%f", &altura ); area = base * altura / 2; printf( "El area del triangulo es: %f", area ); getch(); return 0; } Ora forma de hacerla optimizando código. #include <stdio.h> 56
  • #include <conio.h> int main() { float altura, base; printf( "Introduzca base: " ); scanf( "%f", &base ); printf( "Introduzca altura: " ); scanf( "%f", &altura ); printf( "El area del triangulo es: %f", base * altura / 2 ); getch(); return 0; } /*Elaborar un programa que convierta venda dolares al precio del momento*/ #include<conio.h> #include<stdio.h> main(){ float precio, pdollar, dollar; clrscr(); printf("CASA DE CAMBIOn"); printf("Cuantos dolares a comprar: "); scanf("%f",&dollar); printf("Teclea el costo del dolar frente al peso: "); scanf("%f",&pdollar); precio = dollar * pdollar; printf("El pago es de= %f pesos",precio); printf("nnnPresione cualquier tecla para terminar"); getch(); } Ejercicios: 1. Elabore un programa en lenguaje C que pida por teclado el nombre y la edad e imprima esos datos. 2. Escribir un programa (en lenguaje C) que: Pida por teclado dos números (datos enteros). Muestre por pantalla el resultado de realizar la división entera del primer número introducido por el usuario entre el segundo, y el resto. 57
  • 7 U. A. Sentencias de Control Objetivo: Al término de la modulo el participante creara programas que permitan la bifurcación de su control en función a situaciones especificas por medio de la inclusión de sentencias de control C contempla dos tipos de instrucciones de selección: if y switch. La sentencia if, tiene variaciones como el if-else, y los if anidados. Estructuras if y switch Objetivo: El participante explicará las sentencias de los lenguajes de programación Forma general de la instrucción if es if (expresión) instrucción; else instrucción; donde instrucción puede ser una instrucción simple, un bloque de instrucciones o nada ( en caso de instrucciones vacias) . La cláusula else es opcional. si la expresión es cierta( cualquier valor que no sea cero 0), se ejecuta la instrucción o el bloque de instrucciones que constituye el objetivo del if; en elcaso contrario se ejecuta la instrucción o el bloque de instrucciones que constituye el objeto del else, si existe. Recuerde que solo se ejecuta el código asociado al if o al else, nunca ambos. Ejemplo. /*Mostrar si el numero es par o impar*/ #include<conio.h> #include<stdio.h> main() { int num; 58
  • clrscr(); printf ("Dame numero: n"); scanf("%d",&num); if (num %2 == 0) printf("Numero par"); else printf("numero impar"); getch(); } if anidados un if anidado es un if que es el objetivo de otro if o else. Los if anidados son muy comunes en programación. en un if anidado, una instrucción else siempre se refiere al if mas próximo que este en el mismo bloque que el else y que no este ya asociado con un else. Por ejemplo: /*utilizando if anidados deberá mostrar en pantalla el numero mágico*/ #include<stdio.h> #include<stdlib.h> #include<conio.h> int main (void) { int magico; //inicialización de numero mágico int intento; //intento del usuario magico = rand(); // genera número mágico printf("adivine el nuemro magico"); scanf("%d", &intento); if (intento == magico){ printf("n***C O R R E C T O ***"); printf("%d es el numero magico n", magico); } else{ printf("n***I N C O R R E C T O ***"); if (intento >magico) printf ("ndemasiado alto"); else printf("ndemasiado bajo"); getche();} return 0; } 59
  • Otro ejemplo de if anidados #include <stdio.h> #include <conio.h> int main(void) { int a,b,c; printf("i9ntroduce 1 nuemros enteros"); scanf("%d", &a); printf("i9ntroduce 1 nuemros enteros"); scanf("%d", &b); printf("i9ntroduce 1 nuemros enteros"); scanf("%d", &c); if (a>b){ if (a>c){ if(b>c){ printf("%d%d%d", a,b,c); } else{ printf("%d%d%d", a,c,b); } }else printf("%d%d%d", c,a,b);} else{ if (b>c){ if (a>c){ printf("%d%d%d", b,a,c);} else{ printf("%d%d%d", b,c,a);}} else{ printf("%d%d%d", c,b,a); } } getch(); return 0; } Switch C incorpora una instrucción de selección múltiple, denominada switch, que compara sucesivamente el valor de una expresión con una lista de constantes enteras o de caracteres. Cuando se encuentra una correspondencia, se ejecutan las instrucciones asociadas con la constante. La forma general de la instrucción switch es 60
  • switch (expresión){ case constante1: secuencia de instrucciones break; case constante2: secuencia de instrucciones break; case constante3: secuencia de instrucciones break; . . . . default: secuencia de instrucciones } Ejemplo: /*Escribir un programa (en lenguaje C) que: 1) Muestre el listado de las habitaciones de la casa rural. 2) Pida por teclado el número (dato entero) asociado a una habitación. 3) Muestre por pantalla la planta y el número de camas de la habitación seleccionada. Nota: Si el número introducido por el usuario, no está asociado a ninguna habitación, se mostrará el mensaje: "ERROR: <número> no está asociado a ninguna habitación.".*/ #include <stdio.h> #include <conio.h> int main() { int numero; printf( "Listado de habitaciones:" ); printf( "nn1. Azul" ); printf( "n2. Roja" ); printf( "n3. Verde" ); printf( "n4. Rosa" ); printf( "n5. Gris" ); printf( "nnIntroduzca numero de habitación: " ); scanf( "%d", &numero ); 61
  • switch ( numero ) { case 1 : printf( "La Azul tiene 2 cama y esta en la primera planta." ); break; case 2 : printf( "La Roja tiene 1 cama y esta en la primera planta." ); break; case 3 : printf( "La Verde tiene 3 cama y esta en la segunda planta." ); break; case 4 : printf( "La Rosa tiene 2 cama y esta en la segunda planta." ); break; case 5 : printf( "La Gris tiene 1 cama y esta en la tercera planta." ); break; default : printf( "ERROR: %d no esta asociado a ninguna habitación.", numero ); } getch(); } Estructuras FOR y WHILE Objetivo: El participante Explicará la lógica de las estructuras cíclicas El formato general del bucle for de c se encuentra de una forma o de otra en todos los lenguajes de programación. En C, sin embargo, proporciona una potencia y flexibilidad sorprendentes. La forma general para la instrucción for es for(inicialización;condicion;incremento) instrucción; Por ejemplo, el siguiente programa usa un bloque for para imprimir los números del 1 al 100 en pantalla: #include<stdio.h> int main() { int x; for(x=1; x<=100; x++) printf(“%d”, x); return 0; } El bucle WHILE El Segundo bucle disponible en C es while, su forma general es while(condición) instrucción; 62
  • donde instrucción es una instrucción vacía, una instrucción simple o un bloque de instrucciones. La condición puede ser cualquier expresión y cualquier valor distinto de 0 es cierto. El bucle itera mientras la condición es cierta. Cuando la condición se hace falta, el control del programa para la línea inmediatamente siguiente al código del bucle. Ejemplo: /* Elaborar un programa que convierta venda dólares al precio del momento*/ #include<conio.h> #include<stdio.h> main() { float precio, pdollar, dollar; int r; clrscr(); r=1; while (r==1){ printf("CASA DE CAMBIOn"); printf("Cuantos dolares a comprar: "); scanf("%f",&dollar); printf("Teclea el costo del dolar frente al peso: "); scanf("%f",&pdollar); precio = dollar * pdollar; printf("El pago es de= %f pesos",precio); printf("nOTRA VENTA?? 1 o 0: "); scanf("%d", &r); } if (r==0){ printf("nnnPresione cualquier tecla para terminar"); } getch(); } El bucle do-while} A diferencia de los bucles for y while, que analizan la condición del bucle al principio, el bucle do-while comprueba la condición al final. esto significa que l bucle do-while siempre se ejecuta al menos una vez. La forma general del bucle do-while es 63
  • do{ instrucción; }while8condición; ejemplo: /* Programa 2 Escribir un programa (en lenguaje C) que: 1º) Pida por teclado la base (dato real) de un triángulo. 2º) Pida por teclado la altura (dato real) de un triángulo. 3º) Calcule el área del triángulo. 4º) Muestre por pantalla el resultado (dato real). Nota: la operación aritmética se deberá hacer directamente en la instrucción de impresión a pantalla*/ #include <stdio.h> #include <conio.h> int main() { float altura, base; int respuesta; clrscr(); do{ printf( "Introduzca base: " ); scanf( "%f", &base ); printf( "Introduzca altura: " ); scanf( "%f", &altura ); printf( "El area del triangulo es: %f", base * altura / 2 ); printf("ndeseas hacer otro calculo??? teclea 1 o 0: "); scanf("%d", &respuesta); }while (respuesta!=0); if (respuesta==0){ printf("BYE");} getch(); return 0; } Ejercicios: 1.- Escribir un programa (en lenguaje C) que: 1) Muestre el listado de las habitaciones de la casa rural. 2) Pida por teclado el número (dato entero) asociado a una habitación. 64
  • 3) Muestre por pantalla la planta y el número de camas de la habitación seleccionada. Nota: Si el número introducido por el usuario, no está asociado a ninguna habitación, se mostrará el mensaje: "ERROR: <número> no está asociado a ninguna habitación.". 2.- Elabore un programa en lenguaje C que calcule l nomina de 10 empleados. 3.- Elabore un programa en lenguaje c que tome las siguientes consideraciones: De cuatro candidatos con identificadores 1,2,3,4, Encontrar el numero de votos correspondientes a cada uno Y el porcentaje respecto al total de votos de cada uno. El final de La elección se representa por un cero. 65
  • 8 U. A. Arreglos en Programación Objetivo: Al finalizar el participante creara programas con aplicaciones de arreglos de una y dos dimensiones U n array es una colección de variables del mismo tipo que se referencia por un nombre común. A un elemento especifico de un array se accede mediante un índice.. En C todos los arrays constan de posiciones de memoria contiguas. La dirección más baja corresponde al primer elemento y la dirección más alta al último elemento. Los arrays pueden tener de una a varias dimensiones. El array más común es la cadena. Que simplemente es un array de caracteres terminado por un nulo. Los arrays y los punteros están íntimamente relacionados, una explicación de uno de ellos siempre se refiere a los otros. La forma general de declaración de un arrays unidimensional es: Tipo nombre_de_variable [tamaño]; Arreglos en Programación Objetivo: El participante creara programas con aplicaciones de arreglos de una y dos dimensiones Los arrays deben declararse explícitamente para que así el compilador pueda reservar espacio en memoria para ellos. Aquí tipo declara el tipo base del array, que es el tipo de cada elemento del array. El valor del tamaño indica cuantos elementos mantendrá el array. En C todos los arrays tienen cero como índice de su primer elemento. Ejemplo. si se declara un array char p[10]; es desde p[0] a p[9] o sea tiene 10 elementos. Un elemento se puede acceder indexando el nombre del array. Esto se hace colocando el índice del elemento entre corchetes justo detrás del nombre del array. Por ejemplo: double balance [100]; // declaración de array balance[3] = 12.23; // asignación al elemento 3 (o sea índice 2) de balance el valor12.23 66
  • Arreglos Unidimensionales La forma general de declaración de un array unidimensional es tipo nombre_de_variabl[tamaño]; Ejemplo: #include<stdio.h> int main(void){ int x[100]; int t; for(t=0;t<100;++t) x[t]=t; for(t=0;t<100;++t) printf(“%d”, x[t]); return 0; } Se puede generar un puntero al primer elementos de un array simplemente especificando el nombre del array, sin índice. Por ejemplo, dado: int ejemplo [10]; se puede generar un puntero al primer elemento usando simplemente el nombre ejemplo. Como se puede ver, el siguiente fragmento de programa asigna a p la dirección del primer elemento de ejemplo. int *p; int ejemplo[10]; p=ejemplo; //es lo mismo que &ejemplo[0]; Arrays bidimensionales C admite multidimensionales. La forma más simple de un array multidimensional es el alrray bidimensional. Un array bidimensional e esencialmente un array de arrays unidimensionales. Para declarar un array d de enteros bidimensional de tamaño 10,20 se escribirá Préstese atención a la declaración, Muchos otros lenguajes de computadora utilizan comas para separar las dimensiones del array; C coloca dimensión en su propio conjunto de corchetes. De forma similar, para acceder al punto 1,2 del array d se escribirá d[1][2] 67
  • El siguiente ejemplo carga un array bidimensional con los números del 1 al 12 y luego los imprime fila a fila. #include <stdio.h> #include <conio.h> int main(void) { int t, i, num[3][4] ; for(t=0; t<3; ++t) for (i=0; i<4; ++i) num[t][i]= (t*4)+i+1; /*ahora imprimirlos*/ for(t=0; t<3; ++t){ for (i=0; i<4; ++i) printf("%3d", num[t][i]); printf("n"); } getch(); return 0; } En este ejemplo num[0][0] tiene el valor 1, num[0][1] tiene el valor 2, num[0][2] tiene el valor 3, y asi sucesivamente. El valor de num[2][3] tiene el valor 12. Se puede representar el array como sigue. num [t] [i] fila columna 0 1 2 3 0 1 2 3 4 1 5 6 7 8 2 9 10 11 12 Los arrays bidimensionales se almacenan en matrices fila-columna. En las que el primer índice indica la fila y el segundo indica la columna. Ejemplo de array bidimensional Programa que hace una array de dos dimensiones y lo llena e imprime. #include<stdio.h> #include<conio.h> #define DIAS 2 const int vendedores=2; 68
  • void main(void){ int v; /*v=vendedores*/ int d; /*d=dias*/ float total; float ventas[vendedores][DIAS]; float day[DIAS]; float total_vendedor[vendedores]; v=0; d=0; total=0.0; for(d=0; d<vendedores;d++) for(v=0; v<vendedores;v++) // ventas[v][d]=0.0; *(*ventas+v)+d; for(d=0;d<DIAS;d++) // day[d]=0.0; *(day+d); for(v=0;v<vendedores;v++) //total_vendedor[v]=0.0; *(total_vendedor+v); for(d=0;d<DIAS;d++) for(v=0;v<vendedores;v++){ printf("ventas[%d][%d]=?",v,d); flushall(); // scanf("%f", &ventas[v][d]); scanf("%f", (*ventas+v)+d); } // printf("ventas[0][0]=%6.2f", ventas[0][0]); printf("nventas[0][0]=%6.2f", *(*ventas+0)+0); printf("nventas[0][1]=%6.2f", *(*ventas+1)+0); printf("nventas[1][0]=%6.2f", *(*ventas+0)+1); printf("nventas[1][1]=%6.2f", *(*ventas+1)+1); printf("nfin"); flushall(); getch();} Ejercicios: Elabore un programa en lenguaje c que cree un arreglo unidimensional y pida por teclado los valores que se e ingresaran, y al final imprima los mismo. Elabore un programa en lenguaje c que cree un arreglo bidimensional y que le ingrese los números 2,4, 6 hasta el 24. 69
  • 9 U. A. Funciones Objetivo: Al finalizar el modulo el participante creará funciones personalizadas en un lenguaje de programación L as funciones son bloques constructores de C y el lugar donde se produce toda la actividad del programa. En este capitulo analizaremos sus características, incluyendo los argumentos, los valores devueltos y los prototipos. Funciones Objetivo: El participante creara funciones personalizadas en un lenguaje de programación Forma general de una función Tipo_dev nombre_de_la_funcion(lista de parámetros) { Cuerpo de la función } Donde: Tipo_dev Específica el tipo de dato que devuelve la función. Una función puede devolver cualquier tipo de dato excepto un array Nombre_de_la_funcion Nombre que se le asignara (lista de parámetros) Es una lista de nombres de variables separados por comas con sus tipos asociados. Los parámetros reciben valores de los argumentos cuando se llama a la función. 70
  • Una función puede no tener parámetros, en cuyo caso la lista de parámetros esta vacía. Una lista de parámetros vacía se puede especificar explícitamente como tal colocando la palabra clave void entre los paréntesis En las declaraciones de variables se pueden declarar múltiples variables del mismo tipo mediante una lista con los nombres de las variables separados por comas. En cambio, en las funciones todos los parámetros deben declararse individualmente, incluyendo para cada uno tanto el tipo como el nombre. Es decir, las lista de declaración de parámetros de una funciones es la siguiente en forma general: f(tipo var1, tipo var2, ….. Tipo varN) El código de una función es privado a esa función, a menos que se haga a través de una llamada a esa función. El código que comprende el cuerpo de una función esta oculto al resto del programa, y a no ser que se usen datos o variables globales, no puede ser afectado por otras partes del programa ni afectarlas. Las variables que están definidas dentrote una función son variables locales. La única excepción a esta regla se da cuando la variable se declara con el especificador de clase de almacenamiento static. Prototipos de funciones de forma apropiada todas las funciones deben estar declaradas antes de ser utilizadas, esto normalmente se lleva a cabo mediante los prototipos de funciones. Forma general de un prototipo de función Tipo nombre _de_la_función(tipo parametro1, parametro2, … parametroN); La instrucción return La instrucción return tiene dos usos. Primero, fuerza una salida inmediata de la función en que se encentra, ósea, hace que la ejecución del programa vuelva al código que llamo a la función. En segundo lugar puede utilizar para devolver un valor Funciones de tipo void Uno de los usos de void es el de declarar explícitamente funciones que no devuelven valores. Esto previene su uso en cualquier expresión y ayuda a descubrir un mal uso accidental. Lo que devuelve main La función main() devuelve un entero al proceso de llamada, que generalmente es el sistema operativo. Que main() devuelva un valor es lo mismo que llamar a exit(), con ese mismo valor. Si main() no devuelve un valor explícitamente, el valor que se pasa al proceso de llamada queda técnicamente indefinido. En la practica, la mayoría de los compiladores de C devuelven automáticamente 0, aunque no se debe confiar en ello cuando la portabilidad sea un aspecto importante. Ejemplo 71
  • Estas líneas de código crean una función llamada multiplica, sin embargo solo la estamos creando: void multiplica(void){ result= NUM1 * num2; } La siguiente línea, es el prototipo de la función multiplica void multiplica(void); Y en el siguiente programa se invoca a la función multiplica: void main(void){ clrscr(); multiplica(); printf("resultado=%8.2f",result); printf("nfin"); flushall(); getch(); } si deseamos estructurar dicho programa completo quedaría de la siguiente manera. #include<stdio.h> #include<stdlib.h> #include<conio.h> #define NUM1 3 const float num2 = 2.5; float result; void main(void){ clrscr(); multiplica(); printf("resultado=%8.2f",result); printf("nfin"); flushall(); getch(); } void multiplica(void){ result= NUM1 * num2; } Si deseamos pasar parámetros anuesta función, una opción seria: 72
  • float multi(float a, float *b); //prototipo de funcion void main(void){ float res; clrscr(); res = multi(n1, &n2); printf("resultado=%8.2f",res); printf("nfin"); flushall(); getch(); } float multi(float a, float *b){ return a * (*b); } 73
  • Unidad 10 Asignación Punteros Objetivo: Al finalizar el modulo el participante asignara y manipulara valores a variables mediante contenidos de memoria U n puntero es una variable que contiene una dirección de memoria. Esa dirección es la posición de otro objeto (normalmente otra variable) en memoria. Por ejemplo, una variable contiene la dirección de otra variable, entonces se dice que la primera variable apunta a la segunda Punteros Objetivo: El participante aplicará y manipulara valores a variables mediante contenidos de memoria . Variables Puntero Si una variable va a ser puntero, entonces tiene que declararse como tal. Una declaración de puntero consiste un tipo base, un * y el nombre de la variable. La forma general de declaración de una variable puntero es tipo * nombre; Donde tipo es el tipo base puntero, que puede ser cualquier tipo valido válido. El nombre de la variable puntero se especifica con nombre. El tipo base del puntero define el tipo de variables a las que puede apuntar el puntero. Por ejemplo cuando se declara un puntero como de tipo int * el compilador asume que cualquier dirección que contenga apunta a un entero, lo haga realmente o no. Por lo tanto al declarar un puntero hay que asegurarse de que su tipo base sea compatible con el tipo de objeto al que quiera que apunte. Hay dos operadores de punteros de punteros: & y * & es un operador monario que devuelve la dirección de memoria de su operando. Por ejemplo: 74
  • m = &cuenta; Esta línea de código pone en m la dirección de memoria de la variable cuenta. Esta dirección es la posición interna de la variable en la computadora. No tiene nada que ver con el valor de cuenta. Se puede pensar en el operador & como devolviendo “la dirección de“. Por tanto la instrucción de asignación significa m recibe la dirección de cuenta. El segundo operador de punteros, * es el complemento de &. Es un operador monario que devuelve el valor que se encuentra en la dirección que le sigue. Por ejemplo, si m contiene la dirección de memoria de la variable cuenta, entonces: q = *m pone el valor de cuenta en q. Así que tendrá el valor de 100, porque 100 es lo almacenado, en la posición 2000, la dirección de memoria que se guardo en m. Se puede pensar en + como “en la dirección”. En este caso la instrucción anterior significa “q recibe el valor de la dirección m”. Ejemplos: #include<stdio.h> #include<conio.h> #include<stdlib.h> #define DIAS 2 //declaro una macro que tiene un valor de 2, una macro es un texto asociado, en este caso el texto asociado es 2 const int vendedores=2;//declaración de una constante, una constante es un lugar de almacenamiento que no cambia de valor, en este caso el valor constante es 2 void main (void){//inicio del programa float ** ventas;// declaro un doble_apuntador; int v; clrscr(); ventas=NULL; ventas=(float**)malloc(sizeof(float *)*vendedores); if (ventas==NULL){ printf("No hay memoria"); flushall(); getch(); exit(1);//retorno un entero al main } for(v=0;v<vendedores;v++){ *(ventas+v)=NULL; *(ventas+v)=(float*)malloc(sizeof(float)*DIAS); if(*(ventas)+v==NULL){ printf("No hay memoria"); flushall(); 75
  • getch(); exit(1); } } *(*(ventas+0)+0)=500.00; // asigna los valores al arreglo que es de 2*2 *(*(ventas+0)+1)=0.0; *(*(ventas+1)+0)=200.00; *(*(ventas+1)+1)=300.00; printf("ventas[0][0]=%8.2f", *(*(ventas+0)+0)); // estas lineas imprimen lo que contiene mi arreglo printf("nventas[0][1]=%8.2f", *(*(ventas+0)+1)); printf("nventas[1][0]=%8.2f", *(*(ventas+1)+0)); printf("nventas[1][1]=%8.2f", *(*(ventas+1)+1)); printf("n"); flushall(); getch(); } 76
  • 11 Unidad Asignación Estructuras de Datos Objetivo: Al finalizar el modulo el participante creara nuevos tipos de datos personalizados mediante la relación de sus contenidos o localidades de memoria U na estructura es una colección de variables que se referencia bajo un único nombre, proporcionando un medio conveniente de mantener junta una información relacionada. Una declaración de una estructura forma una platilla que puede utilizarse para crear objetos estructuras ósea, ejemplares de una estructura. Las variables que componen la estructura se llaman miembros de la estructura. Los miembros de la estructura también son usualmente referidos como elementos o campos. Estructuras de datos Objetivo: El participante creara nuevos tipos de datos personalizados aplicándolos en la creación de programas Normalmente, los miembros de la estructura están relacionados de forma lógica. Por ejemplo la información sobre el nombre y la dirección de una lista de correos seria normalmente representada en una estructura. el código que sigue muestra como declarar una estructura que define campos para el nombre y la dirección. la palabra clave struct indica al compilador que se esta declarando un estructura. struct dir{ char nombre[30]; char calle[40]; char ciudad[20]; char estado[3]; }; Obsérvese que la declaración termina con punto y coma. Esto de debe a que la declaración de estructura es una instrucción. además, la etiqueta de la estructura dir identifica esta estructura de datos concreta es su especificador de tipo. 77
  • En este punto realmente no se han creado las variables. Solo se ha definido la forma de los datos. Cundo se define una estructura se define un tipo agregado, no una variable. Hasta que no se declare una variable de este tipo no existirá realmente ninguna. Para declarar una variable de tipo dir se escribe struct dir_info_dir; Esto declara una variable de tipo dir llamada info_dir. Se puede tambien declarar una o más variables de estructura a la vez que se declara una estructura. Por ejemplo: struct dir{ char nombre[30]; char calle[40]; char ciudad[20]; char estado[3]; } info:dir, bingo, cinfo; Cada una de ellas es independiente, por lo que los cambios sobre el código de bingo por ejemplo, no afectan a código cinfo. Nombre 30 bytes Calle 40 bytes Ciudad 20 bytes Estado 3 bytes la estructura info_dir en memoria La forma general de un declaración de una estructura es: struct etiqueta{ tipo nombre_de_miembro; tipo nombre_de_miembro; . } variables de estructura; Donde se puede omitir o bien la etiqueta, o las variables_de_estructura, pero no ambas. 78
  • Acceso a los miembros de la estructura Los miembros individuales de la estructura se acceden a través del operador . Por ejemplo el siguiente código asigna el código postal al campo código de la variable de estructuras info_dir declarada anteriormente. info_dir.codigo = 12345; Uso de Punteros a estructuras Los punteros a estructuras los vamos a utilizar para generar un paso por referencia de una estructura a una función. Para encontrar la dirección de una variable de estructura se coloca el operador & antes del nombre de la estructura. Por ejemplo dado el siguiente fragmento: struct bal{ float balance; char nombre[80]; }persona; Creación de estructuras de datos en lenguaje C Objetivo: El participante creara nuevos tipos de datos personalizados aplicándolos en la creación de programas struct bal *p; /*declaración de un puntero a estructura*/ lo que sigue coloca la dirección en la estructura persona en el puntero p: p  balance A  se le denomina operador flecha. Cuando se accede a un miembro de una estructura , se usa el operador flecha en lugar del operador punto. Ejemplo de su uso : #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> struct tipo_registro{ 79
  • char nombre[35]; int edad; float salario; }; #define TIPO struct tipo_registro void multi_registro2(TIPO *registro); TIPO empleado; TIPO *empleado2; void main(void){ clrscr(); empleado2=&empleado; strcpy(empleado2 -> nombre, "Marcos Colin"); empleado2->edad=15; empleado2->salario=10000; multi_registro2(empleado2); getch(); } void multi_registro2(TIPO *registro){ printf("nombre = %sn ", registro->nombre); printf("edad = %dn ", registro->edad); printf("salario = % %8.2fn ", registro->salario); } La salida de este programa es: 80
  • Conclusiones Estimado participante, ha finalizado nuestro curso de “Algoritmos y Programación”, mismo que te dará las bases para poder desarrollar cualquier programa en n lenguaje C, y por consiguiente en cualquier lenguaje estructurado, ya que al haberlo cursado estas preparado mentalmente y tiene los conocimientos necesarios para ello. La primera parte del curso, los algoritmos, te darán las bases para que puedas analizar cualquier problema y convertirlo en un programa de computadora en cualquier lenguaje de programación estructurada. La segunda parte de nuestro curso te permite aplicar los conocimientos adquiridos en la primera parte, utilizando un lenguaje estructurado, lenguaje c, y ya que te lleva de lo más sencillo a lo más complejo es muy fácil de entender. Con este curso, te llevas algo muy valioso, un conocimiento para toda la vida, mismo que te será útil a lo largo de este bello andar. “Recuerda que el conocimiento es el alimento de la mente” 81
  • Bibliografía Metodología de la programación, algoritmos, diagramas de flujo y programas 3ª edición, Oswaldo Cairo, Alfaomega Manual de referencia C cuarta edición, Herbert Schildt, Osborne Mc Graw Hill Curso Diseño de algoritmos, Alejandro García 82