ALGORITMOSFINAL
ALGORITMOSFINAL
ALGORITMOSFINAL
Lima - Per
Queda prohibida cualquier forma de reproduccin, venta, comunicacin pblica y transformacin de esta obra.
El presente material contiene una compilacin de contenidos de obras Algoritmos y Estructura de Datos publicadas lcitamente, resmenes de los temas a cargo del profesor; constituye un material auxiliar de enseanza para ser empleado en el desarrollo de las clases en nuestra institucin. ste material es de uso exclusivo de los alumnos y docentes de la Universidad Tecnolgica del Per, preparado para fines didcticos en aplicacin del Artculo 41 inc. C y el Art. 43 inc. A., del Decreto Legislativo 822, Ley sobre Derechos de Autor.
PRESENTACIN
El presente texto elaborado en el marco de desarrollo de la Ingeniera, es un material de ayuda instruccional, para las carreras de Ingeniera de: Sistemas, Industrial, Electrnica, Mecatrnica y Telecomunicaciones, para la Asignatura de Algoritmos y Estructura de Datos. Plasma la iniciativa institucional de innovacin de la enseanza-aprendizaje educativo universitario, que en acelerada continuidad promueve la produccin de materiales educativos, actualizados en concordancia a las exigencias de estos tiempos. Esta primera edicin apropiadamente recopilada, de diversas fuentes bibliogrficas, de uso frecuente en la enseanza de Algoritmos, est ordenada en funcin del syllabus de la Asignatura, arriba mencionada. La conformacin del texto ha sido posible gracias al esfuerzo y dedicacin acadmica del Profesor Ing. Carlos Parra Terrazos; contiene seis captulos, cuyas descripciones genricas son como sigue: Captulo 1: Conceptos fundamentales. Antes de introducirnos en el contenido de este manual ser necesario conocer los conceptos bsicos que nos ayudaran a tener un panorama general y entender con mayor facilidad los siguientes captulos. Aprenderemos a diferenciar un algoritmo de un programa y de un lenguaje de programacin, as como conocer la importancia de los tipos de datos y los datos para la programacin. Captulo 2: Estructura general de un programa. En este captulo encontraremos el concepto de Programa, las partes que lo conforman e introduciremos al estudiante en el proceso de la programacin a partir de la presentacin de programas en lenguaje C. Tambin se detallarn las instrucciones y sus tipos. Captulo 3: Estructuras de control. Durante un programa existen acciones que cambian el flujo de control de un programa estas estructuras bsicas de acuerdo a la programacin estructurada son: La estructura secuencial, la estructura selectiva o condicional y la estructura repetitiva o de iteracin; necesarias para poder disear algoritmos de cualquier grado de dificultad.
Captulo 4: Subprogramacin. Modularidad es un concepto que tiene aplicaciones en la ciencia de la computacin, particularmente para permitir manejar la complejidad de los programas a partir del concepto de divide y vencers cuya implementacin se lleva a cabo mediante el diseo descendente y refinamientos sucesivos as como su implementacin mediante las funciones y procedimientos. Captulo 5: Recursividad. Este captulo nos detallar la recursividad en Algoritmos, esta herramienta es muy til en la solucin de problemas; ya que transforma a stos en problemas ms sencillos a partir de la llamada de los programas, a si mismos. Captulo 6: Datos estructurados. Los datos se clasifican en datos simples y datos estructurados o estructuras de datos que son una forma de organizar un conjunto de datos para poder manipularlos con mayor facilidad, como si se tratase de uno solo. En esta parte se conocern los arreglos, los registros y las cadenas de caracteres. Finalmente, al cierre de estas lneas, el agradecimiento institucional al profesor Ing. Carlos Parra Terrazos por su contribucin a la elaboracin del presente texto.
Vicerrectorado de Investigacin
NDICE
CAPTULO I: CONCEPTOS FUNDAMENTALES 1.1 CONCEPTO DE ALGORITMO, EL SOFTWARE, LENGUAJES DE PROGRAMACION.............................................................................. 11 1.2 RESOLUCIN DE PROBLEMAS CON COMPUTADORA FASES .................................................................................................. 13 1.3 HERRAMIENTAS DE PROGRAMACIN ....................................... 16 1.4 TIPOS DE DATOS............................................................................... 20 1.5 CONSTANTES, VARIABLES, IDENTIFICADORES, EXPRESIONES, FUNCIONES ........................................................... 23 1.6 PARTE PRCTICA............................................................................. 27 PROBLEMAS PROPUESTOS ............................................................ 27 LABORATORIO N 1......................................................................... 31 CAPTULO II: ESTRUCTURA GENERAL DE UN PROGRAMA 2.1 ESTRUCTURA DE UN PROGRAMA EN C. .................................... 40 2.2 ESTRUCTURA DE ALGORITMO..................................................... 44 2.3 CONTADORES, ACUMULADORES. ............................................... 44 2.4 PARTE PRCTICA............................................................................. 47 PROBLEMAS PROPUESTOS ............................................................ 47 LABORATORIO N 2.......................................................................... 49 CAPTULO III: ESTRUCTURAS DE CONTROL 3.1 PROGRAMACIN ESTRUCTURADA............................................. 59 3.2 ESTRUCTURA DE CONTROL TIPOS........................................... 59 3.3 PARTE PRCTICA............................................................................. 74 PROBLEMAS PROPUESTOS ............................................................ 74 LABORATORIO N 3.......................................................................... 78 CAPTULO IV: SUBPROGRAMACIN 4.1 PROGRAMACIN MODULAR......................................................... 83 4.2 SUBPROGRAMAS TIPOS............................................................... 85 4.2.1 VARIABLES GLOBALES Y LOCALES. ............................ 87 4.2.2 FUNCIONES, PASO DE PARMETROS............................ 89 4.3 PARTE PRCTICA............................................................................. 94 PROBLEMAS PROPUESTOS ............................................................ 94 LABORATORIO N 4.......................................................................... 95
CAPTULO V: RECURSIVIDAD 5.1 RECURSIVIDAD............................................................................... 103 5.2 CARACTERSTICAS........................................................................ 103 5.3 VENTAJAS Y DESVENTAJAS ....................................................... 104 5.4 PELIGROS EN LA RECURSIVIDAD.............................................. 104 5.5 TIPOS DE ALGORITMOS RECURSIVOS...................................... 105 5.6 VERIFICACIN DE FUNCIONES RECURSIVAS ........................ 107 5.7 LA PILA DE RECURSIN ............................................................... 108 5.8 LLAMADA A UNA FUNCIN RECURSIVA ................................ 108 5.9 PARTE PRCTICA........................................................................... 109 PROBLEMAS PROPUESTOS .......................................................... 109 LABORATORIO N 5........................................................................ 110 CAPTULO VI: DATOS ESTRUCTURADOS 6.1 TIPOS ................................................................................................. 113 6.2 ARREGLOS UNIDIMENSIONALES, DECLARACION Y ACCESO............................................................................................. 114 6.3 ARREGLOS BIDIMENSIONALES, DECLARACION Y ACCESO117 6.4 REGISTROS....................................................................................... 122 6.4.1 CONCEPTO ......................................................................... 122 6.4.2 DECLARACION Y ACCESO ............................................. 122 6.4.3 ARREGLO DE REGISTROS .............................................. 124 6.5 CADENAS DE CARACTRES ........................................................ 125 6.6 PARTE PRCTICA........................................................................... 129 PROBLEMAS PROPUESTOS: ......................................................... 129 LABORATORIO N 6........................................................................ 130 BIBLIOGRAFA .......................................................................................... 1389
DISTRIBUCIN TEMTICA
Clase N 1 2 3 4 5 6 7 8 9 10 11 12 13 14 TEMA Conceptos Fundamentales Tipo de datos Estructura general de un programa Estructuras de control Selectiva doble Selectiva mltiple Selectiva de control (SEGN SEA) Iterativa (REPETIR DESDE) Iterativa (REPETIR - MIENTRAS ) Revisin Nivelacin EXAMEN Subprogramacin Procedimientos de paso de parmetros Recursividad Datos Estructurados PARCIAL SEMANA 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Clase N 15 16 17 18 19 20 21
TEMA Arreglos bidimensionales Declaracin y acceso Registros Cadena de caracteres ndices Nivelacin Recuperacin EXAMEN FINAL EXAMEN SUSTITUTORIO
SEMANA 15 16 17 18 19 20 21
10
1.1
CONCEPTO DE ALGORITMO, EL SOFTWARE, LENGUAJES DE PROGRAMACIN a) CONCEPTOS DE ALGORITMO Un algoritmo es un conjunto finito de instrucciones o pasos con una secuencia lgica que sirven para ejecutar una tarea o resolver un problema. De un modo ms formal, un algoritmo es una secuencia lgica finita de operaciones realizables, no ambiguas, cuya ejecucin da una solucin de un problema en un tiempo finito. COMPONENTES DE UN ALGORITMO Entrada : Salida : Procesos : Datos del problema a resolver. El resultado de la resolucin. Paso a seguir en la resolucin.
CARACTERSTICAS DE UN ALGORITMO PRECISIN REPETITIVIDAD Solucin clara sin ambigedad. Idnticos resultados en las mismas condiciones iniciales. FINITUD EFICIENCIA Solucin en un tiempo finito. Tiempo de ejecucin. Requerimiento de memoria.
ALGORITMO VS LENGUAJE DE PROGRAMACIN Un lenguaje de programacin es tan solo un medio para expresar un algoritmo.
EJEMPLO N 1 Un cliente efecta un pedido a una compaa, La compaa verifica en su banco de datos la ficha del cliente, si el cliente es solvente entonces la compaa acepta el pedido; en caso 11
contrario, rechazar el pedido. Realizar el algoritmo del ejemplo. Los pasos del algoritmo son: 1. Inicio 2. Leer el pedido 3. Verificar la ficha del cliente 4. Si el cliente es solvente, aceptar pedido; en caso contrario, rechazar pedido. 5. Fin CONCEPTO DE PROGRAMA Un programa es una secuencia de instrucciones de la CPU. Cada instruccin es un conjunto de bytes. Conjunto de instrucciones dado al ordenador para realizar un proceso determinado.
EJEMPLO N 2 1. 2. 3. 4. b) Leer un dato del teclado. Guardar un dato en la memoria. Ejecutar una operacin sobre los datos. Mostrar un dato en la pantalla.
CONCEPTO DE SOFTWARE Es la parte lgica de la computacin. Conjunto de programas que sirven para representar un segmento de la realidad y resolver un problema. Como por ejemplo: el Office, un sistema operativo, C++, Pascal, Java, etc. LENGUAJES DE PROGRAMACIN Son aquellos lenguajes que se utilizan para realizar algoritmos interpretables por la computadora. Caractersticas imprescindibles Estructura de Control. Programacin Modular (funciones).
c)
Lenguaje mquina. Lenguaje de bajo nivel (ensamblador). Lenguajes de alto nivel: C, C++, Visual Basic, Java, Pascal, Prolog.
1.2
RESOLUCIN DE PROBLEMAS CON COMPUTADORA FASES Actualmente la resolucin de problemas con computadoras facilita el trabajo del usuario, debido a la gran velocidad de esta herramienta (computadora). El siguiente esquema nos muestra las fases de la resolucin de problemas con computadora.
13
EJEMPLO N 3 Imprimir la hipotenusa, teniendo los lados de un triangulo rectngulo. Variables: LADO1, LADO2 y LADO3 (tipo reales). Entradas: Valores de los lados (variable LADO1 y variable LADO2). Salida: Valor de la hipotenusa (variable LADO3).
14
FASE N 03: SOLUCIN DEL PROBLEMA POR COMPUTADORA Traduccin del algoritmo al lenguaje de programacin. La complejidad depende mucho del lenguaje escogido. Imprescindible: Conocimiento de la sintaxis del lenguaje. Buenos diseos del Algoritmo + Lenguaje estructurado
15
FASE N 05: DOCUMENTACIN Descripcin de qu hace el programa y cmo lo hace. Documentacin interna: Comentarios: lneas informativas incluidas en el cdigo. Tarea que realiza. Datos de entrada y salida. Condiciones de error. Codificacin auto documentada. Nombres de variables y funciones con significado. Estructura fcil de leer.
Documentacin externa: Manuales, estructura y especificaciones del programa, historia de las modificaciones, etc. FASE N 06: MANTENIMIENTO
1.3
HERRAMIENTAS DE PROGRAMACIN Son aquellas que permiten realizar aplicativos, programas, rutinas, utilitarios y sistemas para que la parte fsica del computador u ordenador, funcione y pueda producir resultados.
16
Un ejemplo claro son los Lenguajes de Programacin, las libreras, los utilitarios, los generadores de reportes, pantallas, etc. Las herramientas ms usadas para desarrollar algoritmos son: Lenguaje natural. Organigramas. Diagramas Nassi Shneiderman (N - S). Pseudocdigo. Otros
LENGUAJE NATURAL: Es un lenguaje utilizado para describir los pasos de cmo realizamos algo, de una forma sencilla. Ventajas: Facilidad de comprensin. Inconvenientes: o El lenguaje natural no es universal, un algoritmo de lenguaje natural en ingls, por ejemplo, sera completamente intil para los hispanohablantes. o El lenguaje natural es ambiguo y, por tanto, susceptible de errores. o El lenguaje natural es demasiado amplio, lo que para una persona puede ser una instruccin sencilla puede no serlo para otra y desde luego no lo ser para una computadora.
EJEMPLO N 5 El algoritmo para encontrar las races de una ecuacin de segundo grado podra describirse as: x = (-b + b2 4ac) / (2a) 1. Definir los coeficientes de la ecuacin de segundo grado: a, b y c. 2. Determinar el valor del discriminante: b2 4ac. 3. Si el discriminante es cero slo hay una solucin: -b/ (2a). ORGANIGRAMAS: Los organigramas o diagramas de flujo permiten describir los algoritmos de forma grafica.
17
Utilizan una serie de bloques que indican distintas circunstancias y flechas que muestran bajo qu condiciones se pasa de un bloque a otro.
18
Read
Read x Write x
Sentencia
Calcular x = y+3
Secuencia de sentencias
Seleccin
Repeticin
DO WHILE Accin 1
Fin
End
19
Una vez diseado el algoritmo y representado mediante una herramienta de programacin se debe:
Programa fuente
Programa Objeto
Programa ejecutable
Compilador (Compiler)
Montador (Linker)
1.4
TIPOS DE DATOS Un dato es la expresin general que describe los objetos con los cuales opera la computadora. Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carcter, tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable. DATOS VS INFORMACIN
DATOS VS Medidas objetivas de atributos de entidades. Cifras/hechos crudos (en bruto) sin interpretar o analizar. No son estmulos de accin. INFORMACIN - Resultado de haber organizado o analizado los datos de alguna manera lgica. - Reduce la incertidumbre. - Impulsa a la accin.
20
EJEMPLO N 6
DATOS 35.000 So les 1250 unidades Jos Perez Lim a 83.000 D lares. 3800 unidades ....... P R O C E SA M IE N T O DE DATOS
IN F O R M A C I N C lie nte : Jos Perez Sucursal: Lim a C o m pras de l m es: 1250 unidades=35.000 So les. ......
CLASIFICACIN
REAL NUMERICO ESTANDAR DATOS SIMPLES CHARACTER LOGICO (BOOLEAN) DEFINIDOS X EL PROGRAMADOR ENUMERATIVO SUBRANGO ENTERO
TIPO DE DATO
ESTATICOS
DATOS ESTRUCTURADOS
DINAMICOS
21
DATOS ALFANUMRICOS
Es una secuencia de caracteres alfanumricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar nmeros como alfanumricos, pero estos pierden su propiedad matemtica, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas.
Representacin
Tipo
Carcter
Enteros
Reales
Char Unsigned char Int Short int Unsigned int Long Unsigned long Float Double Long double
2 2 2 4 4 4 8 10
22
-32768 a 32767 -32768 a 32767 0 a 65535 -2147483648 a 2147483647 0 a 4294967295 3.4E38 1.7E308 3.4E-4932 a 1.1E+4932
DATOS DE SALIDA
DATOS DE ENTRADA
ALGORITMO
NIKLAUS WIRTH
1.5
CONSTANTES, VARIABLES, IDENTIFICADORES, EXPRESIONES, FUNCIONES CONSTANTES Constantes: Valores que durante la ejecucin de un programa no cambian su valor. Ejemplo: -
pi = 3.1416
Definicin 2: Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecucin de
23
POR SU USO DE TRABAJO Variables que recibe el resultado de una operacin matemtica completa y que se usan normalmente dentro de un programa. Ejemplo:
Suma
a + b /c
CONTADORES Se utilizan para llevar el control del nmero de ocasiones en que se realiza una operacin o se cumple una condicin. Con los incrementos generalmente de uno en uno. Ejemplo:
Cont Num
Cont + 1 Num + 2
ACUMULADORES Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente. Ejemplo:
Suma
Suma + cant
IDENTIFICADORES Para poder reconocer una variable o una constante en la memoria de la computadora, es necesario darle un nombre con el cual
24
EXPRESIONES Se definen como una combinacin de constantes, variables, smbolos de operacin, parntesis, y nombres de funciones especiales.
x + (y+10)+ z/2
25
Reglas de prioridad
Operadores de relacin
Operador < > = <= >= <>,!= Significado Menor Mayor Igual Menor o igual Mayor o igual Distinto
Operadores lgicos
Operador lgico Not And Or Expresin lgica Not p PyQ PoQ Significado Negacin Conjuncin disyuncin
Ejemplo: Not 4 > 5 produce un error ya que el operador no se aplica a 4 Not (4 > 5) produce un valor verdadero.
Ejemplo: P and Q. P or Q.
26
FUNCIONES Las funciones pueden tener cualquier nmero de variables, incluso cero. Para evaluar una funcin sin variables se debe escribir un par de parntesis despus de su nombre (por ejemplo fun()). Las funciones sin variables pueden servir como algoritmos de clculo que devuelven un valor real.
FUNCIONES MATEMTICAS
Funcin Abs(x) Arctan(x) Cos(x) Exp(x) Ln(x) Log10(x) Round(x) Sin(x) Sqr(x) Sqrt(x) Trunc(x)
Descripcin Absoluto Tangente inversa Coseno Exponencial Log neperiano Log decimal Redondeo Seno Cuadrado Raz cuadrada Truncamiento
1.6
1. 2. 3. 4. 5. 6.
Disear un algoritmo para cambiar la rueda de un auto. Disear un algoritmo para preparar una torta Disear un algoritmo para organizar una fiesta Disear un algoritmo para organizar un paseo Disear un algoritmo para organizar un concierto Realizar el algoritmo para determinar el mayor de tres nmeros enteros
27
7. 8. 9.
Realizar el algoritmo para calcular la superficie de un crculo. Realizar el algoritmo para calcular el permetro y la superficie de un rectngulo dadas las base y la altura del mismo. Escribir un algoritmo que lea un nombre de una marca de automviles seguida del nombre de su modelo e informe del modelo seguido del nombre.
10. Realizar el algoritmo para determinar la hipotenusa de un tringulo rectngulo conocidas las longitudes de los catetos. 11. Se desea un algoritmo para convertir metros a pies y pulgadas. (1 metro = 39.37 Pulgadas, 1 pie = 12 pulgadas). 12. Escribir un algoritmo que permita calcular el rea de un triangulo conocidos sus tres lados. 13. Disear un programa para calcular el rea y el permetro de un triangulo rectngulo conociendo la longitud de sus catetos. Si a, b y c representan los tres lados de un triangulo, entonces la formula que determina su rea ser: A = [p (p-a) (p-b) (p-c)]1/2 Donde p representa el semipermetro del triangulo que se calcula con la formula: p = (a+b+c)/2 14. Una empresa desea transmitir datos mediante el telfono pero en forma cifrada ante la posibilidad de que los telfonos estn intervenidos. La empresa le ha solicitado que escriba un programa que cifre sus datos que consisten en nmeros enteros de cuatro dgitos. El cifrado debe hacerse de la siguiente manera: Intercambiar el primer digito con el tercero, y el segundo con el cuarto. A continuacin imprimir el entero cifrado. 15. Escribir un programa que lea un numero de 4 cifras y o invierta. As, por ejemplo, si el nmero ledo es 2345 se debe convertir en 5432. 16. Disear un programa para convertir una cantidad de nuevos soles a billetes enteros de S/.100, S/. 50, S/.20, S/.10, S/.5 y monedas de S/.1. Suponga que la cantidad es mayor que S/.1000. Por ejemplo: en S/.1289 hay 12 billetes de S/.100, 1 billete de S/.50, 1 billete de S/.20, 1 billete de S/.10, 1 moneda de S/.5 y 4 monedas de S/. 1.
28
17. Disear un programa para convertir una cantidad entera de segundos a horas, minutos y segundos. Suponga que la cantidad de segundos es mayor que 3600 sg. 18. Disear un programa para convertir grados Centgrados (C) a grados Fahrenheit (F). Considere que: F = 9C/5 + 32. 19. Disear un programa para convertir grados sexagesimales (S) a grados centesimales (C) y radianes (R). Considere que: S/180 = C/200 = R/. 20. Escriba un programa que permita calcular el rea de un triangulo conocido sus tres lados. 21. Escriba un programa que permita leer una medida en pies y la convierta en centmetros, metros, pulgadas y yardas. Considere los siguientes factores de conversin. 1 pie 1 yarda 1 metro = = = 12 pulgadas 3 pies 2.54 centmetros 100 centmetros
1 pulgada =
22. Escriba un programa que permita lea una temperatura en grados Centgrados(C) y la convierta en sus equivalentes en grados Fahrenheit (F), grados kelvin (K) y grados Rankine (R). Utilice las siguientes formulas: F = 9/5 C + 32 K = C + 273 R = C + 460 23. Un curso se evala de la siguiente forma: se toman 5 prcticas, un examen parcial y un examen final. El promedio final se calcula con la siguiente formulas: PF = (3PP + 2EP + 3EF)/7 Donde: PF = promedio final PP = promedio de la 5 practicas EP = examen parcial EF = examen final Escriba un programa que calcule el promedio final del curso.
29
24. Escriba un programa para calcular el monto a pagar por un artculo. Los datos de entrada son: el precio de venta y el nmero de unidades adquiridas. Considere un descuento fijo de 20% y 19% de IGV. El programa deber mostrar el monto del descuento y el monto a pagar. 25. Escriba un programa para efectuar repartos proporcionales de una suma de dinero a 5 personas en funciones de sus edades. El programa deber solicitar la suma de dinero y las edades de las 5 personas. El monto que le corresponde a cada persona se calcula con la formula:
MontoP = edadPmontoT edadT
Donde: montoT = monto del dinero a repartir montoP = monto correspondiente a una persona edadP = edad de la persona edadP = suma total de edades Imprimir el monto de dinero correspondiente a cada persona. 26. Escribir un programa para determinar el inters generado por un capital C que representa un prstamo a una taza de inters anual del T% durante N aos. Mostrar el monto total obtenido al cabo de los N aos y el inters generado I. Use las siguientes formulas: M = C (1+ T/100)N I=MC Donde: M = Monto total obtenido al cabo de los N aos C = Capital prestado I = Inters generado al cabo de los N aos N = Numero de aos 27. Escriba un programa que ingrese un valor de a y b y calcule los valores de c y d de acuerdo con las siguientes formulas: c = (4a4 + 3ab +b2) / (a2 + b2) ; d= (3c2 + a +b) / 4
30
LABORATORIO N 1
Este laboratorio tiene como objetivo que el alumno aprenda a convertir el pseudo cdigo a cdigo TURBO C++ para su ejecucin.
PASOS A SEGUIR: Paso 1: Ingresar a inicio programas Turbo C++ 4.5. o en otro compilador de C que le indique el docente Paso 2: Hacer click en programa Turbo C++
Paso 3: Una vez abierto el programa haga click en File y en New, generando una nueva hoja de trabajo.
31
Paso 5: Al hacer click en Save As saldr una pantalla en donde se colocara el nombre del archivo y nos indica la ruta en donde va a ser guardada el archivo.
32
Paso 6: Una vez colocada el nombre y la ruta presionar OK. Paso 7: Una vez guardada la hoja proceder a transcribir el siguiente cdigo de programa.
#include <iostream.h> #include <conio.h> Int main( ) { float base, altura, area, permetro; cout<<"Base: "; cin>>base; cout<<"Altura: "; cin>>altura; rea = base * altura ; permetro = 2 * (base + altura) ; cout<<"El Area es :" << area << endl ; cout<<"El permetro es : " << permetro << endl; getch(); return 0; }
33
Paso 8: Para compilar el programa hacer click en Project - Compile Otra manera de compilar es presionar en el teclado Alt + F9.
34
Paso 9: Si no hubiera error aparecer un cuadro con un visto indicando OK, que indica Status: Success, quiere decir que no hay error de caso contrario aparecer Status: There are errors, indicando la posicin en donde esta el error.
Paso 10: Ejecutar el programa se realiza haciendo click en Debug Run. Otra manera de ejecutar o correr el programa es presionando las teclas Control + F9.
35
36
CONCEPTO DE PROGRAMA
Es un conjunto de instrucciones, ordenes dadas a la mquina que producirn la ejecucin de una determinada tarea, en esencia es un medio para seguir un fin.
DESARROLLO DE UN PROGRAMA
1. Definicin y Anlisis del problema 2. Diseo de algoritmos: Diagrama de flujo. Diagrama de N-S. Pseudocdigo. Otros 3. 4. 5. 6. Codificacin del Programa. Depuracin y verificacin del Programa. Documentacin. Mantenimiento.
PARTES CONSTITUTIVAS DE UN PROGRAMA El programador debe establecer el conjunto de especificaciones que debe contener el programa: entrada, salida y algoritmos de resolucin.
ENTRADA
PROGRAMA
Algoritmo de resolucin
SALIDA
LAS ACCIONES O INSTRUCCIONES, se deben escribir y posteriormente almacenar en memoria en el mismo orden en que han de ejecutarse; es decir en secuencia.
37
TIPOS DE INSTRUCCIN 1. 2. 3. 4. 5. 6. -
Instrucciones de inicio / fin Instrucciones de asignacin Instrucciones de lectura Instrucciones de escritura Instrucciones de bifurcacin Fin
Instrucciones de asignacin
80 la variable A toma el valor de 80 A Cul ser el valor que tomara la variable C tras la ejecucin de las siguientes instrucciones?
38
A B C
12 A B
Antes de la ejecucin de las tres instrucciones A, B, C son indeterminados. Cul es el valor de la variable AUX al ejecutarse la instruccin 5? 1. 2. 3. 4. 5. A B AUX A B B AUX; 10 20 10
a)
b)
39
2.1
ESTRUCTURA DE UN PROGRAMA EN C.
Los programas en C pueden constar de uno o varios archivos. Cada archivo puede contener uno o varios espacios de nombres.
Un espacio de nombres puede contener tipos como clases, estructuras, interfaces, enumeraciones y delegados, adems de otros espacios de nombres. A continuacin, se muestra el esqueleto de un programa en C que contiene todos estos elementos.
40
EJEMPLO N 7
/* Comentarios de un prrafo completo comprendidos entre /*.....*/, Sirven para aclarar el programa o una parte del programa */ // Comentarios de 1 sola lnea. // Zona de ficheros de cabecera de las libreras.
Ejemplo:
/* El primer programa en C */ #include <stdio.h> int main( void ) { printf(Bienvenido a C!" ); return 0; } /* indica que el programa termin con xito */
EJEMPLO N 8
/* Programa de suma */ #include <stdio.h> int main() { int entero1; int entero2; /* primer nmero introducido por el usuario */ /* segundo nmero introducido por el usuario */ /* la funcin main inicia la ejecucin del programa */
int suma;
/* variable en la cual se almacena la suma */ /* indicador */ /* lee un entero */ /* indicador */ /* lee un entero */ /* asigna el total a suma */ /* imprime la suma */
printf( "Introduzca el primer entero\n" ); scanf( "%d", &entero1 ); printf( "Introduzca el segundo entero\n" ); scanf( "%d", &entero2 ); suma = entero1 + entero2; printf( "La suma es %d\n", suma ); return 0; }
41
Un comentario dentro del programa se utilizan para explicar brevemente lo que hace el programa y facilitar as el recordar que es lo que se estn tratando de programar. Los comentarios deben ser escrito en cualquier lugar donde pueda haber confusin. En C debe ser escrito entre /* y */. Un comentario tambin se muestra en una sola lnea de cdigo; pero se representa as: //
VARIABLE GLOBAL
BUCLE INFINITO
INICIO Suma = 0 Leer N
Una declaracin global de una variable, hace que la variable sea disponible para el uso en todas las funciones del archivo fuente.
BUCLES
Es un segmento de un algoritmo o programa, cuyas instrucciones se repiten un Escribir suma nmero determinado de veces mientras se cumple una determinada condicin (existe o es verdadera la condicin)
Suma Suma + N
42
TIPOS BUCLES
Bucles Independientes
IN IC IO
B u c le A B u c le B B u c le C
fin
Bucles Cruzados
inicio
F IN
fin
43
2.2
ESTRUCTURA DE ALGORITMO
Los algoritmos deben ser escritos en lenguajes similares a los programas. Un algoritmo constar de dos componentes: Una cabecera de programas y un bloque algoritmo. La cabecera de programa es una accin simple que comienza con la palabra algoritmo. Esta palabra estar seguida por el nombre asignado al programa completo. El bloque algoritmo es el resto del programa y consta de dos componentes o secciones: las acciones de declaracin y las acciones ejecutables. Las declaraciones definen o declaran las variables y constantes que tengan nombres. Las acciones ejecutables son aquellas que posteriormente deber realizar la computadora cuando el algoritmo convertido en programa se ejecute.
Algoritmo Cabecera del programa Seccin de declaracin Seccin de acciones
2.3
CONTADORES, ACUMULADORES. CONTADORES DEFINICIN 1: Se utilizan para llevar el control del nmero de ocasiones en que se realiza una operacin o se cumple una condicin. Con los incrementos generalmente de uno en uno. DEFINICIN 2: Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o accin. Los contadores se utilizan con la finalidad de contar sucesos o acciones internas de un bucle; deben realizar una operacin de inicializacin y posteriormente las sucesivas de incremento o decremento del mismo.
44
La inicializacin consiste en asignarle al contador un valor. Se situar antes y fuera del bucle. Representacin de contadores: Son variables que se utilizan para contar. Normalmente su valor se incrementa o decrementa en 1.
Ejemplos: contador contador + 1 ndice ndice 1
EJEMPLO N 9
BEGIN eCon 0 DO WHILE eCon <10 READ eR, eT eSun eR+eT eCon eCon+1 END DO END
ACUMULADORES DEFINICIN 1: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente o o
Se utilizan para almacenar el resultado de sumas sucesivas. Su valor se incrementa en cantidades variables.
Ejemplos:
total
total + valor
DEFINICIN 2: Es una variable que suma sobre s misma un conjunto de valores, de esta manera obtiene la suma de todos ellos en una sola variable.
La diferencia entre un contador y un acumulador es que mientras el primero va aumentando en una cantidad fija
45
EJEMPLO N10:
BEGIN eCon 0,eAcu 0 DO WHILE eCon<=10 READ eNume eAcu eAcu+eNume eCon eCon+1 ENDDO WRITE eAcum END
46
2.4
1.-
Encontrar el valor de la variable VALOR despus de la ejecucin de las siguientes operaciones: a.- VALOR b.- x 3.0 y 2.0 c.- VALOR X 3 VALOR 4.0 * 5
5 VALOR * X
2.-
Deducir el resultado que se produce con las siguientes instrucciones: var. entero: X,Y X 1 Y 5 Write X,Y
3.-
Deducir el valor de las expresiones siguientes: X X X X X X X A +B+C A +B*C A +B/C A B/C A +B mod C (A +B)/C A +(B/C)
Siendo A=5, B=25, C=20 4.5.Cmo se intercambian los valores de dos variables, A y B? Calcular el valor de las siguientes expresiones: a. b. c. d. e. f. 8+7*3+4*6 -2^3 (33 + 3 * 4) / 5 2^2 *3 3+2 * (18-4^2) 16*6-3*2
47
6.-
Se tienen tres variables A, B y C; escribir las instrucciones necesarias para intercambiar entre s sus valores del modo siguiente:
Nota: Solo se debe utilizar una variable auxiliar. 7Deducir el valor que toma la variable tras la ejecucin de las instrucciones: A 4 B A B A+3 8.Qu se obtiene en las variables A y B despus de la ejecucin de las siguientes instrucciones? A B A B 9.5 A+6 A+1 A-5
Qu se obtiene en las variables A, B y C despus de ejecutar las instrucciones siguientes? A 3 B 20 C A+B B A+B A B-C
10.-
11.
Se desea calcular independiente la suma de los nmeros pares e impares comprendidos entre 1 y 200. Leer una serie de nmeros distintos de cero (el ltimo nmero de la serie es -99) y obtener el nmero mayor. Como resultado se debe
48
12.
visualizar el nmero mayor y un mensaje de indicacin de nmero negativo, caso de que se haya ledo un nmero negativo. 13. Calcular y visualizar la suma y el producto de los nmeros pares comprendidos entre 20 y 400, ambos inclusive. Leer 500 nmeros enteros y obtener cuntos son positivos. Se trata de escribir el algoritmo que permita emitir la factura correspondiente a una compra de un artculo determinado, del que se adquieren una o varias unidades. El IGV a aplicar es del 19% y si el precio bruto es mayor a s/.50000, se debe realizar un descuento del 5 por 100. Sumar los nmeros pares del 2 al 100 e imprimir su valor. Sumar cinco nmeros introducidos por teclado. Calcular la media de tres nmeros e imprimir su resultado.
14. 15.
19. Dados diez nmeros enteros, visualizar la suma de los nmeros pares de una lista, cuntos nmeros pares existen y cul es la media aritmtica de los nmeros impares
LABORATORIO N 2
Este laboratorio tiene como objetivo que el alumno aprenda la Estructura de Los Programas Del Turbo C++.
ESTRUCTURA DE UN PROGRAMA: INCLUSIN DE ARCHIVOS DE CABECERA Para muchas tareas especificas el lenguaje C dispone de libreras de funciones preempacadas listas para ser usadas. Pero antes de utilizar cualquier de estas funciones debemos informar al compilador sobre las caractersticas de la funcin.
Todo lo que tenemos que hacer es averiguar en que archivo de cabecera se encuentra el prototipo de la funcin a utilizar e incluir el archivo en nuestro programa mediante la directiva.
49
#include <nombre_archivo_cabecera>
Un archivo de cabecera se reconoce porque tiene extensin .h (como iostream.h, conio.h, string.h, etc.). Si las funciones a utilizar estn en distintos archivos de cabeceras debe incluir todos ellos mediante una directiva #include para cada uno.
Ejemplo: // Importamos la cabeceras de los mdulos que necesitamos #include <iostream.h> // entrada / salida define las variables cin y cout (consola) #include <string> // de la biblioteca estndar (STL)
CUERPO DEL PROGRAMA Es la parte donde se desarrollan las instrucciones que conforman el programa. Aqu esta la parte medular del programa. Aqu es donde su algoritmo se convierte en programa.
La estructura general de un programa simple en C++: Inclusin de archivos de cabecera int main () { declaracin de variables y constantes cuerpo del programa }
50
EXPLICACIN DE NUESTRO PROGRAMA Para lograr explicar con mayor claridad se repite el cdigo anterior incluyendo un nmero de lnea.
//Programa 01 //propsito: Estructura Secuencial #include <iostream.h> #include <conio.h> int main() { // muestra mensaje endl permite un salto de lnea cout <<"Bienvenidos al primer programa " <<endl; cout <<"utilizando C++"; getch(); return 0; } Las lneas 1, 2,7 son comentarios que en tiempo de ejecucin son ignoradas por el compilador. Las lneas 3 y 4 se conocen como directivas de procesador del compilador #include La lnea 5 indica el inicio de la funcin principal main (). Las lneas 6 y 12 indican el inicio y el fin de bloque de la funcin principal. La lnea 8 muestra en pantalla el mensaje Bienvenidos al Primer programa y un salto de lnea. La lnea 9 muestra en pantalla el mensaje utilizando C++, La lnea 10 invoca a la funcin getch ( ) que espera a que el usuario pulse una tecla. La lnea 11 pasa el valor 0 de regreso al sistema operativo. Esto le indica al sistema operativo que el programa fue efectuado con xito.
DECLARACIN DE VARIABLES Y CONSTANTES Todos los programas manejan datos. Estos datos se almacenan en localizaciones de memorias llamadas variables. En esta seccin se informa al compilador sobre las variables que sern utilizadas en el programa (a esto se llama declarar variables).
En C ++ permite declarar variables en cualquier parte del programa con tal que la variable se declare antes de ser utilizada.
51
VARIABLES Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecucin de un proceso, su contenido puede cambiar durante la ejecucin del programa.
Una variable tiene las siguientes caractersticas: 1. 2. 3. 4. Un nombre. Un tipo de dato asociado. Un valor inicial. Una direccin de memoria.
CONSTANTES Una constante es un dato numrico o alfanumrico que no cambia durante la ejecucin del programa.
52
LOS COMENTARIOS Con fines de documentacin se pueden aadir comentarios a un programa. Los comentarios no generan cdigo mquina sino que son ignorados por el compilador.
Se considera como comentario: Al texto que sigue a los dos slash // hasta el final de las lnea. Al texto ( una o mas lneas ) encerrado entre /* y */ Ejemplo: // Este es un comentario de una sola lnea. /* Este es el otro comentario de una sola lnea * / /* Este es el ejemplo de un comentario de dos lneas */
53
ENTRADA Y SALIDA BSICA EN C++ La entrada/salida (input/output) en C++ se hace mediante los objetos cin y cout. La forma ms simple de entrada/salida se efecta mediante las operaciones << (operador de insercin) y >> (operador de extraccin). Toda la informacin que necesita el compilador sobre cin y cout se encuentra en el archivo de cabecera iostream.h, el que debe ser incluido en todo programa que use cin y cout escribiendo al principio del programa la lnea: #include <iostream.h>
Donde:
Cout es un flujo de datos que conecta el programa con la pantalla. Cuando un programa desea enviar algo a la pantalla lo hace insertando los datos en el flujo cout y este a su vez se encarga de enviar los datos a la pantalla. Cin es un flujo de datos que conecta el teclado con el programa. Cualquier entrada desde el teclado es enviada primero al flujo cin. Luego el programa puede extraer (leer) datos desde este flujo. 54
Pantall Teclad
Cout Cin
<< >>
Variable Variable
Salida de constantes:
Cout << constantes;
Donde la constante puede ser cualquier tipo de constante incluyendo las constantes de cadena. Recuerde que las constantes de cadena van encerradas entre comillas dobles, as para imprimir en la pantalla una constante de cadena escribiramos:
Cout <<aqu va la cadena a imprimir;
Salida de variables:
Cout << variable; Notas: La salida de cout se puede concatenar para hacer la salida de distintas variables o cadenas en una sola sentencia. En una sentencia se puede enviar secuencias de escape con la finalidad de mover el cursor al principio de la siguiente lnea, hacer sonar a alarma del sistema, etc.
55
SECUENCIA DE ESCAPE Las secuencias de escape proporcionan un determinado significado al enviar ciertos caracteres especiales a la pantalla, a un archivo de disco o a la impresora. Todas las secuencias de escape comienzan con la barra invertida \. Secuencia de escape \n Descripcin
\r \t \a \` \ \\
Nueva lnea. Coloca el cursor al principio de la segunda lnea. Retorno de carro. Coloca el cursor al principio de la lnea actual. Tabulador horizontal. Mueve el cursor al siguiente tabulador. Alerta. Hace sonar la campana del sistema. Imprime una comilla simple (`). Imprime una comilla doble (). Imprime una barra invertida (\)
ENTRADA DESDE EL TECLADO DE CIN La entrada o lectura desde el teclado para cualquier variable se hace mediante la sentencia: Cin >> variable;
56
Notas: La entrada con cin se puede concatenar para poder hacer la entrada de distintas variables o cadenas en una sola sentencia. Cin desprecia los caracteres blancos (espacios, tabuladores y saltos de lnea) al realizar la entrada desde el teclado. Esto significa que no se puede leer con cin cadenas que contengan espacios en blanco pues cin nicamente leer la parte de la cadena hasta el primer blanco. Si se desea leer cadenas que contengan espacios en blanco use la funcin gets.
LA FUNCIN GETS PARA LA ENTRADA DE CADENAS Gets (cad); La funcin gets lee una cadena de caracteres ingresada desde el teclado, incluyendo espacios en blanco, y lo almacena en la variable de cadena cad. Para usar la funcin gets debe incluirse el archivo de cabecera stdio.h.
57
++ --
Uso de ++ y en expresiones simples Sea n una variable cualquiera. Expresin Forma equivalente 1 Forma equivalente 2
n = n + 1; n = n 1;
n ++; n --;
++ n; -- n;
Uso de ++ y en otras expresiones En expresiones de asignacin u otras que no sean del tipo simple se cumple que:
Si ++ estn antes del operando, primero se suma o resta 1 al operando antes de continuar con lo que sigue. Si ++ estn despus del operando, primero se usa el valor del operando y luego se le suma o resta 1.
58
3.1
PROGRAMACIN ESTRUCTURADA DEFINICIN La programacin estructurada es una forma de programar de forma clara, para ello utiliza nicamente tres estructuras: secuencial, selectiva simple e iterativa; siendo innecesario y no permitindose el uso de la instruccin o instrucciones de transferencia incondicional (GOTO). VENTAJAS DE LA PROGRAMACIN ESTRUCTURADA -
Los programas son ms fciles de entender. Un programa estructurado puede ser ledo en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lgica, lo cual es tpico de otros estilos de programacin. Los programas quedan mejor documentados internamente. Reduccin de los costos de mantenimiento. Aumento de la productividad del programador.
3.2
ESTRUCTURA DE CONTROL TIPOS En lenguajes de programacin, las estructuras de control permiten modificar el flujo de ejecucin de las instrucciones de un programa.
Con las estructuras de control se puede: De acuerdo a una condicin, ejecutar un grupo u otro de sentencias (IF-ELSE y CASE OF) Ejecutar un grupo de sentencias HACER MIENTRAS exista una condicin (DO-WHILE)
59
Ejecutar un grupo de sentencias REPETIR -HASTA que exista una condicin (REPEAT-UNTIL)
TIPOS SECUENCIAL SELECTIVA SIMPLE ITERACIN 3.2.1 SECUENCIAL La estructura secuencial se refiere a la ejecucin de una secuencia de instrucciones en el orden en que aparecen, de forma que cada instruccin se ejecuta exactamente una vez. EJEMPLO N 11
BEGIN REAL base, altura, rea, permetro READ base, altura rea base*altura permetro 2*(base+altura) WRITE rea, permetro END Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una variable auxiliar, intermedia. 1 2 3 Guardamos una copia del valor de x en auxiliar. Guardamos el valor de y en x, se pierde el valor anterior de x pero no importa porque tenemos una copia en auxiliar. Guardamos en y el valor de auxiliar, que es el valor inicial de x.
Las estructuras de seleccin son estructuras de control utilizadas para la toma de decisiones dentro de un programa. A estas estructuras se les conoce tambin como estructuras selectivas o estructuras de decisin.
60
ESTRUCTURA DE SELECCION
3.2.2 SELECTIVA SIMPLE IF (SI) La estructura selectiva simple SI (en ingles IF) ejecuta una determinada accin cuando se cumple una determinada condicin.
Si la condicin es verdadera, entonces ejecuta la accin S1 (o acciones caso de ser S1 una accin compuesta y constar de varias acciones) Si la condicin es falsa, entonces no hace nada.
DIAGRAMA DE FLUJO:
condicin
falsa verdadera
accion S1
61
SINTAXIS:
SINTAXIS EN ESPAOL SI <condicin> <accin S1> FIN _ SI SINTAXIS EN INGLES IF <condicin> <accin S1> ENDIF
EJEMPLO N 12: PSEUDOCDIGO: Construya un algoritmo en pseudocdigo tal que, dado los valores enteros P y Q, que deben leerse del teclado, determine si los mismos satisfacen la siguiente expresin:
En este caso debe escribir por pantalla los valores P y Q. ALGORITMO Problema VARIABLES p, q SON ENTEROS BEGIN WRITE p WRITE q IF p^3 + q^4 -2*p^2<680 WRITE Los Valores de p y q son: WRITE p=, p, q=, q END_SI END
62
#include <stdio.h> #include <conio.h> int main () { float Cal; clrscr(); printf ("Introduzca la calificacin: "); scanf ("%f", &Cal); if ( Cal >= 11 ) printf("Aprob."); return 0; }
3.2.3 SELECTIVA DOBLE ( SI - SINO) La estructura de seleccin doble permite seleccionar una ruta de dos rutas posibles en base a la verdad o falsedad de una condicin.
Si la condicin es verdadera, entonces ejecuta la accin S11 (o acciones caso de ser S11 una accin compuesta y constar de varias acciones) Si la condicin es falsa, entonces ejecuta la accin S21 (o acciones caso de ser S21 una accin compuesta y constar de varias acciones)
DIAGRAMA DE FLUJO
si
Condicin?
no
accin S11
accin S21
63
<condicion> <accion S11> <accion S12> <accion S2n> SI_NO <accin 21> <accin 22> <accin S1n> FIN_SI
EJEMPLO N 13
SI
IF <condicin> <accin S11> <accin S12> <accin S2n> ELSE <accin 21> <accin 22> <accin S1n> ENDIF
La siguiente estructura de seleccin doble determina si una persona es mayor o menor de edad: IF edad >= 18 estado "Mayor de edad
ELSE estado "Menor de edad ENDIF WRITE estado Esto imprime "Mayor de edad", si la persona tiene 18 aos a ms e imprime "Menor de edad" si la persona tiene menos de 18 aos. En cualquiera de los casos, despus se efectuar la impresin
EN C++: Imprimir si un nmero es par o impar
64
{ int num; clrscr(); printf("Introducir un nmero:\n"); scanf("%d",&num); if ( num % 2 == 0 ) printf("%d es par.",num); else printf("%d es impar.",num); return 0; }
3.2.4 SELECTIVA MULTIPLE IF ELSE- IF ( SI SINO - SI) Puede contener instrucciones sencillas o compuestas. Pueden estar incluidas una o ms instrucciones If - else. Al incluir una o ms instrucciones de if en una instruccin de if existente se crean las instrucciones anidadas If. EJEMPLO N 14
Este algoritmo lee tres nmeros A, B, C, imprimiendo el valor del ms grande. Se supone que los tres valores son diferentes.
Read (A, B, C) // Entrada de valores if A > B // Se determina el valor ms grande mediante comprobacin // por pares then if A > C then MAX else MAX else if B > C then MAX else MAX B (B > A, b > C) C (C > B > A) A (A > B, A > C) C (C > A > B)
Write `El valor ms grande es`, MAX // Se imprime el valor ms grande Exit // Termino
65
EJEMPLO N 15 #include<iostream.h> int main ( ) { char codigo; cout << "Introduzca un cdigo especificado: "; cin >> codigo; if (codigo == 'S' ) cout << "El componente tiene calificacin de exploracin espacial . "; else if (codigo == M) cout << "El componente tiene calificacin de militar. "; else if (codigo == C) cout << "El componente tiene calificacin de comercial. "; else if (codigo == 'J' ) cout << "El componente tiene calificacin de juguete. ";
else cout << "Se insert un cdigo invalido. "; cout << endl; getch(); return 0; }
Esta sentencia se utiliza para elegir entre diferentes alternativas. Esta se compone de varias sentencias simples, cuando se ejecuta, una y solo una de las sentencias simples se selecciona y ejecuta.
66
Condicin
3 4
Accin S1
Accin S2
Accin S3
Accin S4
Accin Sn
La sintaxis es la siguiente:
Segn sea (selector) hacer caso1, caso2, ..: sentencia 1 .... : ..... caso1n, caso2n, ..: sentencia n sino sentencia opcional fin_segn
El valor de selector debe ser un tipo ordinal, y los valores constantes deben tener el mismo tipo que el selector. Se pueden utilizar sentencias if anidados, pero la sentencia segn sea es ms legible.
SINTAXIS: PSEUDOCDIGO EN ESPAOL PSEUDOCDIGO EN INGLES
En caso que E sea c1: accin S1 c2: accin S2 cn: accin Sn> de otra forma: accin Sx fin_caso
67
CASE EXPRESION OF [c1]: accin S1 [c2]: accin S2 [cn]: accin Sn> otherwise accin Sx ENDCASE
#include <stdio.h> #include <conio.h> int main() { int Dia; clrscr(); printf("Escriba el nmero de da: \n"); scanf("%d",&Dia); switch(Dia) { case 1: printf("El %d corresponde a Lunes.",Dia); break; case 2: printf("El %d corresponde a Martes.",Dia); break; case 3: printf("El %d corresponde a Mircoles.",Dia);break; case 4: printf("El %d corresponde a Jueves.",Dia); break; case 5: printf("El %d corresponde a Viernes.",Dia); break; case 6: printf("El %d corresponde a Sbado.",Dia); break; case 7: printf("El %d corresponde a Domingo",Dia);break; default: printf ("El %d da no existe en la semana.",Dia); getch(); } return 0; }
68
ESTRUCTURAS ITERATIVAS CCLICAS INTRODUCCIN Son aquellas que permiten ejecutar una accin un nmero determinado de veces, es decir, repetir esa accin una o ms veces consecutivamente.
Las Estructuras Iterativas se suelen llamar LAZOS o BUCLES; todas las instrucciones incluidas en los bucles se repiten un nmero determinado de veces, el cual puede ser fijo (previamente determinado por el programador) o puede ser variable. Se denomina iteracin a cada una de las diferentes pasadas o ejecuciones de todas las instrucciones contenidas en el bucle.
TIPOS DE ESTRUCTURA ITERATIVAS: Las Estructuras Repetitivas o Iterativas ms importantes son:
3.2.6 ITERATIVA (REPETIR HASTA) La sentencia REPEAT UNTIL especifica un ciclo condicional que se repite hasta que la condicin se hace verdadera.
Permiten programar la repeticin de un grupo de sentencias mediante la construccin denominada ciclo o bucle. El grupo de sentencias que tiene que repetirse se llama rango del ciclo. El numero de veces que ha de repetirse el rango esta determinado por la sentencia de control de ciclo. Generalmente se quiere que un bucle se ejecute, mnimo una vez, antes de que la condicin de repeticin sea cumplida o se compruebe. En la estructura mientras, si la condicin es falsa, no se dar ninguna ejecucin.
69
Esta estructura se ejecutar mientras se cumpla una condicin determinada, la cual es comprobada al final del bucle Debe contener al menos una variable que cambie o se modifique cada vez que se ejecuta la repeticin, de lo contrario se repite infinitamente.
SINTAXIS:
PSEUDOCDIGO EN ESPAOL Repetir <acciones> <acciones n> Hasta <condicion> PSEUDOCDIGO EN INGLES Repeat <acciones> ... <acciones n> Until <condicion>
DIAGRAMA DE FLUJO
CARACTERSTICAS o o o
ciclos
La estructura REPEAT UNTIL realiza un nmero variable de iteraciones. Cualquier ciclo REPEAT UNTIL puede traducirse en un ciclo DO WHILE.
70
ERRORES COMUNES
Realizar ciclos infinitos. Como se evitan? Modificando dentro del cuerpo la variables que lo controlan. Pensar que puede no ejecutarse ninguna vez. Todas las operaciones durante la primera ejecucin del cuerpo son vlidas. La primera ejecucin del cuerpo modifica las variables de la condicin.
EJEMPLO N 17
Desarrollar el algoritmo necesario para calcular el factorial de un numero N que responda a la formula N! = N (N1) * (N2), 3*2*1 ALGORITMO FACTORIAL VAR entero i, n real factorial BEGIN WRITE N factorial i 1 factorial i i+1 UNTIL i n 1 WRITE factorial END factorial * i REPEAT 1
71
La estructura repetitiva DO WHILE es aquella en la que el nmero de iteraciones no se conoce por anticipado y el cuerpo del bucle se ejecuta repetidamente mientras que una condicin sea verdadera. El bucle DO WHILE resulta especialmente indicado para validar datos de entrada (comprobar que los valores de entrada obtenidos esta dentro del rango de valores que el programa espera). En todos los programas se deben asegurar de obtener entradas validas antes de realizar cualquier tipo de operacin con ellos.
SINTAXIS
SINTAXIS EN INGLS DO WHILE Condicin <Accin> ENDDO SINTAXIS EN ESPAOL HACER MIENTRAS Condicin <Accin> FIN HACER
DIAGRAMA DE FLUJO
72
EJEMPLO N 18 Desarrollar el algoritmo necesario para calcular el factorial de un numero N que responda a la formula
N! = N (N1) * (N2), 3*2*1 ALGORITMO FACTORIAL VAR Entero I, N real factorial BEGIN READ factorial factorial 1 I 1 DO WHILE I< = N factorial factorial * 1 I I+1 ENDDO WRITE factorial END
#include "conio.h" #include <stdio.h> #include <dos.h> int main() { int i, total,contador; contador=1; total = 1; clrscr(); printf ("Factorial numero\n\n Dame el numero para el factorial: "); scanf ("%d",&i);
73
while (contador<=i) { total = total * contador; contador++; } printf("El factorial de %d es: %d",i,total); getch(); return 0; }
3.3
1.
Realizar el pseudocdigo que lea 5 nmeros enteros y que los imprima Disear el pseudocdigo para imprimir los 50 primeros nmeros pares. Construir un programa que sume todos los nmeros que introduce el usuario hasta que introduzca el nmero cero. Disear el pseudocdigo para imprimir los 50 primeros nmeros impares. Disear el algoritmo que permita el ingreso de n nmeros, y que muestre si son pares o impares. Calcular la suma y la media aritmtica de N nmeros reales. Disear un algoritmo que permita calcular la edad promedio de n personas. Dados N nmeros, escribir el producto desde 1 hasta N. Disear el algoritmo que permita imprimir los 30 primeros mltiplos de un nmero dado N.
2.
3.
4.
5.
6. 7.
8. 9.
74
10.
Realizar un algoritmo que realice la divisin entera de dos nmeros enteros positivos. Realizar el algoritmo que calcule la suma de los cuadrados de los N nmeros naturales. Desarrollar un algoritmo para calcular e imprimir el factorial de N nmeros. Disear un algoritmo en pseudocdigo para que dado N nmeros permita calcular el promedio de los mltiplos de M. Disear un programa que permita ingresar 2 notas para 5 alumnos, luego nos muestre el promedio general de notas de los alumnos ingresados. Dado N datos, calcular el promedio de las notas aprobadas y el promedio de las notas desaprobadas.
11.
12.
13.
14.
15.
16.
Realizar el algoritmo que identifique si un nmero es primo o no. (Primo es cuando slo se puede dividir por si mismo o por uno). Disear el pseudocdigo que permita imprimir los 50 nmeros primos. Realizar un algoritmo que permita pedir 50 nmeros naturales y determine e imprima cuantos son pares, impares, positivos y negativos. Los pacientes con sntomas de una cierta enfermedad son ingresados en el hospital si tienen un valor superior a 0.6 en la medicin de un determinado ndice, y son operados si el valor es superior a 0.9. Escribe un programa en C que lea desde teclado el nmero de pacientes seguido de la edad y el ndice de cada paciente, y calcule la edad media de los pacientes analizados as como la edad media de los ingresados y la edad media de los operados. Se conocen los gastos en vivienda, alimentacin, energa, vestuario y transportes de una familia durante cada uno de los 12 meses del ao. Escribe un programa en C que lea dichos datos y muestre por pantalla el gasto total en cada trimestre, el gasto total
75
17.
18.
19.
20.
anual y el porcentaje de gasto de cada concepto sobre el total anual. 21. Se dispone de los datos sobre las edades y coeficientes de inteligencia (CI) de los hijos de varias familias. El siguiente programa en C lee el nmero de familias y para cada familia lea el nmero de hijos as como la edad y el CI de cada hijo, y calcula:
El nmero mximo, mnimo y promedio de hijos por familia. El CI mximo, mnimo y promedio de todos los hijos. El CI promedio de los hijos menores de 6 aos. El CI promedio de los hijos mayores de 6 aos. 22. Una persona dispone de una cantidad de X pesetas que quiere repartir a un conjunto de personas. A cada persona le da una cantidad de dinero proporcional a la edad de la misma. Por ejemplo, si una persona tiene 17 aos recibir 17000 pesetas y si tiene 32 aos recibir 32000. El problema consiste en disear un algoritmo que devuelva el nmero de personas que podrn recibir una cantidad de dinero. Cuando la cantidad de dinero ya no es suficiente para drsela a una persona, suponemos que no existen ms personas y que por tanto el programa finaliza. El nmero de individuos de una poblacin animal afectada por una epidemia se reduce a la quinta parte cada ao. Escribe un programa en C que lea el nmero de individuos inicial y un nmero de aos N y escriba el nmero de individuos que quedarn en cada uno de los siguientes N aos (al cabo de 1 ao, a cabo de 2 aos,..., al cabo de N aos). 24. Escribir un programa que lea 5 nmeros y encuentre el promedio, el mximo y el mnimo de esos valores. Escribir un programa que lea nmeros hasta que se encuentre el cero. El segundo nmero se sumar al primero, luego el tercero se restar, el cuarto se sumar, y as se deber seguir alternado hasta que se llegue al cero. Cuando se llegue a esta condicin deber imprimir el resultado, el total de operando de la operacin (sin incluir el cero), y la suma de los operando que se restaron.
23.
25.
76
26.
Escribir un programa que lea un valor entero que ser la base para un sistema numrico (binario, octal o decimal), despus que lea un entero positivo en esa base y que imprima su valor en base 10. Se debe validar que el nmero pertenezca a esa base. La base ser menor que o igual a 10. El programa podra tener la siguiente salida: Entrada Base Nmero ============== 10 1234 8 77 2 1111 Salida ========= 1234 63 15
27.
Escribir un programa que lea un nmero en base 10 y lo convierta a base 2, base 8 y base hexadecimal. Leer tres valores representando lo siguiente: El capital (nmero entero de pesos) Una tasa de inters en por ciento (flotante) Un nmero de aos (entero). Calcular los valores de la suma del capital y el inters compuesto para un perodo dado de aos. Para cada ao el inters es calculado como: Inters = capital * tasa _ inters / 100; el cual se suma al capital Capital += inters; Imprimir los valores de moneda con una precisin de dos decimales. Imprimir los valores del inters compuesto para cada ao al final del perodo. La salida puede ser como la siguiente: Capital inicial 35000.00 con tasa del 12.50 en 10 aos Ao inters Suma -----+-----------+--------1 4375.00 39375.00 2 4921.88 44296.88 3 5537.11 49833.98 4 6229.25 56063.23 5 7007.90 63071.14
77
28.
6 7 8 9 10
LABORATORIO N 3
1.
BEGIN DO Ingresar el dato nmero WHILE numero <= 0 WRITE el nmero validado END
Cdigo:
#include<iostream.h> #include<conio.h> int main () { float numero; clrscr (); cout << "VALIDACIN DE LA ENTRADA DE UN NUMERO POSITIVO" << endl; do { cout<< "Ingrese el numero positivo:"; cin>>numero; }while(numero <= 0 ); cout<< "\n El numero es " ; cin>>numero; getch (); }
78
2.
# include<iostream.h> # include<conio.h> int main () { int N, numero, cont = 0, suma = 0; clrscr (); cout << SUMA DE NMEROS ENTEROS << endl; cout << Cuntos nmeros desea sumar? ; cin >> N; do { cout << Ingrese nmero << cont << : ; cin >> numero; suma += numero; cont++; } while ( cont < N ) ; cout << \ nLa suma es << suma; getch (); }
3.
Disear el programa que halle el rea y el permetro de un rectngulo. #include "iostream.h" #include "conio.h" int main() { //Declaramos dos variables tipo enteras y una de tipo float float base, altura, area, perimetro;
79
// Ingreso de datos cout<<"Base: "; cin>>base; cout<<"Altura: "; cin>>altura; area = base * altura; perimetro = 2 * (base * altura); //Salida de datos cout << "El area es :" <<area<<endl; cout << "El perimetro es :" << perimetro<<endl; getch(); return 0; }
4.
Escribir un programa que pida un nmero y si el que se introduce por el teclado es menor de 100 que vuelva a solicitarlo. PROGRAM EJER02; VAR num:INTEGER; BEGIN ClrScr; REPEAT WRITELN ('Introduzca un nmero: '); READLN (num); UNTIL num > 100; END
5. Disear un programa que imprima la siguiente serie: 1,2,,10 #include <iostream.h> #include <conio.h> un numero en cada lnea.
80
int main() { int numero=0; do { numero= numero+1; cout << \t <<numero<<endl; } while (numero <10); cout <<"\n\t Fin de programa "; getch() ; return(numero) ; }
81
82
La programacin modular es una de las tcnicas fundamentales de la programacin, que consiste en dividir el problema dado, en problemas ms simples, los cuales son a su vez, implementados mediante mdulos independientes. Cada uno de estos mdulos recibe el nombre de subalgoritmos o subprogramas. Existe un mdulo o programa principal con el que comienza la ejecucin de todo el programa y que acta como coordinador de las invocaciones y ejecuciones del resto de los mdulos. Un subprograma posee la misma estructura de un programa, puede tener su propia declaracin de variables, junto a un conjunto de parmetros, que constituyen el mecanismo para transferir datos al subprograma.
Programa
Los mdulos son independientes en el sentido de que ningn mdulo, puede tener acceso directo a otro mdulo, con excepcin del mdulo, al que se llama y sus propios submdulos. Sin embargo los resultados producidos por un mdulo puede ser utilizados por cualquier otro mdulo cuando se transfiera a ellos el control.
83
VENTAJAS
Facilita el diseo descendente. Disminuye la complejidad del algoritmo. Disminuye el tamao total del programa. Divisin de la programacin entre un equipo de programadores - reduccin del tiempo de desarrollo. Facilidad en la depuracin : Comprobacin individual de los mdulos Programas ms fciles de modificar. Estructuracin en libreras especficas (biblioteca de mdulos).
Impresin. Lectura de datos. Ejecutar clculos. Imprimir lneas detalladas de informacin. Imprimir totales.
Este algoritmo podemos resolverlo utilizando mdulos, de modo que exista un mdulo principal de control y diferentes submdulos. Mdulo principal:
Llamada al submdulo Impresion. Llamada al submdulo proceso de datos. Llamada al submdulo Imprimir totales. Fin de proceso. Instruccin para impresin. Retorno al mdulo principal.
Submdulo Impresion:
Lectura de datos. Ejecucin de clculos. Impresin detallada de lneas de informacin. Retorno al mdulo principal.
84
4.2
SUBPROGRAMAS TIPOS
o o o
Un procedimiento es un algoritmo que realiza una tarea especfica, pero que generalmente no devuelve ningn resultado. La entrada de informacin se realiza a travs de los parmetros. En caso necesario la salida de informacin tambin se realiza a travs de los parmetros. Para invocar a un procedimiento se utiliza la instruccin llamar a seguida del nombre del procedimiento y de los parmetros actuales sobre los que aplicarlo, escritos entre parntesis y separados por comas.
<declaracin de constantes>
VAR
<declaracin de variables>
BEGIN
85
EJEMPLO N 21
PROCEDIMIENTO divisin (E entero: Dividendo, Divisor; S entero: Cociente, Resto) BEGIN Cociente Resto Dividendo div Divisor Dividendo - Cociente * Divisor
END_PROCEDIMIENTO
FUNCIONES o
Una funcin toma uno o ms valores, denominados argumentos o parmetros formales y devuelve un resultado. Para invocar a una funcin se utiliza su nombre seguido por los parmetros actuales sobre las que se aplicar, escritos entre parntesis y separados por comas en una expresin. Cada lenguaje de programacin tiene sus propias funciones internas incorporadas. Si estas no permiten realizar el tipo de clculo deseado ser necesario declarar una funcin externa.
DECLARACIN DE LA FUNCIONES
<declaracin de constantes>
VAR
<declaracin de variables>
BEGIN
EJEMPLO N 22
Funcin Factorial (n: entero): entero var i, factorial:entero BEGIN IF (n<=1) ENTONCES factorial 1 ELSE factorial 1 FOR i 1 TO n DO factorial factorial *1 ENDIF END
EJEMPLO N 23
Evaluar la funcin =x!/(y!(x-y)!) Algoritmo Hallar Var x,y: entero : real BEGIN READ (x,y) factorial(x)/factorial(y)*factorial(x-y)) WRITE (El valor de es:,) END
4.2.1 VARIABLES GLOBALES Y LOCALES. Variables Locales:
Una variable local es una variable que esta declarada dentro de un subprograma y se dice que es local al subprograma. Una variable local solo est disponible durante el funcionamiento del subprograma, al terminar su funcin el subprograma y regresar al programa llamador, se pierde el valor que se encontraba guardado en la variable local.
87
EJEMPLO N 23
cambiar WRITE (x) END Mdulo cambiar var x entero BEGIN x END Como x es local, no tiene efecto en el programa, por lo tanto la salida ser 0. Variables Globales:
Las variables declaradas en el programa principal se denominan variables globales. Las variables globales se pueden utilizar en todo el programa principal y en todos los subprogramas, donde se haga referencia al identificador de esta variable.
EJEMPLO N 24 Algoritmo global var x entero
BEGIN x 0
88
Mdulo cambiar BEGIN x 1 END La variable x esta definida como global, por lo tanto la salida ser 1.
4.2.2 FUNCIONES, PASO DE PARMETROS. PASO DE PARMETROS o o
Existen diferentes mtodos para la transmisin o el paso de parmetros o subprogramas. Es preciso conocer el mtodo adoptado por cada lenguaje, un mismo programa puede producir diferentes resultados bajo diferentes sistemas de paso de parmetros. Los parmetros pueden ser clasificados como:
Las entradas proporcionan valores desde el programa que llama y que se utilizan dentro de Entrada un procedimiento. En los programas funcin, (E) las entradas son los argumentos en el sentido tradicional Las salidas producen los resultados del subprograma: de nuevo si se utiliza el caso una Salidas funcin, este devuelve un valor calculado por (S) dicha funcin, mientras que con procedimientos puede calcularse cero, una o varias salidas Un solo parmetro se utiliza para mandar Entrada/salida argumentos a un programa y para devolver (E/S) resultados
89
EJEMPLO N 25
Accin modifica (var n: entero) Ejemplo de Parmetro de entrada/salida IF n >0 n ELSE n ENDIF Los mtodos ms empleados para realizar el paso de parmetros son: Paso por valor (tambin conocido por Parmetro Valor) Paso por referencia o diferencia (tambin conocido por Parmetro Variable) Paso por nombre Paso por resultado
1) PASO POR VALOR
n*2 n*3
Son los parmetros que pueden recibir valores pero no pueden devolverlos. Los parmetros se tratan como variables locales y los valores iniciales se proporcionan copiando los valores de los correspondientes argumentos. El paso de parmetros por valor consiste en enviar una COPIA del valor de la variable al mdulo invocado.
90
De esta manera se asegura que el valor de la variable slo puede ser modificado por el mdulo que la declar.
EJEMPLO N 26
Valor primer parmetro: A = 5 Valor segundo parmetro: constante = 18 Valor tercer parmetro: expresin B * 3 + 4 = 25 El valor 5.18 y 25 se transforma en los parmetros X, Y, Z respectivamente, cuando se ejecuta el procedimiento.
A B
5 7 PROC1 ( A, 18, B * 3 3 * 3 + 4)
Llamar_a
18
25
procedimiento
PROC1
(E entero) X,
Y,
Z)
EJEMPLO N 27
ALGORITMO PARMETRO valor var x: entero BEGIN x 0 CAMBIAR (x) WRITE (x) END Mdulo cambiar (y: entero) BEGIN y 1 END SALIDA 0
91
2)
Este mtodo se denomina paso por referencia o tambin de llamada por direccin o variable. Son los que pueden recibir y devolver valores. Son variables globales que se conectan con una local a travs de su contenido. En el caso de que se requiera que el valor de una variable sea modificado por el mdulo invocado, debe hacerse el paso de parmetro por referencia, por medio del cual el mdulo invocado tiene acceso a la direccin en que se guarda el valor a modificar.
EJEMPLO N 28
CAMBIAR (x) WRITE (x) END Mdulo cambiar (var y: entero) BEGIN y 1
END SALIDA: x 1
3)
PASO POR NOMBRE En este caso, el parmetro formal se sustituye literalmente por el parmetro actual asociado. Esta sustitucin literal del parmetro formal por el parmetro actual no se produce hasta que no se usa el parmetro formal.
92
La ventaja es que si no usamos en ningn momento el parmetro formal dentro del subprograma llamado (cosa poco probable), no se tendr que hacer ningn tipo de sustitucin.
4)
POR RESULTADO Nos interesa el valor del parmetro real solamente a la salida o fin de la ejecucin del subprograma en que aparece. Esto significa que al hacer la llamada no se copia el valor del parmetro real en el parmetro formal asociado, sin embargo a la salida se copia el valor del parmetro formal en la direccin del parmetro real asociado, significa por tanto, que el parmetro real tiene que tener asociada una expresin que tiene que ser una variable (no puede ser una constante).
EJEMPLO N 29
Algoritmo que contiene y utiliza unas funciones (seno y coseno) a las que les podemos pasar el ngulo en grados. Algoritmo Sen_Cos_En_Grados VAR real: g BEGIN WRITE(Deme angulo en grados) READ(g) WRITE(seno(g)) WRITE(coseno(g)) END real funcion coseno (E real : g) BEGIN RETURN(cos(g * 2 * 3.141592/360)) END_FUNCION real funcion seno (E real g) BEGIN RETURN( sen(g * 2 * 3.141592/360)) END_FUNCION
93
EJEMPLO N 30
Disear un programa que permita calcular el valor absoluto de un nmero: // Propsito: Funciones #include <iostream.h> #include <conio.h> #include <math.h> int main() { int numero; cout << "\nIngrese un numero : "; cin >> numero; cout << "\nValor absoluto del numero es : " << abs(numero); getch(); return 0; }
4.3
1.
Disear una funcin llamada Fahrenheit que reciba como parmetro una temperatura en grados Centgrados y retorne la temperatura correspondiente en grados Fahrenheit. Escriba luego un programa que haga uso de la funcin Fahrenheit para convertir 20 temperaturas en grados Centgrados Fahrenheit. Disear una funcin llamada hipotenusa que reciba como parmetro de entrada los catetos de un tringulo rectngulo y retorne la longitud de la hipotenusa. Escriba luego un programa que ingrese los catetos de un tringulo rectngulo y calcule la longitud de su hipotenusa usando la funcin aqu diseada. Disear una funcin llamada espar que reciba como entrada un nmero enteros y determine si es nmero es par en cuyo caso debe
2.
3.
94
retornar un 1, en caso contrario debe retornar un 0. Escriba luego un programa que muestre el uso de esta funcin. 4. Disear una funcin llamada signo que determine el signo de un nmero real. Si el nmero es negativo retornar -1, si es positivo retornar 0 y si es 0 retornar 0. Escriba luego un programa que muestre el uso de esta funcin. Disear una funcin llamada mes que reciba como parmetro de entrada un nmero entero entre 1 y 12 e imprima el nombre del mes correspondiente. As si se ingresa 1, se imprime Enero; si se ingresa 2, se imprime Febrero, etc. Si el nmero no est entre 1 y 12, no imprimir nada. Escriba luego un programa que imprima el nombre de todos los meses del ao usando la funcin mes. Disear una funcin llamada buscarlnt que busque un nmero entero en un arreglo de enteros. La funcin debe recibir como parmetro de entrada el arreglo, el tamao del arreglo y el nmero a buscar. Si el nmero esta en el arreglo debe retornar su ndice en caso contrario retornar -1. Escriba luego un programa que demuestre el uso de esta funcin. Disee una funcin llamada tringulo que permita obtener el rea y el permetro de un tringulo conociendo la longitud de sus tres lados (a, b, c). No se permite el uso de variables globales. Escriba luego un programa que demuestre el uso de esta funcin. Use: A = [p(p-a)(p-b)(p-c)] Donde p representa el semipermetro del tringulo que se calcula con la frmula: p = (a+b+c)/2.
5.
6.
7.
LABORATORIO N 4
1.
Disear una funcin llamado cuadrado que reciba como parmetro un nmero entero y retorne su cuadrado. Luego disee un programa que ingrese un nmero N y a) Imprima el cuadrado de N, b) Calcule e imprima el valor de: 5N2+3N-5.
95
Solucin:
#include <iostream.h> #include <conio.h> // Prototipo de la funcin cuadrado // Sera suficiente escribir: int cuadrado (int); int cuadrado (int n); // El programa comienza aqu int main ( ) { int N, resp; clrscr ( ); cout << Ingrese un nmero entero N : ; cin >> N; // Aqu usamos el retorno de la funcin, directamente en una // Sentencia de salida, cout << \nForma 1: El cuadrado de N es ...: << cuadrado (N); // Tambin puede crearse una variable para recibir el retorno de // La funcin y luego imprimimos el valor de la variable. As: int retorno = cuadrado (N); cout << \nForm 2: El cuadrado de N es ..: << retorno; // Aqu usamos el retorno de una funcin directamente en una // expresin. resp = 5*cuadrado (N) + 3*N 5; cout << \nEl valor de 5N2 + 3N 5 es.. ....: << resp; getch ( ); } // Definicin de la funcin cuadrado int cuadrado (int) { // Esto muestra que una sentencia return se puede incluir el clculo // De una expresin. Entonces primero se efecta en calculo de la // Expresin y luego se retorna su valor. Return n*n; }
96
2.
Disear una funcin llamado mnimo que reciba como parmetro tres nmeros enteros y retorne el nmero menor. Escriba luego un programa que ingrese tres nmeros enteros y determine el menor.
Solucin:
#include <iostream.h> #include <conio.h> // Prototipo de la funcin mnimo int mnimo (int a, int b, int c); // Funcin principal int main ( ) { int A, B, C; clrscr ( ); cout << Determinacin del menor de tres nmeros << end1; cout << Ingrese tres nmeros enteros .: ; cin >> A >> B >> C; cout << El menor de los tres nmeros es .: << mnimo (A, B, C); getch ( ); } / Definicin de la funcin mnimo int mnimo (int a, int b, int c) { // Observe que la variable menor es una variable local y ser // Destruida al salir de la funcin (luego del retorno). Int menor = a; If (b < menor) Menor = b; If (c < menor) Menor = c; Return menor; }
97
3.
Disee una funcin llamada mltiplo que reciba como parmetro dos nmeros enteros y determine si el primero es mltiplo del segundo en cuyo caso debe retornar 1 (verdadero) y, en caso contrario debe retornar 0 (falso). Luego escriba un programa que ingrese 10 pares de nmeros enteros y determine si el primer nmero de cada par es mltiplo del segundo. Solucin: #include <iostream.h> #include <conio.h> //Prototipo de la funcin mltiplo int multiplo (int a, int b); // Funcin principal int main ( ) { int m, n; clrscr ( ); for (int i = 0; i < 3; i ++) { cout << Ingrese dos nmeros enteros : ; cin >> m >> n; // El if que sigue puede abreviarse como; if (mltiplo (m, n)) if (mltiplo (m, n) = = 1) cout << m << es mltiplo de << n << endl; else cout << m << no es mltiplo de <<n << endl; } cout << \nPulse una tecla para terminar ; getch ( ); } // Definicin de la funcin mltiplo int mltiplo (int a, int b) { int r = 0; if (a / b = = 0) r = 1; return r; }
98
4.
Disee una funcin llamada coutxy que imprima un texto comenzando desde una coordenada dada de la pantalla usando cout. Escriba luego un programa que muestre el uso de esta funcin.
Solucin:
#include <iostream.h> #include <conio.h> // Prototipo de la funcin coutxy void coutxy (int x, int y, char texto [ ] ) ; // Funcin principal int main ( ) { clrscr ( ) ; coutxy (8, 2, Esto comienza en la coordenada (8, 2)) ; coutxy (5, 5, Esto comienza en la coordenada (5, 5)); coutxy (1, 8, Esto comienza en la coordenada (1, 8)); coutxy (26, 25, Pulse una tecla para terminar); getch ( ); } // Definicin de la funcin coutxy. // Note que la funcin no necesita retornar nada (todo lo que hace lo // Deja impreso en la pantalla) por lo que su tipo de retorno es void. void coutxy (int x, int y, char texto [ ]) gotoxy (x, y); // Poner el cursor en la coordenada (x, y) cout << texto; // Imprimir el texto desde la posicin del cursor }
5.
Disear una funcin llamada cuentach que retorne en nmero de repeticiones de un carcter en una cadena. La funcin debe recibir como parmetro la cadena y el carcter. Escriba luego un programa que ingrese una cadena y determine el nmero de repeticiones de cada una de las vocales no tildadas.
99
Solucin:
int cuentach (char cad [ ], char ch); int main( ) { char cadena [80]; char vocal [] = aeiou; clrscr ( ); cout <<Ingrese una cadena:; gets (cadena); strlwr (cadena); cout << \nNmero de repeticiones de las vocales << endl; for (int i = 0; i < 5; i ++) cout << vocal [i] << : << cuentach (cadena, vocal [i]) << veces <<endl; getch ( ); } int cuentach (char cad [], char ch) { int cont = 0, len = strlen (cad); for (int i = 0 ; i < len; i++) if (cad [i] == ch) cont ++; return cont; }
6.
Disee una funcin llamado mirandom que genere un nmero aleatorio entero entre el valor mnimo y un valor mximo. La funcin debe recibir como parmetro el valor mnimo, el valor mximo y retornar el nmero aleatorio en un parmetro por referencia. Escriba luego un programa que genere 20 nmeros aleatorios entre 50 y 200.
100
Solucin:
#include <stdlib.h> #include <iostream.h> #include <conio.h> // Prototipo de funcin void mirandom (int& num, int min, int max); // Funcin principal int main ( ) { int numero; clrscr ( ); cout << GENERACIN DE 20 NMEROS ALEATORIOS ENTRE 50 Y 200 \n\n; randomize(); for ( int i = 0; i < 20; i ++) { /*Como se esta pasando la variable nmero mediante un parmetro por referencia, entonces la funcin mirandom esta trabajando sobre la variable original nmero*/ } mirandom (numero, 50, 200); cout << numero << end1; } getch ( ); }
101
102
CAPTULO V: RECURSIVIDAD
5.1
RECURSIVIDAD -
Un algoritmo se dice que es recursivo cuando contiene en su definicin una o ms llamadas a si mismo. Todo algoritmo recursivo tendr al menos una instruccin alternativa. La recursividad o recursin es una herramienta muy til en la resolucin de problemas, ya que permite resolver problema complicados partindolos en problemas ms sencillos.
EJEMPLO N 31
Funcin factorial factorial(n: natural) dev f: natural IF n = 0 entonces terminacin f 1 ELSE f n * factorial(n 1) ENDIF
5.2 CARACTERSTICAS o o
Un algoritmo recursivo consta de una parte recursiva, otra iterativa o no recursiva y una condicin de terminacin. La parte recursiva y la condicin de terminacin siempre existen.
Algo muy importante a tener en cuenta cuando usemos la recursividad es que es necesario asegurarnos que llega un momento en que no hacemos ms llamadas recursivas. Si no se cumple esta condicin el programa no parar nunca.
103
5.3
Sobrecarga asociada con las llamadas a subalgoritmos. La claridad compensa la sobrecarga? Una simple llamada puede generar un gran nmero de llamadas recursivas. (Fact(n) genera n llamadas recursivas). El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fcil solucin iterativa. La ineficiencia recursivos.
5.4
inherente
de
algunos
algoritmos
PELIGROS EN LA RECURSIVIDAD
Para decidir hacer un programa recursivo se deben de tener al menos dos cosas muy claras:
o EL PASO BASE: Esta es la clave para terminar la recursin, es cuando deja de hacer llamadas a la funcin recursiva y hace evaluaciones devolviendo los resultados. Adems se debe asegurar de que es posible entrar a este paso. EL PASO RECURSIVO: Es la parte de la definicin que hace llamadas a esa misma funcin y que es la causante de las inserciones en la pila, almacenando en cada una de las llamadas, informacin del programa, del estado de sus variables locales y globales.
104
5.5
REC. INDIRECTA
A.
RECURSIN DIRECTA: Cuando un algoritmo se llama a si mismo en su definicin. A.1 RECURSIN LINEAL Esquema general de una funcin recursiva lineal:
F(x: T1) dev r: T2 IF d(x) entonces r h(x) ELSE v F(s(x)) r c(x, v) ENDIF Donde x:T1 y r:T2 son listas de parmetros y no un nico parmetro.
A.1.1 RECURSIN FINAL: Es una recursin lineal donde lo ltimo que se ejecuta es la llamada recursiva. EJEMPLO N 32
A.1.2
A.2
RECURSIN MLTIPLE
EJEMPLO N 33
Ack(n,m: N) dev ack: N IF n = 0 entonces ack ELSE IF m 0 entonces ack ELSE ack ENDIF ENDIF Ack(n 1, Ack(n, m 1)) Ack(n 1, 1) m+1
106
B.
RECURSIN INDIRECTA: Cuando el algoritmo no tiene una llamada a si mismo, sino que llama a otro algoritmo que le llama a l.
EJEMPLO N 35
Funciones Par/Impar
Impar (n: Nat) dev: p:bool IF n=0 p cierto ELSE IF n 1 p falso ELSE p impar(n-1) ENDIF ENDIF Par (n: Nat) dev: p:bool IF n=0 p falso ELSE IF n 1 p cierto ELSE p par(n-1) ENDIF ENDIF
5.6
Toda funcin recursiva contiene al menos una instruccin alternativa, por lo que la verificacin consistir en verificar instruccin alternativa. En una de las ramas de la instruccin alternativa vamos a tener una llamada a la propia funcin, pero para verificar una llamada una funcin, la propia funcin ha de estar ya verificada. La solucin es aplicar el principio de induccin: Tomamos como Hiptesis de Induccin que la funcin ya est verificada para casos anteriores (para las llamadas recursivas).
107
5.7
LA PILA DE RECURSIN
La memoria del ordenador se divide (de manera lgica, no fsica) en varios segmentos (4):
Segmento de cdigo: Parte de la memoria donde se
dinmicas.
Pila del programa: Parte destinada a las variables locales y
5.8
En el caso recursivo, cada llamada genera un nuevo ejemplar de la funcin con sus correspondientes objetos locales La funcin se ejecutar normalmente hasta la llamada a s misma. En ese momento se crean en la pila nuevos parmetros y variables locales. El nuevo ejemplar de funcin comienza a ejecutarse. Se crean ms copias hasta llegar a los casos bases, donde se resuelve directamente el valor, y se va saliendo liberando memoria hasta llegar a la primera llamada (ltima en cerrarse).
108
5.9
1.
Escribir una funcin recursiva Escribe Blancos(n) que imprima n caracteres blancos consecutivos. Escribir una funcin recursiva Invierte que acepte caracteres por teclado hasta recibir un retorno de carro y los imprima en orden inverso al de lectura. Los caracteres se leern uno a uno y no deben almacenarse en un array; basta emplear una sola variable local a la funcin Invierte de tipo char. Escribir una funcin recursiva que calcule el ensimo nmero de Fibonacci. Escribir una funcin recursiva Pascal(i,j) que calcule el elemento i, j del triangulo de Pascal, que sigue el siguiente patrn:
2.
3.
4.
Como puede apreciarse, los elementos en el borde del triangulo son 1s, y el resto de los elementos son iguales a la suma de los dos elementos que hay sobre ellos. 5. Escribir una funcin recursiva Palndromo(c,i,j) que determine si la subcadena contenida entre las posiciones i y j de la cadena c es un palndromo.
109
LABORATORIO N 5
1.
Funcin factorial recursiva /* Funcin recursiva del factorial */ #include <stdio.h> long factorial( long numero ); /* prototipo de la funcin */
int main() { int i; /* contador */ /* repite 11 veces; durante cada iteracin, calcula el factorial( i ) y despliega el resultado */ for ( i = 0; i <= 10; i++ ) { printf( "%2d! = %ld\n", i, factorial( i ) ); } /* fin de for */ return 0; } /* definicin recursiva de la funcin factorial */ long factorial( long numero ) { if ( numero <= 1 ) { return 1; } else { /* paso recursivo */ return ( numero * factorial( numero - 1 ) ); } } /* fin de la funcin factorial */
110
SERIE DE FIBONACCI /* Funcin recursiva de fibonacci */ #include <stdio.h> long fibonacci( long n ); int main() { long resultado; long numero;
/* prototipo de la funcin */
/* obtiene un entero del usuario */ printf( "Introduzca un entero: " ); scanf( "%ld", &numero); /* calcula el valor fibonacci del nmero introducido por el usuario */ resultado = fibonacci( numero ); /* despliega el resultado */ printf( "Fibonacci( %ld ) = %ld\n", numero, resultado ); return 0; } /* definicin de la funcin recursiva fibonacci */ long fibonacci( long n ) { /* caso base */ if ( n == 0 || n == 1 ) { return n; } else { /* paso recursivo */ return fibonacci( n - 1 ) + fibonacci( n - 2 ); } }
111
112
Estructura de datos es una forma de organizar un conjunto de datos elementales (un dato elemental es la mnima informacin que se tiene en el sistema) con el objetivo de facilitar la manipulacin de estos datos como un todo o individualmente. Una estructura de datos define la organizacin e interrelacionamiento de estos, y un conjunto de operaciones que se pueden realizar sobre l. Las operaciones bsicas son: Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estn ordenados). Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.
6.1
TIPOS Los tipos de datos estructurados ms comunes son: vectores y matrices (array), registros, cadenas de caracteres (string). ARRAY (ARREGLO) Es una estructura de datos en la cual se almacena una coleccin de datos del mismo tipo a este se le llama tipo base del arreglo, mientras que los datos individuales se llaman elementos del arreglo.
113
La declaracin:
int Array[10]; -
Los elementos individuales del array se comienza a numerar a partir del elemento 0, as, Array[0] individualiza al primer elemento y Array[9] al ltimo.
6.2
ARREGLOS UNIDIMENSIONALES, DECLARACIN Y ACCESO Un arreglo unidimensional es un tipo de datos estructurado que est formado por una coleccin finita y ordenada de datos del mismo tipo. -
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa. Por ejemplo :
In d ic e
1 2 3 4 . . . . 47 48 49
E le m e n to
ed ad [0 ] ed ad [1 ] ed ad [2 ] ed ad [3 ] ed ad [4 ] . . . . ed ad [4 7 ] ed ad [4 8 ] ed ad [4 9 ]
114
Esto reservar espacio en memoria para 50 nmeros enteros ubicados en posiciones contiguas como puede observarse en la siguiente representacin grafica.
Declaracin y asignacin de valores a un arreglo. // declara un arreglo llamado estatura de tipo flota y tamao 5
float estatura [5]; // Asignemos valores al arreglo de forma arbitraria estatura [0]= 1.65; estatura [1]= 1.57; estatura [2]= 1.72; estatura [3]= 1.80; estatura [4]= 1.65;
0 1 2 3 4
EJEMPLO N 36
Hacer un programa que registre 20 nmeros en un arreglo unidimensional y muestre posteriormente los elementos que contienen los nmeros mltiplos de 5 e imprima los elementos en forma inversa al ingreso de los datos. #include <iostream.h> #include <conio.h>
115
int main() { int a[20]; int x = 0; // ADICIONO VALORES while (x < 20) { cout <<"Ingreso vector ["<< x+1 << "]: "; cin >> a[x]; x = x + 1; } x = 1; // MUESTRO ELEMENTOS while (x < 20){ if (a[x]%5 ==0) cout << "\n" << a[x]; x = x + 1; } cout << "\n"; getch(); }
EJEMPLO N37
Ingrese 10 notas en un arreglo de enteros y luego mustrelo en pantalla #include<iostream.h> #include<conio.h> int main() { const int MAX=10; int notas[MAX]; for (int i=0;i<MAX; i++) { cout<<"Ingrese nota : "; cin>>notas[i]; } cout<<"\nFin de datos "; cout<<"\n\n Notas ingresadas"; for(int j=0;j<MAX; j++) { cout<<"\nNota [" << j + 1 << "] "; cout<<notas[j]; } getch (); }
116
6.3
Un array bidimensional (tabla o matriz) es un array con dos ndices, al igual que los vectores que deben ser ordinales o tipo subrango.
Para localizar o almacenar un valor en el array se deben especificar dos posiciones (dos subndices), uno para la fila y otro para la columna.
Formato:
1. identificador = array [ndice1, indice 2] of tipo de elemento 2. identificador = array [ ndice 1 ] of array [ indice 2 ] of tipo de elemento
EJEMPLO N 38 Disear un programa que permita ingresar valores en una matriz de 3 x 4 (lectura por columna)
#include<iostream.h> #include<iomanip.h> #include<conio.h> int main() { int num[4][3]; for (int a=0; a<4; a++){ for (int b=0; b<3; b++){ cout << "Nmero [" << b+1 << "], [" << a+1 << "] : "; cin >> num[a][b]; }
117
} cout << "\n\n"; for(int c=0; c<3; c++){ for(int d=0; d<4; d++) cout<< setw(5)<<num[d][c] << " "; cout << endl; } getch(); return 0; }
ARREGLO MULTIDIMENSIONAL
2.
EJEMPLO N 39
#include <stdio.h> void imprimeArreglo( const int a[][ 3 ] ); /* prototipo de la funcin */ /* la funcin main comienza la ejecucin del programa */ int main() { /* inicializa arreglo1, arreglo2, arreglo3 */ int arreglo1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int arreglo2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; int arreglo3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; printf( "Los valores en el arreglo1 por linea son:n" ); imprimeArreglo( arreglo1 );
118
printf( "Los valores en el arreglo2 por linea son:n" ); imprimeArreglo( arreglo2 ); printf( "Los valores en el arreglo3 por linea son:n" ); imprimeArreglo( arreglo3 ); return 0; /* indica terminacin exitosa */ } /* funcin para mostrar un arreglo con dos filas y tres columnas */ void imprimeArreglo( const int a[][ 3 ] ) { int i; /* contador de filas */ int j; /* contador de clumnas */ /* ciclo a travs de las filas */ for ( i = 0; i <= 1; i++ ) { /* muestra los valores de las columnas */ for ( j = 0; j <= 2; j++ ) { printf( "%d ", a[ i ][ j ] ); } /* fin del for interno */ printf( "n" ); /* comienza la nueva lnea de salida */ } /* fin del for externo */ } /* fin de la funcin imprimeArreglo */
BSQUEDA EN ARREGLOS UNIDIMENSIONALES La Bsqueda Lineal o Secuencial consiste en el recorrido de todo el arreglo, desde el primer elemento hasta el ltimo y de uno en uno.
La intencin es obtener el ndice del elemento buscado puesto que con el ndice se puede acceder al arreglo para obtener informacin sobre el elemento Considere al respecto un arreglo arreg de tamao N, el pseudocdigo para la bsqueda es el siguiente:
119
indicebuscado =-1 PARA i=0 MIENTRAS i < N CON INCREMENTO 1 SI elemento buscado es igual arreg[1] ENTONCES indicebuscado = i; salir del bucle FIN_SI FIN_PARA
ORDENAMIENTO UNIDIMENSIONAL Existen diversas formas de ordenar un arreglo. En el curso se ver uno de los ms simples y populares: Ordenamiento Burbuja o Bubble Sort.
ORDENAMIENTO BURBUJA O MTODO DE LA BURBUJA La Tcnica de Ordenacin por Burbuja consiste en ejecutar N-1 recorridos a lo largo del arreglo donde es cada recorrido se efectan comparaciones entre elementos adyacentes intercambiando sus valores si estn desordenados. Pseudocdigo para ordenamiento ascendente.
EJEMPLO N 40
PARA i=0 MIENTRAS i<N-1 INCREMENTO 1 PARA j=0 MIENTRAS j<N-1 INCREMENTO 1 SI arreg[j] es mayor que arreg[j+1] ENTONCES intercambiar arreg[j] con arreg[j+1] FIN_SI FIN_PARA FIN_PARA
EJEMPLO N 41 Supngase que desean ordenar las siguientes claves del arreglo A, transportando en cada pasada el menor elemento hacia la parte izquierda del arreglo. A: 15, 67, 08, 16, 44, 27, 12, 35
120
PRIMERA PASADA a[7]>a[8] (12>35) no hay intercambio a[6]>a[7] (27>12) si hay intercambio a[5]>a[6] (44>12) si hay intercambio a[4]>a[5] (16>12) si hay intercambio a[3]>a[4] (08>12) no hay intercambio a[2]>a[3] (67>08) si hay intercambio a[1]>a[2] (15>08) si hay intercambio
Obsrvese que el elemento 08 fue situado en la parte izquierda del arreglo. Continuacin se muestra el resultado de las siguientes pasadas: 3era. Pasada: 08 12 15 16 67 27 35 44 4ta. Pasada: 08 12 15 16 27 67 35 44 5ta. Pasada: 08 12 15 16 27 35 67 44 6ta. Pasada: 08 12 15 16 27 35 44 67 7ma. Pasada: 08 12 15 16 27 35 44 67 void Intercambio_Directo(int n) { int i,j,aux; i=0; j= n-1; for(;j>0;j--) for(i=0;i<j;i++) //recorre el arreglo de 0 a n-1 { if (arr[i]>arr[i+1]) /*si el elemento actual es mayor que el elemento siguiente */ { aux=arr[i]; //intercambio de elementos arr[i]=arr[i+1]; arr[i+1]=aux; } } }
121
6.4
REGISTROS 6.4.1 CONCEPTO Un registro es una coleccin de campos lgicamente relacionados, que pueden ser tratados como una unidad por algn programa.
Un ejemplo de registro puede ser la informacin de un determinado empleado, que contiene los campos nombre, direccin, fecha de nacimiento, estudios, salario, trienios, etc. Los registros pueden ser todos de longitud fija; por ejemplo, los registros de empleados pueden contener el mismo nmero de campos, cada uno de la misma longitud para nombre, direccin, fecha, etc. Tambin pueden ser longitud variable. Los registros organizados en campos se denominan registros lgicos.
ARCHIVOS (FICHEROS) Un archivo o fichero es un conjunto de datos estructurados en una coleccin de entidades elementales o bsicas denominadas registros o artculos, que son de igual tipo y constan a su vez de diferentes entidades de nivel ms bajo denominadas campos, los cuales estn organizados para un propsito especifico.
Por ejemplo, un fichero de una clase escolar contiene un conjunto de registros de los estudiantes de esa clase, otros por ejemplo pueden ser el fichero de nominas de una empresa, inventarios, stocks, etc. Los datos estn organizados de tal modo que pueden ser recuperados fcilmente, actualizados o borrados y almacenados de nuevo en el archivo con todos los cambios realizados.
6.4.2 DECLARACIN Y ACCESO Para definir un tipo registro se utilizar la palabra reservada struct seguida del identificador del tipo y de la relacin de componentes (tipo e identificador del componente terminado 122
en ';') entre llaves, terminada en ';'. A cada componente le llamaremos campo, y podrn ser de cualquier tipo (simple o compuesto).
Ejemplo
// tipo enumerado enum Meses { enero, febrero, marzo, abril, mayo, junio, Julio, agosto, septiembre, octubre, noviembre, diciembre }; // tipo registro struct Fecha { int dia; Meses mes; int anno; }; // variables Fecha f_nac ; Fecha f_ant;
No puede utilizarse el mismo identificador para especificar dos campos distintos de un mismo registro. Puede utilizarse el mismo identificador para especificar dos campos de distintos registros
123
Los arreglos y los registros pueden ser mezclados. Se puede tener un arreglo de estructuras, como se demuestra en el siguiente ejemplo.
EJEMPLO N 42 struct Registro { float unElemento; int unArreglo[10]; }; void fn()
{
struct Registro arrReg[20]; arrReg[10].unElemento=10.0; arrReg[10].unArreglo[5]=5;
struct Registro { int primerElem; float segundoElem; }; void fn() { struct Registro simple = {1, 2.0}; struct Registro array[2] = { {1, 2.0}, /* array[0] */ {2,4.4}}; /* array[1] */ }
124
EJEMPLO N 43 En el ejemplo la estructura es Registro y el objeto es reg. struct Registro { int primerElem; float segundoElem; } void fn() { struct Registo reg; reg.primerElem=0; /* se refiere al miembro entero */ reg.segundoElem=1.0; /* se refiere al miembro real */
6.5
CADENAS DE CARACTERES Una cadena (string) de caracteres es un conjunto de caracteres (incluido el blanco), que se almacenan en un rea contigua de la memoria. Pueden ser entradas o salidas desde una computadora.
Una Subcadena es una cadena de caracteres que ha sido extrada de otra de mayor longitud.
12 de como ests
Se consideran vectores de la longitud declarada, con blancos a izquierda o derecha si la cadena no tiene la longitud declarada. As el ejemplo siguiente:
E
1
S
2
T
3
A
4 5
C
6
A
7
S
8
A
9 10
E
11
S
12 13
U
14
N
15
A
16 17
R
18
U
19
I
20
N
21
A
22
///
23
///
24
Se declar con una dimensin de 24 caracteres y los dos ltimo se rellenan con blancos.
125
Se considera un puntero, con dos campos que contienen la longitud mxima y la longitud actual.
20 17 E S T A C A S A E S G U A Y /// /// ///
Las instrucciones bsicas asignar y entrada/salida (leer/escribir) se realizan de un modo similar al tratamiento de dichas instrucciones con datos numricos.
Asignacin
La instruccin de asignacin debe contener en el lado derecho de la asignacin una constante tipo carcter (una cadena) o bien otra variable tipo carcter. As: NOMBRE: Juan Gonzlez Significa que la variable NOMBRE toma por valor la cadena Juan Gonzlez
Entrada/Salida
La entrada/salida desde una computadora se puede realizar en modo carcter, para ello se asignar una cadena de caracteres a una variable tipo cadena. Ejemplo:
var A,B,C,D: carcter
Las instrucciones:
READ A,B WRITE C,D 126
Asignarn a A y B las cadenas introducidas por el teclado y visualizar o imprimirn en el dispositivo de salida las cadenas que representan las variables C y D.
EJEMPLO N 44 1.
Calcula el numero de palabras en una cadena #include <stdio.h> #include <conio.h> #include <string.h> void main() {
//definicin de variables
for(cont=0;cont<=(strlen(cadena)-1);cont++) { if(cadena[cont]==' ') contp++; palabras } printf("palabras: %d",contp);//salida en pantalla del resultado getch(); }
//recorre la cadena //busca espacios //incrementa el conteo de
127
#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> int main() { char cadena[100]; int lon,car,cont; clrscr(); printf("Cadena: "); gets(cadena); lon=strlen(cadena);
for(cont=0;cont<=lon-1;cont++) { car=cadena[cont]; //obtenemos el carcter en la posicin cont if((car>=65)&&(car<=90)) { //entonces es mayscula cadena[cont]=tolower(cadena[cont]); //convertimos a minsculas } } printf("%s",cadena);//salida en pantalla de la cadena getch(); }
128
EJEMPLO N 46
Programa que lee una cadena y la copia en otra de manera invertida #include <stdio.h> #include <conio.h> #include <string.h> int main() { char cadena1[100],cadena2[100]; int longitud,cont,cont2=0; clrscr();
printf("Cadena: ");gets(cadena1);//obtiene cadena 1 longitud=strlen(cadena1); for(cont=longitud-1;cont>=0;cont--) { //recorre toda la cadena cadena2[cont2]=cadena1[cont]; cont2++; } printf("%s",cadena2);//salida en pantalla de la cadena invertida getch(); }
6.6
1.
Disear un programa que lea dos vectores (arreglos unidimensionales) A y B de N elementos, cada uno de tipo entero. Determine luego un vector C tal que sus elementos vengan dados por: C(0)=A(0)+B(N-1)=A(1)+B(N-2), C(2)=A(2)+B(N-3).., C(N-1)=A(N-1)+B(0). Imprima luego los tres arreglos en tres columnas paralelas, cada uno en una columna. Disear un programa que ingrese los sueldos de 20 empleados de una empresa en un arreglo y determine el menor sueldo, el sueldo total y sueldo promedio.
129
2.
3.
Disee un programa que ingrese los sueldos de N empleados de una empresa en un arreglo unidimensional con capacidad mxima para 100 empleados. Imprima luego un listado de los sueldos superiores al sueldo promedio. Disee un programa que lea 50 notas de un examen en un arreglo unidimensional y determine: a) la nota promedio, b) la mayor nota, c) la menor nota, d) el numero de alumnos que comparten la menor nota y e) el numero de alumnos que compartan la mayor nota. Disee un programa que ingrese un arreglo de N nmeros enteros, ordene el arreglo ascendentemente e imprima el arreglo ordenado. Resuelva el problema 7; pero esta vez ordenado en forma descendente. Disee un programa que ingrese 15 letras del alfabeto, no repetidas, a un arreglo unidimensional. Imprima luego el arreglo ingresado
4.
5.
6.
7.
LABORATORIO N 6
1.
Disear un programa que ingrese 20 nmeros enteros en un arreglo y determine: a). La suma de todos los elementos del arreglo y b). El nmero menor y su ndice dentro del arreglo.
Solucin:
#include <conio.h> #include <iostream.h> int main ( ) { // Declaracin de constantes y variables const int N = 20; // Nmero de personas int a [N]; // Arreglo de N nmeros enteros int suma; // Suma de los elementos del arreglo int menor; // Menor valor de arreglo int indice; // ndice del menor valor dentro del arreglo int i; // Variable para los blucles for
130
// Ingreso de datos // En simultneo ingresamos un elemento y lo vamos sumando clrscr ( ); cout << INGRESO DE DATOS << end1; suma = 0; for (i = 0; i < N; i++) { cout << Ingrese elemento << i << :; cin >> a [i]; suma += a [i]; } // Hablamos el menor valor y su ndice dentro del arreglo menor = a [0]; for (i = 1; i < N; i++) { if (a [i] < menor) { menor = a [i]; indice = i; } } // Salida de resultados cout << \nSuma...: << suma; cout << \nNmero menor: << menor; cout << \nndice del nmero menor: << indice; getch ( ); } 2. Disear un programa que ingrese dos arreglos, cada uno de 10 nmero enteros. Crear luego un tercer arreglo en la que cada uno de sus elementos sea la suma de los elementos correspondientes de los dos arreglos anteriores. Imprimir luego los tres arreglos en tres columnas paralelas.
Solucin:
131
int main ( ) { // Declaracin de constantes y variables const int N = 20; // Nmero de elementos de los arreglos int a [N], b [N], c [N]; // Los tres arreglos de N enteros int i; // Variable para los bucles for // Ingreso de datos // A la vez que ingresamos vamos sumando clrscr ( ); cout << Ingreso de datos << end1; for (i = 0; i < N; i++) { cout << a [ << i << ] = ; cin >> a [i]; cout << b [" << i << "] = ; cin >> b [i]; c [i] = a [i] + b [i]; } // Salida de resultados cout << \nSalida de resultados\n; cout << setw (4) << a << setw (4) << b << setw (4) << c << \n\n; for (i = 0; i < N; i++) cout << setw (4) << a [1] << setw (4) << b [i] << setw (4) << c [i] << endl; getch ( ); } 3. Disear un programa que ingrese los sueldos de N empleados de una compaa e imprima un listado de todos los sueldos inferiores al sueldo promedio. Considere que el sueldo mnimo es de S/.350. Validar todas las entradas.
Solucin:
132
void main ( ) { // Declaracin de variables y constantes const int MAX = 50; // Mximo numero de empleados float suma; // Suma de los sueldos de los N empleados float promedio; // Sueldo promedio float sueldo [MAX]; // Arreglo de MAX sueldos (N debe ser menor o
igual a MAX)
int N; int i;
// Ingreso validado del nmero de empleados clrscr ( ); cout << Ingrese el nmero de empleados: ; cin >> N; while (N < 1 || N > 50) { cout << \aError. El nmero de empleados debe estar entre 1 y 50; cout << \nIngrese el nmero de empleados : ; cin>>N; } // Ingreso validado del sueldo de cada empleado for ( i=0; i<N; i++) { cout<< Sueldo del empleado << i << ? :; cin>> sueldo [i]; while (sueldo [i] < 350 ) { cout << \aError. El sueldoMinimo es S/. 350; cout << \n Sueldo del empleado << i << ? : ; cin>>sueldo[i]; } }
//hallamos el sueldo promedio suma=0; for (i=0; i<N; i++) suma += sueldo [i]; promedio =suma / N;
133
// Salida de resultado cout << \n Sueldo Promedio: << setprecision (2) << promedio; cout << \n \n Lista de sueldos inferiores al sueldo promedio \n ; for (i=0; i<N; i++) { if (sueldo [i] < promedio ) cout << sueldo [i] << endl; } getch(); } 4. Disear un programa que lea los elementos de una matriz cuadrada de 4 filas por 4 columnas compuestas de nmeros enteros y determine:
Solucin:
#include <iomanip.h> #include < iostream.h> #include < conio.h> int main () { const int TAM=4; // numero de filas y o de columnas (son iguales) int f, c; // fila y columna int a [TAM] [TAM]; // para la matriz int sumat, sumad; // suma total y suma de la diagonal // Ingreso de la matriz por filas clrscr(); cout<<Ingreso de una matriz de 4 x 4: <<endl; for ( f=0; f<TAM; f++) { cout<<Fila : << f << : ; for ( c=0; c<TAM; c++ ) cin >> a[f][c]; }
134
// Hallamos la suma total y la suma de la diagonal principal. // Observe que en la diagonal principal el ndice f de la fila es igual que // el ndice c de la columna. sumat = sumad = 0 ; for ( f=0; f<TAM; f++) { for ( c=0; c<TAM; c++) { sumat + = a[f] [c]; if ( f == c) // Si es un elemento de la diagonal sumad + = a[f] [c]; } } // Imprimimos los resultados cout << \n Suma Total de elementos : << sumat; cout << \n Suma de los elementos diagonales: << sumad; getch(); }
5.
Y lo imprima como: 4 7 1 3 5
Solucin:
2 0 6 9 7
3 1 2 6 4
int main () { int A [3] [5], f, c; // Ingreso del arreglo bidimensional por filas. clrscr(); cout<<Ingreso de un arreglo bidimensional de 3 x 5: \n \n; for ( f = 0; f < 3; f++) { cout<<Ingrese la Fila : << f << en una linea: ; for ( c = 0; c < 5; c++ ) cin >> A[f][c]; } // imprime segn el esquema solicitado // esto lo logramos imprimiendo de salida \n\n ; cout<<\n Impresin de salidas \n\n: << f << en una linea: ; for ( c = 0; c < 5; c++ ) { for ( f = 0; f < 3; f++) cout << setw (4) << A[f] [c]; cout << endl; } getch(); return 0; }
6.
136
int main() { char cadena1[100],cadena2[100]; int cont; clrscr(); printf("Cadena 1: ");gets(cadena1); printf("Cadena 2: ");gets(cadena2); for(cont=0;cont<=strlen(cadena1);cont++) { cadena 1 if(cadena1[cont]!=cadena2[cont]) printf("Desiguales"); sean iguales break; iguales //comparamos //desiguales en caso de ke no //cortamos si no son
//recorremos
137
138
BIBLIOGRAFA
BSICA: 1. JOYANES AGUILAR, LUIS (1998). Fundamentos de Programacin, Algoritmos y Estructura de Datos. Segunda Edicin Mc Graw Hill. LPEZ R., LEOBALDO. (1994). Programacin estructurada: Un enfoque algortmico,. Computec. LIPSCHUTZ, SEYMOUR (1987). Estructura de Datos. Me. Graw Hill. Madrid TENEBAUM / AUGESTEIN. Estructura de Datos en C. Prentice Hall, Mxico. GILLES BRASSARD. Fundamentos de Algoritmia; Paul Bratley. KRUSE, ROBERT L. Estructura de Datos y Diseo de Programas. Prentice Hall, Mxico.
2.
3.
4.
5. 6.
COMPLEMENTARIA: 1. WIRTH N. (1986). Algoritmos y Estructura de Datos. Edit. Prentice may Hispanoamericana S.A. VSQUEZ PARAGULLA, J. (1997). Diseo de Programacin. Tercera Edicin. Editorial San Marcos. BUSTOS FRANKLIN. Mtodos de Programacin. ALCALDE EDUARDO & GARCIA MIGUEL. Metodologa de la Programacin.
2.
3. 4.
139