Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
PRIMERA EDICIÓN, Enero de 2009 SEGUNDA EDICIÓN, Enero de 2010 corregida y aumentada. ALGORITMOS Y PROGRAMACIÓN Inga. Jenny M. Rodríguez . DERECHOS DE AUTOR REGISTRADOS ® Se pohibe su reproducción total o parcial por cualquier medio. G . ;a,A, C. A., 2010. AGRADECIMIENTOS A Dios, por todas las bendiiones rcibidas y or rcibir. A mis padrs y hemanos, por todo su amor y esmero. A mi hijo Sergio lván, regalo tan maravilloso que Dios me ha dado. A mis alumnos, me han enseñado a ser una mejor persona. INTRODUCCION La intención del presente libro, es la de presentar un texto práctio y sen�llo que ayude en los primeros pasos del aprendizaje de los algoritmos y la gramación. o deseo llenar dicho texto con demasiada teoría, mas bien con mucha rácica aunque incluyo bastants explicacions. .n ste libro nos enfoaremos a la programación orientada a procedimientos y al lenguaje de programación C+, ya que dicho lenguaje es ideal para aliaciones cientíicas y nos permite entrar al ámbito tanto de la rogramación orientada a procedimientos omo de la programación oientada a objetos. n las bases de este libro, más adelante usted podrá profundizar en oros nguajes. eseo realcale que /a pgramación es una habilidad que adquirirá on mucha práctica. Espero que usted, que está iniciando en esta rama del aber, aprenda desde el pincipio que así como hay nom,as de calidad paa poducir alzado, medicinas, y otros productos, también hay nomas de alidad para prducir programas, y desde ya usted aprenda a elaborar programas con calidad, on excelencia. INDICE 1. DEFINICIONES GENERALES ..................................................................... 1 1.1. Las partes de un sistema de cómputo ............................................. 1 1.2. Algoritmo .......................................................................................... 2 1.3. Etapas en la solución de un problema ............................................ .4 1.4. Características de un algoritmo ...................................................... .4 1.5. Programa ......................................................................................... 4 1.6. Lenguajes de programación ............................................................ .4 1. 7. Tipos de Instucciones ..................................................................... 5 1.8. Datos, tipos de datos ....................................................................... 5 1.9. Memoria e identificadores ................................................................ 6 1.1 O. La operación asignación ................................................................ 8 1.11. Funciones intenas ......................................................................... 8 1.12. Jerarquía de las operaciones matemáticas ................................... 9 1.13. Expresiones aritméticas y algorítmicas ........................................ 12 1.14. Expresiones lógicas ..................................................................... 14 1.15. La operacón de declarar o definir ................................................ 17 1.16. Mas acerca de la operación asignación ....................................... 18 1.17. Ciclo de procesamiento de datos ................................................. 20 1.18. Ejemplos de algoritmos ................................................................ 21 1.19. Diagramas de flujo ....................................................................... 30 2. PROGRAMACION EN C++ ........................................................................ 35 2.1. Estructura general de un programa en c++ ................................... 35 2.2. Estuctura típia de un programa en c++ ....................................... 35 2.3. Tipos de datos en c++ .................................................................... 36 2.4. Declaración de variables ................................................................ 36 2.5. Declaración de constantes ............................................................. 37 2.6. Caracteres secuenciales (códigos) de escape ............................ 38 2.7. Entrada de datos ( cin ) .........•........................................................ 38 2.8. Operadores y expresiones ............................................................ .43 2.9. Librería conio.h ............................................................................. .45 2.1 O. Funciones matemáticas .............................................................. .47 3. ESTRUCTURAS SELECTIVAS O ALTERNATIVAS ( CONDICIONES ) ... 48 3.1. Estructuras selectivas simples ...................................................... .48 3.2. Estructuras selectivas compuestas o dobles ................................. 56 3.3. Si ( if ) anidados o en cascada ....................................................... 67 3.4. Altenativa múltiple o selección múltiple ........................................ 74 4. ESTRUCTURAS REPETITIVAS (CICLOS, ITERACIONES, BUCLES) .... 84 4.1. Ciclos mientras ( while ) ................................................................. 85 4.2. Ciclos controlados por contador ..................................................... 88 4.3. Acumuladores ................................................................................................ 93 4.4. Ciclos controlados por centinela ( o bandera o lag ) ..................... 98 4.5. Encontrando el menor y el mayor de los datos ingresados ......... 101 4.6. Ciclos desde o para ( for ) ........................................................... 106 4 7. Ciclos hacer-mientras ( do-while ) ................................................ 113 4.8. Ciclos anidados ............................................................................ 122 4.9. Librería stdlib.h ............................................................................. 128 5. PROGRAMACION MODULAR ( FUNCIONES Y PROCEDIMIENTOS ).129 5.1. Funciones intemas: ...................................................................... 131 5.2. Procedimientos intenos ............................................................... 133 5.3. Funciones deinidas por el usuario ( programador ) .................... 134 5.4. Procedimientos ............................................................................ 142 5.5. Recursividad ................................................................................ 147 6. ESTRUCTURAS DE DATOS ..................................................... , ............. 150 6.1. Arreglos o arrays unidimensionales ( vectores ) .......................... 1 SO 6.2. Arreglos paralelos ........................................................................ 160 6.3. Arreglos bidimensionales ( o matrices o tablas ) ......................... 167 6.4. Matrices paralelas ........................................................................ 179 6.5. Arreglos de más de dos dimensiones ( multidimensionales ) ...... 188 6.6. Manejo de areglos utilizando funciones ...................................... 190 6. 7. Cadenas de caracteres ................................................................ 195 6.8. Esructuras o registros ................................................................. 202 6.8.1 Estucturas ........................................................................ 202 6.8.2. Estructuras anidadas ....................................................... 209 6.8.3. Areglos de estructuras .................................................... 214 6.8.4. Arreglos de estuctoras utilizando procedimientos .......... 219 - 9. . • -cnivs ..................... _. ................................................................. 221 5.9. 1. rchivos texto .................................................................. 221 6.9.. hivos binarios ............................................................. 225 ! ,nos y Programación 1. DEFINICIONES GENERALES -iaremosnuestro estudio con algunas definiciones generales: .1. LAS PARTES DE UN SISTEMA DE COMPUTO as·amente son cuatro: • hardware, • software, • datos y • usuaios. iARDWARE: O junto de componentes físicos de una computadora. Equipo físico. -.enplos: monitor, impresora, disco duro, etc. OFTWARE: 1 . ·unto de programas que controlan el funcionamiento de una computadora. ==-o lógico. =:nplos: dos, Windows, Word, etc. DATOS -nos o piezas individuales de información que por si mismos no tienen mucho ' ·do. El trabajo principal de una computadora es el de procesar estas q eñas piezas de datos de distintas maneras convitiéndolas en información >rlo tanto, INFORMACION implia datos procesados y organizados. USUARIO =s la persona que opera la computadora. Ninguna computadora es mpletamente autónoma. Las personas diseñan, construyen, programan y :oaran todos los sistemas de cómputo. Inga. Jenny M. Rodrfguez V. Algoritmos y Prgramación 2 1.2. ALGORITMO Secuencia ordenada de pasos, sin ambigüedades, que conducen a la solución de un problema dado. Ejemplos de algoritmos de la vida diaria: Cambiar bombilla quemada en el techo: • Apagar interruptor, • Adquirir bombilla adecuada y probada • Acercar una escalera o silla y subirse con bombilla en mano • Quitar bombilla quemada • Colocar bombilla buena • Bajarse • Probar con interuptor, • Limpiar y ordenar. Elabore usted los siguientes algoritmos: • Cambiar vidrio roto de una ventana • Cambiar llanta pinchada • Poner la mesa para comer • Preparar una taza de afé • Preparar un pastel Inga. Jenny M. Rodríguez V. gitmos y Programación 3 .3. ETAPAS EN LA SOLUCION DE UN PROBLEMA a resolución de un problema con una computadora conduce a la escritura y �ción de un programa. • ,:es de escribir un programa, el programador debe entender el problema con a ·dad, qué datos van a usarse, el resultado deseado y el procedimiento a __ ar para producir este resultado. _as fases o etapas de resolución de un problema con computadora son: • ANALISIS: El problema se analiza según los requerimientos de quien solicita el programa. • DISEÑO: Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo. En esta etapa se pueden utilizar herramientas como Diagramas, pseudocódigo, etc. • CODIFICACION ( IMPLEMENTACION }: El algoritmo lleva a escribir un programa utilizando un lenguaje de programación. • COMPILACION: El programa se compila, se eliminan los errores de sintaxis que pudiera tener. • EJECUCION Y VERIFICACION: Se comprueba que produzca los resultados requeridos. Es importante ejecutar muchas veces el programa con datos correctos y erróneos para detectar errores de lógica y que el programa funcione como se requiere. • DEPURACION Y MANTENIMIENTO: El programa se modiica cada vez que el usuario lo requiera, ya que las necesidades de éste pueden variar con el tiempo y _uso. • DOCUMENTACION: Escritura de las diferentes fases del ciclo de v_ida del software, principalmente análisis y diseño así como manuales de usuario y de referencia así como normas para el mantenimiento. Inga. Jenny M. Rodríguez . s y Prgramación 5 TADUCTORES DE LENGUAJE o orogramas que traducen instrucciones de programas fuente de alto nivel a uaje máquina. Se dividen en Intérpretes y Compiladores. • Intérpretes: Traducen una línea, si no hay error la ejecutan y continúa así con cada una de las siguientes líneas. Ejemplo: Basic. • Compiladores: Traduce el total de todas las líneas, si hay error, despliega un informe y no permite ejecutar nada sino hasta no encontrar ningún error de sintaxis. Ejemplo: c++, pascal. .7. TIPOS DE INSTRUCCIONES • De entrada / salida • Aitmético / lógicas • Selectivas • Repetitivas • De principio/ fin .8. DATOS, TIPOS DE DATOS e dividen en: • Numéricos Enteros (sin decimales) Reales (manejan decimales) • Lógicos Verdadero (true) Falso (false) • Carácter a,b,c, ... A,B, C, ... (letras) , *, @, /, ... (caracteres especiales) 1, 2, 3, ... (números utilizados como letras, no se pueden operar) Inga. Jenny M. Rodríguez V. Algoritmos y Prgramación 6 También los datos se pueden clasificar como: • Constantes (no cambian su valor durante la ejecución de todo el programa), y • Variables (pueden cambiar de valor durante la ejecución del programa). Y también se pueden clasificar como: • ! Simple ! ( consisten en una sola casilla de memoria ) y • Estucturados ( conjunto de casillas de memoria como los arreglos ). 1 1 1 1 1 1 1 1 1.9. MEMORIA E IDENTIFICADORES La memoria ram es semejante a una cuadrícula de millones de bytes. Al elaborar un programa resevamos espacios de esta memoria para guardar datos y así poder procesarlos por medio del programa. A estos espacios o celdas o casillas de memoria se les asigna un nombre o identificador. Un identificador es el nombre que se le da a las casillas de memoria a utilizar y se 'ona de acuerdo a las siguientes normas: w. arácter que forma un identificador debe ser una letra (a, b, e, ... 3. - 2. _s ::a s ieres pueden ser letras(a, b, ... ), o dígitos(1,2, ... ) o guión -':;-· 3. � -_ -e:-- ce>e ser representativo del uso que se le dará (--=.-.ó-: Inga. Jenny M. Rodríguez . gtmos y Programación 7 �r ejemplo si declaramos la variable edad, resevamos 4 bytes en los que �rdaremos valores numéricos enteros, como: 28 ó 36 ó 59, etc. 5 declaramos la variable nombre, resevamos unos 30 bytes para guardar adenas de caracteres como: Juan Pueblo. = declaramos la variable sueldo, resevamos 4 bytes para guardar valores a es como 3824.56. s· éeclaramos la variable x, no tendremos idea de lo que guardaremos en dicho siacio de memoria, por lo que evitaremos utilizar identificadores tan cotos y , . ,ién evitaremos identificadores tan largos como: fecha_de_nacimiento c¡ue tendemos a cometer errores y nos tardaremos mas tiempo en escribir :-:os caractres, lo ideal es utilizar entre 2 y 7 caracteres por nombre o � tific3dor. ._ aeclarar dichas variables, en memoria se podrían representar así: Memoria AM -nbre Inga. Jenny M. Rodríguez V. Algoritmos y Prgamacióñ B 1.1 O. LA OPERACION ASIGNACION Después de haber declarado o definido o resevado la variable de memoria, ya podemos colocar datos en ella, utilizando la operación asignación, mediante el signo igual o mediante una flecha, así: Ejemplos: • edad= 23 ó • nombre = 'Juan Pueblo' - /carácter) • sueldo = 3824.56 • bandera = falso ó edad� 23 ó nombre � 'Juan pueblo' ó sueldo � 3824.56 bandera = 5 < 3 (si es numérica) -(si es (si es lógica). Al asignar valor a dichas variables, en memoria se podría representar así: Memoria RAM edad ü nombre IJ I u la In I IP lu le lb 11 lo 1 sueldo 113824.56 I 1.11. FUNCIONES INTERNAS Los lenguajes ontienen funciones matemáticas como: • ab(x); alula el valor absoluto de x • s·,, x); alcula el seno de x ( en radianes ) • {x¡; c.uJa el oseno de x ( en radianes ) • :an[x ,; 2La la �angente de x ( en radianes ) • r �x:· ��o natural de x ( x>O ) • lg\x,1; ¿o >ase 10 de x ( x>O) • ex(x ,; exc . .c' natural de x ( ex ) • sq{x); 2 a acrado de x ( square ( x2 )) • sqt(x); se :a.-s � -aiz uadrada de x ( x>=O )) • y muchas s - Inga. Jenny M. Rodríguez V. qrfmos y Prgramación Ejemplos: • y= abs(-3); y vale 3, que es el valor absoluto de -3 • y= sqr(4); y vale 16, que es el cuadrado de 4 • x = sqrt{9); x vale 3, que es la raíz cuadrada de 9 • x = log(1 O); x vale 1, que es el logaritmo común de 1 O • z = cos(0); z vale 1, que es el coseno de O Ejercicios: .ál es el valor de x: . x = sin(0) 2_ x = sqrt(9) + sqr(9) 3. x = log(1) + ln(1) .. x = tan(0) + cos(0) 5. x - abs(5) - exp(0) 1• 2. JERARQUIA DE LAS OPERACIONES MATEMÁTICAS 9 s lenguajes se rigen por las mismas reglas prioritarias que la matemática, estas : • Signos de agrupación • Exponentes y Radicales • Multiplicación y División, Operadores div y mod • Sumas y Restas Operadores div y mod: • div: parte entera del cociente de la división • mod:residuo de la división antes del punto decimal. Inga. Jenny M. Rodríguez V. Algoritmos y Prqramacióa Ejemplo: Al dividir 5 entre 3: Por lo tanto: x = 5 div 3; x vale 1 _1_ �parte entera del cociente ( div) 3 1 5 2 ?residuo antes del punto decimal ( mod ) x = 5 mod 3; x vale 2 (residuo). x = 5/3; x vale 1.6667 ( incluye los decimales). Otro ejemplo: Al dividir 7 entre 2: Por lo tanto: x = 7 div 2; x vale 3 y = 7 mod 2; y vale 1 _3_ ?parte entera del cociente ( div) 217 1 ?residuo antes del punto decimal ( mod ) z = 7/2; z vale 3.5 ( incluye los decimales). Ejercicios: Resuelva los siguientes incisos, cuánto vale x ? • X = 15 div 4 • X = 20 md 6 • X = 50/6 • x = 20v 3 • X = 20 d 3 JO Inga. Jenny M. Rodríguez V. � y Prgramación plos de jerarquía de operaciones: • X= 3 + 6 * 14 x = 3 + 84 (primero se multiplica, por último se suma) X= 87 • x = -4*7+2"3/4-5 x=-4*7+ 8 /4-5 X = -28 + 2 - 5 X= -31 (primero el exponente) (después multiplicaciones y divisiones) (por último sumas y restas) . 11 • x = 3+2* (18-4"2 ) agupación ) x = 3+2*(18-16) x=3+2*2 ( prime> el exponente dentro del signo de . ( signos de agrupación ) ( multiplicación ) x = 3+4 ( por último sumas y restas ) x=7 • ¡ = 2° + 52 / 5 - 7 * 8 J = 1 +25/5 - 7 * 8 = 1 + 5 - 56 ! = -50 ( primero los exponentes ) ( multiplicaciones y divisiones ) ( por último sumas y restas ) • : = 7 + 3 ** 5 -( 4 * 7 + 40 div 8 -36 mod 5 ) + 16 / 8 + 5 z = 7 + 243 - ( 28 + 5 1 ) + 2 + 5 z = 250 - 32 + 2 + 5 z = 225 • a = 5 b=4 ¡=a * 2+b*4-( a*b+b*a )+b* 3/ a = 5** 2+4*4-( 5*4+4* 5 )+4*3/ 5 y = 25 + 16 - ( 20 + 20 ) + 12 / 5 y = 25 + 1 6 -40 + 2.4 y= 3.4 i�rcicios: Resuelva los siguientes incisos, cuánto vale x ? • x = 16 * 6 -3 * 2 Respuesta: x = 90 • x = ( 33 + 3 * 4 ) / 5 Respuesta: x = 9 • x = 2 " 2 * 3 Respuesta: x = 12 • x = -22 Respuesta: x = -4 • x = (-2)2 Respuesta: x = 4 Inga. Jenny M. Rodríguez V. Algoritmos y Programación 11 1.13. EXPRESIONES ARITMETICAS Y ALGORITMICAS Expresiones aritméticas son las que vemos en nuestros libros de matemática. Expresiones algorítmicas son las que se utilizan en los programas para computadora. Las expresiones algorítmicas deben escribirse en una sola línea de caracteres, Todos los caracteres del mismo tamaño ( no subíndices ni superíndices ), Indicar siempre la multiplicación con un *, Indicar la división con una /, No utilizar símbolos como 1T, v, �. #, +. Ejemplos de expresiones aritméticas y algorítmicas • expresión aritmética: x = a2 + b2 algorítmica: x = a * a + b * b • expresión aritmética: x = _1�-- y algorítmica: x = 1 / y • expresión aritmética: a = ( z + w) algorítmica: a= ( x /y)* ( z + w) y a+ c • expresión aritmética: y = __ algorítmica: y = ( a + b / c ) / ( d - e/ f ) d-g f ª2 b + ] • _ l=·- o-.sa: X = O Q - r Js q algorítmia: y = S.-E . - _, o)/ ( p / q - r" sqrt(s)) Inga. Jenny M. Rodríguez V. os y Prgramación 13 cicios: exprese en forma algorítmica las siguientes expresiones éicas • a= 5 ( z + w) • d= m+n p - q • x=_+p n • b= x + v u+ . a • x=m + _n_ p-q • a = r J ( 2 + h2 ) Inga. Jenny M. Rodríguez V. \y Algoritmos y Programación 14 1.14. EXPRESIONES LOGICAS Están constituidas por números, y operadores lógicos y/o relacionales. Su valor es siempre verdadero o falso, se utilizan para hacer comparaciones y condiciones en los algoritmos. Operadores relacionales: Permiten comparar dos operandos. El resultado es verdadero o falso, estos operadores son: Operador Relacional Signiicado < menor que > mayor que = igual que <= menor o igual que >= mayor o igual que <> distinto de Ejemplos de utilización de operadores relacionales: • Ejemplo: 1 < 5 verdadero • Ejemplo: 5 > 10 falso • Ejemplo: 5*3>10 15 > 10 verdadero • Ejemplo: 2*4<3+1 8 < 4 'also • Ejem>lo: a = 5 b = 16 ta�2 >(b*2 ) 5�2 >( 16*2) 25 > ( 32 ) 'ao Inga. Jenny M. Rodríguez V. s y Programación 15 icios: encuentre el valor de las siguientes expresiones lógicas: · x = 2 y=3 e • 5 + y . 3 / 4 ) < = ( x . 3 div y ) respuesta: falso 0 mod 3 * 2 ** 4 ) > ( ( 15 * 2 ) = ( 60 * 2 / 4 ) ) respuesta: falso • • 5 mod 4 * 3 >= 15 - 2*3 ) espuesta: verdadero �- • 5 d 4 * 3 >= 15 - 2 ** 3 respuesta: verdadero eradores lógicos: - :e, formular condiciones complejas a partir de condiciones simples, y son: -_e no todos los lenguajes coinciden, la jerarquía de los operadores es la _e�:e de mayor a menor: • Signos de agrupación • =xponentes y radicales • • ultiplicación;división, div, mod • = <> < > <= >= . , ' , ' • o • V • o - ; inuación se presenta la tabla de verdad de los operadores lógicos: p a -P -a PoQ p A Q eladero verdadero falso falso verdadero verdadero ,:ladero falso falso verdadero verdadero falso :also verdadero verdadero falso verdadero falso :also falso verdadero verdadero falso falso Inga. Jenny M. Rodríguez V. : Algoritmos y Programación Ejemplos de aplicación de operadores: • (1<5)Y(5<10) V Y V verdadera • número= 5 ( número = 1 ) O ( 7 >= 4 ) ( 5 = 1 ) O ( 7 >= 4 ) falsa O verdadera verdadera • NO ( 15 >= 7 - 2 ) O ( 43 - e * 2 div 4 <> 3 * 2 div 2 ) NO ( 15 >= 49 ) O ( 43 - 16 div 4 <> 6 div 2 ) NO ( falso ) O ( 43 - 4 <> 3 ) NO (falso ) O ( 39 <> 3 ) NO ( falso ) O ( verdadero ) Verdadero O verdadero verdadero Ejercicios: resuelva los siguientes problemas. 1_ 1. ( 15 >= 7 * 3 - 2 Y 8 > 3 Y 15 > 6 ) O NO ( 7 * 3 < 5 + 12 * 2 div 3 ** 2 ) Respuesta: verdadero 2. NO ( ( 21 dv 2 • 4 ) > ( 15 / 2 * 6 >= 15 * 2 / 17 = 15 ) ) Reso"es:a: ro;, no se puede comparar un valor lógico y un numérico utiliza-ca _ 1 oerador relacional. Inga. Jenny M. Rodríguez V. mos y Programación 17 -15. A OPERACIÓN DE DECARAR O DEFINIR: .a der utilizar la memoia AM en un programa se declara o deine, esto nos me resevar los espacios de memoria que utilizaremos para guardar los � a procesar por nuestro programa. emos deinir el tipo de dato ( entero, o real, o arácter o lógico ) que acar�mos ya que esto también implica el número de bytes de memoria a ar. --.iién debemos especificar el nombre o identificador de la variale siguiendo las as que vimos anteriormente. �to general para declarar una o varias variables es: tipo identiicador ( si es una sola vaiable) o tipo identiicador1, identiicador2, ... , identiicadorN (si son varias ables) �nplos: • entero edad • entero horas, nota • -eal sueldo • arácter letra • lgico bandera - -- a anterior secuencia de declaraciones resevamos memoria AM, la cual o�taremos en la siguiente tabla: horas nota sueldo letra bandera ::,o dijimos antes, para poner datos adentro de las variables se utiliza la .-ación asignación. Inga. Jenny M. Rodríguez V. Algoritmos y Prgramación 18 1.16. MAS ACERCA DE LA OPERACIÓN ASIGNACION: La operación de asignación es el modo de almacenar valores en una variable, como ya vimos. La operación asignación se representa con el símbolo u operador� o el signo=. El formato general de una operación de asignación es: NombreVariable - expresión aritmética o lógica, ( o variable o constante) La acción de asignar es destructiva, ya que si la variable contenía algún valor, éste se pierde y se conseva el último valor asignado. Ejemplo de asignación a las variable� antes declaradas: 1. edad - 20 //almacena 20 en el espacio de memoria llamado edad. 2. edad � 15 // se pierde el valor anterior, se almacena el 15 3. edad - edad + 1 // como había un 15, al sumarle 1 se almacena 16 4. edad - edad -10 // como había un 16, al restarle 10 se almacena 6 5. edad - edad * 3 / 2//como había un 6,por 3 = 18 dividido 2,almacena 9 6. horas - 40 // se almacena 40 en variable horas 7. sueldo - horas * 15 // se almacena 600 en sueldo 8. nota - 80 // se almacena 80 en nota 9. letra � 'a' // se almacena letra a en variable letra 10. bandera - 5 < 2// se almacena O= falso en variable bandera A oninuación, tabla que muestra el resultado en memoria de las anterioresd---·=----·-·· No.Asignación edad horas nota sueldo letra bandera 1 20 2 15 3 16 � 6 5 9 6 1 40 7 1 600 8 1 80 9 1 a 10 1 o Inga. Jenny M. Rodríguez V. mos y Prgramación 19 cicios: En cada u no d e los siguientes incisos, cuál es el valor final? • a= 5 b= 10 a=a+b a=a/3*2 *3 � =a I b • X = 100 y= 2 x = xmody**4 ¡=y**x • . =5 n =15 ,=m**2 = n*m+10 /5 • a= 6 b =3 z =a* 2 +·b * 3-( a* b + b *a)+ b * 2 / a • \ = 5 B = 25 C = 1 O X = A+B+C X=A+B*C X =A+B/C X =A+ B mod C X = ( A + B ) mod e Inga. Jen:y M. Rodrfguez V. Algoritmos y Prgramación 20 1.17. CICLO DE PROCESAMIENTO DE DATOS datos entrada •I proceso leer o read teclado salida ----� escribir o write (instrucción) monitor o impresora (dispositivo) entrada salida Aquí tenemos al usuario de un programa (la persona que lo está utilizando o ejecutando). El usuaio está ejecutando o corriendo un programa que está instalado en la computadora. El usuario introduce datos por medio del teclado, estos datos son almacenados en la meioria ram en celdas a las que se les da un nombre y un tipo. El programa uilza esos datos que el usuario ingresó, los procesa ( suma, resta, compara, ordna, e�c.l or medio del cpu de la computadora. El programa impime o despliega los datos ya procesados a traves del monitor o la impresora, a es:o se le llama salida. A grandes rasgos, en �.o ns�!e el ciclo de proceso de datos. Inga. Jenny M. Rodríguez V. ! -: s y ramación 21 EJEMPLOS DE ALGORITMOS l.0 de un algoritmo que sólo tiene salida: �·'Hola' (salida) 10 despliega la palabra Hola en el monitor (utilizar la instucción �o n pantalla: ar la sangría en la instrucción escribir. Esto le da claidad al jemplo de un algoritmo que sólo tiene salida: bir 'Bienvenido a la programación' ( salid_a) c : ;omo despliega Bienvenido a la programación en el monitor. co en pantalla: -- - �e en pantalla no salen los apóstrofos. _ -;emplo de un algoritmo que sólo tiene salida: scibir 'Hoy es un hermoso día' (salida) s� :igoritmo despliega Hoy es un hermoso día en el monitor. :. :ado en pantalla: -: S un hermoso dia : oue en pantalla no salen los apóstrofos. Inga. Jenny M. Rodríguez V. Algoritmos y Prgramación Ejercicios: • Escriba un algoritmo que despliegue su nombre en pantalla. 22 • Escribir un algoritmo que despliegue su número de carnet y su número de cédula. • Escribir un algoritmo que despliegue su número de teléfono y su dirección. • Escribir un algoritmo que despliegue sus tres comidas favoritas. Ejemplo de un algoritmo que tiene entrada y salida. Entrada signiica que nuestro programa le pide un dato al usuario del programa, el valor que el usuario teclee como respuesta, ese será el valor que nuestro programa leerá y guardará en memoria. Necesitamos declarar una variable ( resevar un espacio en la mamaria ram) para guardar el dato que le pediremos al usuario, esta variable se llamará ed y almacenará un dato entero. inicio entero: ed escribir 'Ingrese su edad:' leer ed esibir 'Usted tiene' , ed, ·�ños' in (entrada) {salida) teior declara la variable entera ed, seguidamente se le despliega al usuao u, nensaje en pantalla Ingrese su edad, supongamos que el usuario responde tdea;,do un 20, el número 20 se almacena en la variable ed, en la siguien�e ·.s. . in, se despliega el mensaje: Usted tiene 20 años, finaliza el programa. Notar que ed o e esaf)e entre apóstrofos en la instrucción· escribir ya que no queremos des)..; '? iaabra ed sino el dato contenido en memoria en la variable ed. Inga. Jenny M. Rodríguez V. • e • : s y Programación 23 ue el usuario teclea 20: a-os que el usuario ejecuta el programa por segunda vez. E 3=o anterior declara la variable entera ed, seguidamente se le despliega _ .-o n mensaje en pantalla Ingrese su edad, supongamos que el usuario _"n,:-e :cieando un 35, el número 35 se almacena en la variable ed, en la � .nstrucción, se despliega el mensaje: Usted tiene 35 años, finaliza el -- os las 2 corridas y simulemos 3 mas en la siguiente tabla: -� Mensaje en Respuesta Variable Mensaje en pantalla del usuario ed pantalla ., Ingrese su edad: 20 20 Usted tiene 20 años = Ingrese su edad: 35 35 Usted tiene 35 años ,;, Ingrese su edad: 18 18 Usted tiene 18 años �. Ingrese su edad: 41 41 Usted tiene 41 aios - Ingrese su edad: 57 57 Usted tiene 57 años = �mos declarar una variable para cada dato que le pedimos al usuario. Inga. Jenny M. Rodríguez . , Algoritmos y Prgramación 24 Otro ejemplo: Elaborar pseudoódigo que pida al usuario que ingrese temperatura y luego la despliegue. La temperatura puede contener decimales, por lo que la declaramos como real. inicio real: temp escribir 'Ingrese temperatura: -,leer temp escribir 'La temperatura es ' , temp, ' grados' fin (entrada) (salida) Resultado en pantalla suponiendo que el usuario teclea 32.5: Ingrese temperatura: 32.5 La temperatura es 32.5 grados Resultado en pantalla suponiendo que el usuario teclea 35.1: Ingrese temperatura: 35.1 La temperatura es 35.1 grados s co mensaje pantalla resp. variab. mensaje en pantalla usuario temo 1 Ingrese temperatura: 32.5 32.5 La temperatura es qrados 2 Ingrese temeratura: 35.1 35.1 La temperatura es grados 32.5 35.1 3 Ingrese :em>era:ura: 40 40 La temperatura es 40 grados 4 Ingrese :e�e:an. -a: 41.3 41.3 La temperatura es 41.3 qrados 5 Ingrese ter.,a� -a: 28.7 28.7 La temperatura es 28.7 grados Inga. Jenny . Rodríguez V. 3 -: s : rgramación 25 u e eUdocódigo que pida al usuario que ingrese dos datos: dia y mes y s cspliegue. Ambos datos son enteros, no contienen decimales. -..o: di,me � 'Ingrese dia y mes: ' -di, e -=- · 'el dia es', di,' el mes es', me (entrada) (salida) ue el usuario teclea 24 12: variab. variab. mensaje en pantalla usuario di me mes: 24 12 24 12 El dia es 24 el mes es 12 mes: 15 9 15 9 El dia es 15 el mes es 9 mes: 28 2 28 2 El dia es 28 el mes es 2 mes: 20 10 20 10 El dia es 20 el mes es 10 mes:· 1 11 1 11 El dia es 1 el mes es 11 Inga. Jenny M. Rodríguez V. . Algoritmos y Prgramación Ejercicios: elabore un pseudocódigo: 26 • Que pida al usuario una nota entera y seguidamente se la despliegue. • Que pida al usuario un salario real y seguidamente lo despliegue. • Que pida al usuario un precio real y seguidamente lo despliegue. • Que pida al Úsuario base y altura y seguidamente las despliegue Ejemplo de un algoritmo que tiene entrada, proceso, salida: En el siguiente programa, le pediremos al usuario que ingrese su edad (por lo que debemos declarar una variable para almacenar el dato que el usuario ingrese), luego calcularemos la edad a la que se graduará sumándole 6 a la edad que ingresó antes (declaramos otra variable para guardar este cálculo), y posteriormentl desplegaremos el resultado de este cálculo. inicio entero: ed, grad escribir 'Ingrese su edad: leer ed grad = ed + 6 escribir 'Se graduará a los', grad, 'años' fin (entrada) (proceso) < (salida) Supongamos que el usuano ingresa 18 como edad, ese 18 se guarda en la variable ed, seguidamente se le suma 6 ( 18 + 6 = 24 ), se guarda 24 en la variable grad, en la siguiente instrucción se despliega se graduará a /os 24 años. Resultado en pa,ta11a suponiendo que el usuario teclea 18: Ingrese su edao: 18 Se graduará a los 24 años Inga. Jenny . Rodríguez V. 7 • . s y Programación 27 entemos esta corrida simulemos otras 4 en la si uiente tabla: -e aje resp. variable variable mensaje en pantalla .talla usuario ed rad e edad 18 18 24 Se raduará a los 24 años 21 21 27 Se raduará a los 27 años 24 24 30 Se raduará a los 30 años 30 30 36 Se raduará a los 36 años 40 40 46 Se raduará a los 46 años .oocódigo se pudo haber escrito de la manera siguiente: .aremos la variable grad, no utilizaremos esta variable para guardar el =---�-,_-> el calculo, en cambio haremos el cálculo dentro de la instucción de .-:ero:ed Sroir 'Ingrese su edad: e· ed rDir 'Se graduaá a los : ed + 6, 'años' (entrada) ( proceso y salida ) � -- a goritmo declaramos menos variables y escribimos menos líneas por lo .-"-a os memoria y el programa funciona igual que el anterior, por lo tanto, e -s e -ciente. oniendo ue el usuario teclea 18: esentemos esta corrida simulemos otras 4 en la si uiente tabla: - mensaje en resp. variable mensaje en pantalla - antalla usuario ed 18 18 Se raduará a los 24 años 21 21 Se raduará a los 27 años 24 24 Se raduará a los 30 años 30 30 Se raduará a los 36 años 40 40 Se raduará a los 46 años -.- :elante, utilizaremos este método cuando sea posible. Inga. Jenny M. Rodríguez V. Algoritmos y Prgramación 2. Otro ejemplo: -. El siguiente pseudocódigo pide al usuario kilos y los convierte a libras. Declaramos una constante de conversión, este valor no cambiará en todo el programa. inicio constante real conver = 2.2 real: kil escribir 'Ingrese kilos: leer kil (entrada) escribir kil 'kilos equivale a ', kil * conver, 'libras' fin ( proceso y salida ) Resultado en pantalla suponiendo que el usuario teclea 1 O: Ingrese kilos: 1 O 1 O kilos equivale a 22 libras Tabla con la simulación de 5 corridas: corr consta mensaje en respue variab Mensaje en pantalla ida nte pantalla sta le kil conver usuario 1 2.2 ingrese _kilos 10 10 1 O kilos equivale a 22 libras 2 2.2 ingrese kilos 15 15 15 kilos equivale a 33 libras 3 2.2 ingrese kilos 16 16 16 kilos equivale a 35.2 libras _ 1 4 2.2 ingrese kilos 22 22 22 kilos equiyale a 48.4 libras 5 2.2 ingrese kilos 27 27 27 kilos equivale a 59.4 libras Notar que la constante conver siempre tiene el mismo valor en todas las corridas y duran:e téa la orida del programa, no cambia, por eso se !lama constante. En un a1goiro sa pueden obviar algunos detalles como el mensaje ingrese klos, y sola.ene n-e- la instrucción leer kil. También el me,:_e ce salida puede ser más simple como escribir kil*conver y dejar los detalles .-a l irgrama final. Así lo haremos en el s�. .,:e jemplo: Inga. Jenny M. Rodríguez V. S L . y rgramación � a, al �a.al ba * al, 2 * ( ba + al ) o simulación de 5 corridas: 1 1•=. s: 1 1 3 4 10 5 7 6 15 20 29 base y altura de un rectángulo y (entrada) ( proceso y salida ) área erímetro 1 4 12 14 50 30 42 26 300 70 �-R;-- � Seudocódigo de un programa que: = : ólares y despliegue Quezales, declarar una constante de cambio. • =- " )_ gadas y despliegue centímetros (1 pulg. = 2.54 cms.). • >a ; ados Celsius y los convierta a Fahrenheit ( F = ( 9 / 5 ) C + 32 ). • = -- ado de un cuadrado y despliegue área ( lado2 ) y perímetro ( 4 *lado ). • = = -adio y despliegue diámetro, área y perímetro del círculo (diámetro= 2 ��> área= T radio2 , pirímetro = 2 T radio). Inga. Jenny . Rodríguez V. Algoritmos v Proqramacióa 30 � 1.19. DIAGRAMAS DE FLUJO Se utilizan para representar un algoritmo en forma gráica, algunos de los símbolos son: ( inicio ) salida a pantalla � � e in ) /entrada/ proceso � � � - l t dire�ción - de flujo Un diagrama de flujo, también consta de entrada, proceso, salida así: inicio declaración de variables y constantes l / enirada / j proceso 1 (salida) � Inga. Jenny . Rodríguez V. �:dol :-s�nte real cambio=8.2 ""bir 'Ingrese Dolares:' -dol roir 'Quezales = ' , dol * cambio real: dol constante real cambio=8.2 / dol / ¡ < 'Quezales = ' , dol*cambio > onie� el usuario teclea 5: simulando 5 corridas del al oritmo: cambio dol 8.2 5 2 8.2 10 3 8.2 75 4 8.2 100 5 8.2 250 31 Mensa·e antalla . Quezales = 41 Quezales = 82 Quetzales = 615 Quezales = 820 Quezales = 2050 Inga. Jenny . Rodríguez . Algoritmos y Progamación J2 Resolvamos el ejemplo de convertir pulgadas a centímetros, pseudocódigo y d.f.: Pseudocódigo: iniqio real: pul constante real cambio=2.54 escribir 'Ingrese pulgadas: ' leer pul escribir 'Centímetros= ' , pul*ambio fin Diagrama de Flujo: real: pul ( inicio) ¡ constante real cambio=2.54 / pul/ l < 'Centímetros= ' , pul • cambio J Ingrese pu,gadas: 1 Centímetros = 254 i J Tabla con simulación de 5 corridas: corrida cambio 1 1 2.54 2 1 2.54 3 1 2.1 4 1 2.L 5 1. 2 -,-� pul Mensaje pantalla 1 Centimetros = 2.54 2 Centímetros = 5.08 5 Centímetros= 12.7 10 Centímetros = 25.4 50.5 Centímetros = 128.57 Inga. Jenny M. Rodriguez V. r. ramación 33 • ,-s .m programa que pida dos números, luego alcule y despliegue la :a y multiplicación de esos dos números que el usuario ingresó. .1:-�o y d.f.: � ,n2 �, - 'Ingrese dos números: ' "�·, n2 � • 'La suma es: ' , n1 + n2 �,· 'La resta es: ' , n1 - n2 �:"r 'La multiplicación es:', n1 * n2 real: n1, n2 / n1, n2 / ¡ 'La suma es: ' , n1 + n2 'La resta es: · , n1 - n2 'La multiplicación es: ' , n1 * n2 ue el usuario teclea 1 1 : Inga. Jenny M. Rodríguez V. Algoritmos y Prgamación 34 Tabla con simulación de 2 corridas: corrida Mensaje pantalla n1 n2 Mensaje pantalla Ingrese dos números: 1 1 La suma es: 2 ., La resta es: O La multiplicación es: 1 2 Ingrese dos números: 5 10 La suma es: 15 La resta es: -5 La multiplicación es: 50 . Ejercicios: Elaborar el diagrama de lujo de un programa que: • Pida grados Celsius y los convierta a Fahrenheit ( F = ( 9 / 5 ) C + 32 ). • Pida lado d� un cuadrado y despliegue área ( lado2 ) y perímetro ( 4 * lado ). • Pida radio y despliegue diámetro, área y perímetro del círculo ( diámetro= 2 radio, área= T radio2 , perímetro= 2 T radio) . • Pida base y altura de un rectángulo y calcule y despliegue área ( base * altura ) y parímetro ( 2 base + 2 altura ). Inga. Jenny M. Rodríguez V. , � amaión 2. PROGRAMACION EN C++ RUCTURA GENERAL DE UN PROGRAMA EN C++ : --.cs de preprocesador (header files, librerías, bibliotecas) :_,:a ·ones globales (variables y constantes) 2 : �on principal main( ) = r -es deinidas por el usuario ..>-�ios del programa (utilizados en su totalidad) eader file, .h de c, .hpp de c++ onstantes y macros del procesador, no siempre se usa ) / cabecera de la función ::jue de sentencias, terminan con ; _Q DE UN PROGRAMA SENCILLO EN C++ _ -o.cpp. Programa de saludo. :,= -a imprime Bienvenido a la programacion C++ _: << "Bienvenido a la programacion C++\n"; 35 "= J programa codificado en c++ que despliegue su nombre en una línea y -e o de carnet en otra línea. Inga. Jenny M. Rodríguez V. Algoritmos y Programación 2.3. TIPOS DE DATOS EN C++ Básicamente son: • Enteros • Coma flotantes (reales) • Caracteres ( char) • Lógicos (bool) Tipo Eiemplo Tamaño (bytes) bool o 1 char 'C' 1 shot int -15 2 unsiqned int 325 4 int 1024 4 unsigned long 262144 4 long 2000000 4 float 10.5 4 double .00045 8 lonqdouble 1e" 10 2.4. DECLARACIÓN DE VARIABLES: 36 Ranqo(Min-Max) O . . 1 -128 .. 127 -32768 .. 32767 0 . .4 2941967 295 -2147,483 648 .. 2147,483637 0 . .4 294,967 295 - 2147,483 648 . . 2147,483637 3.4*10° .. 3.4*1 oj 1 . 7*1 o·O .. 1 . 7*1 O'º 3 .4 *1 o,�,, •, 1 .1 *1 a-•�>L ipoDato NombreVariable = Valorlnicial; Ejemplos: int valor; int valor1, valor2; int valor= 99; int num_parte = 1141, num_items = 45; float valor = 99. 99; char dato_car; char letra='A'; bool bisiesto; bool bisiesto=tr ue; bool b2=false; Inga. Jenny M. Rodríguez V. 37 declarar constantes de dos maneras: utilizando #define o utilizando > 3.141593 // no signo igual, no ; onst TipoDato NombreConstante = ValorConstante; rt ,eses = 12; -a: arácter = '$'; =-sr int luna = 238857; // distancia en millas ,_:<< "Distancia a la Luna"<< luna<<· millas\n"; -: ..na_kilo; -2 _ kilo = luna*1.609; // una milla = 1.609 kilometros :_:<<"En Kilómetros es: • << luna_kilo << • kms.\n"; a a la Luna 238587 millas • --eiros es: 384320.913 Inga. Jenny M. Rodríguez V. Algoritmos y Programación 38 2.6. CARACTERES SECUENCIALES (CODIGOS) DE ESCAPE Código de Escape Signiicado '\n' Nueva línea '\r' Retomo decarro '\t' Tabulación horizontal '\v' Tabulación vertial '\a' Alerta (pitido sonoro) '\b' Retroceso de espacio '\f Avance de página 2.7. ENTRADA DE DATOS (cin) (consola input) Ejemplo: #include <iostream.h> void main() { } char primero, ultimo; cout << "Introduzca su primera y ultima inicial: "; cin >> primero >> ultimo; cout <<"Hola,"<< primero <<"."<< ultimo <<".!\n"; Salida a pantalla suponiendo que el usuario teclea C J: Introduzca su primera y ultima inicial: C J Hola C.J.! Simulemos esta v 4 corridas mas de este proorama en la síouíente tabla: corrí Mensaje en pantalla primero ultimo Mensaje en da pantalla 1 intrduza su orimera y ultima inicial e j Hola C . J.! 2 introauza s� oñmera y ultima inicial j R Hola J. R .! 3 Intrduza su pl.era y ultima inicial A B Hola A . B.! 4 introduza su piie:a y ultima inicial X X Hola X. X.! 5 introduza su pine-a y ultima inicial s M Hola S .M.! Inga. Jenny M. Rodríguez . r ramación 39 mplos de programas que incluyen codificación en c++, s el ejemplo de convertir Celsius a Fahrenheit, pseudocódigo, d.f. y Diagrama de Flujo: - el � ·r 'Ingrese grados Celsius: ' -el �:>·r 'Fahrenheit= ', (9 / 5) * cel + 32 (inicio) t real: cel t / cel / t < 'Fahrenheit= ', ( 9 / 5 ) * cel + 32 ·a: el; _� << ªIngrese grados Celsius: "; - >> cel; _: << "Fahrenheit: "« ( 9 / 5 ) * cel + 32; ue el usuario teclea 1: rama: Mensa·e antalla Fahrenheit: 33.8 Fahrenheit: 50 Fahrenheit: 68 Fahrenheit: 122 Fahrenheit: 212 Inga. Jenny M. Rodríguez V. Algoritmos y Prgramación 4Q Resolvamos el ejercicio del cuadrado, pseudocódigo, d.f. y codificación en c++: Pseudocódigo: inicio fin real: lad escribir 'Ingrese lado: ' leer lad escribir 'Area= ' , lad * lad escribir 'Perímetro= ' , 4 * lad Codificación en c++: #include < iostream.h > void main () { } float lad; cout << "Ingrese lado: "; cin >> lad; cout << "Area=" << lad * lad << endl; cout << "Perímetro= "<< 4 * lad; Diagrama de Flujo: inicio real: lad lad 'Area= ' , lad * lad 'Perímetro=' ,4 * lad fin Salida a pantalla suponiendo que el usuario teclea 1: Ingrese lado: 1 Area= 1 Perímetro= 4 Tabla de simulación de 5 corridas: c orrida Mensaje pantalla 1 Ingrese lado: 2 Ingrese lado: 3 1 Ingrese lado:i1 A 1 Ingrese lado: 5 1 1 1 Ingrese lado: lad Mensaje pantalla 1 Area= 1 Perímetro= 4 5 Area= 25 Perímetro= 20 7 Area= 49 Perímetro= 28 12 Area= 144 Perímetro= 48 23 Area= 259 Perímetro= 92 Inga. Jenny M. Rodríguez V. nte real pi=3.141593 .-ad -,· 'Ingrese radio: ' -ad -,·· 'Area=', pi* rad * rad : · 'Perímetro= ' , 2 * pi * rad : "at pi = 3.14159; o; J • << 'Ingrese radio: "; - >> -ad; Diagrama de Flujo: inicio constante real pi=3.1411593 real: rad rad 'Diámetro= ' , _2 * rad 'Area= ' , pi * rad * rad 'Perímetro=' . 2 *pi* rad fin : << 'Diametro= • << pi * rad * rad << endl; : << ·Area= " << pi * rad * rad << endl; :<< "Peri metro= • << 2 * pi * rad; : "!. 593 ----=- 5.283184 e s·mulación de 2 corridas: 41 pi Mensaje rad Mensaje pantalla antalla 3.141593 · Ingrese radio: 1 Diámetro: 2 3.141593 Ingrese radio: Area: 3.141593 Perímetro: 6.2831 5 Diámetro: 2 Area: 78.5398 Perímetro: 31.415 Inga. Jenny M. Rodrfguez . Algoritmos y amación 42 Ejercicios: Elaborar pseudocódigo, diagrama de flujo y codifiación en c++ de programa: • Que pida al usuario que ingrese kilos. El programa debe calcular y desplegar el equivalente a libras así: 1 kilo= 2.2 libras. • Que pida al usuario 3 números reales y alcule y despliegue la suma y el promedio de dichos números Inga. Jenny M. Rodríguez V. ramación de Asignación abreviados: asignación abreviada m += n m-=n m*=n m/=n mo=n * asignación no abreviada m= m+n m=m-n m = m*n m = m / n( cociente) m = m % n(residuo) () Decrementación --n - =- - . n-=1 n=n-1 43 Inga. Jenny M. Rodríguez V. Algoritmos y Programación Operadores Relacionales: Operador != > < >= <= Operadores Lógicos: Y ( and ): && O (ar): 11 NEGACIÓN (not): Significado igual a no iguala mayor que menor que mayor o igual a menor o igual a Ejemplo a==b a!= b a>b a<b a>= b a<= b 44 Inga. Jenny M. Rodríguez . e ramación RIA conio.h ( consola input/ output) • Scr( ); // borrar pantalla, deja el cursor en posición 0,0 45 • ireol( ); // borra línea actual desde posición actual al final de la línea • cprintf( ); // escribe salida con formato en consola (salto= \r\n ) • sanf( ); // lee caracteres con formato desde la consola • celline( ); // borrar línea completa actual, y desplazar hacia arriba as líneas que haya debajo • getch( ); // lee un carácter sin eco desde la consola • �etche( ); // lee un carácter con eco desde la consola • �etpass( ); // lee password que no se visualiza ( 8 caracteres ) • gotoxy(int c, int f); // mueve cusor a posición c (columna), f (fila) • ighvideo( ); // activa caracteres de alta intensidad • - port, inportb // leer desde puetos de entrada/salida • - sline( ); // inserta línea en blanco en la posición del cursor • ovideo( ); // activa caracteres de baja intensidad • ,ormvideo( ); // reinicializa atributos de texto a valores originales • outport, outportb // escribe en pueto de entrada/salida • textbackground( int #color ); // color de fondo • !extcolor( int #color ); // color de texto visualizado por cprinf y csanf • 1here( x ); //devuelve coordenada x (columna) de la posición actual del cursor • where( y ); //devuelve coordenada y (fila) de posición actual de cursor colores: O: negro -> 15: blanco ormatos: cprintf y cscanf: código: formato: �ic carácter %d entero decimal ¾e real ( double o float ), notación científica of-' \flotante %i entero os cadena de caracteres (string) ox hexadecimal sin signo Inga. Jenny M. Rodríguez V. Algoritmos y Programación // probando algunas funciones de libreria conio ... #include <iostream.h> #include <conio.h> main( ) { cout << "probando libreria conio ... " << endl; getch(); textbackground(1 ); clrscr( ); // color de fondo cout << "probando textbackground ... " << endl; getch( ); 46 textcolor(2); cout << "probando textcolor ... no funciona con cout" << endl; getch( ); } cprintf("probando cprintf ... \n\r"); getch( ); float n1=3.141593; int n2=10; cprintf("123456789+123456789+123456789+123456789+123456789+\\n"); cprintf("EI producto de %10.6f * %5i = %15.8F,n1 ,n2,n1 *n2); getch( ); char dia; gotoxy( 20,20 ); cprintf("ingrese dia: "); cscanf("%c:",&dia); cprintf(\n\rEI dia ingresado es %c \n\r",dia); cout << "Usted ingreso el día: " << dia << endl; getch( ); getch( ); Teclee y ejecute el programa anterior y podrá obsevar cómo trabajan algunas de las funciones de la librería conio.h Inga. Jenny M. Rodríguez V. • mación JONES MATEMÁTICAS bcd.h, complex.h, float.h, math.h, stdlib.h LIBRERÍA math.h · ones Matemáticas: { x ) // valor absoluto de x x ) // redondea al entero superior =o{ x ) // redondea al entero mas próximo �( x, y ) // residuo de x/y , x, y ) // potencia: xY =1( x ) // raíz cuadrada de x ( x >= O ) ·ones Trigonométricas: �- ( x) // seno de x (radianes) S( x ) // coseno de x :n( x) // tangente de x asín( x ) // arco seno de x aos( x ) // arco coseno de x ;:an( x ) // arco tangente de x :Oh( x) // seno hiperbólico de x osh( x ) // coseno hiperbólico de x :anh( x ) // tangente hiperbólica de x - : _nciones Logarítmicas y Exponenciales: exp( x ) // exponencial natural de x ( ex ) log( x ) // logaritmo natural de x ( x > O ) log10( x) // logaritmo base 10 de x ( x >O) • Otras: hy pot(x,y) // calcula hipotenusa con catetos x, y 47 Inga. Jenny M. Rdríguez . Algoritmosy Pogramación Codificación en C++: #include <iostream.h> #include <conio.h> void main() { int mat[ 2 ][ 3 ] , f ,c; for( f = O; f < 2; f++ ) // ciclos para llenar matriz far( c = O; c < 3; c++ ) mat[ f] [ c] = O; far(f = O; f < 2; f++ ) // ciclos para imprimir matriz { far( c ; O; c < 3; c++ ) 171 cout << mat[ f] [ c] « ". "; imprime casilla y deja espacio cout << endl; // salto de linea al terminar de desplegar las columnas } getch( ); } Resultado en pantalla: I º º º o o o · Tabla simulando la corrida del anterior programa, primer par de ciclos llenando mat: Corrida f c mat[ f ] [ e ] = O 1 o o mat[ O 1 [ O 1 = O 1 mat[ O ][ 1 ] = O 2 mat[ O ] [ 2 ] = O 1 o mat[ 1 ] [ O J = O 1 matf 1 l í 1 l = O 2 mat[ 1 ][ 2 1 = O El resultado en memoria será un cero en cada casilla de la matriz: ! mat Columna O Columna 1 Columna2 1 Fila O o o o i Fila 1 o o o Inga. Jenny M. Rodríguez V. Algoritmos y Programación 172 Otro ejemplo: Veremos un programa que declara una matriz de 5 filas por 5 columnas, enteras, se desea llenar dicha matriz con números aleatorios entre O y 49; para mayor claridad del programa, se imprimirá en otro par de ciclos diferentes de los utilizados para llenar la matriz. Pseudocódigo: inicio in entero: mat[ 5 ] [ 5 ], f , c para f desde O hasta 4 paso 1 hacer para c desde O hasta 4 paso 1 hacer mat[ f ] [ e ] = random( 50 ) fin_para fin_para para f desde O hasta 4 paso 1 hacer para c desde O hasta 4 paso 1 hacer escribir mat[ f) [c) fin_para finpara inicio Diagrama de Flujo: entero: mat[ 5 ] [ 5 ], f, c f = O, 4, 1 c = O, 4, 1 mat[ f] [ e] = random( 50 ) f = O, 4, 1 e= O, 4, 1 mat[ f ][ c] in Inga. Jenny M. Rodríguez V. Algoritmos y Programación Codificación en C++: // mataleatorios.cpp llenando matriz con numeras aleatorios #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int mat[ 5 ] [ 5 ], f, c; randomize( ); for( f = O; f < 5; f++ ) for( c = O; c < 5; e++ ) 173 mat[ f] [ e] = random( 50 ); // llenando matriz con números aleatoris for( f = O; f < 5; f++ ) { - o r ( e = O; e < 5; e++ ) cout « mat[ f] [e]« " "· // imprimiendo matriz cout << endl; } getch( ); } Resultado en pantalla: 43 9 23 12 24 17 24 23 22 2 7 30 20 25 36 37 36 6 5 26 28 33 12 35 5 Inga. Jenny . Rodríguez . . Algoritmos y Programación 174 1 1 ! 1 1 : i 1, :,: Tabla simulando la corrida del anterior programa, llenando mat con números aleatorios entre O v 49: Corrida f e 1 o o 1 2 3 4 1 o 1 2 3 4 2 o 1 2 3 4 3 o 1 2 3 4 4 o 2 3 4 primer par de ci mat[ f] [e]= random( 50) matf O] O 1 = 43 matf O] 11 = 9 mat[ O l 2 l = 23 mat[ O] 31=12 matf O ] 4 1 = 24 matf 1 l O 1 = 17 matf 1 l 1 1 = 24 matf 1 1 2 l = 23 matf 1 l 3 l = 22 matf 1 1 41 = 2 mat[ 2 l O]= 7 matf 2 l 1] = 30 mat[ 2 ] 2 J = 20 mat[ 2 ] 3 1 = 26 matf 2 1 f 4 1 = 36 matf 3 1 O 1 = 37 matf 3 l f 1 ] = 36 mat[ 3] 2] = 6 mat[ 3] 3]= 5 mat[ 3 J 4 ] = 26 matf 4 ] f O 1 = 28 matf 4] 1l =33 matf 4 1 f 2 l = 12 matf 4 1 f 3 l = 35 matf 4 l 4] = 5 clos El esultado en memoria será un número aleatorio entre O y 49 en cada casill a de la matriz: mat Columna Columna Columna Columna Columna o 1 2 3 4 Fila O 43 9 23 12 24 Fila 1 17 24 23 22 2 Fila2 7 30 20 25 36 Fila 3 37 36 6 5 26 Inga. Jenny M. Rdríguez . Algoritmos y Programación 175 Otro ejemplo: Veremos un programa que declara una matriz de 2 ilas por 3 columnas, enteras. se desea llenar dicha matriz con datos ingresados por el usuario; para mayor claridad del programa, se imprimirá en otro par de ciclos diferentes de los utilizados para llenar la matriz. Pseudocódigo: inicio fin entero: mat[ 2] [ 3 ], f, c para f desde O hasta 1 paso 1 hacer para e desde O hasta 2 paso 1 hacer escribir "Ingrese valor·, f, • ,", c, ":" leer mat[ f] [ c ] fin_para fin_para para f desde O hasta 1 paso 1 hacer para e desde O hasta 2 paso 1 hacer escribir mat[ f] [c ] fin_para fin_para inicio Diagrama de Flujo: entero: mat[ 2] [ 3 ], f, f = O, 1, 1 c = O, 2, 1 mat[ f][ c] f = O, 1, 1 c = O, 2, 1 mat[ f ][ c] fin Inga. Jenny M. Rodríguez . Algoritmos y Programación Codiicación en C ++: // matusuario.cpp llenando matriz con datos ingresados por usuario #include <iostream.h> #include <conio.h> void main() { int mat[ 2 J [ 3 1, f, e; far( f = O; f < 2; f++ ) far( e = O; e < 3; e++ ) { cout << "Ingrese valor"<< f << ","<<e<<":"; cin » mat[ f] [ e J; } far( f = O; f < 2; f++ ) { } far( e = O; e < 3; e++ ) cout << mat[ f] [e]«" "· cout << endl; getch( ); } Resultado en pantalla: lnmese valor O O: 1 O Ingrese valor O 1 : 20 Ingrese valor O 2: 30 Ingrese valor 1 O: 40 Ingrese valor 1 1: 50 Ingrese valor 1 2: 60 10 20 30 40 50 60 176 Inga. Jenny M. Rodríguez V. Algoritmos y Programación 177 Tabla simulando la corrida del anterior programa Corrida f e Usuario 1 o o 10 1 In 20 2 In 30 1 o In 40 1 In 50 2 In 60 El resultado en memoria mat Columna O Columna 1 Colm,ma2 Fila O 10 20 30 Fila 1 40 50 60 Inga. Jenny M. Rodríguez . Algoritmos v Programación 178 Ejercicios: Elaborar pseudocódigo, diagrama de flujo y codificación en c++ de un programa que: 1. Declare una matriz entera de 4 filas por 4 columnas. En la fila O, poner O en todas las columnas, en la fila 1, colocar 1 en todas las columnas de esa fila, y así sucesivamente. Imprimir matriz. 2. Declare una matriz entera de 1 O filas por 1 O columnas. Llenar la matriz con las tablas de multiplicar. Imprimir matriz. 3. Declare matriz de 24 filas por 3 columnas, en la que se guardarán las temperaturas menor, mayor y promedio ingresadas por el usuario ( en las 3 columnas ), de cada hora de un día ( filas ), las temperaturas pueden contener decimales. Imprimir la matriz. Inga. Jenny M. Rodríguez V. Algoritmos y Programación 179 6.4. MATRICES PARALELAS: Se refiere al manejo simultáneo de dos o mas matrices como en los siguientes ejemplos: Ejemplo: Ahora trabajaremos con 3 matrices de 4 filas por 4 columnas, mat1, mat2, mat3; llenaremos las 2 primeras con números aleatorios y la tercera será la suma de las dos primeras: Pseudocódigo: inicio fin entero: mat1[ 4] [ 4 ], mat2[ 4] [ 4 ], mat3[ 4] [ 4 ], f, c para f desde O hasta 3 paso 1 hacer para c desde O hasta 3 paso 1 hacer mat1 [ f ][ c ] = rand( 1 O ) mat2[ f] [ c ] = rand( 1 O ) mat3[ f] [ c ] = mat1 [ f J [ c ] + mat2[ f ] [ e ] fin_para fin_para para f desde O hasta 3 paso 1 hacer para c desde O hasta 3 paso 1 hacer escribir mat1 [ f J [c] fin_para escribir espacio para c desde O hasta 3 paso 1 hacer escribir mat2[ f J [ e ] fin_para escribir espacio para e desde O hasta 3 paso 1 hacer escribir mat3[ f J [ e ] fin_para escribir salto de línea in_para Inga. Jenny M. Rodríguez V. Algoritmos y Progamación Diagrama de Flujo: inicio entero: mat1[ 4] [ 4], mat2[ 4] [ 4 ], mat3[ 4] [ 4], f, e f = o, 3, 1 e= O, 3, 1 mat1 [ f] [ e ] = random( 1 O ) mat2[ f] [ e ] = random( 1 O ) mat3[ f] [ e ] = mat1 [ f] [ e ] + mat2[ f] [e] f = O, 3, 1 e= O, 3, 1 mat1 [ f] [e] e= O, 3, 1 mat2[ f] [e) e= O, 3, 1 mat3[ f l[ e] salto de línea fin 180 Inga. Jenny M. Rodíguez . Algoritmos y Programación Codificación en C++: // matsumaaleatorios: suma de matrices aleatorios ... #include <iostream.h> #include <conio.h> #include <stdlib.h> void main( ) { int mat1 [ 4 ] [ 4 ], mat2[ 4 ] [ 4 ], mat3[ 4 ] [ 4 ], f, c; randomize( ); for( f = O; f < 4; f++ ) // llenando matrices for( c = O; c < 4; c++ ) { mat1 [ f J [ c] = random(10}; mat2[ f] [ c ] = random( 1 O); mat3[ f] [e] = mat1 [ f] [e] + mat2[ f] [c ]; } or( f = O; f < 4; f++ ) // desplegar matrices { } for( c = O; c < 4; c++ ) cout << mat1 [ f] [ c] « " "; // matriz1 cout << "\t\t"; for( c = O; e < 4; c++) cout << mat2[ f] ( c] << " "; // matriz2 cout « ''\t\t"; for( e = O; e < 4; e++ ) cout << mat3[ f J [e]«" "; // matriz3 cout << endl; getch( ); } 181 Inga. Jenny M. Rodríguez V. Algoritmos y Pogramación Resultado en pantalla: 3 5 5 9 O 6 O 8 9 4 2 2 7 6 1 6 O 7 8 5 8 8 7 7 3 1 4 2 O 6 9 6 3 11 5 17 16 10 3 8 8 15 15 12 3 7 13 8 182 Tabla simulando la corrida del anterior programa, primer par de ciclos llenando matrices mat1 y mat2 con aleatorios entre O y 9, mat3 es la suma de mat1 + mat2: corida f e 1 o o 1 2 3 1 o 1 2 3 2 o 1 2 3 3 o 1 2 3 mat1[ f1 í e 1 mat1í O 1 f O 1 = 3 mat1 f O l f 1 1 = 5 mat1 [ O l [ 2 l = 5 mat1 [ O J [ 3 1 = 9 mat1 [ 1 ][ O l = 9 mat1 [ 1 ] [ 1 ] = 4 matH 1 f 21 = 2 mat1 f 1 ] [ 3 ] = 2 mat1 f 2 lí O l = O mat1 [ 2 ] [ 1 ] = 7 mat1 [ 2 ] [ 2 ] = 8 mat1 [ 2 ] [ 3 ] = 5 mat1 f 3 l f O ] = 3 mat1 [ 3 ][ 1 ] = 1 mat1 f 3 l f 2 l = 4 mat1 f 3 l f 3 l = 2 mat2í f [ e 1 mat3í f líe l mat2f O 1 í O 1 = O mat3f O 01= 3 mat2f O 1 f 1 1 = 6 mat3f O 1 l = 11 mat2[ O 1 f 21 = O mat3f O 21= 5 mat2[ O l [ 3 1 = 8 mat3f O 3]=17 mat2[ 1 ] f O ] = 7 mat3f O 1 ] = 16 mat2[ 1 ] [ 1 J = 6 mat3[ 1 1] = 10 mat2f 1 l [ 2 ] = 1 mat3[ 1 21= 3 mat2í 1 } [ 3 ] = 6 mat3f 1 31= 8 mat2f 2 l f O J = 8 mat3f 2 01= 8 mat2[ 2 1 [ 1 l = 8 mat3f 2 1] = 15 mat2f 2 ] [ 2 ] = 7 mat3f 2 2] = 15 mat2[ 2 ] [ 3 l = 7 mat3f 2 3) = 12 mat2f 3 l [ O ] = O mat3[ 3 01= 3 mat2f 3 ] [ 1 ] = 6 mat3[ 3 11= 7 mat2f 3 l f 2 1 = 9 mat3[ 3 21 = 13 mat2f 3 l f 3 l = 6 mat3f 3 · 3 1 = 8 El esultado en memoria serán datos aleatorios entre O y 9 en cada casilla de las 2 1 d matices mat1 y mat , mat3 es a suma mat col col col col mat col col 1 o 1 2 3 2 o 1 fila O 3 5 5 9 o 6 fila 1 9 4 2 2 7 6 fila 2 o 7 8 5 8 .8 fila 3 3 1 4 2 o 6 e mat1 + mat2: col col mat col col col col 2 3 3 o 1 2 3 o 8 3 11 5 17 1 6 16 10 3 8 7 7 8 15 15 12 9 6 3 7 13 8 Inga. Jenny . Rodríguez V. Algoritmos y Prgramación 183 Otro ejemplo: Aunque no es con matrices paralelas, elaboremos un programa que declare 2 matrices: mat de 2 filas por 3 columnas, y tra de 3 filas por 2 columnas, enteras, pediremos al usuario los datos de mat y generaremos tra como la transpuesta de mat (filas de mat pasan a columnas de tra; columnas de mat pasan a filas de tra). Pseudocódigo: inicio fin entero: mat[ 2 ] [ 3 ], tra[ 3 ] [ 2 ], f, c para f desde O hasta 1 paso 1 hacer para c desde O hasta 2 paso 1 hacer escribir "Ingrese valor:", f, e leer mat[ f] [ c] tra[ c ] [ f] = mat[ f] [ e ] fin_para fin_para para f desde O hasta 1 paso 1 hacer para c desde O hasta 2 paso 1 hacer escribir mat[ f J [c] fin_para fin_para para f desde O hasta 2 paso 1 hacer para e desde O hasta 1 paso 1 hacer escribir tra[ f 1 [ e ] fin_para fin_para Inga. Jenny M. Rodríguez V. Algoritmos y Programación 184 Diagrama de Flujo: entero: mat[ 2 ] [ 3 ], tra[ 3 J [ 2 ], f, e f = O, 1, 1 e = O, 2, 1 mat [ f ][ e 1 tra[ e ] [ f J = mat[ f J [ e J f = O, 1, 1 e= O, 2, 1 mat[ f}[ e J f = O, 2, 1 c = 0,1,1 tra[ f He 1 Inga. Jenny M. R<�dríguez V. Algoritmos y Programación Codificación en C++: // matra.cpp: matriz y transpuesta, pide datos al usuario ... #include <iostream.h> #include <conio.h> void main() { int mat[ 2] [ 3 ], tra[ 3 J [ 2 ], f, e; far( f = O; f < 2; f++ ) // filas far( e = O; e < 3; e++ ) // columnas { } cout << "ingrese valor" << f << "," << e << A: "; cin » mat[ f] [e]; // pidiendo datos al usuario tra[ e] [ f] = mat[ f] [e]; // llenando transpuesta cout << "\nDatos de Matriz:" << endl; far( f = O; f < 2; f++ ) // imprimiendo mat { } ar( e = O; e < 3; e++ ) cout « mat[ f] [ e J « "\t"; / mat cout << endl; cout << "\nDatos de Transpuesta:" << endl; ar( f = O; f < 3; f++ ) // imprimiendo tra { } far( e = O; e < 2; e++ ) cout « tra[ f J [e] « ''\t"; / transpuesta cout << endl; getch( ); } 185 Inga. Jenny M. Rodríguez V. Algoritmos y Programación Resultado en antalla: Ingrese valor O O: 100 Ingrese valor O 1: 200 Ingrese valor O 2: 300 Ingrese valor 1 O: 400 Ingrese valor 1 1: 500 Ingrese valor 1 2: 600 Datos de Matriz: 100 200 300 400 500 600 Datos de Transpuesta: 100 400 200 500 300 600 186 Tabla simulando la corrida del anterior programa, primer par de ciclos llenando matriz mat con datos ingresados por el usuario y tra con datos trans uestos: corrida f e pantalla usuario mat f] e tra [ e f 1 o o In rese valor 0,0: 100 mat O o = 100 tra O o = 100 1 In rese valor O, 1: 200 mat O 1 = 200 tra 1 O]= 200 2 In rese valor 0,2: 300 mat O 2 = 300 tra 2 o = 300 1 o In rese valor 1,0: 400 1 o =400 tra o 1 = 400 1 In rese valor 1, 1 : 500 1 1 = 500 tra 1 ( 1 ] = 500 2 In rese valor 1,2: 600 1 2 =600 tra 2) ( 1] = 600 El resultado en memoria de los datos ingresados por el usuario en cada casilla de la matriz mat: mat columna O columna 1 columna 2 la O 100 200 300 ila 1 400 500 600 El resu tado en memoria e os . d I d atos asigna d t . t os a ma nz ra tra columna O columna 1 fila O 100 400 fila 1 200 500 fila 2 300 600 Inga. Jenny M. Rodríguez V. Algoritmos y Programación 187 Ejercicios: Elaborar pseudocódigo, diagrama de flujo y codificación en c++ de un programa que: 1. Declare 3 matrices enteras de 7 filas por 7 columnas. Pedir al usuario los datos de mat1 y mat2 y genear mat3 como la dierencia de los datos de mat1 - mat2. Desplegar las 3 matrices. 2. Declare 2 matrices reales, de 3 filas por 5 columnas (mat1 y mat2), en mat1 se registrarán ( pedir al usuario ), las ventas de cada vendedor ( 3 filas, una por vendedor ) para cada semana ( 5 columnas, una por semana ), y en mat2 se generaá el 20% de las comisiones que correspondan a cada dato que el usuario haya ingresado en mat1. Se requiere imprimir ambas matrices. Inga. Jenny M. Rodríguez V. Algoritmos y Programación 188 6.5. ARREGLOS DE MAS DE DOS DIMENSIONES (MULTIDIMENSIONALES): Se pueden manejar arreglos de cualquier número de dimensiones. :o� e}e:p!o 3 dimensiones como un cubo que tiene filas ( alto ), columnas ( ancho ), y planos o rangos ( profundidad ). También arreglos tetradimensionales ( 4 dimensiones ), pentadimensionales ( 5 dimensiones), 6, 7, ... , n dimensiones, aunque en la vida real rara vez utilzamos mas de 3 dimensiones. Para declarar un arreglo multidimensional, se enlista el tamaño máximo de todas las dimensiones del arreglo: Así, si queremos declarar un arreglo tridimensional: tipo nombre areglo [ número planos J [ número _las J [número_ columnas]; Ejemplo: real temp [ 5 ] [ 25 ] [ 366 ] ( En c++: float temp[ 5 ] [ 25 ] [ 366 ] ; ) para guardar las temperaturas de cada día en cada uno de los 23 departamentos por 5 años. Este arreglo tendrá capacidad para 5 * 23 * 366 = 42,090 datos ( casillas ). Otro ejemplo: carácter libro [ 250 ] [ 25 ] [ 80 ] ( En c++: char libro [ 250 ] [ 25 ] [ 80 ] ; ) El arreglo libro nos permite almacenar todas las letras (80 caracteres, columnas ), para cada línea ( 25 filas ), para cada una de las páginas de un libro de 250 páginas.Tiene capacidad para almacenar 250 * 25 * 80 = 500,000 datos(casillas). Inga. Jenny M. Rodríguez V. Algoritmos y Programación 189 Asignar valores: Ejemplo: tenp [ 1 ] [ 2) [ 3 ] = 26.5; // temperatura el día 3 en departamento 2 del año 1 escribir 'Ingrese valor O, 1, 2' // pidiendo datos al usuario leer temp [ O J [ 1 ] [ 2 J; Extraer o Accesar Valores: Ejemplo: temperatura= temp [ 1 ] [ 1 ] [ 1 ]; // asignando el dato a otra variable escribir temp [ 2 ] [ 2 ] [ 2 ]; // desplegando el dato MEDIANTE CICLOS ANIDADOS La manera más fácil de acceder a la información del arreglo es mediante ciclos anidados utilizando el ciclo más externo como el ciclo de los planos, el ciclo medio como el ciclo de las filas y el ciclo más interno como el ciclo de las columnas. far ( int lndicePlano = O ; lndicePlano < NumPlanos; ++ lndicePlano ) for ( int lndiceFila = O ; lndiceFila < NumFilas ; ++lndiceFila ) far ( int lndiceCol = O ; lndiceCol < NumCol ; ++ lndiceCol ) < Procesar elemento [ lndicePlano] [ lndiceFila] [lndiceCol J ; > Inga. Jenny M. Rodrfguez V. Algoritmos y Programación 6.6. MANEJO DE ARREGLOS UTILIZANDO FUNCIONES: 190 Uno de los primeros ejemplos que observamos acerca de arreglos es un programa en el que, dentro de un ciclo, se le piden datos al usuario, se van guardando los datos en un arreglo, y en otro ciclo se despliegan dichos datos. Ahora veremos un ejemplo parecido, pero utilizaremos una función para pedir los datos e irlos guardando en el arreglo y otra función para desplegarlos; ambas serán llamadas desde el programa principal. Utilizaremos como parámetros el arreglo y el número de datos que el usuario ingrese. En c++, cuando pasamos un arreglo entre los parámetros, siempre es pasado por referencia ( aunque no pongamos el & ), ya que consumiría mucha memoria si el compilador creara copias de arreglos para cada subprograma. Se declara la constante global LONG=100 indicando que el arreglo tiene capacidad para guardar 100 elementos. Si se requieren mas o menos elementos, modificar el valor de dicha constante, por ejemplo así: const int LONG= 50; O así: const int LONG= 2000; Veamos el programa: Inga. Jenny M. Rodríguez V. Algoritmos y Programación Codificación en e++: #include <iostream.h> #include <conio.h> 191 const int LONG = 100;/maximo numero de casillas del arreglo, se puede cambiar void ingresar( double a[], int& n) // subprograma de ingreso de datos { } n = O; cout << "Introduzca datos. Para terminar pulsar -1: \n"; for {n = O; n < LONG; n++ ) { cout << "elemento " << n << ": "; cin >> a[ n ]; if ( a[ n J == -1 ) break; } // far void imprimir( double a[ ], const int n, double& prom ) // subprograma que lista { } double suma=O; far( int i = O; i < n; i++ ) { } cout << ''\t" << i << " : " << a[ i ] << endl; suma + = a[ i ]; cout << "La suma en procedimiento es: " << suma << endl; prom=suma/n; cout << "El promedio en procedimiento es: " << prom << endl; void main() { } double a[ LONG ], prom = O; int n; ingresar( a, n ); // a=arreglo, n=numero de elementos ingresados p/usuario cout << "\nEI areglo tiene " << n << " elementos, que son:\n"; imprimir( a, n, prom ); cout << "El promedio en main es: " << prom << endl; getch( ); Inga. Jenny . Roguez . Algoritmos v Programación 192 Resultado en panta)la, suponiendo que el usuario teclea los datos 1 O 20 30: Introduzca datos. Para terminar pulsar -1: elemento O: 1 O elementou1: 20 elemento 2: 30 elemento 3: -1 El arreglo tiene 3 elementos, que son: O: 10 1 : 20 2: 30 La suma en procedimiento es: 60 El promedio en procedimiento es: 20 El promedio en main es: 20 Inga. Jenny M. Rodríguez V. Algoritmos y Programación 193 En el siguiente ejemplo, vemos un programa que declara una matriz en el programa principal, llama a un procedimiento para que llene dicha matriz con números aleatorios y llama a otro procedimiento para que despliegue los datos de la matriz. Se pueden modificar fácilmente las dimensiones de la matriz modificando los valores de las constantes globales FILAS y COL. Codificación en c++: #include <iostream.h> #include <conio.h> #include <stdlib.h> const int FILAS = 5; 11 puede modificar este valor para mas o menos filas const int COL = 5; !! puede modificar este valor para mas o menos columnas void llenar( int mat[ FILAS ] [ COL ] ) // llenar matriz con aleatorios { randomize( ); ar( int f = O; f < FILAS; f++) for( int e = O; c < COL; c++ ) mat[ f] [ e ] = random( 100 ); // aleatorios entre O y 99 } void desplegar( int mat[ FILAS J [COL]) // desplegando matriz { far( int f = O; f < FILAS; f++ ) { } } for( int e = O; e < COL; c++ ) cout « mat[ f J [ e J « "\t"; cout << endl; void main() { int mat[ FILAS] [ COL J; llenar( mat ); // llamando procedimiento que llena matriz desplegar( mat ); // llamando procedimiento que despliega matriz getch( ); } Inga. Jenny M. Roguez V. Algoritmos y Programación 194 Resultado en pantalla. El usuario no introduce ninqún dato: 72 5 26 21 94 16 69 75 49 58 75 44 80 48 31 43 55 93 99 21 68 4 78 69 94 Inga. Jenny M. Rodríguez . Algoritmos y Programación 195 6.7. CADENAS DE CARACTERES C++ no tiene datos predeinidos tipo cadena (string); en su lugar, c++ manipula cadenas mediante arreglos de caracteres que terminan con el carácter nulo ASCII: \O Se accede a una cadena mediante un apuntador al primer carácter de la cadena. El valor de una cadena es la dirección (constante) de su primer carácter. Por lo tanto, una cadena es un apuntador constante; de hecho, un apuntador al primer carácter de la cadena, igual que en los otros arreglos. Declaración de un arreglo de caracteres: char color [ 1 O ] ; // declara un arreglo llamado color con 1 O casillas color o 1 2 3 4 5 6 7 8 Declarando e inicializando un arreglo de caracteres: 9 char color [ 1 O] = { 'a' , 'z' , 'u' , 'I' } ; // declarando e inicializando ar. de caracteres color 1 a I z O 1 1 u 11 2 3 4 5 6 Declarando e inicializando una cadena de caracteres: 7 8 9 char color [] = "azul"; // cadena entre comillas, al final asigna carácter nulo: \O color 1 a I z O 1 2 3 4 5 6 Otra manera: escribiendo separadamente cada letra: 7 8 char color [] = 'a', 'z' , 'u' , 'I' , '\O' ; // cada carácter entre apóstrofos color 1 a I z O 1 1 u 11 1 \O 2 3 4 5 6 7 8 9 9 Inga. Jenny M. Rodríguez V. Algoritmos y Programación Teclee el siguiente programa y observe los resultados: #include < iostream> #include < conio> void main() { char texto[ 80 ]; // declarando char orden[ 40 ]; // declarando char color[] = "azul"; // declarando e inicializando, al final asigna \O cout << color<< endl; // despliega azul sin las comillas 196 cout << "Tamano del arreglo:"<< sizeof (color)<< endl; // despliega 5 cout << "O: " << color[ O] << endl; // despliega a cout << "1: " << color[ 1 ] « endl; // despliega z cout << "2: " << color[ 2] << endl; JI despliega u cout << "3: " << color[ 3] « endl; // despliega 1 cout << "4: " << color[ 4] << endl; // despliega vacio cout << "5: " << color[ 5] << endl; // despliega vacío char num[ ]={ 'u' , 'n' , 'o' , '\O'}; // declarando e inicializando cout << num << endl; // despliega uno cout << "Tamano del arreglo: " << sizeof( num ) << endl; // despliega 4 cout << "O: " << num[ O] << endl; // despliega u cout << "1: " << num[ 1 ] << endl; // despliega n cout << "2: " << num[ 2] « endl; // despliega o cout << "3: " << num[ 3] << endl; // despliega vacio const char *ptrnombre = "Pepe"; cout << "Tamano de ptrnombre: "<< sizeof( ptmombre) << endl; cout << "ptmombre: " << ptmombre << endl; // despliega Pepe cout << "&ptrnombre: "<< &ptrnombre << endl; // despliega direccion de P cout << "*ptmombre: " << *ptrnombre << endl; // despliega indireccion: P cout << "O:"« ptmombre[ O]<< endl; // despliega P cout << "1: " << ptrnombre[ 1 ] << endl; // despliega e Inga. Jenny M. Rodríguez V. Algoritmos y Programación cout « "2: " « ptrnombre[ 2 ] << endl; // despliega p cout « "3: " « ptrnombre[ 3] << endl; // despliega e cout << "4: "<< ptmombre[ 4] << endl; // despliega vacio getch{ ); 197 Inga. Jenny M. Roguez . Algoritmos v Programación 198 Cuando le pedimos al usuario que ingrese los datos a guardar dentro de una cadena, si utilizamos la instrucción cin >> para leer y guardar en la cadena, perderemos los datos que estén después de un espacio ingresado por el usuario. Por ejemplo: si le pedimos al usuario que ingrese un nombre y éste teclea Isaac Newton, en la cadena sólo se guardará Isaac, se perderá lo que esté después de un espacio. Para evitar esto se utiliza la función: gets( nombre_cadena ); que pertenece a librería stdio o la función:cin.getline ( nombre_cadena , largo_cadena ); que pertenece a librería iostream como veremos en el siguiente ejemplo: // cadlectura.cpp leyendo cadenas de caracteres ... #include <iostream.h> #include <conio.h> #include <stdio.h> // contiene gets( ) void main() { char nombre[ 30 ]; cout << "ingrese nombre:"; cin >> nombre; // el usuario ingresa Isaac Newton cout << nombre << endl; // despliega Isaac, espacio = fin de cadena cout << "ingrese nombre: "; gets( nombre ); // el usuario ingresa Isaac Newton cout << nombre << endl; // despliega Isaac Newton getch( ); } // en lugar de gets( nombrecadena ) se puede utilizar cin.getline // cin.getline( nombrecadena, largocadena ) ; Inga. Jenny M. Rodríguez V. Algoritmos y Programación 199 La librería string.h contiene muchas funciones para manipular cadenas de caracteres, veamos algunas: #include <iostream.h> #include <conio.h> #include <string.h> void main() { char cadena[100J="lsaac Newton"; // declarando e inicializando cout << "cadena: " << cadena << endl; // despliega Isaac Newton // strlen: largo de una cadena cout << "largo de cadena:"<< strlen(cadena) << endl; // despliega 12 // strcpy: asignar a una cadena // cadena="George Washigton"; // no se le puede ambiar valor es un puntero constante strcpy(cadena,"Buenos Dias"); // inicializa y copia Buenos Dias en adena, cout << "Asignar Buenos Dias a cadena: " << cadena << endl; / despliega Buenos Dias // strcat: concatenar: añadir una cadena a otra strcat( cadena," Guatemala"); cout << "Concatenar Guatemala a cadena: " << cadena << endl; / despliega Buenos Dias Guatemala // strcmp: comparar cadenas; retorna un valor entero: // negativo si la primera es menor; O si son iguales, positivo si la pimea es mayor cout << "Comparando hola con HOLA: " << strcmp("hola�,"HOLA·) << endl; //despliega 32, hola es mayor que HOLA cout << "Comparando HOLA con HOLANDA: " « strcmp(ªHOLAª,"HOLANDN) « endl; // despliega -79, HOLA es menor Inga. Jenny M. Rodríguez . Algoritmos y Programación 200 // strrev: invierte los caracteres de una cadena cout << "Invirtiendo hola: "<< strrev("hola") << endl; // despliega aloh // strupr: convierte a mayusculas; strlwr: convierte a minusculas cout << "Convirtiendo Hola a mayusculas: " << strupr("Hola") « endl; // despliega HOLA cout << "Convirtiendo Hola a minusculas: " << strlwr{"Hola") « endl; // desoliega hola // strcspn: busca un caracter dentro de una cadena, // retorna el numero de posicíon en donde encontro, // si no existe, retorna el numero del caracter nulo \O cout << "Buscar o dentro de Hola: " << strcspn("Hola","o") << endl; // despliega 1, posicion de la o cout << "Buscar x dentro de Hola: " << strcspn("Hola","x") << endl; // despliega 4, fuera de posicion char *resultado; resultado=strstr("Adios mundo","mu"); // buscando mu dentro de Adios mundo cout << "Resultado de buscar mu dentro de Adios mundo: " << resultado << endl; resultado=strstr("Adios mundo","ma"); // buscando mu dentro de Adios mundo cout << "Resultado de buscar ma dentro de Adios mundo: " << resultado << en.di; getch( ); } Inga. Jenny M. Rodríguez V. Algoritmos y Programación 201 La función strtok Permite romper una cadena en subcadenas o tokens. Un token es una secuencia de caracteres separados por caracteres delimitadores ( por lo general espacios o caracteres de puntuación ). #include <iostream.h> #include <conio.h> #include <string.h> void main( ){ char cadena[]= "01/10/2008"; char *separador = " / , " ; char *ptr = cadena ; cout << "Cadena: " << cadena << endl; ptr = strtok( cadena, separador ) ; / primera subcadena asignada a ptr cout << "dia: " << ptr << endl; ptr = strtok( NULL,-"f'); cout << "mes: " << ptr << endl; ptr = strtok( NULL, separador ) ; cout << "anio: " << ptr << endl << endl; 1 otro ejemplo: utilizando ciclos si hay muchos tokens char oracion[ ] = "Esta oracion contiene 5 tokens" inicializando char *separ = " n ; char *ptrToken = oacion ; cout << "Utilizando ciclos:" << endl; cout << "Oracion: " << oracion << endl; ptrToken = strtok( oracion, separador ) ; while( ptrToken) { cout <<"token:"<< ptrToken << endl; ptrToken = strtok( NULL, separador) ; } getch(); } 11 declarando e Inga. Jenny . Rodríguez V. Algoritmos y Programación 202 6.8.1. ESTRUCTURAS O REGISTROS Conjunto de datos relacionados que se almacenan juntos en memoria y que pueden ser de diferente tipo (heterogéneos), a diferencia de los arreglos, cuyos datos deben ser del mismo tipo ( homogéneos ). Supongamos que necesitamos almacenar datos acerca de libros, dichos datos podrían ser: título del libro, autor, número de unidades en existencia, precio de venta. Definimos una estructura como la siguiente: Pseudocódigo: estructura inventario inicio carácter titulo [ 25 1 ; carácter autor [ 30 1 ; entero num; real precio_venta; fin En c++: struct inventario } ; char titulo[ 25 J; char autor[ 30 J; int num; float precio_venta; Y así creamos un tipo de dato llamado inventario que contiene los miembros o campos arriba descritos; en memoria podría verse así: carácter titulo 2 carácter autor 30 entero num real recio venta Auique la mayoría de los autores no utilizan la definición de una estructura dentro del pseudocódigo ni dentro del diagrama de flujo, pensamos que podría 11 't ' d .. d t t . ser, en genera , a sm axis e creac1on e una es ruc ura as,: pseudocódigo diagrama de lujo codiicación c+ esructura nombreesuctura esructura nombreesuctua sruct nombreestructura inicio niio { tipo campo tipo campo tipo campo ... ... .. . in in }; Inga. Jenny M. Rodríguez V. Algoritmos y Programación 203 Ejercicios: Definir al menos 5 campos o miembros para las estructuras siguientes: • _Empleados • Alumnos • Clientes Inga. Jenny M. Rodríguez V. Algoritmos y Programación Declaración de tipos estructura: 204 Ya creamos el tipo de dato estructura, ahora dentro del programa se declara utilizando el nombre de tipo y el nombre o nombres de datos así: nombreestructura nombreda toestructura Ejemplos: inventario libro; inventario libro, ítem; de la misma manera que declararíamos las variables: entero cont; entero cent, i; Acceso individual a los miembros o campos de una estructura: Dentro del programa se maneja cada uno de estos miembros o campos utilizando el nombre definido de la estructura, el operador punto y el nombre del miembro o campo así: libro.titulo libro.num carácter titulo 25 carácter autor 30 entero num real recio venta libro.título libro.autor libro.num libo.precio_venta En genera. la sintaxis del manejo de un campo dentro del programa es: nombredatoestructura.nombrecampo Inga. Jenny M. Roríguez V. ) Algoitmos y Programación 205 Asignando valores a los miembros de una estructura: Ejemplo: libro.num = 25 // poner un 25 en el campo num de la estructura libro Ejemplo: escribir "Ingrese precio: " leer libro.precio_venta // poner en campo el valor que el usuario ingrese Accesando a los miebros de una estructura: Ejemplo: existencia = libro.num // pasar al campo existencia el valor que hay en libro.num -Ejemplo: escribir "el precio es:", libro.precio_venta // desplegar el contenido del campo EJERCICIOS: Trabajando con el dato libro: • Pedir al usuario el título de un libro y guardarlo en el campo respectivo. • Pedir al usuario el autor de dicho libro y guardarlo en el campo respectivo. • Asignar 100 al campo num. • Asignar 250 al campo precio_venta. • Calcular venta_ Total como el producto de num * precio_venta. • Desplegar los valores de todos los campos incluyendo venta_ Total. Inga. Jenny M. Rodríguez V. Algoritmos y Programación 206 Ejemplo: En el siguiente programa, veremos el manejo de una estructura, que consiste en deinirla o crearla, declararla, asignarle datos y accesar a sus datos. Pseudocódigo: Diagrama de Flujo: estructura
Compartir