Apuntes De Algoritmos

83
ALGORITMOS Y PROGRAMACIÓN Algoritmosy programación

Transcript of Apuntes De Algoritmos

Page 1: Apuntes De Algoritmos

ALGORITMOS Y PROGRAMACIÓN

Algoritmos y programación

Page 2: Apuntes De Algoritmos

i

A L G O R I T M O S Y P R O G R A M A C I Ò N

Segundo Cuatrimestre

Lic. Laura Gisela Velázquez Marmolejo Estado de México, México

Teléfono (55) 50626468 y 69

Page 3: Apuntes De Algoritmos

2

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.

Page 4: Apuntes De Algoritmos

3

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

Page 5: Apuntes De Algoritmos

4

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.

Page 6: Apuntes De Algoritmos

5

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

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”

Unidad

Asignación

1

M

Page 7: Apuntes De Algoritmos

6

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.

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.

Algoritmo

Procesamiento de

los datos

Modulo 1 Modulo 2 Modulo 3

Datos de

Entrada

Impresión de

Resultados

Page 8: Apuntes De Algoritmos

7

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

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

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

Page 9: Apuntes De Algoritmos

8

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

Page 10: Apuntes De Algoritmos

9

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.

Nombre Descripción

Ejemplos (No Muestra Sintaxis de ningún

Lenguaje de Programación)

Enteros (int) Pueden estar precedidos de los signos + y -, además no tiene parte decimal.

128, 1528, -714, 25469, -56245

Reales (float y double)

Tambien pueden estar precedidos de los signos + y -, y tiene una parte decimal.

7.5, 128.0, -37.256, 25.3, 160000.0, -15.60

Caracteres (char)

Contiene un solo carácter, y se escribe entre apóstrofes

„a‟, „B‟, „$‟, „9‟ , „-‟, „#‟

Boleanos (boolean)

Son datos que solo pueden tomar dos valores: verdadero (trae), falso (false).

10>32

Cadena de caracteres (String)

Contiene un conjunto de caracteres, y se escribe entre comillas.

Letras del alfabeto, dígitos (0, 1, 2….9) o símbolos especiales (#, $, ^, *, %, /, !, +, -…etc).

Arreglos (array)

Colección finita, homogénea y ordenada de elementos; puede almacenar a N elementos del mismo tipo y además permite el acceso a cada uno d estos elementos

UNIDIMENSIONALES O LINEALES (Cualquier elemento es referenciado por un único índice) Ident_arreglo = ARREGLO [limiteinf...limsup] DE 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 denomina campo. Los campos de un registro pueden ser todos de diferente tipo.

Ident_registro = REGISTRO Id_campo1:tipo1 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.

Page 11: Apuntes De Algoritmos

10

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

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;

5

7.25 8.59

“resultado”

NUM

NREAL NUMREA

RESU

SUMA

AUX X7

ACUM NUM_1

Memoria

Page 12: Apuntes De Algoritmos

11

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.

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:

0

0 0

I

SUMA SUEL

Page 13: Apuntes De Algoritmos

12

Operadores aritméticos Operador aritmético

Operación Ejemplo Resultado

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

(menor)

Potencia

*, /, mod, div Multiplicación, división, modulo, división entera

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

Page 14: Apuntes De Algoritmos

13

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.

Page 15: Apuntes De Algoritmos

14

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 P y Q P y Q P sin embargo Q

O Menor P o Q P o Q 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)

Page 16: Apuntes De Algoritmos

15

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

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

INICIO

INICIO

A,B,C,D

D,C,B,A

Page 17: Apuntes De Algoritmos

16

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)

Ilustración G

A continuación veremos el seguimiento del algoritmo para diferentes corridas

INICIO

FIN

A,B

C (A+B) ** 2/3

C

Explicación de la variable

A, B: Variables de tipo entero

RES: Variable tipo variable.

Page 18: Apuntes De Algoritmos

17

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

Page 19: Apuntes De Algoritmos

18

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

Page 20: Apuntes De Algoritmos

19

/* 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

Page 21: Apuntes De Algoritmos

20

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

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”

Unidad

Asignación

2

L

Page 22: Apuntes De Algoritmos

21

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

CONDICIÓN

OPERACIÓN

Donde Condición expresa 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 resulta verdadera

Page 23: Apuntes De Algoritmos

22

Ilustración I Diagrama de Flujo

Ilustración J

Lenguaje Algorítmico

Aumento_selectiva 1. INICIO 2. Leer SUE 3. Si SUE <

1000 entonces

Hacer AUM

← SUE * 1.15 y NSUE ← SUE +AUM Escribir

NSUE 4. Fin de

Condicional paso 3

5. FIN

FIN

AUM ← SUE * 1.15 NSUE ← SUE +AUM

SUE < 1000

SUE

INICIO

SI

NO

NSUE

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. Imprima en este caso el

nuevo sueldo del trabajador.

FIN

CAL > 8

Lenguaje Algorítmico

Examen_selectiva_simple 1. INICIO 2. Leer CAL 3. Si CAL > 8 entonces

Escribir “Aprobado” 4. Fin de Condicional paso 3 5. FIN

A continuación se presenta el

seguimiento del algoritmo para

diferentes m corridas

NUMERO DE

CORRIDA DATO RESULTADO

1 8.75 Aprobado

2 7.90

3 8.00

4 9.50 Aprobado

5 8.35 Aprobado

Tabla 7

“Aprobado”

CAL

INICIO

SI

NO

Page 24: Apuntes De Algoritmos

23

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.

Ilustración K Diagrama de flujo que ilustra la estructura selectiva.

Se representa en lenguaje algorítmico de la siguiente forma

OPERACION1 OPERACION2

CONDICIÓN

SI NO

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

Page 25: Apuntes De Algoritmos

24

.

.

.

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

Page 26: Apuntes De Algoritmos

25

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.

Page 27: Apuntes De Algoritmos

26

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

.

.

ACCION3

SELECTOR

ACCION1 ACCION2

ACCION N + 1

Page 28: Apuntes De Algoritmos

27

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

VALOR 1: Hacer acción 1

VALOR 2: Hacer acción 2

VALOR 3: Hacer acción 3

De otra forma: Hacer acción X

{Fin del condicional}

Hacer acción Y

.

.

.

.

.

.

Si selector igual

VALOR 1, 2: Hacer acción 1

VALOR 3, 4, 5: Hacer acción 2

De otra forma: Hacer acción 3

{Fin del condicional}

Hacer acción X

.

.

.

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

Categoría Aumento

%

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

Page 29: Apuntes De Algoritmos

28

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

.

OPERACION21

CONDICIÓ

N1

OPERACION22

CONDICIÓ

N2

SI NO

SI

NO

NSUE ← SUE * 1.08

NSUE ← SUE * 1.15

FIN

CATE

NSUE ← SUE * 1.10

CATE, SUE

INICIO

CATE, SUE

1

2 3

Page 30: Apuntes De Algoritmos

29

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

Page 31: Apuntes De Algoritmos

30

Estructuras Algorítmicas Cíclicas

Objetivo: Al finalizar el modulo el participante usará las distintas estructuras cíclicas aplicables a algoritmos

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”

U. A.

3

E

Page 32: Apuntes De Algoritmos

31

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

NO SI

NO SI

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.

VVI

V(<)VF …(<)

PROCESO

V V+ID

VVI

V(>)VF …(>)

PROCESO

V V-ID

Page 33: Apuntes De Algoritmos

32

Hacer PI PRIOPOSICION INICIAL

Mientras PI es verdadero repetir .

NO . . {PROCESO}

SI . . .

Hacer PI modificación de PI {Fin de ciclo}

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.

PIPROP.INICI

EVALUACIÓN DE PI

PROCESO

PI MODIF. de PI

Page 34: Apuntes De Algoritmos

33

NOMINA {Calcula el total de la nomina de un grupo de 10 empleados} {I variable de tipo entero. SUE y NOMINA tipo real} Variables entero i, real SUE, NOMINA 1. Inicio

2. Hacer Nomina 0 e I 1 3. Repetir con I desde 1 hasta 10 Leer SUE

Hacer NOMINA NOMINA + SUE e

I I + 1 4. {Fin del paso 2} 5. Escribir NOMINA 6. Fin

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

Inicio

Inicio

NOMINA 0

I 1

I < 10

SUE

NOMINA NOMINA + SUE

I I + 1

NOMINA

Page 35: Apuntes De Algoritmos

34

CUBO {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}

Elabore el diagrama de flujo

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

Page 36: Apuntes De Algoritmos

35

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

Page 37: Apuntes De Algoritmos

36

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 Vchi0, Vmed0, Vgra0, TVchi0, Temed0, TVgra0, 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 VchiVchi+1 y TVchiTVchi+Venta Sino

5.4 Si Venta<400 entonces

Hacer VmedVmed+1 y TVmedTVmed+Venta Sino

Hacer VgraVgra+1 y TVgraTVgra+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

Page 38: Apuntes De Algoritmos

37

Elabore Diagrama de Flujo

Page 39: Apuntes De Algoritmos

38

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}

Page 40: Apuntes De Algoritmos

39

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

Page 41: Apuntes De Algoritmos

40

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

Page 42: Apuntes De Algoritmos

41

Arreglos

Objetivo: Al finalizar el participante aplicara los arreglos en algoritmos

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”

Unidad

Asignación

4

U

Page 43: Apuntes De Algoritmos

42

Arreglo palabras

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]

nombre[0] nombre[1] nombre[2] nombre[3] nombre[4] nombre[5]

Page 44: Apuntes De Algoritmos

43

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

Page 45: Apuntes De Algoritmos

44

/* 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;

Page 46: Apuntes De Algoritmos

45

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 CAMBIO\n"); 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("\n\n\nPresione cualquier tecla para terminar"); getch(); }

Page 47: Apuntes De Algoritmos

46

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

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)

U. A.

5

C

Page 48: Apuntes De Algoritmos

47

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

Page 49: Apuntes De Algoritmos

48

19. Según los pasos realizados en este ejemplo de instalación, el programa Turbo C++ es TC.EXE y se encuentra en C:\TC\BIN 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:\TC\BIN 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

Page 50: Apuntes De Algoritmos

49

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:

Page 51: Apuntes De Algoritmos

50

Expresiones

Objetivo: Al finalizar el modulo el participante será capaz de escribir sentencias y expresiones en el lenguaje de programación designado

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.

U. A.

6

E

Page 52: Apuntes De Algoritmos

51

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

Page 53: Apuntes De Algoritmos

52

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

Page 54: Apuntes De Algoritmos

53

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.

Page 55: Apuntes De Algoritmos

54

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.

Page 56: Apuntes De Algoritmos

55

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

Page 57: Apuntes De Algoritmos

56

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

Page 58: Apuntes De Algoritmos

57

#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 CAMBIO\n"); 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("\n\n\nPresione 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.

Page 59: Apuntes De Algoritmos

58

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

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;

U. A.

7

C

Page 60: Apuntes De Algoritmos

59

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

Page 61: Apuntes De Algoritmos

60

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

Page 62: Apuntes De Algoritmos

61

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( "\n\n1. Azul" ); printf( "\n2. Roja" ); printf( "\n3. Verde" ); printf( "\n4. Rosa" ); printf( "\n5. Gris" ); printf( "\n\nIntroduzca numero de habitación: " ); scanf( "%d", &numero );

Page 63: Apuntes De Algoritmos

62

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;

Page 64: Apuntes De Algoritmos

63

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 CAMBIO\n"); 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("\n\n\nPresione 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

Page 65: Apuntes De Algoritmos

64

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.

Page 66: Apuntes De Algoritmos

65

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.

Page 67: Apuntes De Algoritmos

66

Arreglos en Programación

Objetivo: Al finalizar el participante creara programas con aplicaciones de arreglos de una y dos dimensiones

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

U. A.

8

U

Page 68: Apuntes De Algoritmos

67

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]

Page 69: Apuntes De Algoritmos

68

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;

Page 70: Apuntes De Algoritmos

69

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.

Page 71: Apuntes De Algoritmos

70

Funciones

Objetivo: Al finalizar el modulo el participante creará funciones personalizadas en un lenguaje de programación

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.

U. A.

9

L

Page 72: Apuntes De Algoritmos

71

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

Page 73: Apuntes De Algoritmos

72

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:

Page 74: Apuntes De Algoritmos

73

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

Page 75: Apuntes De Algoritmos

74

Punteros

Objetivo: Al finalizar el modulo el participante asignara y manipulara valores a variables mediante contenidos de memoria

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:

Unidad

Asignación

10

U

Page 76: Apuntes De Algoritmos

75

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

Page 77: Apuntes De Algoritmos

76

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

Page 78: Apuntes De Algoritmos

77

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

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.

Unidad Asignación

11

U

Page 79: Apuntes De Algoritmos

78

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.

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.

Nombre 30 bytes

Calle 40 bytes

Ciudad 20 bytes

Estado 3 bytes

la estructura info_dir en memoria

Page 80: Apuntes De Algoritmos

79

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{

Page 81: Apuntes De Algoritmos

80

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 = %s\n ", registro->nombre); printf("edad = %d\n ", registro->edad); printf("salario = % %8.2f\n ", registro->salario); } La salida de este programa es:

Page 82: Apuntes De Algoritmos

81

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”

Page 83: Apuntes De Algoritmos

82

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