Está en la página 1de 126

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

PLAN DE TRABAJO

IIN NT TR RO OD DU UC CC CII N N
Este texto fue elaborado tomando apartes de muchos de los manuales que existen en Internet los cuales se has revisado y adaptado con la intencin que su nivel sea el razonable para una asignatura de Programacin en la media tcnica o similar, aunque quiz algunos centros (especialmente universitarios) exijan un nivel ms alto que el que se cubre. Est organizado de una forma ligeramente distinta a los libros de texto convencionales, procurando incluir ejercicios prcticos lo antes posible, para evitar que un exceso de teora en los primeros temas haga el texto pesado de seguir. Aun as, este texto no pretende sustituir a un profesor, sino servir de apoyo para que los alumnos puedan tener una gua para desarrollar sus prcticas. Pero es trabajo del profesor aclarar las dudas que surjan y proponer muchos ms ejercicios que los que figuran aqu. Es necesario dejar claro, que el modulo no pretende ser un nuevo manual o texto gua, ya que de estos existen muchos en Internet, por ello tomamos apuntes de varios de estos buenos sitios (manuales) y lo nico que se hizo fue darles un orden y adaptacin a las necesidades del presente curso. Los sitios ms utilizados para elaborar este modulo fueron: http://www.nachocabanes.com - www.monografias.com (Br. Manuel Antonio Ortez), www.monografias.com (Isabella Merici Miranda Vasquez), a quienes agradecemos por sus buenos trabajos.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Conocer la sintaxis bsica del lenguaje C++,

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
1. Identificar las estructura bsica de un programa en C++ 2. Conocer los diferentes tipos de datos y tipos de variables aceptadas por le lenguaje C++ 3. Conocer las instrucciones necesarias para la entrada y salida de datos por medio del lenguaje C++ 4. Conocer las diferentes expresiones y operadores utilizadas en el lenguaje C++ 5. Conocer las estructuras de seleccin 6. Conocer las estructuras cclicas 7. Conocer la forma de implementar subprogramas o mdulos 8. Conocer la forma de implementar arreglos 9. Conocer como es el manejo de archivos 10. Aprender a depurar un programa en C++

IIN C D NT TE EG GR RA A CII N ND DE EL LM M D DU UL LO OP PO OR RU UN NIID DA A DE ES S


Unidad 1: Concepto Bsicos o Introduccin o Estructura de Un programa en C o Lenguaje de Programacin Estructurado C o Sintaxis de Algunos Elementos de Un Programa en C o Tipos de Datos en C o Tipos de Variables o Constantes o Entrada / Salida o Salida Hacia Pantalla [printf()] o Secuencias de Escapes o Entrada Desde Teclado o Operadores, Expresiones o Operadores o Expresiones Unidad 2: Estructuras (secuenciales, selectivas, mltiples) y Ciclos o Estructuras secuenciales o Estructura selectiva Simple o Estructura Selectiva doble o Estructura selectiva Mltiple o Funcionamiento de Un Ciclo o Ciclo de Entrada Asegurada (While) o Ciclo Controlado por contador (For).

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

o Ciclo Do... while Unidad 3: Subprogramas o Mdulos, Estructuras de Datos (Arreglos) o Paso de Parmetros o Funciones Definidas Por El Usuario en C o Funciones que no devuelven ningn valor. o Funciones que devuelven un valor entero o Funciones que Devuelven un Valor Real o Funciones en las que usamos Men o Vectores o Uso de Vectores dentro de las Funciones o Matrices Unidad 4: Manejo de archivos o Archivos de Texto o Archivos binarios o Archivos especiales 1: la impresora o Archivos especiales 2: salida de errores Unidad 5: Cmo depurar los programas o Conceptos bsicos sobre depuracin o Ejemplos de algunos entornos Unidad 6: Ejercicios de C++

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

LENGUAJE C++ IIN NT TR RO OD DU UC CC CII N N


Esta unidad busca que el estudiante distinga los conceptos bsicos involucrados en el lenguaje de programacin C++

J C JU US ST TIIF FIIC CA A CII N N

El lenguaje de programacin C est caracterizado por ser de uso general, con una sintaxis sumamente compacta y de alta portabilidad. Es comn leer que se lo caracteriza como un lenguaje de "bajo nivel". No debe confundirse el trmino "bajo" con "poco", ya que el significado del mismo es en realidad "profundo", en el sentido que C maneja los elementos bsicos presentes en todas las computadoras: caracteres, nmeros y direcciones. Esta particularidad, junto con el hecho de no poseer operaciones de entrada-salida, manejo de arreglo de caracteres, de asignacin de memoria, etc, puede al principio parecer un grave defecto; sin embargo el hecho de que estas operaciones se realicen por medio de llamadas a Funciones contenidas en Libreras externas al lenguaje en s, es el que confiere al mismo su alto grado de portabilidad, independizndolo del "Hardware" sobre el cual corren los programas, como se ir viendo a lo largo de las siguientes unidades.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Proporcionar los conocimientos que permitan al estudiante reconocer los conceptos bsicos en el manejo del lenguaje C++.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
Identificar las estructura bsica de un programa en C++ Conocer los diferentes tipos de datos y tipos de variables aceptadas por le lenguaje C++ Conocer las instrucciones necesarias para la entrada y salida de datos por medio del lenguaje C++ Conocer las diferentes expresiones y operadores utilizadas en el lenguaje C++ Conocer las estructuras de seleccin Conocer las estructuras cclicas

C CO ON NT TE EN NIID DO O
1. Introduccin 2. Estructura de Un programa en C 3. Lenguaje de Programacin Estructurado C 4. Sintaxis de Algunos Elementos de Un Programa en C 5. Tipos de Datos en C 6. Tipos de Variables 7. Constantes 8. Entrada / Salida 9. Salida Hacia Pantalla [printf()] 10. Secuencias de Escapes 11. Entrada Desde Teclado 12. Operadores, Expresiones 13. Operadores 14. Expresiones

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

IIN NT TR RO OD DU UC CC CII N N
El lenguaje de programacin C est caracterizado por ser de uso general, con una sintaxis sumamente compacta y de alta portabilidad. Es comn leer que se lo caracteriza como un lenguaje de "bajo nivel". No debe confundirse el trmino "bajo" con "poco", ya que el significado del mismo es en realidad "profundo", en el sentido que C maneja los elementos bsicos presentes en todas las computadoras: caracteres, nmeros y direcciones. Esta particularidad, junto con el hecho de no poseer operaciones de entrada-salida, manejo de arreglo de caracteres, de asignacin de memoria, etc, puede al principio parecer un grave defecto; sin embargo el hecho de que estas operaciones se realicen por medio de llamadas a funciones contenidas en Libreras externas al lenguaje en s, es el que confiere al mismo su alto grado de portabilidad, independizndolo del "Hardware" sobre el cual corren los programas, como se ir viendo a lo largo de los siguientes captulos. La descripcin del lenguaje se realiza siguiendo las normas del ANSI C, por lo tanto, todo lo expresado ser utilizable con cualquier compilador que se adopte; sin embargo en algunos casos particulares se utilizaron funciones Compilador Sistema Operativodependientes, explicitndose en estos casos la singularidad de las mismas. Este lenguaje presenta varias caractersticas, entre las cuales estn: 1. 2. 3. 4. 5. 6. 7. 8. 9. Lenguaje de programacin de propsitos generales Permite la Programacin Estructurada Abundancia de Operadores y Tipos de Datos No est asociado a ningn sistema operativo ni a ninguna mquina Popular y Eficaz Permite el desarrollo de Sistemas Operativos y programas de aplicacin Portabilidad Existen las libreras en las bibliotecas Tiene slo 32 palabras reservadas

E M ES ST TR RU UC CT TU UR RA AD DE EU UN NP PR RO OG GR RA A MA AE EN NC C+ ++ +
Antes de iniciar los conceptos propios del lenguaje C es necesario, primero; mencionar algunos de los errores tpicos al programar, para que el lector sepa como identificarlos y as los pueda corregir. ERROR DE SINTAXIS: Estos errores son producidos, cuando se hace mal uso de las reglas del lenguaje de programacin, y se violan las normas de sintaxis, de ese lenguaje 7

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

(en nuestro caso C); estos errores son fciles de detectar por que generalmente es el compilador, que los identifica (Y hasta muestra la lnea donde se encuentra dicho error, pero eso depende de la versin del compilador que estemos usando). ERRORES DE EJECUCIN: Estos errores se producen, cuando le indicamos a la computadora, realizar una determinada accin, y esta la comprende, pero no puede ejecutarla. Por ejemplo, indicarle a la computadora una divisin entre cero, sumar dos variables a las cuales no se les ha signado valor alguno, etc. ERRORES DE LGICA: Muchas veces, cuando estamos programando, el compilador no nos indica errores de sintaxis, ni de lgica; pero el resultado de nuestro programa, esta fuera del rango esperado, esto es producto de un error de lgica en el cdigo de nuestro programa. Este tipo de errores son muy difciles de identificar y por supuesto de corregir, ya que generalmente hay que revisar lnea por lnea de nuestro programa. Ejemplo: El sueldo negativo de un empleado, etc. La estructura de un programa en C, consta de algunas partes esenciales: las cuales son uno o ms mdulos llamadas funciones, siendo main() la primera funcin que es llamada cuando empieza la ejecucin del programa . Cada funcin debe contener: Directivas de pre-procesador (instrucciones que se le dan al compilador antes de compilar) #include #define ejemplo: #include <stdio.h> Lo que se le esta indicando, es que de las libreras, Incluya en nuestro programa la directiva stdio.h, la cual contiene las funciones de entrada y salida de datos (standar input output, en ingls). Si necesitamos las funciones matemticas, debemos especificarlo con la declaratoria: #include <math.h> Si necesitamos las funciones de cadenas: #inlcude <stlib.h> Es necesario aclarar que esto se hace al inicio del programa, y las declaratorias deben llevar el smbolo de numeral (#) seguido de la sentencia include, y entre signos de mayor y menor que (<>) el nombre de la directiva. Declaraciones Globales

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Pueden ser: Prototipos de Funciones: Tambin llamadas declaraciones de funciones, lo cual se tratar ms adelante Declaraciones de Variables Cabe destacar, que esto se hace seguido de los #include y los #define.

Funcin Principal main()


Esta es la funcin principal de nuestro programa, su cuerpo, por ello NUNCA debe faltar, ya que en ella van contenidas todas las instrucciones de nuestro programa. main() { declaraciones locales sentencias }

/*Comentarios */

La funcin main() va al inicio, luego abrimos llaves y dentro de ellas van las declaraciones de variables, las sentencias de lectura, clculos, asignaciones e impresiones, y con la ltima llave ( } ), le indicamos el final del programa. Ejemplo: Programa que a partir del radio, calcula el rea de un crculo #include <stdio.h> #include <conio.h> main() { float radio, area; printf("Radio=\n"); scanf("%f", &radio); area=3.14159*radio*radio; printf("El Area es %f\n\n", area); getch(); return 0; } Explicacin: Le indicamos al compilador, que usaremos las bibliotecas <stdio.h> y <conio.h>, por qu <conio.h>?, por que esta biblioteca, contiene las funciones getche(), getch(), etc., y de una de ellas hacemos uso en este pequeo ejemplo. Luego, le indicamos a nuestro programa el inicio de nuestro programa (funcin main()). Declaramos, como valores reales, las variables radio y rea (de esto se hablar ms adelante). Luego, con la instruccin printf(), mostramos en pantalla el mensaje (Radio=) y

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

scanf se encarga de leer el valor digitado por el usuario. Posteriormente area, es igual al la multiplicacin de pi (3.14159), el radio al cuadrado. Se muestra en pantalla ese resultado, luego el programa espera que se presiones cualquier tecla (getch() ) y no retorna ningn valor (return 0).

A D AC CT TIIV VIID DA A D
1. Indique que tipo de error (Error de sintaxis, error de ejecucin o error lgico), en cada uno de los siguientes enunciados Utilizar una variable antes de asignarle un valor: _______________________ Asignarle un valor real a una variable declarada como entero: ____________ Al cometer este error, los resultados arrojados por el programa no son los que se esperaban: ______________________________________________ Un programa no puede ser ejecutado por el computador, mientras tenga este tipo de errores: __________________________________________ Estos errores no son detectados por el compilador, ni tampoco son errores de ejecucin: ______________________________________________

2. Mencione y Explique, la estructura general de un programa en C:

L J M C D LE EN NG GU UA A JE ED DE EP PR RO OG GR RA A MA A CII N NE ES ST TR RU UC CT TU UR RA A DO OC C
Si el lector recuerda, en el apartado anterior, se hablaba de las caractersticas del lenguaje C, y en una de ellas se deca que, el Lenguaje de Programacin C, permite la programacin estructurada. Esto implica que, haremos uso de una tcnica llamada Lgica Estructurada, y esto no es ms ni menos que una de las tcnicas bsicas y fundamentales de la programacin estructurada, su objetivo es disear soluciones correctas y confiables a los problemas, ignorando al principio consideraciones de eficiencia como la minimizacin del uso de memoria y el tiempo de su respuesta. Lo que significa que, haremos uso de esa tcnica para crear programas correctos; esta es una tcnica que ayuda al programador (un tanto a la fuerza), a ser ordenado, al momento de programar. Los frutos de sta tcnica se reflejan cuando, queremos darle mantenimiento al programa, es ms fcil hacerlo ya que hemos programado de una manera lgica y ordenada. Al igual que al momento de corregir errores de sintaxis y lgica, esta tcnica nos facilita el trabajo. Ahora iniciemos, de una vez por todas, lo que el lector est esperando: 10

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

S X L M SIIN NT TA A XIIS SD DE EA A LG GU UN NO OS SE EL LE EM ME EN NT TO OS SD DE EU UN NP PR RO OG GR RA A MA AE EN NC C
Identificadores:
Como su nombre lo indica, estos son los nombres, con los que identificamos las variables, constantes, funciones, vectores, etc., de nuestro programa. Para ello debemos tener presente algunas reglas: Pueden tener de 1 hasta un mximo de 31 caracteres Debe de iniciar con una letra o subrayado Ejemplo: Correctos c2 _c2 Incorrectos 2c 2c No es lo mismo una minscula que una mayscula, ya que c distingue de entre ellas. Ejemplo: BETA Beta beta BeTa No son vlidos los identificadores de palabras reservadas. En un inicio hablamos que c posee 32 palabras reservadas, entre ellas estn: float int char else while return

Estas palabras no pueden ser utilizadas para identificar variables, constantes, funciones etc

Comentarios
En todo programa que estemos diseando en C (o en cualquier otro lenguaje de programacin); es necesario insertar ciertos comentarios en el cdigo, para que en posteriores modificaciones y cuando se realice el mantenimiento, se puedan recordar cosas importantes ya que, en los comentarios, se pueden incluir aspectos importantes del programas, explicaciones del funcionamiento de las sentencias, etc. El formato de los comentarios en C, es el siguiente: /*este es un comentario en C */ /*Podemos colocar mucha informacin importante de nuestro Programa */
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

11

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

La Directiva #include
Permite que, el preprocesador, incluya funciones proporcionadas por el fabricante, a nuestro programa. Ejemplo: #include <stdio.h> stdio.h */ /* le decimos al compilador que incluya la librera

La directiva #define
Permite definir constantes simblicas. Pero hasta ahora ha sido poco lo que se ha hablado acerca de las constantes, es por ello que aprovechando este especio; se dedicarn unas cuantas lneas para aclarar ello. Las variables pueden cambiar de valor, durante la ejecucin del programa, por eso es que se llaman variables. Y las constantes como su nombre lo indica, son valores que permanecen constantes durante toda la ejecucin del programa, un ejemplo de ello, es el valor de (pi) que equivale a 3.14159.... En C existen diferentes tipos de variables, entre ellas tenemos: Constates Numricas: Son valores numricos, enteros o de reales (de punto flotante). Se permiten tambin constantes octales y hexadecimales. Constantes Simblicas: las constantes simblicas tiene un nombre (identificador), y en esto se parecen las variables. Sin embargo, no pueden cambiar de valor a lo largo de la ejecucin del programa. En C, se pueden definir mediante el preprocesador. (Tomado del Manual Aprenda Lenguaje ANSI C como si estuviera en Primero Escuela superior de Ingenieros Industriales. Universidad de Navarra. Febrero de 1998).

Ejemplo: #define N 100 #define PI 3.1416 #define B 45 Esta directiva (#define) va, inmediatamente despus de los #include. Se escribe la directiva, se deja un espacio y se escribe el identificador de la constante, otro espacio y su valor.

Signos de Puntuacin y de Separacin


/ % ^ & * () - + {} [] \ ; : <> .

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

12

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Todas las Instrucciones o sentencias del programa terminan con un punto y coma (;)
Al momento de programar en C, esta es una regla de oro, y la causa por la cual nuestro programa puede darnos muchos errores de sintaxis, cuando se omite, al final de cada sentencia un punto y coma (;). Ya que con ello le indicamos al compilador que ha finalizado una sentencia. NOTA: el lector no debe confundirse, las directivas: #include, #define. Main(), no llevan punto y coma, por que no son sentencias. Recordemos el ejemplo anterior, y veamos que al final de cada sentencia lleva su correspondiente punto y coma: #include <stdio.h> #include <conio.h> main() { float radio, area; printf("Radio=\n"); scanf("%f", &radio); area=3.14159*radio*radio; printf("El Area es %f\n\n", area); getch(); return 0; }

Todo Bloque de Instrucciones debe ir entre llaves


Esta consideracin toma mayor auge, cuando veamos las instrucciones anidadas en condiciones, ciclos, etc. Ejemplo: { ... printf(Hola\n\b); ...

En una lnea se pueden escribir ms de una instruccin separada por un punto y coma
Esto es posible, por que con el punto y coma, le estamos indicando al compilador el fin de una sentencia o instruccin.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

13

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo: b = c + d; d = 2*k;

T T TIIP PO OS SD DE ED DA A TO OS SE EN NC C
Un tipo de dato, se define como un conjunto de valores que puede tener una variable, junto con ciertas operaciones que se pueden realizar con ellas.

Definicin de Variables
Si se desea imprimir los resultados de multiplicar un nmero fijo por otro que adopta valores entre 0 y 9, la forma normal de programar esto sera crear una CONSTANTE para el primer nmero y un par de VARIABLES para el segundo y para el resultado del producto. Una variable, en realidad, no es ms que un nombre para identificar una (o varias) posiciones de memoria donde el programa guarda los distintos valores de una misma entidad. Un programa debe DEFINIR a todas las variables que utilizar, antes de comenzar a usarlas, a fin de indicarle al compilador de que tipo sern, y por lo tanto cuanta memoria debe destinar para albergar a cada una de ellas. Veamos el EJEMPLO: Ejemplo: #include <stdio.h> main() { int multiplicador; /* defino multiplicador como un entero */ int multiplicando; /* defino multiplicando como un entero */ int resultado; /* defino resultado como un entero */ multiplicador = 1000 ; /* les asigno valores */ multiplicando = 2 ; resultado = multiplicando * multiplicador ; printf("Resultado = %d\n", resultado); /* muestro el resultado */ return 0; } En las primeras lneas de texto dentro de main() defino mis variables como nmeros enteros , es decir del tipo "int" seguido de un identificador (nombre) de la misma. Este identificador puede tener la cantidad de caracteres que se desee, sin embargo de acuerdo al Compilador que se use, este tomar como significantes slo los primeros n de ellos; siendo por lo general n igual a 32. Es conveniente darle a los identificadores de las variables, nombres que tengan un significado que luego permita una fcil lectura del programa. Los identificadores deben comenzar con una letra con el smbolo de subrayado "_, pudiendo continuar con cualquier otro carcter alfanumrico el smbolo "_. El nico smbolo no alfanumrico aceptado en un nombre es el "_. El lenguaje C es sensible al tipo de letra usado; as tomar como variables distintas a una llamada "variable, de otra escrita como "VARIABLE". Es una convencin entre los programadores

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

14

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

de C escribir los nombres de las variables y las funciones con minsculas, reservando las maysculas para las constantes. El compilador dar como error de "Definicin incorrecta" a la definicin de variables con nombres del tipo de: 4pesos $variable primer-variable !variable etc.

NOTA: Los compiladores reservan determinados trminos palabras claves (Keywords) para el uso sintctico del lenguaje, tales como: asm, auto, break, case, char, do, for, etc. Si bien estas palabras estn definidas para el ANSI C, los distintos compiladores extienden esta definicin a OTROS trminos, por lo que es aconsejable leer la tabla completa de palabras reservadas del compilador que se vaya a usar, para no utilizarlas en nombres de variables. Vemos en las dos lneas subsiguientes a la definicin de las variables, que puedo ya asignarles valores (1000 y 2) y luego efectuar el clculo de la variable "resultado". Si prestamos ahora atencin a la funcin printf(), sta nos mostrar la forma de visualizar el valor de una variable. Insertada en el texto a mostrar, aparece una secuencia de control de impresin "%d" que indica, que en el lugar que ella ocupa, deber ponerse el contenido de la variable (que aparece luego de cerradas las comillas que marcan la finalizacin del texto, y separada del mismo por una coma) expresado como un nmero entero decimal. As, si compilamos y corremos el programa, obtendremos una salida :

Inicializacin de variables
Las variables del mismo tipo pueden definirse mediante una definicin mltiple separndolas mediante , " a saber: int multiplicador, multiplicando, resultado; Esta sentencia es equivalente a las tres definiciones separadas en el ejemplo anterior. Las variables pueden tambin ser inicializadas en el momento de definirse. int multiplicador = 1000, multiplicando = 2, resultado; De esta manera el ejemplo anterior podra escribirse: #include <stdio.h> main() { int multiplicador=1000, multiplicando=2 ; printf("Resultado = %d\n", multiplicando * multiplicador); return 0; }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

15

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Obsrvese que en la primera sentencia se definen e inicializan simultneamente ambas variables. La variable "resultado" la hemos hecho desaparecer ya que es innecesaria. Si analizamos la funcin printf() vemos que se ha reemplazado "resultado" por la operacin entre las otras dos variables. Esta es una de las particularidades del lenguaje C: en los parmetros pasados a las funciones pueden ponerse operaciones (incluso llamadas a otras funciones), las que se realizan ANTES de ejecutarse la funcin, pasando finalmente a esta el valor resultante de las mismas. El EJEMPLO funciona exactamente igual que antes pero su cdigo ahora es mucho ms compacto y claro.

T R B TIIP PO OS SD DE EV VA A RIIA A BL LE ES S
Variables del tipo entero
En el ejemplo anterior definimos a las variables como enteros (int). De acuerdo a la cantidad de bytes que reserve el compilador para este tipo de variable, queda determinado el "alcance" mximo valor que puede adoptar la misma. Debido a que el tipo int ocupa dos bytes su alcance queda restringido al rango entre 32.768 y +32.767 (incluyendo 0 ). En caso de necesitar un rango ms amplio, puede definirse la variable como "long int nombre_de_variable" en forma ms abreviada "long nombre_de_variable" Declarada de esta manera, nombre_de_variable puede alcanzar valores entre 2.347.483.648 y +2.347.483.647. A la inversa, si se quisiera un alcance menor al de int, podra definirse "short int " simplemente "short", aunque por lo general, los compiladores modernos asignan a este tipo el mismo alcance que "int". Debido a que la norma ANSI C no establece taxativamente la cantidad de bytes que ocupa cada tipo de variable, sino tan slo que un "long" no ocupe menos memoria que un "int" y este no ocupe menos que un "short", los alcances de los mismos pueden variar de compilador en compilador, por lo que sugerimos que confirme los valores dados en este pargrafo (correspondientes al compilador de Borland C++) con los otorgados por el compilador que est trabajando. Para variables de muy pequeo valor puede usarse el tipo "char" cuyo alcance est restringido a -128, +127 y por lo general ocupa un nico byte. Todos los tipos citados hasta ahora pueden alojar valores positivos negativos y, aunque es redundante, esto puede explicitarse agregando el calificador "signed" delante; por ejemplo:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

16

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

signed int signed long signed long int signed short signed short int signed char Si en cambio, tenemos una variable que slo puede adoptar valores positivos (como por ejemplo la edad de una persona) podemos aumentar el alcance de cualquiera de los tipos, restringindolos a que slo representen valores sin signo por medio del calificador "unsigned". En la TABLA 1 se resume los alcances de distintos tipos de variables enteras TABLA 1 VARIABLES DEL TIPO NUMERO ENTERO TIPO signed char unsigned char unsigned short unsigned short signed int unsigned int signed long unsigned long BYTES 1 1 2 2 2 2 4 4 VALOR MNIMO -128 0 -32.768 0 -32.768 0 -2.147.483.648 0 VALOR MXIMO 127 255 +32.767 +65.535 +32.767 +65.535 +2.147.483.647 +4.294.967.295

NOTA: Si se omite el calificador delante del tipo de la variable entera, ste se adopta por omisin (default) como "signed".

Variables de nmero real o punto flotante


Un nmero real de punto flotante es aquel que adems de una parte entera, posee fracciones de la unidad. En nuestra convencin numrica solemos escribirlos de la siguiente manera: 2,3456, lamentablemente los compiladores usan la convencin del PUNTO decimal (en vez de la coma). As el numero Pi se escribir: 3.14159 Otro formato de escritura, normalmente aceptado, es la notacin cientfica. Por ejemplo podr escribirse 2.345E+02, equivalente a 2.345 * 100 234.5 De acuerdo a su alcance hay tres tipos de variables de punto flotante, las mismas estn descriptas en la TABLA 2 TABLA 2 TIPOS DE VARIABLES DE PUNTO FLOTANTE TIPO float double long double BYTES 4 8 10 VALOR MNIMO 3.4E-38 1.7E-308 3.4E-4932 VALOR MXIMO 3.4E+38 1.7E+308 3.4E+4932

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

17

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Las variables de punto flotante son SIEMPRE con signo, y en el caso que el exponente sea positivo puede obviarse el signo del mismo.

Conversin automtica de tipos


Cuando dos mas tipos de variables distintas se encuentran DENTRO de una misma operacin expresin matemtica, ocurre una conversin automtica del tipo de las variables. En todo momento de realizarse una operacin se aplica la siguiente secuencia de reglas de conversin (previamente a la realizacin de dicha operacin): 1. Las variables del tipo char short se convierten en int 2. Las variables del tipo float se convierten en double 3. Si alguno de los operandos es de mayor precisin que los dems , estos se convierten al tipo de aquel y el resultado es del mismo tipo. 4. Si no se aplica la regla anterior y un operando es del tipo unsigned el otro se convierte en unsigned y el resultado es de este tipo. Las reglas 1 a 3 no presentan problemas, slo nos dicen que previamente a realizar alguna operacin las variables son promovidas a su instancia superior. Esto no implica que se haya cambiado la cantidad de memoria que las aloja en forma permanente Otro tipo de regla se aplica para la conversin en las asignaciones. Si definimos los trminos de una asignacin como,"lvalue" a la variable a la izquierda del signo igual y "rvalue" a la expresin a la derecha del mismo, es decir: "lvalue" = "rvalue" ; Posteriormente al clculo del resultado de "rvalue" (de acuerdo con las reglas antes descriptas), el tipo de este se iguala al del "lvalue". El resultado no se ver afectado si el tipo de "lvalue" es igual superior al del "rvalue", en caso contrario se efectuar un truncamiento redondeo, segn sea el caso. Por ejemplo, el pasaje de float a int provoca el truncamiento de la parte fraccionaria, en cambio de double a float se hace por redondeo.

Enclavamiento de conversiones (casting)


Las conversiones automticas pueden ser controladas a gusto por el programador, imponiendo el tipo de variable al resultado de una operacin. Supongamos por ejemplo tener: double d, e, f = 2.33; int i = 6; e = f * i; d = (int) ( f * i ) ; En la primer sentencia calculamos el valor del producto (f * i), que segn lo visto anteriormente nos dar un double de valor 13.98, el que se ha asignado a e. Si en la variable d quisiramos reservar slo el valor entero de dicha operacin bastar con

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

18

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

anteponer, encerrado entre parntesis, el tipo deseado. As en d se almacenar el nmero 13.00. Tambin es factible aplicar la fijacin de tipo a una variable, por ejemplo obtendremos el mismo resultado, si hacemos: d = (int) f * i; En este caso hemos convertido a f en un entero (truncando sus decimales)

Variables de tipo carcter


El lenguaje C guarda los caracteres como nmeros de 8 bits de acuerdo a la norma ASCII extendida, que asigna a cada carcter un nmero comprendido entre 0 y 255 (un byte de 8 bits) Es comn entonces que las variables que vayan a alojar caracteres sean definidas como: char c; Sin embargo, tambin funciona de manera correcta definirla como: int c; Esta ltima opcin desperdicia un poco ms de memoria que la anterior, pero en algunos casos particulares presenta ciertas ventajas. Pongamos por caso una funcin que lee un archivo de texto ubicado en un disco. Dicho archivo puede tener cualquier carcter ASCII de valor comprendido entre 0 y 255. Para que la funcin pueda avisarme que el archivo ha finalizado deber enviar un nmero NO comprendido entre 0 y 255 (por lo general se usa el -1, denominado EOF, fin de archivo End Of File), en este caso dicho nmero no puede ser mantenido en una variable del tipo char, ya que esta slo puede guardar entre 0 y 255 si se la define unsigned no podra mantener los caracteres comprendidos entre 128 y 255 si se la define signed (ver TABLA 1). El problema se obvia fcilmente definindola como int. Las variables del tipo carcter tambin pueden ser inicializadas en su definicin, por ejemplo es vlido escribir: char c = 97; Para que c contenga el valor ASCII de la letra "a", sin embargo esto resulta algo engorroso, ya que obliga a recordar dichos cdigos. Existe una manera ms directa de asignar un caracter a una variable; la siguiente inicializacin es idntica a la anterior: char c = 'a'; Es decir que si delimitamos un carcter con comilla simple, el compilador entender que debe suplantarlo por su correspondiente cdigo numrico. Lamentablemente existen una serie de caracteres que no son imprimibles, en otras palabras que cuando editemos nuestro programa fuente (archivo de texto) nos resultar

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

19

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

difcil de asignarlas a una variable ya que el editor las toma como un COMANDO y no como un carcter. Un caso tpico sera el de "nueva lnea" ENTER. Con el fin de tener acceso a los mismos es que aparecen ciertas secuencias de escape convencionales. Las mismas estn listadas en la TABLA 3 y su uso es idntico al de los caracteres normales, as para resolver el caso de una asignacin de "nueva lnea" se escribir: char c = '\n' ; /* secuencia de escape */ TABLA 3 SECUENCIAS DE ESCAPE CDIGO '\n' '\r' '\f' '\t' '\b' '\'' '\"' '\\ ' '\? ' '\nnn' '\xnn' VALOR ASCII (HEXADECIMAL) nueva lnea 10 0x0A retorno de carro 13 0x0D nueva pgina 2 x0C tabulador horizontal 9 0x09 retroceso (backspace) 8 0x08 comilla simple 39 0x27 Comillas 4 0x22 Barra 92 0x5C Interrogacin 63 0x3F cualquier caracter (donde nnn es el cdigo ASCII expresado en octal) cualquier caracter (donde nn es el cdigo ASCII expresado en hexadecimal) SIGNIFICADO VALOR ASCII (DECIMAL)

Tamao de las variables (sizeof)


En muchos programas es necesario conocer el tamao (cantidad de bytes) que ocupa una variable, por ejemplo en el caso de querer reservar memoria para un conjunto de ellas. Lamentablemente, como vimos anteriormente este tamao es dependiente del compilador que se use, lo que producir, si definimos rgidamente (con un nmero dado de bytes) el espacio requerido para almacenarlas, un problema serio si luego se quiere compilar el programa con un compilador distinto del original Para salvar este problema y mantener la portabilidad, es conveniente que cada vez que haya que referirse al TAMAO en bytes de las variables, se lo haga mediante un operador llamado "sizeof" que calcula sus requerimientos de almacenaje Est tambin permitido el uso de sizeof con un tipo de variable, es decir: sizeof(int) sizeof(char) sizeof(long double), etc.
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

20

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Definicin de nuevos tipos (typedef)


A veces resulta conveniente crear otros tipos de variables, redefinir con otro nombre las existentes, esto se puede realizar mediante la palabra clave "typedef", por ejemplo: typedef unsigned long double enorme; A partir de este momento, las definiciones siguientes tienen idntico significado: unsigned long double nombre_de_variable; enorme nombre_de_variable;

C N CO ON NS ST TA A NT TE ES S
Aquellos valores que, una vez compilado el programa no pueden ser cambiados, como por ejemplo los valores literales que hemos usado hasta ahora en las inicializaciones de las variables (1000, 2, 'a', '\n', etc), suelen denominarse CONSTANTES. Como dichas constantes son guardadas en memoria de la manera que al compilador le resulta ms eficiente suelen aparecer ciertos efectos secundarios, a veces desconcertantes, ya que las mismas son afectadas por las reglas de RECONVERSION AUTOMATICA DE TIPO vista previamente. A fin de tener control sobre el tipo de las constantes, se aplican las siguientes reglas: Una variable expresada como entera (sin parte decimal) es tomada como tal salvo que se la siga de las letras F L (maysculas minsculas) ejemplos: 1: tomada como ENTERA 1F: tomada como FLOAT 1L: tomada como LONG DOUBLE Una variable con parte decimal es tomada siempre como DOUBLE, salvo que se la siga de la letra F L 1.0 : tomada como DOUBLE 1.0F : tomada como FLOAT 1.0L : tomada como LONG FLOAT Si en cualquiera de los casos anteriores agregamos la letra U u la constante queda calificada como UNSIGNED (consiguiendo mayor alcance): 1u: tomada como UNSIGNED INT 1.0UL: tomada como UNSIGNED LONG DOUBLE Una variable numrica que comienza con "0" es tomado como OCTAL as: 012 equivale a 10 unidades decimales

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

21

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Una variable numrica que comienza con "0x" "0X" es tomada como hexadecimal: 0x16 equivale a 22 unidades decimales y 0x1A a 26 unidades decimales.

Constantes simblicas
Por lo general es una mala prctica de programacin colocar en un programa constantes en forma literal (sobre todo si se usan varias veces en el mismo) ya que el texto se hace difcil de comprender y an ms de corregir, si se debe cambiar el valor de dichas constantes. Se puede en cambio asignar un smbolo a cada constante, y reemplazarla a lo largo del programa por el mismo, de forma que este sea ms legible y adems, en caso de querer modificar el valor, bastar con cambiarlo en la asignacin. El compilador, en el momento de crear el ejecutable, reemplazar el smbolo por el valor asignado. Para dar un smbolo a una constante bastar, en cualquier lugar del programa (previo a su uso) poner la directiva: #define, por ejemplo: #define VALOR_CONSTANTE 342 #define PI 3.1416

E D L EN NT TR RA A DA A // S SA A LIID DA A
Las funciones gets, puts, getch, etc; son utilizadas, en una forma un poco rudimentaria, sin embargo; C posee otra serie de funciones, que son ms completas, las cuales nos permiten leer e imprimir (en pantalla), datos con un formato determinado, el cual ha sido definido por el programador.

S L C N L SA A LIID DA AH HA A CIIA AP PA A NT TA A LL LA A[ [P PR RIIN NT TF F( ())]]


Se utiliza para imprimir en pantalla cadenas de texto solas, o mandar a pantalla el valor de alguna variable, o constante, o una combinacin de las anteriores. Su formato es el siguiente: Printf(cadena de control, nombre_de_variables); En donde: Cadena de control: contiene cdigos de formato que se asocian con los tipos de datos contenidos en las variables.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

22

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

CDIGO %d %i %c %s %f %ld %u %lf %h %o %x %e %p %% Ejemplo: Int suma=10; Printf(La suma es %d, suma); Explicacin:

FORMATO Un entero Un entero Una caracter Una cadena Un real Entero largo Decimal sin signo Doble posicin Entero corto Octal Hexadecimal Notacin Cientfica Puntero Imprime Porcentaje

Declaramos primero la variable como entero, con un valor de 10, luego la funcin printf, el mensaje va entre comillas dobles, luego en el lugar que queremos que aparezca el valor, colocamos el formato de la variable, cerramos comillas, luego una coma y el nombre de la variable. Es importante recalcar, que en la posicin que coloquemos el formato es donde aparecer el valor de la variable en este caso, 10. Ejemplo: Char nombre[7]=Manuel; printf(%s es en creador de este manual, nombre); NOTA: el nmero de argumentos que tendr la funcin printf() es indefinido, por lo que se puede transmitir cuantos datos sean necesarios. Ejemplo: Int x=12, y=15; char z=D; float v=10.2563; printf(Estos son nmeros %d %d %f; y esta es una letra %c, x,y,v,z);

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

23

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Tambin podemos hacer algunos arreglos, al formato de salida, por ejemplo, si deseamos imprimir un nmero real justificado a la izquierda podemos colocar: printf(%-f, z); Para justificar colocarle signo: %+f %20f >> Longitud numrica del campo %.2f >>Imprime el valor con slo dos decimales

S S P SE EC CU UE EN NC CIIA A SD DE EE ES SC CA A PE ES S
Indica que debe ejecutar algo extraordinario. CARCTER DE ESCAPE \n \t \v \a \\ \? \ Ejemplos: printf(Manuel \n Antonio \n Ortez\n\n); int x=15; printf(El Valor de la variable es %d\n\n, x); float x=8.5689, pi=3.1416; printf(El valor de x es %.2f\t\n,x); printf(\t Y el valor de pi es %.2f\n\n, pi); EXPLICACIN Simula un Enter. Se utiliza para dejar una lnea de por medio Tabulador horizontal. Mueve el cursor al prximo tabulador Tabulador vertical. Hace sonar la alarma del sistema Imprime un carcter de diagonal invertida Imprime el carcter del signo de interrogacin Imprime una doble comilla

E D D EN NT TR RA A DA AD DE ES SD DE ET TE EC CL LA A DO O
Se realiza mediante la funcin scanf(), su formato es: scanf(Cadena de control, Direccin y nombre de la variable); 24

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo Disee un programa que guarde y muestre la nota del examen final de 3 alumnos #include <stdio.h> #include <conio.h> main() { float n1, n2, n3; char nom1[10], nom2[10], nom3[10]; printf("Introduzca el Nombre del Primer alumno:\n"); scanf("%s", nom1); printf("Introduzca la nota de este alumno:\n"); scanf("%f", &n1); printf("Digite el nombre del segundo alumno:\n"); scanf("%s", nom2); printf("Su nota es:\n"); scanf("%f", &n2); printf("Finalmente el ultimo alumno es:\n"); scanf("%s", nom3); printf("Y su nota es:\n"); scanf("%f", &n3); getch(); return 0; } Explicacin: Primero, iniciamos con las directivas del preprocesador: #include <stdio.h> #include <conio.h> Con la cual le indicamos al compilador, que de su librera aada a nuestro programa las funciones estndar de entrada y salida; as como las entradas y salidas por consola (stadio.h y conio.h, respectivamente). Luego declaramos la variables, que contendrn las notas como reales (o de punto flotante: float n1, n2, n3; Ya que, las notas pueden ser deciamales, por ejemplo 9.6, 8.5; etc. Luego declaramos las variables, que contendrn las notas, cabe aclarar que al momento de las declaraciones las podemos hacer en el orden que deseemos, pueden ser primeros los tipo char y luego los float, o viceversa, pero teniendo el cuidado que las variables que contendrn las nombres lleven la longitud mxima entre corchetes, para nuestro caso, 10. ([10]). 25

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Posteriormente, mostramos en pantalla, un mensaje con el cual le indicamos al usuario que introduzca los datos respectivos: printf("Introduzca el Nombre del Primer alumno:\n"); A continuacin, va la funcin scanf, primero y entre comillas el tipo de dato que va a leer: scanf("%s", nom1); Como puede notarse, va a leer la cadena de texto que contendr la variable nom1. cabe aclarar, que cuando se van a leer cadenas de texto, no es necesario colocar la direccin (&), lo cual no sucede con los otros tipos de datos: scanf("%f", &n1); Despus de haber ledo los datos, espera a que se presiones cualquier tecla para finalizar la ejecucin del programa. Ejemplo Programa que imprime dos veces, la cadena de texto que se ha introducido: #include <stdio.h> #include <conio.h> main() { char cadena[15]; printf("Digite la cadena:\n\n"); scanf("%s", cadena); printf("\n\t LA CADENA ES LA SIGUIENTE:\n\n"); printf("***********************************************\n"); printf("%s\n", cadena); printf("%s\n", cadena); printf("***********************************************\n"); getch(); return 0; } Es importante, que el lector, intente correr, en su mquina estos ejemplos, para que comprenda con mayor facilidad. NOTA: Cuando la entrada, es una cadena de carcter, no es necesario el operador direccional (&). El nombre de la cadena contiene la direccin. Ejemplo: scanf(), finaliza la captacin de la cadena al encontrar un espacio en blanco o fin de lnea. 26

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo: char cadena[15]; printf("Digite la cadena:\n\n"); scanf("%s", cadena); Casos Especiales JUEGO DE INSPECCIN: Define Un conjunto de caracteres que puede leerse utilizando scanf(). As: %[ABC]s: A, B y C son los nicos caracteres que puede leer al encontrar uno diferente, finaliza con un valor nulo. %[ A-Z ]s: Tambin pueden ser rangos de carcter en este caso slo acepta maysculas. JUEGO INVERSO: Aqu se declaran que caracteres NO puede tomar, la funcin scanf(), se utiliza el circunflejo (^), que acepta cualquiera menos... Ejemplo: %[^\n]s: Acepta cualquier carcter menos un salto de lnea. %[^0-9]s: Acepta cualquier carcter menos del 0 al 9. Ejemplo: Scanf(%[0-9]s, &edad);

A D AC CT TIIV VIID DA A D

Mencione y Explique que es la lgica estructurada: __________________________________________________________________________________

Para que sirven las funciones getch() y putchar() __________________________________________________________________________________

Menciones las diferencias fundamentales entre las funciones de entrada y salida por consola, con las f __________________________________________________________________________________ _______________________________ Escriba algunas restricciones que deben cumplir los Identificadores:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

27

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

__________________________________________________________________________________

Cul es la diferencia entre el tipo de dato %c, y el tipo de dato %s?: __________________________________________________________________________________

Para que sirve la directiva <stdio.h>: __________________________________________________________________________________

Y la directiva <conio.h>? __________________________________________________________________________________

Para que sirve a declaratoria #define?: __________________________________________________________________________________

Para que sirve el punto y coma (;) en C: __________________________________________________________________________________

En C, no existe el tipo de dato string; sin embargo, podemos hacer uso de las cadenas de texto, Por q

Explique: __________________________________________________________________________________ Ejercicios:

1. Haciendo uso de las funciones gets y puts, disee un programa en C, que se lea el nombre del

2. Disee un programa en C, que lea y muestre en pantalla el valor de tres variables de tipo Enter

3. Disee un programa que muestre, los diferentes tipos de datos, usados en C. Primero, debe ind

4. Disee un programa, en el cual se introduzcan el nombre y el peso y de un alumno, y luego la m

5. Disee un programe en C, en el cual despus de haber introducido, una tabla de multiplicacin 2x2=4 2x3=6

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

28

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

2x4=8 .. . 2x10=20

6. Realice el siguiente ejercicio, tal como se muestra, luego ejectalo, nuevamente, pero quitndo #include <stdio.h> #include <conio.h> main() { char cadena[15]; printf("Digite la cadena:\n\n"); scanf("%s", cadena); printf("\n\t LA CADENA ES LA SIGUIENTE:\n\n"); printf("***********************************************\n"); printf("%s\n", cadena); printf("%s\n", cadena); printf("***********************************************\n"); getch(); return 0; }

O D OP PE ER RA A DO OR RE ES S,, E EX XP PR RE ES SIIO ON NE ES S
Hasta ahora, prcticamente hemos visto, como el protocolo esencial, para realizar un programa en C; y algunas funciones muy importantes, como son las funciones de lectura e impresin (scanf y printf, respectivamente). Ahora veremos, otros aspectos fundamentales, como lo son los operadores, que pueden ser: lgicos, matemticos, relacionales, etc. Las expresiones, y las estructuras: de secuenciacin, de seleccin y de iteracin.

O D OP PE ER RA A DO OR RE ES S
Un operador, es un smbolo que indica al compilador que se lleve a cabo ciertas manipulaciones matemticas o lgicas.

Operadores Aritmticos
Operador Propsito

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

29

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

+ * / %

Suma Resta Multiplicacin Divisin Resto de la divisin entera

Todos estos operadores se pueden aplicar a constantes, variables y expresiones. El resultado es el que se obtiene de aplicar la operacin correspondiente entre los dos operandos. (Tomado de Aprenda Lenguaje ANSII C, como si estuviera en primero. Pag. 25). Los operandos sobre los que actan los operadores aritmticos deben ser valores Numricos, es decir datos enteros, punto flotante o de carcter (Int, float y char, respectivamente). Una aclaracin especial, merece el operador %, que indica el resto de la divisin entera. Vemoslo con un ejemplo: Si dividimos 30/3, su cociente es 10, y su residuo es 0. Si dividimos 25/3, su cociente es 8, y tiene un residuo de 1. Entonces de lo que se encarga, este operador, es de devolvernos el valor del residuo de una divisin. Cabe aclarar que los datos deben de ser tipo entero, y su sintaxis es la siguiente: 25%3 NOTA: Este Operador, NO puede aplicarse a los datos de tipo float. Una Expresin, Es un conjunto de variable, constantes y otras expresiones ms sencillas, relacionadas por algn tipo de operador. De las cuales hablaremos con ms detalle, posteriormente.

Operadores de Relacinales, Lgicos y Unarios


Estos Operadores, los podemos dividir, en varios tipos, entre los cuales estn: OPERADORES UNARIOS: C, incluye una clase de operadores que actan sobre un solo operador para producir un nuevo valor. Por eso el nombre de unarios, por que para poder funcionar solo necesitan de un operador.
OPERADOR PROPSITO

++ --

Menos Unario: Es el signo menos que va delante de una variable, constante o expresin. Operador Incremento: Hace que la variable, constante o expresin se aumente en uno. Operador Decremento: Hace que su variable, constante o expresin disminuya en uno. 30

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo: Int i=1, x=5; Printf(%d, ++i); Printf(%d, - -i); Estos operadores, el incremento y el decremento, pueden utilizarse de dos maneras, eso depende del orden de aparicin de los mismos: Si el operador precede al operando el valor del operando se modifica antes de ser utilizado. Si el operador aparece despus del operando, este se modifica despus de ser utilizado. Ejemplo: Utilizando los operadores Unarios: #include <stdio.h> #include <conio.h> main() { int x=5; printf("\tPRIMERO OBSERVAREMOS EL RESULTADO DE ++X\n\n"); printf("%d\n", ++x); printf("%d\n", ++x); printf("%d\n", ++x); printf("\tAHORA OBSERVAREMOS EL RESULTADO DE --X\n\n"); printf("%d\n", --x); printf("%d\n", --x); printf("%d\n", --x); printf("\tEL RESULTADO DE X++ ES:\n\n"); printf("%d\n", x++); printf("%d\n", x++); printf("\tY EL DE X-- ES:\n\n"); printf("%d\n", x--); printf("%d\n", x--); getch(); return 0; }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

31

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Operadores relacionales o de comparacin


OPERADOR < <= > >= == != SIGNIFICADO Menor que Menor o igual que Mayor que Mayor o igual que Igual que (Para las comparaciones) No igual a

Estos Operadores se encuentran dentro del mismo grupo de procedencia, que es menor que la de los Operadores Unarios y aritmticos. La Asociatividad de stos es de izquierda a derecha. Cabe mencionar la diferencia entre los operadores = y ==, el primero (=), se utiliza para asignaciones de valores, mientras que el otro (==), se usa para comparaciones. Ejemplo: Si x>5, entonces x==6.

Operadores lgicos
Estos son los que nos permiten unir varias comparaciones: 10>5 y 6==6. Los operadores lgicos son: AND (&&), OR (||), NOT(!). Operador && (AND, en castellano Y): Devuelve un 1 si se cumplen dos condiciones. printf( "Resultado: %i", (10==10 && 5>2 ); Operador || (OR, en castellano O): Devuelve un 1 si se cumple una de las dos condiciones. Operador ! (NOT, negacin): Si la condicin se cumple NOT hace que no se cumpla y viceversa.

Operadores de Asignacin
Los Operadores de Asignacin, como su nombre lo indica, se encargan de atribuirle, asignarle, confinarle, etc a una variable, el resultado de una expresin o el valor de otra variable. Se utilizan en forma de expresiones de asignacin en los que se asigna en el valor de una expresin a un identificador. El operador de asignacin ms utilizado es = y su formato es: identificador = expresin;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

32

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Donde el identificador representa por lo general una variable y una constante, una variable o una expresin ms compleja. Si los dos operandos de la expresin de asignacin son de tipo de datos diferentes el valor de la expresin de la derecha se convertir automticamente al tipo de identificador de la izquierda de sta forma la expresin de asignacin ser del mismo tipo de datos. Ejemplo: Un valor en coma flotante puede ser truncado, se asigna a un identificador entero. Un valor de doble precisin puede ser redondeado si se asigna a un identificador de coma flotante. En C, estn permitidas las asignaciones mltiples, as: Identificador1 = identificador2 = identificador3.....= identificadorn=expresin C, posee adems los siguientes operadores de asignacin: OPERADOR += -= *= /= %= EXPLICACIN Expresin1+=expresin2. Equivale expresin1=expresin1 + expresin2 i-=1. equivale a: i=i-1 J*=2. Equivale a: j=j*2 K/=m, equivale a: k=k/m P%n. Equivale a: p=p%n

a:

Los Operadores de asignacin tiene menos procedencia que el resto de los operadores y tienen asociatividad de izquierda a derecha. Ejemplo: Programa que calcula el valor de la expresin X^2+X+1 #include <stdio.h> #include <conio.h> main() { float x, y, z; clrscr(); printf("\tPROGRAMA QUE CALCULA X^2+X+1\n\n"); printf("Introduzaca el valor de x:\n"); scanf("%f", &x); y=x*x;

EL

VALOR

DE

LA

ECUACION

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

33

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

z=y+x+1; printf("**************************************\n"); printf("**El valor de la expresin es: %.2f**\n", z); printf("**************************************\n"); getch(); return 0;

Jerarqua de Operadores
CATEGORA DEL OPERADOR OPERADOR 1. Operadores Unarios -, ++, --, ! 2.Operadores Aritmticos: a. Multiplicacin, divisin y *, /, % Resto entero b. Suma y Resta +,3. Operadores Relacionales <, <=, >, >= 4. Operadores de Igualdad ==, != 5. Operadores Lgicos && (Y Lgico), || (NO Lgico) 6. Operadores de Asignacin =, +=, -=, *=, /?, %=,

Reglas de jerarqua
1. 2. 3. 4. Se ejecuta primero el operador de ms alta jerarqua Operadores que tienen igual jerarqua se evalan de izquierda a derecha Si existen expresiones encerradas entre parntesis, estas se evalan primero. Si existen parntesis anidados se evalan primero los parntesis ms internos.

E EX XP PR RE ES SIIO ON NE ES S
(Tomado de Aprenda ANSII C como si estuviera en Primero, Universidad de Navarra. 1998). Ya han aparecido algunos ejemplos del lenguaje C en las secciones precedentes. Una Expresin es una combinacin de variables y/o constantes, y operadores. La expresin es equivalente al resultado que proporciona al aplicar sus operadores a sus operandos. Por ejemplo 1 + 5 es una expresin formada por dos operandos (1 y 5)y el operador (el +); esta expresin es equivalente al valor 6, por lo cual quiere decir que all donde esta expresin aparece en el programa, en el momento de la ejecucin es evaluada y sustituida por su resultado. Una expresin puede estar formada por otras expresiones ms sencillas, y puede contener parntesis de varios niveles agrupando distintos

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

34

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

trminos. En C, existen diferentes tipos de expresiones. El cual depende del tipo de operadores que se estn utilizando. Por ejemplo: Expresiones lgicas, aritmticas, etc. Se debe hacer hincapi en que, si existen algunas expresiones encerradas entre parntesis, estas se evalan primero. Ejemplo: 9*(8+5) primero sumamos 8+5, cuyo resultado es 13, y este lo multiplicamos por nueve, con lo que la expresin anterior, da cmo resultado: 117. Si existen expresiones en parntesis anidadas, es decir, que uno se encuentra dentro de otros parntesis, se evalan los ms internos. Ejemplo: 2*((20/(12-2))+5) Se evala la operacin 12-2, que da como resultado 10, luego se divide 20, entre el resultado anterior, es decir 10. el resultado es 2, y a este nmero se le suma 5, obteniendo 7. ahora se multiplica por dos, para determinar as que la expresin anterior es igual a 14.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

35

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Estructuras Secuenciales y Cclicas

IIN NT TR RO OD DU UC CC CII N N
Esta unidad busca que el estudiante conozca la forma de implementar las diferentes estructuras algortmicas en el lenguaje de programacin C++

J C JU US ST TIIF FIIC CA A CII N N

La escritura de algoritmos implica, en muchas ocasiones, llegar a algo ms que una simple secuencia. Es el caso, cuando existe una serie de caminos o alternativas a escoger dependiendo del resultado de una determinada situacin. O bien, existe la exigencia de que un grupo de acciones no se hagan para un ente especfico, sino que sea aplicado a muchos para realizar el mismo clculo.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Proporcionar los conocimientos que permitan al estudiante reconocer y aplicar las diferentes estructuras algortmicas implementadas en el lenguaje C++.

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
1. Conocer las estructuras de seleccin 2. Conocer las estructuras cclicas

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

36

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

C CO ON NT TE EN NIID DO O
1. 2. 3. 4. 5. 6. 7. 8. Estructuras secuenciales Estructura selectiva Simple Estructura Selectiva doble Estructura selectiva Mltiple Funcionamiento de Un Ciclo Ciclo de Entrada Asegurada (While) Ciclo Controlado por contador (For). Ciclo Do... while

E S L ES ST TR RC CT TU UR RA A SS SE EC CU UE EN NC CIIA A LE ES S
Se les denomina as, por que; son estructuras en un programa, que despus de ejecutar una instruccin o sentencia, continan con la otra, hasta llegar al final del programa. Los ejemplos que hemos visto anteriormente, son ejemplos de estructuras secuenciales. Veamos otros ejemplos: Ejemplo: Disee un programa que calcula el cuadrado y el cubo de tres nmeros introducidos por el usuario. #include <stdio.h> #include <conio.h> main() { int x, x1, x2, y, y1, y2, z, z1, z2; clrscr(); printf("\tPROGRAMA QUE CALCULA EL CUADRADO Y EL CUBO DE 3 NUMEROS\n\n"); printf("Introduzaca el primer numero:\n"); scanf("%d", &x); printf("Ahora ingrese el siguiente numero:\n"); scanf("%d", &y); printf("Y el tercer numero es:\n"); scanf("%d", &z); x1=x*x; x2=x*x*x; y1=y*y;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

37

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

y2=y*y*y; z1=z*z; z2=z*z*z; printf("*********************************\n"); printf("**Numero****Cuadrado*****Cubo****\n"); printf("**%d **** %d ***** %d ****\n", x, x1, x2); printf("**%d **** %d ***** %d ****\n", y, y1, y2); printf("**%d **** %d ***** %d ****\n", z, z1, z2); printf("*********************************\n"); getch(); return 0;

Ejemplo Una empresa necesita conocer el sueldo neto a pagar a un empleado. Teniendo como entrada el salario produzca una salida de sueldo neto. Los descuentos a aplicar son: ISSS 5%, AFP 7% y Renta 10%, estos descuentos son sobre el salario, y es sueldo neto es la diferencia entre el salario y el total de las retenciones: #include <stdio.h> #include <conio.h> main() { float sueldo, afp, isss, renta, sn; char nombre[50]; clrscr(); printf("Introduzca el Nombre del empleado:\n"); scanf("%s", nombre); printf("Su sueldo es:\n"); scanf("%f", &sueldo); afp=sueldo*0.07; isss=sueldo*0.05; renta=sueldo*0.10; sn=sueldo-(afp+isss+renta); printf("El empleado %s\n", nombre); printf("Posee un sueldo neto de %.2f\n", sn); getch(); return 0; } Ejemplo: Disee un programa que calcule el promedio y la suma de tres nmeros ingresados por el usuario:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

38

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <stdio.h> #include <conio.h> main() { float x, y, z, sum, prom; clrscr(); printf("El Primer nmero es:\n"); scanf("%f", &x); printf("Ahora el segundo nmero:\n"); scanf("%f", &y); printf("El Ultimo numero es:\n"); scanf("%f", &z); sum=x+y+z; prom=sum/3; printf("*****************************************\n"); printf("**La suma es %.2f y el promedio es %.2f*\n", sum, prom); printf("*****************************************\n"); getch(); return 0; }

E ES ST TR RC CT TU UR RA AS SE EL LE EC CT TIIV VA AS SIIM MP PL LE E
Los pequeos programas que hemos diseada hasta el momento, han sido del tipo secuencial, es decir, una sentencia se ejecuta despus de otra, hasta el final del programa. Pero en la vida diaria muchas veces debemos elegir entre un camino y otro para llegar a nuestro destino. Lo mismo pasa en programacin, al realizar alguna actividad, nuestro programa debe ser capaz de elegir uno u otro camino, a seguir dependiendo del valor de alguna condicin evaluada. Para ello C, dispone de tres tipos de 3 tipos de estructuras selectivas, la cuales son: 1. Estructura Selectiva Simple 2. Estructura Selectiva Doble 3. Estructura Selectiva Mltiple

Estructura selectiva simple


Funciona de la siguiente manera: se evala una condicin, de ser cierta efecta una accin, de lo contrario, contina con la ejecucin normal del programa. Su sintaxis es la siguiente: If(condicin) Accin;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

39

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

O tambin: If(Condicin) Accin; Donde: Condicin: Es una expresin lgica que es evaluada por el compilador Accin: es la Accin o Acciones que realizar el programa de resultar cierta la condicin NOTA: En C, no existe la sentencia End If, como en otros lenguajes de programacin para indicar que ha terminado el bloque de seleccin, sino que este se especifica con el punto y coma al final. Adems que, despus de la condicin NO se escribe un punto y coma. Si son varias acciones, estas deben ir dentro de llaves {}, para indicarle al compilador que son un solo bloque de acciones que deben ejecutarse. Ejemplo: En una tienda se venden artculos de primera necesidad, a los cuales se les aplica un descuento del 20%, de la compra total, si esta es igual o mayor a $50. Disee un programa en C, que a partir del importe total de la compra muestre lo que debe pagar el cliente. #include <stdio.h> #include <conio.h> main() { float compra; clrscr(); printf("Introduzca el valor de la compra:\n"); scanf("%f", &compra); if(compra>=50) compra=compra*0.8; printf("El Importe de la compra es %.2f\n\n", compra); getch(); return 0;

E ES ST TR RC CT TU UR RA AS SE EL LE EC CT TIIV VA AD DO OB BL LE E
Esta estructura, se caracteriza por el hecho que ofrece dos caminos a seguir, dependiendo si al evaluar la condicin resulta cierta o falsa. Su sintaxis es la siguiente:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

40

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

if(Condicin) Accin 1; else Accin 2; Funciona, de la siguiente manera si condicin, al evaluarla resulta cierta, realiza la accin 1. de lo contrario, es decir; si al evaluar la condicin resulta falsa, realiza la accin 2. Se debe tener en cuenta la condicin puede ser compuesta, es decir haciendo uso de los operadores && y || (Y lgico y No lgico), adems que cuando tenemos ms de una sentencia por ejecutar ya sea del lado del cierto o del falso, estas van dentro de llaves. Ejemplo: Se desea saber si un nmero es par o impar. Disee un programa en el cual el usuario, ingrese el nmero y el programa muestre con un mensaje, si ste es par o no. #include <stdio.h> #include <conio.h> main() { int num; printf("Ingrese el nmero:\n"); scanf("%d", &num); if(num%2==0) printf("ES PAR\n\n"); else printf("ES IMPAR\n\n"); getch(); return 0; } Ejemplo: Disee un programa, que dada la nota de alumno, imprima en la pantalla un comentario sobre esa nota. El criterio para los comentarios es el siguiente: Si nota es mayor o igual a 9 Excelente Si nota es mayor o igual a 8 Muy Bueno Si nota es mayor o igual a 7 Bueno Si nota es mayor o igual a 6 Regular Si nota es menor que 6 Necesita Mejorar #include <stdio.h> #include <conio.h> main() { float nota; printf("Digite la nota, porfavor:\n"); 41

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

scanf("%f", &nota); if(nota >= 9.0) printf("EXCELENTE\n\n"); else if(nota >= 8.0) printf("MUY BUENO\n\n"); else if(nota >= 7.0) printf("BUENO\n\n"); else if(nota >=6.0) printf("REGULAR\n\n"); else printf("NECESITA MEJORAR\n\n"); getch(); return 0;

Este ejemplo, muestra que C, permite hacer anidamientos, es decir, una seleccin dentro de otra, ya sea del lado del cierto, o del falso o de ambos. El lector, puede tratar de hacer sus propias conclusiones, adems de buscar otras posibles solucione para este mismo problema. Por ejemplo, que pasara si iniciamos con la condicin del 6.0? Qu pasara si el usuario digita una neta negativa? Cmo podras darle solucin a este problema? Como programadores, debemos hacernos muchas preguntas al momento de disear nuestros programas, ya que estos No sern usados por nosotros, sino por otras personas. Ejemplo: Dada el peso, la altura y el sexo, de unos estudiantes. Determinar la cantidad de vitaminas que deben consumir estos estudiantes, en base al siguiente criterio: Si son varones, y su estatura es mayor a 1.60, y su peso es mayor o igual a 150 lb, su dosis, sern: 20% de la estatura y 80% de su peso. De lo contrario, la dosis ser la siguiente: 30% de la estatura y 70% de su peso. Si son mujeres, y su estatura es mayor de a 1.50 m y su peso es mayor o igual a 130 lb, su dosis ser: 25% de la estatura y 75% de su peso. De lo contrario, la dosis ser: 35% de la estatura y 65% de su peso. La dosis debe ser expresada en gramos.

#include <stdio.h> #include <conio.h> main() { float peso, estatura, dosis; char sexo;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

42

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

printf("Introduzca el sexo del alumno(a)<H/M>:\n"); scanf("%c", &sexo); printf("Peso:\n"); scanf("%f", &peso); printf("La estatura es de:\n"); scanf("%f", &estatura); if(sexo=='H' || sexo=='h') { if(estatura>1.60 && peso >=150) { dosis=(0.20*estatura)+(0.8*peso); printf("La dosis de este alumno ser : %.2f gramos\n\n", dosis); } else { dosis=(0.3*estatura)+(0.7*peso); printf("La dosis de este alumno sera %.2f gramos\n\n", dosis); } } else { if(estatura>1.50 && peso >=130) { dosis=(0.25*estatura)+(0.75*peso); printf("La dosis de esta alumna debe ser de %.2f gramos\n\n", dosis); } else { }

dosis=(0.35*estatura)+(0.65*peso); printf("La dosis de esta alumna debe ser de %.2f gramos\n\n", dosis);

} getch(); return 0;

S SE EL LE EC CC CII N NM M L LT TIIP PL LE E
Como su nombre lo indica, permite seleccionar entre varios caminos para llegar al final. En este caso se pueden elegir un camino o accin a ejecutar de entre varios posibles que se debe de evaluar, llamada selector. Sintaxis:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

43

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

switch(selector) { case Etiqueta A: case Etiqueta B: case Etiqueta n: default: } En donde:

Accin A; break; Accin B; break; Accin n; break; Excepcin; break;

Selector: Variables, expresiones simples de tipo ordinal, (enteros y caracteres int y char-) Etiqueta: Tiene que ser del mismo tipo de datos de selecto. Estas deber ser constantes nicas y diferentes de otras. Excepcin: Es opcional. Ejemplo: Disee un programa en C, que dado un nmero del 1 al 3, muestre en pantalla y en letras, el mismo nmero: #include <stdio.h> #include <conio.h> main() { int n; clrscr(); printf("El Nmero es:\n"); scanf("%d", &n); switch(n) { case 0: puts("Cero"); break; case 1: puts("Uno"); break; case 2: puts("Dos"); break; case 3: puts("Tres"); break; 44

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} getch(); return 0;

default: puts("Dato No valido"); break;

A D AC CT TIIV VIID DA A D
Mencione las diferencias entre las expresiones y los operadores: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Que tipo de datos son vlidos para los operadores aritmticos: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Explique, el resultado de los operadores incremento y decremento, dependiendo de su posicin: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Qu son y para que sirven los operadores unarios?: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Explique, el funcionamiento de los operadores de asignacin: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Ejercicios: 1. Disee un programa que dados tres nmeros indique cual es el mayor de ellos. 2. Disee un programa que dados tres nmeros indique cual de ellos es el menor. 3. En un cine se exhiben, pelculas para mayores de edad, disee un programa que dada la edad, indique si la persona puede o no ver la pelcula.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

45

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

4. En un supermercado, se realizan descuentos por las compras a partir de unas bolitas de colores. Si el cliente saca una bolita color azul, tiene un descuento del 20%, si la bolita es roja, se aplica un descuento del 30% y si saca una bolita color blanca, no se aplica ningn descuento. Disee un programa que a partir del importe de la compra y el color de la bolita, muestre lo que debe pagar dicho cliente. 5. Se procesan las notas de 5, alumnos, de las cuales se desea saber cual es el promedio de esas 5 notas, y cual fue la nota mayor y menor, adems de imprimir al final el nombre y la nota de cada alumno en forma de tabla. 6. Un estudiante desea saber cul fue su promedio en matemtica I, para ello dispone de la siguiente informacin: tiene 3 exmenes, con una ponderacin del 20% cada uno y 2 laboratorios con una ponderacin del 30% cada uno. Disee un programa que dadas las notas calcule el promedio del alumno y muestre en pantalla si el alumno esta reprobado o no (para aprobar esta materia se requiere de una nota mayor o igual a 6.00). 7. En un estacionamiento, se cobra de la siguiente manera: los primeros 10 minutos son gratis, los siguientes 30 minutos tiene un valor de $0.30 y la hora $0.60. disee un programa que reciba tanto minutos como horas y muestre lo que debe cancelar el cliente. Tomando en cuenta que si es Martes y Sbado se hace un descuento del 12.56% sobre el monto total. 8. Disee un programa que al introducir un dgito del 0 a 9, muestre como se lee. 9. Disee unA pequea calculadora que, al digitar un cdigo realice una operacin especfica: si el cdigo es 1, la operacin es la suma, si es 2, Resta. 3, multiplicacin y 4 divisin. Si el usuario a escrito otro cdigo invlido, mostrar un mensaje de error. 10. Construya un programa que dado el salario de un empleado, permita aplicarle un aumento de 10% si el salario es inferior a $500, si es mayor se le aumentar un 8%. Luego debe aplicar una retencin del 0.96% en concepto de Renta a ambos casos. 11. Se desea calcular el sueldo de un trabajador, a partir de las horas trabajadas en la semana y la clase a la que pertenece: Trabajadores Clase A, se les paga $7 por hora. Trabajadores clase B, se paga $5 por hora. Trabajadores clase C, se les paga $4 por hora y los de clase D, $3.5 por hora. 12. Un comerciante se dedica a la venta de sillas nicamente. Vende tres tipos de sillas: tipo A, tipo B y Tipo C los precios son $5.00, $7.00 y $10.00 respectivamente. Por cada cinco sillas compradas del tipo A, del tipo B o del tipo C los clientes reciben un descuento de 3%, 5% y 7%, las dems se cobran a precio normal. Disee un programa que imprima en forma de factura, con el nombre, precio unitario, precio total, nombre de la tienda, etc lo que debe cancelar cada cliente en concepto de la compra.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

46

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Descubre donde est el error. El siguiente cdigo, es de un programa que a partir de una nota determina si un alumno esta o no reprobado, y este puede presentar algunos errores de lgica, de sintaxis o de ejecucin. Puedes descubrirlos y modificarlos? #Include <stdio.h> #incluide <conio.h> main() { float nota; printf(Digite la nota:\n) scanf(%f, nota); if(nota>=6.00) printf(Aprobado\n\n); else printf(Reprobado\n\n); getch(); return 0; }

C CC CL LO OS S
Es muy comn encontrar en los programas operaciones que se deben ejecutar un nmero repetido de veces en perodos ms o menos espaciados. Si bien las instrucciones son las mismas, los datos sobre los que operan varan. A nuestro alrededor, encontramos problemas que presentan esas caractersticas, por ejemplo: el clculo de la nota final de los estudiantes de Programacin I, se realizar tantas veces como alumnos hayan inscritos en dicha asignatura, el clculo del salario de los empleados de una empresa, etc. En estos casos la solucin que se disee para un solo grupo de datos se debe repetir tantas veces como sea necesario (de acuerdo al nmero de estudiantes y de empleados para los ejemplos anteriores). Los clculos simples o la manipulacin de pequeos conjuntos de datos se pueden realizar fcilmente a mano, pero las tareas grandes o repetitivas son realizadas con mayor eficacia por una computadora, ya que estas estn especialmente preparadas para ello. Para repetir varias veces un proceso determinado haremos uso de los ciclos repetitivos, a los cuales se les conoce con el nombre de estructura repetitiva, estructura iterativa, lazo o bucle. (Tomado de Los guiones de clase de Introduccin a la Informtica. Universidad de El Salvador. Ao 2005)
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

47

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

En C, podemos encontrar tres tipos de ciclos: 1. Entrada Asegurada (while) 2. Ciclo Controlado Por Contador (for) 3. Hacer Mientras (do.. while) Este ultimo, no est lgicamente estructurado, por tanto no haremos mucho hincapi en l.

F M FU UN NC CIIO ON NA A MIIE EN NT TO OD DE EU UN NC CIIC CL LO O


Un ciclo, funciona de la siguiente manera: Evala una condicin de resultar cierta, realiza una accin o bloque de acciones, luego vuelve a evaluar la condicin y si nuevamente resulta cierta, realiza la (s) accin (es). Cuando la condicin de cmo resultado falso, se sale del ciclo y contina con la ejecucin normal del programa. Acumulador: Es una variable, que, como su nombre lo indica se encarga de acumular valores. Esto se vuelve muy til, por ejemplo, cuando queremos encontrar la suma de los nmeros del 0 al 9, en el acumulador, vamos guardando los valores de dichas cifras. Puede ser tanto real como entera. Su valor inicial, en la mayora de los casos es cero. Contador: Es una variable de tipo entero, que nos ayuda, en el programa a contabilizar el nmero de ejecuciones de una misma accin, de un grupo de alumnos etc. Un acumulador tiene tres valores distintos: Valor Inicial: es el valor con el cual iniciamos nuestro contador. Generalmente es cero. Esta asignacin puede hacerse cuando se declara la variable. Valor Final: despus de la ejecucin del ciclo, el valor del contador, ser distinto a su valor inicial, este puede ser mayo o menor que el mismo, todo depende si fue una cuenta creciente o decreciente. Valor de Cambio: Es el valor Constante, en el cual se ir incrementando nuestro contador, este puede ser positivo o negativo; es decir, si la cuanta se realiza de manera ascendente o descendente.

NOTA: el lector no debe confundirse entre las variables tipo acumulador y tipo contador, estas se diferencian unas de otras en que: los contadores, su valor de cambio es una constante, ya que aumenta y disminuyen en el mismo valor, mientras que los acumuladores su valor de cambio no es constante. Un acumulador necesariamente lo inicializamos con cero (o al menos en la mayora de los casos). Un contador puede iniciar con cualquier valor.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

48

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Bandera: Las variables tipo bandera son aquellas que slo admiten dos valores: cierto o falso, true o false, hombre o mujer... etc.

C D D CIIC CL LO OD DE EE EN NT TR RA A DA AA AS SE EG GU UR RA A DA A( (W WH HIIL LE E) )
La sintaxis es la siguiente: while(condicin) Accin; Funciona de la siguiente manera: primero evala la condicin, si da como resultado cierta realiza la accin, luego vuelve a evaluar la condicin, si su resultado es falso, se sale del ciclo y contina con la ejecucin del programa. Hay que tener mucho cuidado, cuando trabajamos con ciclos, ya que podemos caer en un ciclo infinito, es decir que nunca se sale de l. Lo cual no es un error de sintaxis sino de lgica. Por lo cual en las acciones debemos siempre colocar algo que haga que se modifique el resultado de la condicin, lo cual puede ser una bandera, un contador o un acumulador. Ejemplo: Disee un Programa que imprima los primeros 10 nmeros. #include <stdio.h> #include <conio.h> main() { int i=1; /*Declaramos nuestro contador con su Valor Inicial*/ while(i<=10) /*Mientras i sea menor o igual a 10:*/ { printf("%d\t", i);/*Imprimir el valor de i*/ i+=1;/*Aumentar el contador en 1*/ } getch(); return 0; } Ejemplo: Se desea conocer el promedio de los nmeros mayores que cero, en una serie de nmeros ingresados por el usuario. De los cuales no se sabe la cantidad, haciendo uso de una bandera, disee un programa en el cual el usuario ingrese los nmeros que desee. #include <stdio.h>
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

49

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <conio.h> main() { int i=0, sum=0, ban=1, n; float prom; while(ban==1) { printf("Ingrese un nmero por Favor:\n"); scanf("%d", &n); if(n>0) { i=i+1; sum+=n; } printf("Desea Ingresar Otro Nmero? (Si=1 y No=0)\n"); scanf("%d", &ban); } prom=sum/i; printf("************************************************************\n"); printf("*** El Promedio de los numeros mayores que cero es: %.2f ***\n", prom); printf("************************************************************\n"); getch(); return 0; } Ejercicio: En un saln se tienen las notas de 14, alumnos; de los cuales se desea saber cual fue el promedio de todas las notas, cual fue la nota mayor y la nota menor. As como la cantidad de aprobados en el curso (Para Aprobar la asignatura se requiere de una nota mayor o igual a 6.0) #include <stdio.h> #include <conio.h> main() { float suma=0, prom, menor=11, mayor=-1, nota; int i=1,j=0; while(i<=14) { printf("Ingrese la Nota del alumno %d:\n", i); scanf("%f", &nota); while(nota<0.00 || nota >10.00) { printf("ERROR, la nota debe estar entre 0 y 10\n"); scanf("%f", &nota); } 50

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} prom=suma/14; printf("El Promedio es %.2f\n\n", prom); printf("El total de Aprobados es %d\n", j); printf("La Mayor nota fue %.2f\n", mayor); printf("%.2f corresponde a la nota menor\n", menor); getch(); return 0;

if(nota>=6.00) j=j+1; if(nota>mayor) mayor=nota; if(nota<menor) menor=nota; i=i+1; suma=suma+nota;

C D D CIIC CL LO OC CO ON NT TR RO OL LA A DO OP PO OR RC CO ON NT TA A DO OR R( (F FO OR R) )
En algunas ocasiones, sabemos a ciencia cierta el nmero de veces que se tiene que repetir una misma accin o bloque de acciones. Y para ello es que nos sirve, esta estructura. Su sintaxis es la siguiente: for( valor inicial; condicin; incremento) accion; Donde: Valor inicial: es el valor con el cual inicializamos nuestra variable de control. Condicin: si la cumple, ejecuta la accin o acciones e incrementa o decrementa la variable de control, sino la cumple la condicin, se sale del ciclo. Incremento; que puede ser positivo o negativo (decremento). Ejemplo: Disee un programa que imprima los primeros 10 nmeros: #include <stdio.h> #include <conio.h> main() { int i; for(i=1; i<=10; i++) printf("%d\t", i); getch();
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

51

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

return 0;

Ejemplo: Disee un programa en C, que calcule las compras totales, realizadas por un grupo de 20 amas de casa. Luego con esa informacin obtenga la media. #include <stdio.h> #include <conio.h> main() { int i; float compra, desvia, prom, varinza, sum=0; for(i=1; i<=10; i++) { printf("Ingrese la cantidad que gast la ama de casa %d:\n", i); scanf("%f", &compra); while(compra<0) { printf("ERROR, la compra debe ser mayor que cero, vuelva a intentarlo:\n"); scanf("%f", &compra); } sum=sum+compra; } prom=sum/12; printf("El promedio de las compras es %.2f\n\n\a", prom); getch(); return 0; } Cabe, mencionar que, en el ciclo for, podemos hacer cuentas decrecientes, es decir asignarle un valor grande a nuestra variable de control y luego irla disminuyendo hasta un valor determinado. Ejemplo: En un cine, se tienen 3 diferentes clases de boletos. Se pide que disee un programa en el cual: Se lea el precio de las 3 clase de boletos Se lea el nmero de boletos vendidos de cada tipo Calcular cual boleto es el que se vendi menos El total recaudado en taquilla Adems se sabe que durante el da se realizaron un total de n ventas.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

52

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <stdio.h> #include <conio.h> main() { float preciob1, preciob2, preciob3, sum=0, sum1=0, sum2=0, sum3=0; int n, i, boletos1, boletos2, boletos3, boleto; clrscr(); printf("\t\tBIENVENIDO(A)\n\n\n"); printf("Ingrese el precio de los boletos 1:\n"); scanf("%f", &preciob1); while(preciob1<0) { printf("ERROR\n"); scanf("%f", &preciob1); } printf("Ingrese el precio de los boletos 2:\n"); scanf("%f",&preciob2); while(preciob2<0) { printf("ERROR\n"); scanf("%f", &preciob2); } printf("Ingrese el precio de los boletos 3:\n"); scanf("%f",&preciob3); while(preciob3<0) { printf("ERROR\n"); scanf("%f", &preciob3); } printf("Cu ntas ventas se realizaron este da?:\n"); scanf("%d", &n); while(n<0) { printf("ERROR\n"); scanf("%d", &n); } for(i=1; i<=n; i++) { printf("Ingrese el Boleto:\n"); scanf("%d", &boleto); switch(boleto) { case 1: printf("Ingrese la cantidad de boletos vendidos:\n"); scanf("%d", &boletos1); sum1+=boletos1; sum=sum+(boletos1*preciob1); break; case 2: printf("Ingrese la cantidad de boletos vendidos:\n"); 53

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} clrscr(); if(sum3<sum2 && sum3<sum1) printf("Los Boletos que se vendieron menos fueron los boletos numero UNO\n\n"); if(sum2<sum3 && sum2<sum1) printf("Los Boletos que se vendieron menos fueron los boletos numero DOS\n\n"); if(sum1<sum2 && sum1<sum3) printf("Los Boletos que se vendieron menos fueron los boletos numero TRES\n\n"); printf("El total recaudado en taquilla, durante este dia fue: %.2f\n\n", sum); getch(); return 0; }

scanf("%d", &boletos2); sum2+=boletos2; sum=sum+(boletos2*preciob2); break; case 3: printf("Ingrese la cantidad de boletos vendidos:\n"); scanf("%d", &boletos3); sum3+=boletos3; sum=sum+(boletos3*preciob3); break; default: printf("ERROR, Vuelva a intentarlo\n\n"); break; }

C CIIC CL LO OD DO O...... W WH HIIL LE E


Es te ciclo funciona de la siguiente manera, realiza la accin o conjunto de acciones, luego evala una condicin de resultar cierta vuelve a realizar la/s accion/es. Cuando sea falsa, se sale del ciclo. Esta estructura, no est lgicamente, estructurada, por ello, no hablaremos mucho, sin embargo realizaremos un par de ejemplos, de este ciclo. Formato: do { sentencia; . . } while(<expL>); La diferencia fundamental, entre el ciclo while y do...while, es que en este ultimo, las sentencias se realizarn por lo menos una vez, en cambio, con while, solo se cumplirn mientras se cumpla la condicin, lo cual puede ser nunca.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

54

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo: Programa que determina si un ao es bisiesto o no. Y un ao es bisiesto si es mltiplo de cuatro, pero excluyendo aquellos que son mltiplos de 100 pero no de 400 #include <stdio.h> #include <conio.h> void main() { int anio; char respuesta; printf("\n\n\nINICIO DEL PROGRAMA\n\n\n"); printf("\n\nEl programa te pide un anio y te dice exactamente si es bisiesto o no"); do { /*ENTRADA DE DATOS*/ printf("\n\nIntroduzca un anio determinado "); scanf("%d",&anio); /*PROCESO Y SALIDA DE DATOS*/ if ((anio%4==0 && anio%100!=0)||(anio%400==0)) printf("\n\nEl anio es bisiesto"); else printf("\n\nEl anio no es bisiesto"); printf("\n\nDesea introducir mas datos\n\n"); respuesta=getch(); } while(respuesta=='S' || respuesta=='s'); printf("\n\n\nFIN DEL PROGRAMA\n\n\n"); } NOTA: este cdigo ha sido tomado de Practicas de Programacin en C, de Fernando Muoz Ledesma. Practica 3, ejercicio 5.

A D AC CT TIIV VIID DA A D
Qu es y cmo funciona un ciclo? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cul es la diferencia entre un contador y un acumulador? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cul es la mejor manera de validar datos? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 55

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Cmo se evita un ciclo infinito? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Qu diferencia existe entre un ciclo de entrada asegurada y el do... while?: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Descubre donde est el error. El siguiente cdigo muestra la serie: 1^2+2^2+3^2....n^2 En el cual hay errores de lgica, de sintaxis o hasta de ejecucin, puedes descubrirlos y corregirlos?

#include <stdio.h> #include <conio.h> main() { int n i, x, sum=0; printf("Inrtroduzca el valor de n:\n"); scanf("%d", &n); while(n<0) { printf("Error, vuelva a digitar el valor de n:\n"); scanf("%d", n); } for(i=1; i<=n, i++) x=i*i; sum+=n; printf("El valor de la suma es:%d\n\n", sum) getch(); return 0; } Ejercicios 1. Se desea conocer la suma de los nmeros enteros, positivos menores que n, el cual es un dato dado por el usuario.
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

56

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

2. Muestre un programa en c, que imprima en pantalla los nmeros desde un valor inicial, hasta un valor final, ingresados por el usuario, tanto en forma descendente como ascendente. 3. Disee un programa que imprima la serie de Fugonacci, as: 0 1 1 2 3 5 8 13.... hasta un nmero n dado por el usuario. 4. Calcule el promedio de edades de un grupo de estudiantes, de los cuales no se conoce la cantidad. 5. Disee un programa que obtenga, la calificacin mayor y la calificacin menor, de un grupo de 40 estudiantes, adems de los nombres de dichos alumnos. 6. En un pas hubieron elecciones para elegir al presidente. El pas consta de 7 provincias o regiones, de las cuales se han levantado actas que contiene el total de votos obtenidos por los 4 partidos polticos en dicha regin. Disee un programa en c, que lea las actas de las 7 provincias, muestre que partido gan las elecciones y en caso de empate, lo especifique con un mensaje. 7. en un supermercado, hay 3 departamentos (de ropa, comestibles y perfumera), en lo cuales se realizan un descuento de 5%, 3.5% y 8% respectivamente, por las compras totales mayores de $100.00. disee un programa que dado el monto de la compra, realice los descuentos pertinentes por departamento, le indique al usuario a cuanto asciende su nuevo monto e indique, cuanto fue lo recaudado al final del da. 8. La Empresa, el porvenir s.a de c.v desea conocer lo que debe pagar en concepto de horas extras aun grupo de n empleados. Se sabe que una hora extra diurna, se paga el doble que una hora normal. Y una hora extra nocturna se paga el doble de una hora normal ms el 25%. Adems que todos los empleados tiene sueldos diferentes, muestre el nuevo sueldo de cada uno de ellos y lo que tendr que pagar la empresa en concepto de horas extra. 9. Una compaa de telfonos, cobra $0.03 por minuto la llamada nacional local, $0.06 por la llamada de larga distancia nacional y $0.10 la llamada de larga distancia internacional. Disee un programa que calcule las facturas mensuales de los clientes, sabiendo que, si las llamadas fueron realizadas por la maana tienen un doble valor, y si los 10 primeros minutos de llamadas locales son gratis, en cualquier horario.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

57

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

SUBPROGRAMAS O MDULOS - ARREGLOS

IIN NT TR RO OD DU UC CC CII N N
Esta unidad busca que el estudiante aprenda a trabajar con subprogramas o mdulos, de igual manera, la forma de trabajar con arreglos unidimensionales o bidimensionales.

J C JU US ST TIIF FIIC CA A CII N N

Una de las grandes ventajas que tiene la programacin estructurada es la divisin de problemas grandes en subproblemas y, a su vez, stos tambin pueden dividirse en problemas ms pequeos. Cada una de las divisiones que se hacen para obtener la solucin de un problema se denomina mdulo y su implementacin se hace por medio de subprogramas. Por otro lado los datos siempre que estn relacionados se pueden organizar en estructuras, de tal manera que podamos tener un conjunto de datos manejados a travs de un mismo nombre de variable.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Proporcionar los conocimientos que permitan al estudiante conocer y aplicar los conceptos de funciones (subprogramas) y arreglos (Vectores y Matrices)

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

58

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
1. Conocer la forma de implementar subprogramas o mdulos 2. Conocer la forma de implementar arreglos

C CO ON NT TE EN NIID DO O
1. Subprogramas o Mdulos 2. Paso de Parmetros 3. Funciones Definidas Por El Usuario en C 4. Funciones que no devuelven ningn valor. 5. Funciones que devuelven un valor entero 6. Funciones que Devuelven un Valor Real 7. Funciones en las que usamos Men 8. Vectores 9. Uso de Vectores dentro de las Funciones 10. Matrices

S M S SU UB BP PR RO OG GR RA A MA A SO OM M D DU UL LO OS S
La modularizacin, es una tcnica usada por los programadores para hacer sus cdigos ms cortos, ya que consiste en reducir un gran problema complejo, en pequeos problemitas ms sencillos, concentrndose en la solucin por separado, de cada uno de ellos. En C, se conocen como funciones aquellos trozos de cdigos utilizados para dividir un programa con el objetivo que, cada bloque realice una tarea determinada. En las funciones juegan un papel muy importe las variables, ya que como se ha dicho estas pueden ser locales o globales. Variables Globales: Estas se crean durante toda la ejecucin del programa, y son globales, ya que pueden ser llamadas, ledas, modificadas, etc; desde cualquier funcin. Se definen antes del main(). Variables Locales: Estas, pueden ser utilizadas nicamente en la funcin que hayan sido declaradas.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

59

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

La sintaxis de una funcin es la siguiente: Tipo_de_datos nombre_de_la_funcion(tipo y nombre de argumentos) { acciones } Donde: Tipo_de_datos: Es el tipo de dato que devolver esa funcin, que puede ser real, entera, o tipo void(es decir que no devolver ningn valor). Nombre_de_la_funcion: Es el identificador que le damos a nuestra funcin, la cual debe cumplir las reglas que definimos en un principio para los identificadores. Tipo y nombre de argumentos: son los parmetros que recibe la funcin. Los argumentos de una funcin no son ms que variables locales que reciben un valor. Este valor se lo enviamos al hacer la llamada a la funcin. Pueden existir funciones que no reciban argumentos. Acciones: Constituye el conjunto de acciones, de sentencias que cumplir la funcin, cuando sea ejecutada. Entre ellas estn: Asignaciones Lecturas Impresiones Clculos, etc

Una funcin, termina con la llave de cerrar, pero antes de esta llave, debemos colocarle la instruccin return, con la cual devolver un valor especfico. Es necesario recalcar que si la funcin no devuelve ningn valor, es decir, es tipo void, no tiene que ir la sentencia return, ya que de lo contrario, nos dar un error. Pero, es vlido que nos hagamos la siguiente pregunta: Cmo es que funcionan los Subprogramas? A menudo, utilizamos el adjetivo de Subprogramas, para referirnos a las funciones, as que, el lector debe familiarizarse tambin con este trmino. Los subprogramas se comunican con el programa principal, que es el que contiene a las funciones, mediante parmetros, que estos pueden ser: Parmetros Formales y Parmetros Actuales. Cuando se da la comunicacin los parmetros actuales son utilizados en lugar de los parmetros formales.

P S R M PA A SO OD DE EP PA A R ME ET TR RO OS S
Existen dos formas de pasar parmetros, las cuales son:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

60

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Paso por Valor


Tambin conocido como parmetros valor. Los valores se proporcionan en el orden de clculos de entrada. Los parmetros se tratan como variables locales y los valores iniciales se proporcionan copiando los valores de correspondientes argumentos. Los parmetros formales-Locales de una funcin reciben como inicilaes los valores de los parmetros actuales y con ellos se ejecutan las acciones descritas en el subprograma. Ejemplo: A=5; B=7; C=proc1(A, 18, B*3+4); Proc1(X, Y, Z) Explicacin: Donde, se encuentra c, se est llamando la funcin, denominada proc1, en la cual se estn enviando como parmetros el valor de A, que es cinco; el cual es recibido por la variable X, en la definicin de la funcin proc1; en la misma funcin, Y tendr el valor de 18; por que ese es el valor del parmetro formal, mientras que Z, tendr un valor inicial de 25, ya que ese es el resultado del tercer parmetro que resulta ser una expresin aritmtica.

F S R FU UN NC CIIO ON NE ES SD DE EF FIIN NIID DA A SP PO OR RE EL LU US SU UA A RIIO OE EN NC C


Una funcin, como ya se ha dicho, es un bloque de cdigo dentro del programa que se encarga de realizar una tarea determinada. Por lo tanto un programa en c debe constar de una o ms funciones, y por su puesto no puede faltar la funcin principal main(). Un viejo adagio dice: Separa y vencers, lo cual se acopla perfectamente cuando tenemos un programa que es bastante grande; podemos separarlos en pequeos subprogramas (funciones), y concentrarnos en la solucin por separados de cada uno de ellos y as resolver un gran problemas, en unos cuantos problemitas ms pequeos. Si un programa, est constituido por ms de una funcin, las llamadas a la misma, pueden realizarse desde cualquier parte del programa, y la definicin de ellas debe ser independiente unas de otras. Por lo tanto sera un grave error el tratar de definir una funcin dentro de otra. Una funcin puede ser llamada desde cualquier parte del programa no slo una vez, y cuando es llamada, empieza a ejecutar las acciones que estn escritas en cdigo.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

61

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Para mayor comodidad del lector vamos a ver varios ejemplos, del uso de funciones y a medida que vayamos avanzando se volvern ms complejos. El orden ser el siguiente: Funciones que no devuelven ningn valor Funciones que devuelven un valor entero Funciones que devuelven un valor Real Funciones combinadas Funciones en las que usamos Men.

F L FU UN NC CIIO ON NE ES SQ QU UE EN NO OD DE EV VU UE EL LV VE EN NN NIIN NG G N NV VA A LO OR R..


Cmo se ha dicho las funciones pueden o no devolver algn valor, para mi parecer, este tipo de funciones son las ms sencillas, ya que cuando se llama la funcin, esta realiza lecturas, asignaciones, clculos o impresiones, finaliza la ejecucin de la funcin y el programa contina normalmente. Ejemplo: Disee un programa que dados dos nmeros enteros determine la suma y cual de ellos es mayor, usando dos funciones diferentes. #include <stdio.h> #include <conio.h> void suma (int a, int b); /*Declaracin de la funcin*/ void mayor (int a, int b); /*Tipo de dato, nombre de la funcin y el tipo y nombre de los argumentos*/ main() { int a, b; printf("Ingrese el valor de a:\n"); scanf("%d", &a); printf("Ingrese el valor de b:\n"); scanf("%d", &b); suma(a,b); /*Llamado de la funcin*/ mayor(a,b); /*Unicamente el nombre de la funcin y de los par metros*/ getch(); return 0; } void suma(int a, int b) /*Definicin de la funcin*/ { /*Abrimos llaves al inicio de la definicin*/ int sum; /*Declaracin de las variables locales*/ sum=a+b; printf("El valor de la suma es %d:\n\n", sum);

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

62

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} /*Fin de la funcin suma*/ void mayor(int a, int b) { if(a==b) printf("Son iguales\n\n"); else { if(a>b) printf("El valor de a es mayor que el de b\n\n"); else printf("El valor de b es mayor que el de a\n\n"); } } Definicin de la Funcin La funcin ha sido declarada, ha sido llamada y por lo tanto deber haber sido definida. Lo cual consta de dos partes, las cuales son: La Primera Lnea Que como su nombre lo indica, es la primera lnea de la definicin de la funcin y con ella le indicamos al compilador que est en presencia de una funcin. Su formato es el siguiente: Tipo_de_dato nombre_de_la_funcin (tipo y nombre de los argumentos) Cuerpo de la funcin Se inicia con una llave {, y en ella, se pueden realizar asignaciones, clculos, impresiones, as como la declaracin de las variables locales. Puede estar constituidas por estructuras secuenciales, selectivas, iterativas, anidamientos, se pueden llamar otras funciones, etc; finaliza con }. Puede devolver uno o ningn valor. Ejemplo: Disee un Programa en C, que Dado un nmero entero y mayor que cero, Determine si es o no un nmero Primo. Ojo, los nmeros primos slo son divisibles por el mismo y por la unidad (1). #include <stdio.h> #include <conio.h> void primo (int numero); main() { int numero, ban=1; clrscr(); while(ban==1) {
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

63

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

printf("Introduzca el nmero por favor:\n"); scanf("%d", &numero); while(numero<0) { printf("ERROR, el valor del nmero debe ser mayor que cero\n"); scanf("%d", &numero); } primo(numero); printf("Otro nmero (si=1 y No=0)?\n"); scanf("%d", &ban); } getch(); return 0;

} void primo (int numero) { int div, primo=1; for(div=2; div<numero; div++) { if(numero%div==0) { primo=0; printf("%d NO es primo\n\n\n", numero); return 0; } else primo=1; } if(primo!=0) printf("%d es primo\n\n\n", numero); }

F L FU UN NC CIIO ON NE ES SQ QU UE ED DE EV VU UE EL LV VE EN NU UN NV VA A LO OR RE EN NT TE ER RO O..
Las funciones que devuelven algn valor, se les llama PROTOTIPOS DE FUNCIONES: Antes de usar una funcin C debe tener conocimiento acerca del tipo de dato que regresara y el tipo de los parmetros que la funcin espera. El estndar ANSI de C introdujo una nueva (mejor) forma de hacer lo anterior respecto a las versiones previas de C. La importancia de usar prototipos de funciones es la siguiente:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

64

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Se hace el cdigo mas estructurado y por lo tanto, ms fcil de leer. Se permite al compilador de C revisar la sintaxis de las funciones llamadas. Lo anterior es hecho, dependiendo del alcance de la funcin. Bsicamente si una funcin ha sido definida antes de que sea usada (o llamada), entonces se puede usar la funcin sin problemas. Si no es as, entonces la funcin se debe declarar. La declaracin simplemente maneja el tipo de dato que la funcin regresa y el tipo de parmetros usados por la funcin. Es una prctica usual y conveniente escribir el prototipo de todas las funciones al principio del programa, sin embargo esto no es estrictamente necesario. Para declarar un prototipo de una funcin se indicara el tipo de dato que regresar la funcin, el nombre de la funcin y entre parntesis la lista del tipo de los parmetros de acuerdo al orden que aparecen en la definicin de la funcin. Por ejemplo: int longcad(int n); Lo anterior declara una funcin llamada longcad que regresa un valor entero y acepta otro valor entero como parmetro. (Tomado de Manual de C de Hctor Tejada Villela) Ejemplo: Disee un programa, que dado un nmero entero y mayor que cero, muestre su factorial. (El factorial de 5 es 120; 5x4x3x2x1=120) #include <stdio.h> #include <conio.h> int factorial (int num); main() { int num, ban=1; clrscr(); while(ban==1) { printf("Ingrese el valor del nmero por favor:\n"); scanf("%d", &num); while(num<0) { printf("ERROR, el valor del nmero debe ser mayor que cero:\n"); scanf("%d", &num); } printf("El valor del factorial es %d\n\n", factorial (num)); printf("Desea Realizar otro calculo?Si=1 y No=0\n"); scanf("%d", &ban); } getch(); return 0; } int factorial (int num)
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

65

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

int sum=1, i; for(i=2; i<=num; i++) { sum=sum*i; } return (sum);

Explicacin: Quiz, lo nico nuevo, e importante de explicar, radica en la llamada y la definicin de la funcin. Cuando una funcin nos devolver un valor entero, al identificador de dicha funcin debe precederle el tipo de dato. En el lugar, donde llamamos la funcin, es que aparecer el valor que nos devuelva, como valor de retorno. En nuestro ejemplo, en una impresin. Y al momento de definirla, no se nos debe olvidar, colocarle la sentencia return(); ya que, mediante esta declaratoria, est retornando el valor calculado. Pero, que sucede cuando se est trabajando, con valores bastante grandes, al utilizar solamente el int, se producir un error lgico; ya que como valor de retorno podra ser un cero o una cifra negativa. Por tanto debemos usar el tipo de dato long int. Ejemplo: Disee un programa, que dada una cifra entera y mayor que cero, sea elevada a una potencia introducida por el usuario, la cual. (Ejemplo: 5^2=25). #include <stdio.h> #include <conio.h> long int potencia (int base, int exponente); main() { int base, exponente; clrscr(); printf("La Base es:\n"); scanf("%d", &base); while (base<0) { printf("ERROR, el dato debe ser mayor que cero:\n"); scanf("%d", &base); } printf("El Exponente es:\n"); scanf("%d", &exponente); printf("%d ^ %d es %ld\n\n", base, exponente, potencia(base,exponente)); getch(); return 0; } long int potencia (int base, int exponente) { 66

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

long int sum=0, i,x; for(i=1; i<exponente; i++) { x=base*base; sum=sum+x; } return (sum);

Este mtodo es un poco complejo y puede realizarse de manera ms fcil, haciendo uso de las funciones predefinidas en C, de las cuales hablaremos a continuacin.

F L L FU UN NC CIIO ON NE ES SQ QU UE ED DE EV VU UE EL LV VE EN NU UN NV VA A LO OR RR RE EA A L..
Antes que nada, trataremos las funciones predefinidas en C. Ya que C, posee ciertas funciones que nos ayudan hacer nuestros programas ms fciles y utilizar menos cdigo. El lenguaje c, cuenta con una serie de funciones de bibliotecas que realizan operaciones y clculos de uso frecuente. Para acceder a una funcin, se realiza mediante el nombre seguido de los argumentos que le servirn a la funcin a realizar la tarea especfica. Nombre(arg1, arg2,...argn);

Funciones Matemticas
Para acceder a ellas, se debe colocar la directiva #include <math.h> en el encabezado del programa.

FUNCIN (SINTAXIS) acos(d) asin(d) atan(d) atan(d1, d2) ceil(d) cos(d) cosh(d) exp(d) fabs(d)

TIPO DE DATO double double double double double double double double double

PROPSITO Devuelve el arco coseno de d Devuelve el arco seno de d Devuelve el arco tangente de d Devuelve el arco tangente de d1/d2 Devuelve el valor redondeado por exceso, al siguiente entero mayor Devuelve el coseno de d Devuelve coseno hiperblico de d Eleva a la potencia d Devuelve el valor absoluto de d

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

67

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

floor(d) log(d) log10(d) pow(d1, d2) sin(d) sinh(d) sqrt(d) Tan(d) tanh(d)

double double double double Double double double double double

Devuelve el valor redondeado por defecto al entero menor ms cercano Devuelve el logaritmo natural de d Devuelve el lo. (base10) de d Devuelve d1 elevado a la potencia d2 Devuelve el seno de d Seno hiperblico de d Raz cuadrada de d Devuelve la tangente de d Devuelve la tangente hiperblica de d

Las siguientes funciones se encuentran en las libreras: stdid.h stdlib.h: FUNCIN (SINTAXIS) abs(i) ran() srand(u) div(d1/d2) atuf(s) atoi(s) atol(s) TIPO int int void Double/ int Double int long PROPSITO Devuelve el valor absoluto de i Devuelve un entero aleatorio Inicializa el generador de nmeros aleatorios Devuelve el cociente y el resto de la divisin Convierte la cadena a una cantidad de doble precisin Convierte cadenas a un entero Convierte cadenas a un entero largo

Hay muchas otras funciones, pero para ahondar ms, debes saber cul es la versin de C, instalada en tu mquina y as verificar cules funcionan correctamente; pero por lo general, estas funciones son muy estndar para la mayora de compiladores. A continuacin, pasaremos a desarrollar una serie de ejercicios, en los cuales haremos uso de las funciones predefinidas en c, as como la modularizacin, es decir; el uso de funciones definidas por el usuario. Ejemplo: Se desea conocer el resultado de las siguientes operaciones: a+b |a-b| ab Las variables a y b, son de tipo real, y pueden ser positivas o negativas. #include <stdio.h> #include <conio.h> 68

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <math.h> double raiz(float a, float b); double valor_absoluto(float a, float b); double exponente (float a, float b); main() { float a, b; clrscr(); printf("\t\tBIENVENIDO\n\n"); printf("Ingrese el valor de a, por favor:\n"); scanf("%f", &a); printf("Ahora el valor de b:\n"); scanf("%f", &b); printf("El resultado de la raz cuadrada de %.2f + %.2f es %.2f\n\n", a,b,raiz(a,b)); printf("|%.2f-%.2f| es igual a %.2f\n\n", a,b,valor_absoluto(a,b)); printf("%.2f^%.2f es igual a %f\n\n", a,b,exponente(a,b)); getch(); return 0; } double raiz(float a, float b) { float x; double y; x=a+b; y=sqrt(x); return (y); } double valor_absoluto(float a, float b) { float x; double y; x=a-b; y=fabs(x); return (y); } double exponente (float a, float b) { double x; x=pow(a,b); return (x); } Supongo que, este ejemplo no requiere mayor explicacin. Pero me gustara que el lector, comprenda la gran cantidad de usos que podemos darle, a aquellas funciones matemticas, junto con las funciones definidas por el usuario, esta es una gran ayuda, ya que se imaginan la cantidad de cdigo que deberamos colocar, para determinar cosas tan elementales como el valor absoluto?; con estas funciones matemticas, C, nos ahorra mucho trabajo y cdigo.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

69

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Funciones Combinadas
A continuacin veremos un ejemplo de un programa en el cual utilizamos dos funciones de diferente tipo de dato. Ejemplo: El valor del nmero e se puede aproximar sumando n trminos de la serie: e = 1 + 1/1! + 1/2! + 1/3! +... Escribir un programa que solicite el nmero de trminos de la serie a sumar e informe del valor aproximado de e. Tngase en cuenta que el termino i de la anterior serie se obtiene dividiendo por (i-1). (La exclamacin es el factorial). #include <stdio.h> #include <conio.h> #include <stdlib.h> void calculodatos(int numero); double factorial(int dato); void main(void) { int numero; char respuesta; printf("\n\n\nINICIO DEL PROGRAMA\n\n\n"); printf("\n\nEl programa te calcula el valor del numero e."); do { do { printf("\n\nIntroduzca un numero de terminos de la serie: "); scanf("%d",&numero); } while (numero<0); calculodatos(numero); printf("\n\nDesea introducir mas datos\?\n\n"); respuesta=getch(); system("cls"); } while (respuesta=='s' || respuesta=='S'); printf("\n\n\n\t\t"); printf("\n\t\t FIN DEL PROGRAMA "); printf("\n\t\t\n\n\n");

void calculodatos(int numero) { register int i; register double e=1.;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

70

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

for (i=1;i<=numero;i++) { e=e+1./factorial(i); } printf("\n\nEl valor de e para %d terminos es %f.",numero,e); } double factorial(int dato) { register int i; register double resultado=1; for (i=dato;i>0;i--) resultado=resultado*i; return resultado;

El ejemplo anterior ha sido tomado de Practicas de C, de Fernando Muoz Ledesma. Y as como este ejemplo, podemos realizar muchas otras combinaciones de funciones, segn necesitemos y lo solicite nuestro programa.

F S M FU UN NC CIIO ON NE ES SE EN NL LA A SQ QU UE EU US SA A MO OS SM ME EN N ..
En la prctica, muchas veces debemos disear programas, que nos permitan elegir la accin o acciones a realizar, es decir haciendo uso de un men. El cual, no es ms ni menos que la aplicacin de un selector mltiple. Un switch. Ejemplo: Disee un programa, que dado un ngulo, muestre su seno, coseno o tangente; segn lo desee el usuario. #include <stdio.h> #include <conio.h> #include <math.h> void seno (float angulo); void coseno (float angulo); void tangente (float angulo); main() { float angulo; int opcion, ban=1; clrscr(); while(ban==1) {
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

71

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} void seno (float angulo) { float y; y=sin (angulo); printf("El seno de %f es %f\n\n", angulo, y); } void coseno (float angulo) { float y; y=cos(angulo); printf("El coseno de %f es %f\n\n", angulo, y); } void tangente (float angulo) { float y; y=tan(angulo); printf("La tangente de %f es %f\n\n", angulo, y); getch(); 72

} getch(); return 0;

printf("\t\tBIENVENIDO/A\n\n"); printf("Introduzca el valor del angulo, por favor:\n"); scanf("%f", &angulo); printf("Que desea hacer?:\n\n"); printf("********************************************\n"); printf("**** 1. seno del angulo ****\n"); printf("**** 2. coseno del angulo ****\n"); printf("**** 3. tangente del angulo ****\n"); printf("********************************************\n"); scanf("%d", &opcion); while(opcion<0 || opcion>3) { printf("ERROR, la opcion debe estar entre 0 y 3:\n"); scanf("%d", &opcion); } clrscr(); switch(opcion) { case 1: seno (angulo); break; case 2: coseno (angulo); break; case 3: tangente (angulo); break; } printf("Hay mas datos? (si=1 y no=0)\n"); scanf("%d",&ban);

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

A D AC CT TIIV VIID DA A D
Mencione y explique, las partes en las que se componen las funciones definidas por el usuario en C: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cul es la diferencia entre las funciones predefinidas en c y las funciones definidas por el usuario? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ En que consiste el paso de parmetros?: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cul es la diferencia entre parmetros formales y actuales?: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ En qu se diferencian las variables locales a las globales? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Ejercicios 1. Realice una pequea calculadora, utilizando funciones 2. Disee un programa que permita calcular la serie + 1/3 + + ... 1/n. 3. Disee un programa, que muestre el mayor y el menor de tres introducidos por el usuario. 4. Se desea conocer el logaritmo natural y el logaritmo base 10 de una serie de nmeros. As como la suma de dichos valores 5. Se desea conocer la permutacin de dos nmeros distintos. Usando funciones. Disee un programa que resuelva dicho problema. (NOTA: 5P3=5!/(5-3)!) 6. Se desea conocer la equivalencia de dlares a colones (un dlar = 8.75 de coln), la equivalencia de un kilogramos a libras (1kg=2.2lb) y la conversin de kilmetros a millas (1km=0.62millas). realice esta solucin mediante un men. 7. Calcule lo que debe pagar cada cliente en un almacn; si por cada compra el cliente tiene derecho a sacar un papelito, y dependiendo del color, se efectan 73

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

diferentes descuentos. Si el color es blanco, se realiza un descuento del 2.63% sobre la cuenta, si es verde, un descuento de 4.85% y si es rojo, un descuento de 5.02%. se sabe adems que si es da lunes o viernes, el porcentaje de descuento es el doble. 8. El seno de un ngulo, puede aproximarse, de la siguiente manera: sin(x) = x x^3/3! + x^5/5! - x^7/7! + ..., determine este valor, y usando la funcin sin(d), luego muestre la diferencia entre estos valores. 9. En una empresa de electricidad, se cobrar las facturas correspondientes al consumo de kwh, de la siguiente manera: los primeros 100 kwh, se cobran $2.5, lo siguientes 200 kwh, son a $5.00, los 300kwh, siguientes, son cobrados a razn de $7.5, los kwh siguientes se cobran a $7.00. disee un programa que permita determinar lo que debe pagar un grupo de clientes al final del mes. 10. En una empresa de repuestos de automvil, poseen 10 tipos de repuestos identificados con los nmeros de 1 al 10. durante la semana se realizan diferentes ventas de los repuestos. Se desea saber la cantidad de repuestos que se deben comprar, para actualizar el inventario. El cual se realiza cada cinco das, y se procede de la siguiente manera: cada da se contabilizan el total de facturas, en las cuales se muestran la cantidad de artculos vendidos as como el total de la venta. Con esos datos, indique al usuario cuantos y de que tipo, son los repuestos que se deben comprar as como la ganancia.

E S ES ST TR RU UC CT TU UR RA A SD DE ED DA AT TO OS S( (A AR RR RE EG GL LO OS S) )
Un array es un identificador que referencia un conjunto de datos del mismo tipo. Imagina un tipo de dato int; podremos crear un conjunto de datos de ese tipo y utilizar uno u otro con solo cambiar el ndice que lo referencia. El ndice ser un valor entero y positivo. En 'C' los arrays comienzan por la posicin 0.

V VE EC CT TO OR RE ES S
Un vector es un array unidimensional, es decir, solo usa un ndice para referenciar a cada uno de los elementos. Su declaracin ser: tipo nombre [tamao];

El tipo puede ser cualquiera de los ya conocidos y el tamao indica el nmero de elementos del vector (se debe indicar entre corchetes [ ]). En el ejemplo puedes observar que la variable i es utilizada como ndice, el primer for sirve para rellenar el vector y el segundo para visualizarlo. Como ves, las posiciones van de 0 a 9 (total 10 elementos). (Tomado de Introduccin al lenguaje de programacin de C/C++. Sergio Pacho)

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

74

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo: nt num[100]; /*Arreglo de tipo entero compuesto de 100 posiciones*/ char nom[80]; /*Texto de 80 caracteres*/ float x[12]; /*arreglo de 12 elementos punto flotantes */

Constante Simblica
Hace ms sencillo o ms fcil modificar un programa que utiliza arreglos. Ya que todas las referencias al tamao del arreglo pueden ser alteradas, cambiando el valor de la constante simblica. Ejemplo: Disee un programa que lea un vector de 10 posiciones, luego determine si la quinta posicin es positiva, si la primera posicin es negativa y si la ultima posicin es cero. #include <stdio.h> #include <conio.h> #define N 10 main() { float x[N]; int i; for(i=0; i<N; i++) { printf("Ingrese el valor %d:\n", i); scanf("%f", &x[i]); } if(x[4]>0) { printf("La quinta Posicin es Positiva\n\n"); } if(x[0]<0) { printf("La 1 Posicin es Negativo\n\n"); } if(x[N-1]==0) { printf("La Ultima Posicin es cero\n\n"); } getch(); return 0;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

75

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Explicacin En este ejemplo estamos haciendo uso de la constante simblica, de cuyos beneficios ya se habl. La definimos con 10 posiciones, recordando que C, empieza a contar desde cero. Luego definimos el vector llamado x, como punto flotante, y ojo, que ste va acompaado de su dimensin. Luego haciendo uso de un for, empezamos a llenar el vector. Luego preguntamos si la posicin cuatro es positiva. El lector se preguntar el por que, la instruccin es x[4] y no x[5], ya que; lo que queremos es averiguar, si la posicin cinco es la positiva. Pues bien, la posicin identificada con el nmero cuatro, es en efecto la que contiene el quinto nmero. As:

Esta es una versin grfica, de lo que sucedera al llenar nuestro vector con los valores indicados. Como podemos ver, C empieza a enumerar las casillas desde el cero, hasta el 9. totalizando de esa manera 10 posiciones. As que, x[4]=8. Es por ello, que el for, lo inicializamos con cero, hasta un valor menor que el de la constante, ya que de lo contrario nos dara un error. Una particularidad con los vectores de tipo char (cadena de caracteres), es que deberemos indicar en que elemento se encuentra el fin de la cadena mediante el carcter nulo (\0). Esto no lo controla el compilador, y tendremos que ser nosotros los que insertemos este carcter al final de la cadena. Por tanto, en un vector de 10 elementos de tipo char podremos rellenar un mximo de 9, es decir, hasta vector[8].Si solo rellenamos los 5 primeros, hasta vector[4], debemos asignar el carcter nulo a vector[5]. Es muy sencillo: vector[5]='\0'; Ahora veremos un ejemplo de como se rellena un vector de tipo char. Podemos ver que en el for se encuentran dos condiciones: 1. Que no se hayan rellenado todos los elementos (i<19). 2. Que el usuario no haya pulsado la tecla ENTER, cuyo cdigo ASCII es 13. (cadena[x-i]!=13).

U S US SO OD DE EV VE EC CT TO OR RE ES SD DE EN NT TR RO OD DE EL LA A SF FU UN NC CIIO ON NE ES S
Un vector, solo puede ser argumento formal, es decir; por el momento, no podemos enviarlo como valor de retorno., digo por el momento por que cuando hablemos de punteros, veremos que si se pueden enviar.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

76

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Y dicho proceso se realiza de la siguiente manera: Declaracin o Prototipo: Tipo_de_dato nombre de la funcion (tipo_de_dato[]); Llamado de la Funcin Nombre_de_la_funcion(nombre del vector); Definicin de la funcin Tipo_de_dato nombre de la funcion (tipo_de_dato nombre[]) Ejemplo: Disee un programa en C, que lea un vector de un mximo de 20 posiciones, y luego determine: La suma de todos los valores El mayor de los valores, as como la posicin del mismo.

Se sabe que dichos datos son de tipo entero #include <stdio.h> #include <conio.h> #define N 20 int suma (int [N]); /*Declaracin de la funcin*/ void mayor (int [N]); /*Ojo, los argumentos que son vectores solo necesitan el tipo de dato y la direccin*/ main() { int numeros[N], i; printf("Ingrese la Cantidad de Valores:\n"); scanf("%d", &limite); while(limite<0 || limite >N) for(i=0; i<N; i++) { printf("Ingrese el elemento %d del vector:\n", i); scanf("%d", &numeros[i]); } printf("La suma de todos los elementos del vector es: %d\n", suma(numeros)); mayor(numeros); /*Llamado de la funcin */ getch(); return 0; } int suma (int numeros [N]) /*Definicin de la funcin */ { int sum=0, i;
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

77

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} void mayor (int numeros [N]) { int pos=0, mayor=numeros[0], i; for(i=1; i<N; i++) { if(numeros[i]>mayor) { mayor=numeros[i]; pos=i; } } printf("El valor mayor es %d y esta en la posicin %d\n\n", mayor, pos); } El lector, debe preguntarse, que pasara si existen dos valores exactamente iguales que sean los valores mximos y que por ende, estn en diferentes posiciones, que solucin le daras como programador?... este tipo de preguntas debe hacerse siempre que ha finalizado un programa, y nunca dejar nada sin resolver, por que recordemos que los programas que diseamos son para que otras personas los usen.

for(i=0; i<N; i++) sum=sum+numeros[i]; return (sum);

M T MA A TR RIIC CE ES S
Las matrices se declaran de forma anloga, con corchetes independientes para cada subndice. La forma general de la declaracin es: tipo nombre[numero_filas][numero_columnas]; Donde tanto las filas como las columnas se numeran tambin a partir de 0. La forma de acceder a los elementos de la matriz es utilizando su nombre, seguido de las expresiones enteras correspondientes a los dos subndices, entre corchetes. En C tanto los vectores como las matrices admiten los tipos de las variables escalares (char, int, long, float, double, etc.), Las matrices en C se almacenan por filas, en posiciones consecutivas de memoria. En cierta forma, una matriz se puede ver como un vector de vectores-fila. Si una matriz tiene N filas (numeradas de 0 a N-1) y M columnas (numeradas de 0 a la M-1), el elemento (i, j) ocupa el lugar: posicin_elemento(0, 0) + i * M + j

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

78

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

A esta frmula se le llama frmula de direccionamiento de la matriz. (Tomado de Aprenda Lenguaje ANSI C como si estuviera en Primero. Universidad de Navarra). Ejemplo: Disee un programa que lea un matriz de 6*6 y luego determine la suma de cada una de las filas y la almacene en un vector llamado suma. #include <stdio.h> #include <conio.h> #define F 6 #define C 6 main() { int matriz[F][C], i,j, vector [F]={0,0,0,0,0,0}; for(i=0; i<F; i++) for(j=0; j<C; j++) { printf("Ingrese el elemento F=%d y Columna=%d de la matriz:\n", i,j); scanf("%d", &matriz[i][j]); vector[i]=vector[i]+matriz[i][j]; } printf("La Matriz generada es:\n\n"); for(i=0; i<F; i++) { for(j=0; j<C; j++) { printf("*%d*", matriz[i][j]); } printf("\n"); } printf("Y el vector suma de las filas es:\n\n"); for(i=0; i<F; i++) printf("%d\t", vector[i]); getch(); return 0; } Creo que no hay mucho por explicar, el uso de una matriz en C, es bastante parecido al de un vector, pero con las diferencias que en un vector tenemos nicamente una dimensin y en las matrices tenemos dos. Ejemplo: Escriba un programa que visualice un cuadro mgico de orden impar N, comprendido entre 3 y 11; el usuario debe elegir el valor de N. Un cuadro mgico se compone de nmeros enteros entre 1 y N, la suma de los nmeros que figuran en cada fila, columna y diagonal son iguales.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

79

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejemplo: 8 3 4 1 5 9 6 7 2

Un mtodo de generacin consiste en situar en el centro de la primera fila, el nmero siguiente en la casilla situada por encima y a la derecha, y as sucesivamente... el cuadro es cclico, la lnea encima de la primera, es de hecho, la ltima y la columna a la derecha de la ltima es la primera. En caso de que el nmero generado caiga en una casilla ocupada, se elige la casilla situada de bajo del nmero que acaba de ser situado. #include <stdio.h> #include <conio.h> #define N 11 #define M 11 int comprueba (int [N][M], int dim); void impresion (int [N][M], int dim); main() { int cuadrado[N][M]; int dim, f, c, i; clrscr(); printf("Introduzca la dimencin por favor:\n"); scanf("%d", &dim); while(dim<3 || dim>11) { printf("ERROR, el valor de la dimencin debe estar entre 3 y 11:\n"); scanf("%d", &dim); } while((dim%2)!=1) { printf("ERROR el valor de la dimencin debe ser Impar:\n"); scanf("%d", &dim); } for(f=0; f<dim; f++) for(c=0; c<dim; c++) cuadrado[f][c]=0; f=0; c=dim/2; cuadrado[f][c]=1; for(i=2; i<=dim*dim; i++) { f--; c++; if(f<0 && c==dim) { f=1; c=dim-1; 80

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} if(f<0) f=dim-1; if(c==dim) c=0; if(cuadrado[f][c]!=0) { c--; f=f+2; } cuadrado[f][c]=i;

} int comprueba (int cuadrado [N][M], int dim) { int magic=1, f,c, consmagic, sum=0, i, j=-1; consmagic=((dim*dim*dim)+dim)/2; for(f=0; f<dim; f++) { sum=0; for(c=0; c<dim; c++) sum=sum+cuadrado[f][c]; if(sum!=consmagic) magic=0; } for(c=0; c<dim; c++) { sum=0; for(f=0; f<dim; f++) sum=sum+cuadrado[f][c]; if(sum!=consmagic) magic=0; } sum=0; for(i=0; i<dim; i++) sum=sum+cuadrado[i][i]; if(sum!=consmagic) magic=0; sum=0; for((i=dim-1); i>=0; i--) { j=j+1;

} printf("La constante m gica es: %d\n\n", comprueba (cuadrado, dim)); impresion(cuadrado, dim); getch(); return 0;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

81

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

sum=sum+cuadrado[i][j]; } if(sum!=consmagic) magic=0; if(magic==0) consmagic=0; return (consmagic); } void impresion (int cuadrado[N][M], int dim) { int f, c; printf("\tEL CUADRO GENERADO ES:\n\n"); for(f=0; f<dim; f++) { for(c=0; c<dim; c++) printf("*%d*", cuadrado[f][c]); printf("\n"); } }

A D AC CT TIIV VIID DA A D
Qu es una array o arreglo? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cul es la diferencia entre un vector y una matriz? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cmo se define y se declara una funcin cuyos parmetros son vectores o matrices? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cules son los tipos de datos admitidos para los arreglos? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ Cules son las diferencias fundamentales entre un arreglo y una variable simple? ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 82

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ejercicios 1. En una escuela se tiene el listado de 30 alumnos con sus respectivas notas, disee un programa que muestre las notas de los alumnos que tuvieron una nota mayor que el promedio. 2. Disee un programa que dado un vector de magnitud X, busque y muestre la posicin en la que se encuentra un valor N, dentro del vector 3. Se tiene dos vectores A y B, disee una solucin, en la cual, en un tercer vector se guarde la multiplicacin de los vectores A y B, y luego se impriman los tres vectores, uno a la par del otro, en forma vertical 4. Disee un programa en C, en el cual guarde un vector de 100 posiciones, determine la media y la desviacin estndar. 5. Almacenar 50 nmeros en un vector, elevar al cuadrado cada valor almacenado en el vector, almacenar el resultado en otro vector. Imprimir el vector original y el vector resultante 6. Disee un algoritmo y programa que lea dos vectores A y B de 20 elementos cada uno y sume el primer elemento de A con el ultimo elemento de B y luego el segundo elemento de A por el diecinueveavo elemento de B y as sucesivamente hasta llegar al veinteavo elemento de A por el primer elemento de B. El resultado de la suma almacenarlo en un vector C. 7. Se desea conocer la suma de la diagonal mayor y la diagonal menor de una matriz de F*C, e indique la diferencia matemtica entre ambos resultados. 8. En una tiemda, hay 8 departamentos y se tiene el registro de las ventas del ao pasado de cada departamento por mes. Se desea conocer: el departamento que tuvo mayores ventas a lo largo de ao. El departamento que tuvo menores ventas en el ao. El mes en que se vendi ms en el departamento nmero 3 y los meses y el departamento que super las ventas promedios as como el total de lo vendido a lo largo de ao. 9. Se tienen dos Matrices de tamao 4x4, se pide escriba un programa en el cual, mediante un men, se puedan sumar, multiplicar o dividir las matrices. 10. El departamento de transito de la ciudad de Medelln ha acumulado informacin referente a las infracciones de los lmites de velocidad durante un determinado periodo de tiempo. El departamento ha dividido la ciudad en cuatro cuadrantes y desea realizar una estadstica de las infracciones a los lmites de velocidad en cada uno de ellos. Para cada infraccin se ha preparado una tarjeta que contiene la siguiente informacin: Nmero de registro del vehculo; Cuadrante en el que se produjo la infraccin Lmite de velocidad en kilometros por hora

Disee un programa para producir 2 informes; el primero eue contiene una lista de las multas de velocidad recolectadas, donde la multa se calcula como la suma del costo de la corte ($20,000) mas $ 1,250 por cada kph que exceda la velocidad lmite. Prepare una tabla con los siguientes resultados:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

83

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

INFRACCIONES A LOS LIMITES DE VELOCIDAD Registro del vehculo Velocidad registrada (MPH) Velocidad limite Multa

Este informe debe ser seguido de un segundo en el cual se proporcione un anlisis de las infracciones por cuadrante. Para cada uno de los 4 cuadrantes mencionados, debe darse el nmero de infracciones y la multa promedio.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

84

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

MANEJO DE ARCHIVOS

IIN NT TR RO OD DU UC CC CII N N
Esta unidad busca que el estudiante aprenda a trabajar con memoria secunadaria, es decir, el amenjo de archivos.

J C JU US ST TIIF FIIC CA A CII N N


El manejo de informacin a travs de archivos es de gran utilidad en la programacin, ya que permite la captura de informacin almacenada en ellos para su posterior utilizacin en diversos programas, evitando tener que entrar en forma manual la informacin que se quiere procesar; almacenar gran cantidad de informacin en espacios reducidos y con una alta precisin en el manejo de datos.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Proporcionar los conocimientos que permitan al estudiante conocer y aplicar los conceptos de archivos.

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
1. Conocer la forma de trabajar con archivos

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

85

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

C CO ON NT TE EN NIID DO O
1. 2. 3. 4. Archivos de Texto Archivos binarios Archivos especiales 1: la impresora Archivos especiales 2: salida de errores

A AR RC CH HIIV VO OS SD DE ET TE EX XT TO O
Escritura en un archivo de texto
Para manejar archivos, siempre deberemos realizar tres operaciones bsicas: 1. Abrir el archivo. 2. Leer datos de l o escribir datos en l. 3. Cerrar el archivo. Eso s, no siempre podremos realizar esas operaciones, as que adems tendremos que comprobar los posibles errores. Por ejemplo, puede ocurrir que intentemos abrir un archivo que realmente no exista, o que queramos escribir en un dispositivo que sea slo de lectura. Ejemplo: #include <stdio.h> main() { FILE* archivo; archivo = fopen("prueba.txt", "wt"); fputs("Esto es una lnea\n", archivo); fputs("Esto es otra", archivo); fputs(" y esto es continuacin de la anterior\n", archivo); fclose(archivo); } Hay varias cosas que comentar sobre este programa: FILE es el tipo de datos asociado a un archivo. Siempre aparecer el asterisco a su derecha, por motivos que veremos ms adelante (cuando hablemos de punteros). Para abrir el archivo usamos fopen, que necesita dos datos: el nombre del archivo y el modo de lectura. El modo de lectura estar formado por varias letras, de las cuales por ahora nos interesan dos: w indicara que queremos escribir ( write) del archivo, y 86

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

t avisa de que se trata de un archivo de texto ( text). Como abrimos el archivo para escribir en l, se crear el archivo si no exista, y se borrar su contenido si ya exista (ms adelante veremos cmo aadir a un archivo sin borrar su contenido). Para escribir en el archivo y para leer de l, tendremos rdenes muy parecidas a las que usbamos en pantalla. Por ejemplo, para escribir una cadena de texto usaremos fputs, que recuerda mucho a puts pero con la diferencia de que no avanza de lnea despus de cada texto (por eso hemos aadido \n al final de cada frase). Finalmente, cerramos el archivo con "fclose".

Lectura de un archivo de texto


Si queremos leer de un archivo, los pasos son muy parecidos, slo que lo abriremos para lectura (el modo de escritura tendr una r, de read, en lugar de w), y leeremos con fgets: Ejemplo: #include <stdio.h> main() { FILE* archivo; char nombre[80] = "c:\\autoexec.bat"; char linea[81]; archivo = fopen(nombre, "rt"); if (archivo == NULL) { printf("No existe el archivo!\n"); exit(1); } fgets(linea, 80, archivo); puts(linea); fclose(archivo); } En este ejemplo hay algunos cambios: En el nombre del archivo, hemos indicado un nombre algo ms complejo. En estos casos, hay que recordar que si aparece alguna barra invertida (\), deberemos duplicarla, porque la barra invertida se usa para indicar ciertos cdigos de control. Por ejemplo, \n es el cdigo de avance de lnea y \a es un pitido. El modo de lectura en este caso es r para indicar que queremos leer ( read) del archivo, y t avisa de que es un archivo de texto. Para leer del archivo y usaremos fgets, que se parece mucho a gets, pero podemos limitar la longitud del texto que leemos (en este ejemplo, a 80 caracteres) desde el archivo. Esta cadena de texto conservar los caracteres de avance de lnea. Si no se consigue abrir el archivo, se nos devolver un valor especial llamado NULL. La orden exit es la que nos permite abandonar el programa en un punto. La veremos con ms detalle un poco ms adelante.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

87

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Lectura hasta el final del archivo


Normalmente no querremos leer slo una frase del archivo, sino procesar todo su contenido. Para ayudarnos, tenemos una orden que nos permite saber si ya hemos llegado al final del archivo. Es feof (EOF es la abreviatura de End Of File, fin de archivo). Por tanto, nuestro programa deber repetirse mientras que no se acabe el archivo, as: #include <stdio.h> main() { FILE* archivo; char nombre[80] = "c:\\autoexec.bat"; char linea[81]; archivo = fopen(nombre, "rt"); if (archivo == NULL) { printf("No existe el archivo!\n"); exit(1); } while (! feof(archivo)) { fgets(linea, 80, archivo); puts(linea); } fclose(archivo); } Esa ser la estructura bsica de casi cualquier programa que deba leer un archivo completo, de principio a fin: abrir, comprobar que se ha podido acceder correctamente, leer con while !(feof()) y cerrar.

A D AC CT TIIV VIID DA A D
Realizar los siguientes programas: 1. Un programa que pida al usuario que teclee frases, y las almacene en el archivo frases.txt. Acabar cuando el usuario pulse Enter sin teclear nada. 2. Un programa que pregunte un nombre de archivo y muestre en pantalla el contenido de ese archivo, haciendo una pausa despus de cada 25 lneas, para que d tiempo a leerlo. Cuando el usuario pulse Enter, se mostrarn las siguientes 25 lneas, y as hasta que termine el archivo.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

88

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Archivos con tipo


Es frecuente que los archivos que queramos manejar no sean de texto, pero que aun as tengan un formato bastante definido. Por ejemplo, podemos querer crear una agenda, en la que los datos de cada persona estn guardados en un struct. En este caso, podramos guardar los datos usando fprintf y fscanf, anlogos a printf y scanf que ya conocemos. fprintf( archivo, "%40s%5d\n", persona.nombre, persona.numero); fscanf( archivo, "%40s%5d\n", &persona.nombre, &persona.numero); Como se puede ver en este ejemplo, suele ser recomendable indicar la anchura que debe tener cada dato cuando guardamos con fprintf, para que se pueda recuperar despus de la misma forma con fscanf. Aun as, fscanf tiene el mismo problema que scanf: si leemos una cadena de texto, la considera terminada despus del primer espacio en blanco, y lo que haya a continuacin lo asignar a la siguiente cadena. Por eso, cuando manejemos textos con espacios, ser preferible usar fgets o bien otras dos rdenes para manejo de archivos que veremos un poco ms adelante.

A D AC CT TIIV VIID DA A D
Realizar los siguientes programas: 1. Una agenda que maneje los siguientes datos: nombre, direccin, tlf mvil, email, y da, mes y ao de nacimiento (estos tres ltimos datos debern ser nmeros enteros cortos). Deber tener capacidad para 100 fichas. Se deber poder aadir un dato nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una persona (se preguntar al usuario cual es el nombre de esa persona que quiere visualizar). Al empezar el programa, leer los datos de un archivo llamado agenda.dat (si existe). Al terminar, guardar todos los datos en ese archivo.

Leer y escribir letra a letra


Si queremos leer o escribir slo una letra, tenemos las rdenes "fgetc" y "fputc", que se usan: letra = fgetc( archivo ); fputc (letra, archivo);

Modos de apertura
Antes de seguir, vamos a ver las letras que pueden aparecer en el modo de apertura del archivo, para poder aadir datos a un archivo ya existente:
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

89

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

TIPO r w a + t b

SIGNIFICADO Abrir slo para lectura. Crear para escribir. Sobreescribe el archivo si existiera ya (borrando el original). Aade al final del archivo si existe, o lo crea si no existe. Se escribe a continuacin de los modos anteriores para indicar que tambin queremos modificar. Por ejemplo: r+ permite leer y modificar el archivo Abrir en modo de texto. Abrir en modo binario.

A R AR RC CH HIIV VO OS SB BIIN NA A RIIO OS S


Hasta ahora nos hemos centrado en los archivos de texto, que son sencillos de crear y de leer. Pero tambin podemos manejar archivos que contengan informacin de cualquier tipo. En este caso, utilizamos fread para leer un bloque de datos y fwrite para guardar un bloque de datos. Estos datos que leamos se guardan en un buffer (una zona intermedia de memoria). En el momento en que se lean menos bytes de los que hemos pedido, quiere decir que hemos llegado al final del archivo. En general, el manejo de fread es el siguiente: cantidadLeida = fread(donde, tamaoDeCadaDato, cuantosDatos, archivo); Por ejemplo, para leer 10 nmeros enteros de un archivo (cada uno de los cuales ocupara 4 bytes, si estamos en un sistema operativo de 32 bits), haramos int datos[10]; resultado = fread(&datos, 4, 10, archivo); if (resultado < 10) printf("Haba menos de 10 datos!"); Al igual que ocurra con scanf, la variable en la que guardemos los datos se deber indicar precedida del smbolo &. Tambin al igual que pasaba con scanf, si se trata de una cadena de caracteres (bien porque vayamos a leer una cadena de texto, o bien porque queramos leer datos de cualquier tipo pero con la intencin de manejarlos byte a byte), como char dato[500] no ser necesario indicar ese smbolo &, como en este ejemplo: char cabecera [40]; resultado = fread(cabecera, 1, 40, archivo); if (resultado < 40) 90

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

else

printf("Formato de archivo incorrecto, no est toda la cabecera!"); printf("El byte en la posicin 5 es un %d, cabecera[4]);

Ejemplo: copiador de archivos Duplicar un archivo de cualquier tipo (no necesariamente de texto) #include <stdio.h> FILE *fichOrg, *fichDest; /* Los dos archivos */ char buffer[2048]; /* El buffer para guardar lo que leo */ char nombreOrg[80], /* Los nombres de los archivos */ nombreDest[80]; int cantidad; /* El nmero de bytes ledos */ main() { /* Accedo al archivo de origen */ printf("Introduzca el nombre del archivo Origen: "); scanf("%s",nombreOrg); if ((fichOrg = fopen(nombreOrg, "rb")) == NULL) { printf("No existe el archivo origen!\n"); exit(1); } /* Y ahora al de destino */ printf("Introduzca el nombre del archivo Destino: "); scanf("%s",nombreDest); if ((fichDest = fopen(nombreDest, "wb")) == NULL) { printf("No se ha podido crear el archivo destino!\n"); exit(1); } /* Mientras quede algo que leer */ while (! feof(fichOrg) ) { /* Leo datos: cada uno de 1 byte, todos los que me caben */ cantidad = fread( buffer, 1, sizeof(buffer), fichOrg); /* Escribo tantos como haya ledo */ fwrite(buffer, 1, cantidad, fichDest); } /* Cierro los archivos */ fclose(fichOrg); fclose(fichDest); } Los cambios con relacin a lo que conocamos de archivos de texto son los siguientes:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

91

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Los archivos pueden no ser de texto, de modo que leemos uno como archivo binario (con rb) y escribimos el otro tambin como archivo binario (con wb). Definimos un buffer de 2048 bytes (2 K), para ir leyendo la informacin por bloques (y guardando despus cada bloque en el otro archivo). En la misma lnea intento abrir el archivo y compruebo si todo ha sido correcto, con if ((fichOrg = fopen(nombreOrg, "rb")) == NULL) Esto puede resultar menos legible que hacerlo en dos lneas separadas, como hemos hecho hasta ahora, pero es ms compacto, y, sobre todo, muy frecuente encontrarlo en fuentes ajenos ms avanzados, como los que se puedan encontrar en Internet o cuando se programe en grupo con otras personas, de modo que he considerado adecuado incluirlo.

A fread le digo que queremos leer 2048 datos de 1 byte cada uno, y l nos devuelve la cantidad de bytes que ha ledo realmente. Para que el fuente sea ms fcil de aplicar a otros casos en los que no sean bloques de 2048 bytes exactamente, suele ser preferible indicar que queremos leer el tamao del bloque, usando sizeof: cantidad = fread( buffer, 1, sizeof(buffer), fichOrg); Cuando la cantidad leida sea menos de 2048 bytes, es que el archivo se ha acabado (lo podemos comprobar mirando esta cantidad o con feof).

fwrite se maneja igual que fread: se le indica dnde estn los datos, el tamao de cada dato, cuantos datos hay que escribir y en qu archivo almacenarlos. En nuestro ejemplo, el nmero de bytes que debe escribir ser el que haya leido: fwrite(buffer, 1, cantidad, fichDest);

A D AC CT TIIV VIID DA A D
Realizar los siguientes programas: 1. Mejorar la agenda anterior, para guardar y leer cada ficha (struct) de una vez, usando fwrite/fread y sizeof, como en el ltimo ejemplo.

Acceder a cualquier posicin de un archivo


Cuando trabajamos con un archivo, es posible que necesitemos acceder directamente a una cierta posicin del mismo. Para ello usamos fseek, que tiene el formato: int fseek(FILE *archivo, long posicion, int desde);

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

92

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Veamos con detalle la anterior instruccin: Es de tipo int, lo que quiere decir que nos va a devolver un valor, para que comprobemos si realmente se ha podido saltar a la direccin que nosotros le hemos pedido: si el valor es 0, todo ha ido bien; si es otro, indicar un error (normalmente, que no hemos abierto el archivo). archivo indica el archivo dentro de el que queremos saltar. Este archivo debe estar abierto previamente (con fopen). posicin nos permite decir a qu posicin queremos saltar (por ejemplo, a la 5010). desde es para poder afinar ms: la direccin que hemos indicado con posic puede estar referida al comienzo del archivo, a la posicin en la que nos encontramos actualmente, o al final del archivo (entonces posic deber ser negativo). Para no tener que recordar que un 0 quiere decir que nos referimos al principio, un 1 a la posicin actual y un 2 a la final, tenemos definidas las constantes: SEEK_SET (0): Principio SEEK_CUR (1): Actual SEEK_END (2): Final Ejemplo: Ir a la posicin 10 del archivo: fseek(miArchivo, 10, SEEK_SET); Avanzar 5 posiciones a partir de la actual: fseek(miArchivo, 5, SEEK_CUR); Ir a la posicin 8 antes del final del archivo: fseek(miArchivo, -8, SEEK_END); Finalmente, si queremos saber en qu posicin de un archivo nos encontramos, podemos usar ftell(archivo). Esta orden nos permite saber tambin la longitud de un archivo: nos posicionamos primero al final con fseek y luego comprobamos con ftell en qu posicin estamos: fseek(archivo, 0, SEEK_END); longitud = ftell(archivo); Ejemplo: Leer informacin de un archivo BMP Vamos a abrir un archivo que sea una imagen en formato BMP y a mostrar en pantalla si est comprimido o no. Para eso necesitamos antes saber cmo se guarda la informacin en un archivo BMP, pero esto es algo fcil de localizar:

ARCHIVOS .BMP
Un archivo BMP est compuesto por las siguientes partes: una cabecera de archivo, una cabecera del bitmap, una tabla de colores y los bytes que definirn la imagen. En concreto, los datos que forman la cabecera de archivo y la cabecera de bitmap son los siguientes:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

93

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

TIPO DE INFORMACIN Tipo de archivo (letras BM) Tamao del archivo Reservado Reservado Inicio de los datos de la imagen Tamao de la cabecera de bitmap Anchura (pxeles) Altura (pxeles) Nmero de planos Tamao de cada punto Compresin (0=no comprimido) Tamao de la imagen Resolucin horizontal Resolucin vertical Tamao de la tabla de color Contador de colores importantes

POSICIN EN EL ARCHIVO 0-1 2-5 6-7 8-9 10-13 14-17 18-21 22-25 26-27 28-29 30-33 34-37 38-41 42-45 46-49 50-53

Con esta informacin nos basta para nuestro propsito: la compresin se indica en la posicin 30 del archivo, ocupa 4 bytes (lo mismo que un int en los sistemas operativos de 32 bits), y si es un 0 querr decir que la imagen no est comprimida. #include <stdio.h> main(){ char nombre[60]; FILE* archivo; int compresion; puts("Comprobador de imgenes BMP\n"); printf("Dime el nombre del archivo: "); gets(nombre); archivo = fopen(nombre, "rb"); if (archivo==NULL) puts("No encontrado\n"); else { fseek(archivo, 30, SEEK_SET); fread(&compresion, 1, 4, archivo); fclose(archivo); if (compression == 0) puts("Sin compresin"); else puts ("BMP Comprimido "); } }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

94

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ya que estamos, podemos mejorarlo un poco para que adems nos muestre el ancho y el alto de la imagen, y que compruebe antes si realmente se trata de un archivo BMP: #include <stdio.h> main() { char nombre[60]; FILE* archivo; int compresion, ancho, alto; char marca1, marca2; puts("Comprobador de imgenes BMP\n"); printf("Dime el nombre del archivo: "); gets(nombre); archivo = fopen(nombre, "rb"); if (archivo==NULL) puts("No encontrado\n"); else { marca1 = fgetc(archivo); /* Leo los dos primeros bytes */ marca2 = fgetc(archivo); if ((marca1 =='B') && (marca2 =='M')) { /* Si son BM */ printf("Marca del archivo: %c%c\n", marca1, marca2); fseek(archivo, 18, SEEK_SET); /* Posicin 18: ancho */ fread(&ancho, 1, 4, archivo); printf("Ancho: %d\n", ancho); fread(&alto, 1, 4, archivo); /* Siguiente dato: alto */ printf("Alto: %d\n", alto); fseek(archivo, 4, SEEK_CUR); /* 4 bytes despus: compresin */ fread(&compresion, 1, 4, archivo); fclose(archivo); switch (compresion) { case 0: puts("Sin compresin"); break; case 1: puts("Compresin RLE 8 bits"); break; case 2: puts("Compresin RLE 4 bits"); break; } } else printf("No parece un archivo BMP\n"); /* Si la marca no es BM */ } }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

95

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

A D AC CT TIIV VIID DA A D
Realizar los siguientes programas: 1. Mejorar la ltima versin de la agenda anterior (la que usa fwrite, fread y sizeof) para que no lea todas las fichas a la vez, sino que lea una nica ficha del disco cada vez que lo necesite, saltando a la posicin en que se encuentra dicha ficha con fseek. 2. Hacer un programa que muestre informacin sobre una imagen en formato GIF (se deber localizar en Internet los detalles sobre dicho formato): versin, ancho de la imagen (en pxeles), alto de la imagen y cantidad de colores.

A L AR RC CH HIIV VO OS SE ES SP PE EC CIIA A LE ES S1 1:: L LA A IIM MP PR RE ES SO OR RA A


Mandar algo a impresora desde C no es difcil (al menos en principio): en muchos sistemas operativos, la impresora es un dispositivo al que se puede acceder a travs como si se tratara de un archivo. Por ejemplo, en MsDos, se puede mostrar un archivo de texto en pantalla usando TYPE DATOS.TXT y lo mandaramos a impresora si redirigimos la salida hacia el dispositivo llamado PRN: TYPE DATOS.TXT > PRN: De igual manera, desde C podramos crear un programa que mandara informacin al archivo ficticio PRN: para escribir en impresora, as: #include <stdio.h> main() { FILE* impresora; impresora = fopen("prn:", "wt"); fputs("Esto va a la impresora\n", impresora;); fclose(impresora); } (Este mismo ejemplo debera funcionar desde muchas versiones de Windows, con bastante independencia de la impresora que tengamos instalada).

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

96

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

A L L AR RC CH HIIV VO OS SE ES SP PE EC CIIA A LE ES S2 2:: S SA A LIID DA AD DE EE ER RR RO OR RE ES S


Hemos comentado que en muchos sistemas operativos se puede usar el smbolo > para redirigir hacia otro sitio (la impresora o un archivo de texto, por ejemplo) la informacin que iba destinada originalmente a la pantalla. Esto funciona, entre otros, en Windows, MsDos y toda la familia de sistemas operativos Unix (incluido Linux). Pero en el caso de Linux (y los Unix en general) podemos redirigir adems los mensajes de error hacia otro sitio distinto del resto de mensajes (que iban destinados a pantalla). Esto se consigue con el smbolo 2> : calculaResultados > valores.txt 2> errores.txt Esta orden pone en marcha un programa llamado calculaResultados, guarda en el archivo valores.txt los mensajes que normalmente apareceran en pantalla, y guarda en el archivo errores.txt los mensajes de error. Esta poltica de separar los mensajes de informacin y los mensajes de error es fcil de llevar a nuestros programas. Basta con que los mensajes de error no los mandemos a pantalla con rdenes como printf, sino que los mandemos a un archivo especial llamado stderr (salida estndar de errores). Por ejemplo, a la hora de intentar abrir un archivo podramos hacer: archivo = fopen("ejemplo.txt", "rt"); if (archivo == NULL) fprintf(stderr, "Archivo no encontrado!\n"); else printf("Accediendo al archivo...\n"); Si el usuario de nuestro programa no usa 2>, los mensajes de error le apareceran en pantalla junto con cualquier otro mensaje, pero si se trata de un usuario avanzado, le estamos dando la posibilidad de analizar los errores cmodamente.

Un ejemplo de lectura y escritura: TAG de un MP3


Los archivos de sonido en formato MP3 pueden contener informacin sobre el autor, el ttulo, etc. Si la contienen, se encontrara a 128 bytes del final del archivo. Los primeros 3 bytes de esos 128 deberan ser las letras TAG. A continuacin, tendramos otros 30 bytes que seran el ttulo de la cancin, y otros 30 bytes que seran el nombre del autor. Con esto ya podramos crear un programa que lea esa informacin de un archivo MP3 (si la contiene) e incluso que la modifique. Estos textos (ttulo, autor y otros) deberan estar rellenos con caracteres nulos al final, pero es algo de lo que no tenemos la certeza, porque algunas aplicaciones lo rellenan con espacios (es el caso de alguna versin de WinAmp). Por eso, leeremos los datos con fread y aadiremos un carcter nulo al final de cada uno.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

97

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Adems, haremos que el programa nos muestre la informacin de varios archivos: nos pedir un nombre, y luego otro, y as sucesivamente hasta que pulsemos Enter sin teclear nada ms. #include <stdio.h> #include <string.h> main() { FILE* fich; char temp[31]; int i; do { /* Pido el nombre del archivo */ printf("\nEscribe el nombre del archivo MP3 a comprobar: "); gets(temp); /* Si no teclea nada, terminar */ if (strcmp(temp,"")==0) puts("\nAplicacion finalizada."); /* Si existe nombre, intento abrir */ else if ( (fich=fopen(temp,"r+b"))!=NULL ) { /* Si he podido abrir, muestro el nombre */ printf("Nombre del archivo: %s\n",temp); /* Miro el tamao del archivo */ fseek(fich,0,SEEK_END); printf("Tamao: %d\n",ftell(fich)); /* A 128 bytes est la marca "TAG" */ fseek(fich,-128,SEEK_END); fread(temp,3,1,fich); /* Son 3 letras, aado caracter nulo al final */ temp[3]='\0'; if (strcmp(temp,"TAG")!=0) puts("No se encontr informacin vlida."); else { /* Si existe la marca, leo los datos */ /* Primero, 30 letras de titulo */ fread(temp,30,1,fich); temp[strlen(temp)]='\0'; printf("Titulo: %s\n",temp); /* Luego 30 letras de autor */ fread(temp,30,1,fich); temp[strlen(temp)]='\0'; printf("Artista: %s\n",temp); /* Ahora vamos a modificar el titulo */ printf("\nIntroduce el nuevo titulo: "); gets(temp); 98

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

/* Lo rellenamos con ceros, para seguir el estndar */ for (i=strlen(temp); i<=29; i++) temp[i]='\0'; /* Y lo guardamos en su posicin */ fseek(fich,-125,SEEK_END); fwrite(&temp, 30, 1, fich); printf("Titulo actualizado.\n"); fclose(fich); } /* Fin del "else" de MP3 con informacion */ } /* Fin del "else" de archivo existente */ else puts("No se pudo abrir el archivo\n"); } /* Fin del "do..while" que repite hasta que no se escriba nombre */ while (strcmp(temp,"")!=0);

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

99

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

COMO DEPURAR LOS PROGRAMAS IIN NT TR RO OD DU UC CC CII N N


Esta unidad busca que el estudiante conozca la forma de depurar los programas elaborados.

J C JU US ST TIIF FIIC CA A CII N N


La depuracin es el anlisis de un programa para descubrir fallos. Para eliminar esos fallos que hacen que un programa no se comporte como debera, se usan unas herramientas llamadas depuradores. Estos nos permiten avanzar paso a paso para ver cmo avanza realmente nuestro programa, y tambin nos dejan ver los valores de las variables, permitiendonos corregirlos y tener un cdigo relmente efectivo.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Proporcionar los conocimientos que permitan al estudiante depurar y corregir los posibles errores que se le presentan en la elaboracin de un programa.

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
Aprender a depurar un programa en C++ Reconocer diferentes ambientes de trabajo

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

100

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

C CO ON NT TE EN NIID DO O
1. Conceptos bsicos sobre depuracin 2. Ejemplos de algunos entornos

C S C CO ON NC CE EP PT TO OS SB B SIIC CO OS SS SO OB BR RE ED DE EP PU UR RA A CII N N
La depuracin es el anlisis de un programa para descubrir fallos. El nombre en ingls es debug, porque esos fallos de programacin reciben el nombres de bugs (bichos). Para eliminar esos fallos que hacen que un programa no se comporte como debera, se usan unas herramientas llamadas depuradores. Estos nos permiten avanzar paso a paso para ver cmo avanza realmente nuestro programa, y tambin nos dejan ver los valores de las variables. Como nuestros conocimientos ya nos permiten hacer programas de una cierta complejidad, es el momento de ver formas de descubrir dnde estn los posibles errores. Lo haremos desde varios entornos distintos.

E L EJ JE EM MP PL LO OS SD DE EA A LG GU UN NO OS SE EN NT TO OR RN NO OS S
Turbo C es un compilador antiguo, pero sencillo de manejar, y la depuracin tambin es sencilla con l:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

101

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

El men Run es el que nos permite poner nuestro programa en marcha normalmente (Run), pero tambin el que nos permite avanzar paso a paso por las rdenes que lo forman. Hay dos maneras de hacerlo: Trace into va paso a paso por todas las rdenes del programa. Si hay una llamada a una funcin, tambin sigue paso a paso por las rdenes que forma esa funcin. Step over es similar, salvo que cuando haya una llamada a una funcin, sta se tomar como una nica orden, sin ver los detalles de dicha funcin.

En cualquiera de ambos casos, se nos muestra con una lnea azul por dnde va avanzando la depuracin. Si queremos observar cmo evoluciona el valor de alguna variable, podemos aadir un viga (en ingls match) desde el menu Break/Watch. Este viga quedar en la parte inferior de la pantalla.

Si trabajamos con DevC++ para Windows, la situacin no es muy diferente. Primero debemos indicar dnde queremos que se interrumpa el programa (aadir un breakpoint), haciendo clic con el ratn en el margen izquierdo de nuestro programa. Esa lnea quedar resaltada en color rojo.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

102

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

Ahora ponemos en marcha el programa desde el men Depurar. En la parte inferior de la pantalla aparecern botones que nos permiten avanzar paso a paso, saltar las funciones o aadir un watch para comprobar el valor de unas variables. La lnea que estamos depurando se marcar en azul (y destacada con una flecha). Los watches estarn visibles en la parte izquierda de la pantalla. Si usamos otra herramienta de desarrollo, como Anjuta, la depuracin puede ser mucho ms sencilla, similar al caso de Turbo C y al de DevC++.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

103

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

En este caso, podemos depurar fcilmente desde el propio entorno de desarrollo. Aun as, el primer paso es el mismo que si furamos a usar gdb: debemos compilar con la opcin -g. La forma ms sencilla de hacerlo es indicar que queremos activar la depuracin, desde el men Opciones. Entonces ya podemos construir nuestro ejecutable normalmente, e iniciar la depuracin desde el men Depurador. Podremos avanzar paso a paso (desde el propio men o pulsando la tecla F5), y aadir watches para observar cmo evoluciona el valor de las variables. Estos watches no estarn visibles hasta que no escojamos la pestaa correspondiente en la parte inferior de la pantalla. La lnea que estamos depurando se indicar mediante una flecha en su margen izquierdo.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

104

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

EJERCICIOS IIN NT TR RO OD DU UC CC CII N N


Esta unidad busca que el estudiante perfeccione el conocimiento del lenguaje mediante la elaboracin de difrentes ejercicios

J C JU US ST TIIF FIIC CA A CII N N


La nica forma de llegar al dominio de un lenguaje es mediante su prctica constante, por ello en la presente unidad se plantean una serie de ejercicios para que el estudiante afiance los conocimientos adquiridos. De igual manera se busca que plantee nuevos problemas que pueda solucionar mediante la utilizacin de la herramienta.

O L OB BJ JE ET TIIV VO OG GE EN NE ER RA A L
Proporcionar una serie de ejercicios que permitan al estudiante afianzar sus conocimientos.

O OB BJ JE ET TIIV VO OS SE ES SP PE EC CF FIIC CO OS S
Resolver los ejercicios propuestos

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

105

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

C CO ON NT TE EN NIID DO O
1. Ejercicios varios

E R EJ JE ER RC CIIC CIIO OS SV VA A RIIO OS S

1. Si utilizar la siguiente instruccin en un programa C++, hara que se escribiera algo en la pantalla. qu sera? Cout << C++ es fcil de entender Y APRENDER.; 2. Qu significado tienen los smbolos \n empleados en la siguiente instruccin . Cout << teclee el nmero de \alumnos del curso\n; 3. Qu significa la siguiente instruccin? cin >> numero_de_estudiantes; 4. Qu significa la siguiente instruccin? total_estudiantes = total_estudiantes*grupo; 5. Qu significa esta directiva? #include <iostream.h> 6. Qu defecto, si lo hay, tienen las siguientes directivas include? a. #include <iostream.h> b. #include < iostream.h> c. #include <iostream> 7. Cules son las tres clases principales de errores de programacin? 8. Qu tips de errores descubre el compilador? 9. Si en un programa omite el smbolo de puntuacin (como un punto y coma), se produce un error. De qu tipo? 10. Si omite la llave final } de un programa, se produce un error. De qu tipo?

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

106

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

11. Suponga que escribe un programa que debe calcualr los intereses de una cuenta bancaria de un banco que calcula los intereses diariamente, y suponga que lo escribe mal, de modo que calcula los intereses anualmente. Qu tipo de error de programacin es este? 12. Escriba una instruccin de salida que depliegue en la pantalla el siguiente mensaje: La respuesta a la pregunta de la Vida, el Universo y Todo es 42 13. Escriba una instruccin de entrada que coloque la variable la_cifra (de tipo int) un nmero que se introduzca mediante el teclado. Anteponga a la instruccin de entreada una instruccin de solicitud que pida al usuario teclear el nmero entero. 14. Qu instrucciones debe incluir en un programa para asegurar que, cuando se enve su a la salida un nmero de tipo double, aparezca en la notacin ordinaria 3 dgitos despus del punto decimal? 15. Escriba un programa completo en C++ que escriba la frase:CREO QUE ESTOY APRENDIENDO. El programa no har nada ms. 16. Escriba una instruccin de salida que produzca el carcter de nueva lnea y el de tabulacin. 17. Escriba un programa corto que declare e inicialice las variables double, uno, dos, tres, cuatro y cinco con los valores 1.000, 1.414, 1.732, 2.000 y 2.236, respectivamente. Luego escriba instrucciones de salida para generar la siguiente leyenda y tabla. Utilice la secuencia de escape de tabulacin \t para alinear las columnas. Si no esta familiarizado con el carcter de tabulacin, experimente con l al efectuar este ejercicio. Una tabulacin funciona como un tope mecnico en una mquina de escribir: hace que las salidas se inicien en la siguiente columna, que generalmente esta a una distancia igual a un mltiplo de 8 espacios. Muchos editores y la mayoria de los procesadores de texto tienen tabulaciones ajustables. Nuestra salida no. La salida deber ser: N 1 2 3 4 5 Raz cuadrada 1.000 1.414 1.732 2.000 2.236

18. Convierta cada una de las siguientes frmulas matemticas en expresiones de C++:

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

107

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

3x x2y/2/c

3x + y ___ x/y

x+y 7 xy

3x + y z+2 2!r

19. Qu salida producen las siguientes lneas de programa incorporadas en un programa correcto que declara todas las variables como de tipo char? a = b; b = c; c = a; Cout << a << b << c << c 20. Qu salida producen las siguientes lneas de programa (incorporadas en un programa correcto que declara cifra como de tipo int)? cifra = (1/3) * 3; Cout << (1/3) * 3 es igual a << cifra; 21. Escriba un programa completo en C++ que lea dos nmeros enteros y los coloque en dos variables de tipo int, y luego despliegue tanto la parte entera como el residuo cuando el primer nmero se divida entre el segundo. Esto puede hacerse usando los operadores / y %. 22. Dado el siguiente fragmento que supuestamente convierte temperaturas de grados celsius a grados Fahrenheit, conteste las siguientes preguntas double c = 20; double f; f = (9/5) * c + 32.0; a. Qu valor se asigna a f? b. Explique qu est sucediendo realmente, y qu es lo que el programador probablemente quera. c. Reescriba el cdigo para que haga lo que el programador quera. 23. Escriba un algoritmo que escriba la palabra Alto si el valor de la variable puntaje es mayor que 100, y Bajo si el valor de puntaje es 100 o menos. La variable puntaje es de tipo int. Programar en C++. 24. Suponga que ahorros y gastos son variables de tipo double a las que se les ha dado valores. Escriba una instruccin if_else que despliegue la palabra Solvente, reste al valor de ahorros el valor de gastos, y asigne cero a gastos, siempre que ahorros sea mayor o igual que gastos. En cambio, si ahorros es menor que

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

108

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

gastos, la instruccin if_else debe desplegar las palabras En quiebra, y no deber modificar el valor de ninguna variable. 25. Escriba un algoritmo que despliegue la palabra Aprobado si el valor de la variable examen es mayor o igual que 3.0 y adems el valor de la palabra programas_hechos es mayor o igual que 10. De lo contrario, el algoritmo deber desplegar la palabra Reprobado. Las variables examen y programas_hechos son de tipo int. Programar en C++. 26. Escriba un algoritmo que despliegue la palabra Advertencia si el valor de la variable temperatura es mayor o igual que 100, o bien si el valor de la variable presion es mayor o igual que 200, o ambas cosas. De lo contrario, el algoritmo deber desplegar la palabra Normal. La variable temperatura y presion son de tipo int. Programar en C++. 27. Considere una expresion cuadrtica, como X2 X 2 Para describir dnde es positiva esta expresin (es decir, mayor que 0), hay que describir un cojunto de nmeros que sean menores que la raiz ms pequea (que es 1), o bien, mayores que la raz ms grande (que es +2). Escriba una expresin booleana en C++ que sea verdadera cuando esta frmula tenga valores positivos. Programar en C++. 28. Considere la expresion cuadrtica X2 4X + 3 Para describir dnde es negativa est expresin, hay que describir un cojunto de nmeros que sean simultneamente mayores que la raiz ms pequea (+1) y menores que la raiz ms grande (+3). Escriba una expresion booleana en C++ que sea verdadera cuando el valor de esta expresin sea negativo. 29. Qu despliegan las siguientes instrucciones cout incrustadas en instrucciones if_else? Explique la respuesta.

if(0)
else

cout<< 0 es verdadero;

cout<<0 es Falso; cout<<endl; if(1) else cout<< 1 es verdadero;

cout<<1 es falso; cout<<endl;

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

109

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

if(-1) else

cout<<-1 es verdadera;

cout<<-1 es falso; cout<<endl; 30. Que salida produce el siguiente cdigo (incrustado en un programa correcto en el que x se declara como de tipo int) X = 10; while (X > 0) { cout<< X <<endl; X = X 3; } 31. Qu salida se producira en el ejercicio anterior si el signo > se sustituyera por < 32. Que salida produce el siguiente cdigo (incrustado en un programa correcto en el que X se declara como de tipo int) X = 10; do {

cout<< X<<endl; X= X-3; } while(X> 0); 33. Qu salida produce el siguiente cdigo(incrustado en un programa correcto en el que X se declara como de tipo int X=-42; do {

cout<< X<<endl; X=X-3; }while(X>0); 34. Cal es la diferencia ms importante entre una instruccin while y una do-while 35. Qu salida produce el siguiente cdigo (incrustado en un programa correcto en el que X se declara como de tipo int) X= 10; while (X >0) { cout<< X <<endl; X = X + 3; } 110

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

36. Haga un programa en C** que lea tres nombres completos(apellidos nombres) y los muestre en orden alfabtico. 37. Haga un programa que encuentre el seno, coseno, arco seno, tangente y cotangente de un conjunto de ngulos. 38. Hacer un programa que lea un conjunto de letras: si la letra es minscula la debe convertir a mayscula y si es minscula la debe convertir a mayscula. 39. Elabore un programa que lea un conjunto de caracteres y diga si el carcter es: una letra, un nmero u otro smbolo. 40. Pase el siguiente algoritmo a C++. INICIO LEA: N MITAD=N/2 I=2 SW=SI MIENTAS (I <=MITAD) (SW=SI) HAGA SI ( N%I=0) SW=NO SINO I=I+1 FIN_SI FIN_SI SI (SW=SI) ESCRIBA: N,SI ES SINO ESCRIBA:N,NO ES FIN_INICIO 41. Qu hacen los siguientes programas? #include <iostream.h> //Reconoce el procedimiento de entrada (flujo) cin #include <conio.h> //Reconoce el comando getch main() { float r; /*Se define el tipo de dato_entrada*/ float ac,lc; /*Se define el tipo de dato_salida*/ cout<<"Ingrese el valor del radio (r): ";cin>>r; ac=3.141592*r*r; lc=2*3.141592*r; cout<<at<< <<lc; getch(); } /* otra forma:
Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

111

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

*/

cout<<"El area del circulo de radio "<<r<" es: "<<ac; cout<<"La longitud de la circunferencia de radio "<<r<" es: "<<lc; getch();

#include <iostream.h> #include <conio.h> #include <math.h> //Reconoce la raz mediante la funcin "sqrt" main() { float a,b,c; /*Se define el tipo de dato_entrada*/ float p,at; /*Se define el tipo de dato_salida*/ cout<<"Ingrese el valor del lado a: ";cin>>a; cout<<"Ingrese el valor del lado b: ";cin>>b; cout<<"Ingrese el valor del lado c: ";cin>>c; p=(a+b+c)/2.0; at=sqrt(p*(p-a)*(p-b)*(p-c)); cout<<at; getch(); } /* otra forma: cout<<"El area del triangulo de lados "<<a<<", "<<b<<", "<<c<<" es: "<<at; getch(); */

#include <iostream.h> #include <conio.h> #include <math.h> //Reconoce exp(X), se refiere a "e a la X" main() { float t; double x,y,z; cout<<"Ingrese el valor de t: ";cin>>t; x=pow(t,3)-8*t+4; y=sin(t)+cos(2*t); z=exp(3*t+7); cout<<"El valor de x es: "<<x; cout<<"\nEl valor de y es: "<<y; /*"\n" se utiliza para saltar a otra linea*/ cout<<"\nEL valor de z es: "<<z; getch(); }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

112

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

# include <iostream.h> # include <conio.h> void main() { clrscr(); int S; float R; const float pi=3.141592; cout<<"Ingrese cantidad en grados sexagesimales: "; cin>>S; R=S*pi/180; cout<<"\nSu medida en radianes es: "<<R; getch(); }

# include <iostream.h> # include <conio.h> void main() { clrscr(); int C; float F; cout<<"Ingrese cantidad en grados centigrados: "; cin>>C; F=9*C/5.0+32; cout<<"\nSu medida en grados Farenheit es: "<<F; getch(); }

# include <iostream.h> # include <math.h> # include <conio.h> void main() { clrscr(); int x,y; float radio,theta; cout<<"Ingrese coordenadas rectangulares del punto: "; cin>>x>>y; radio=sqrt(x*x+pow(y,2)); theta=atan(y/x); cout<<"\nSus coordenadas polares son: "<<"\tRadio = "<<radio; cout<<"\tAngulo = "<<theta; getch(); }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

113

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <iostream.h> #include <conio.h> #include <math.h> //Reconoce la raiz "sqrt" main() { float a,b,c; /*Se define el tipo de dato_entrada*/ float p,at,r; /*Se define el tipo de dato_salida*/ cout<<"Ingrese el valor del lado a: ";cin>>a; cout<<"Ingrese el valor del lado b: ";cin>>b; cout<<"Ingrese el valor del lado c: ";cin>>c; p=(a+b+c)/2.0; r=p*(p-a)*(p-b)*(p-c); if (r>=0) {at=sqrt(r); cout<<at;} else {cout<<"No existe tal triangulo...!";} getch(); }

#include <iostream.h> #include <conio.h> main() { int a,b,temp; cout<<"Ingrese un numero: ";cin>>a; cout<<"Ingrese un segundo numero: ";cin>>b; if (a>b) {temp=a; a=b; b=temp;} cout<<"Ordenando "<<a<<" y "<<b<<" de menor a mayor seria: "<<a<<" , "<<b<<""; getch(); }

#include <iostream.h> #include <conio.h> main() { int a,b,c,max,min,temp; cout<<"Ingrese un numero: ";cin>>a; cout<<"Ingrese un segundo numero: ";cin>>b; cout<<"Ingrese un tercer numero: ";cin>>c; max=a; min=a; if max<b max=b: if max<c max=c; if min>b min=c; 114

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

if min>c min=c; temp=(a+b+c)-(max+min); cout<<"Ordenando "<<a<<" , "<<b<<" y "<<c<<" de menor a mayor seria:"; cout<<"\n"<<min<<" , "<<temp<<" , "<<max<<""; getch();

#include <iostream.h> #include <conio.h> #include <ctype.h> void main() { int i; long x,y,suma=0; clrscr(); i=0; cout<<"Los elementos de la serie son: \n"; while (i<=143) { x=3+2*i; y=-2+3*i; i=i+1; if (i%7==0) { cout<<"\n"<<x<<", "<<y<<", "; } else { cout<<x<<", "<<y<<", "; suma=suma+x+y; } } cout<<"\nLa suma de todos sus elementos es: "<<suma; getch(); }

# include <iostream.h> # include <conio.h> # include <ctype.h> void main() { int n2,n3,n5; long N,M; char Rpta; clrscr(); do { cout<<"Ingrese numero: "; cin>>N; M=N; n2=0; n3=0; n5=0; while (M%2==0) {n2=n2+1; M=M/2;} while (M%3==0) {n3=n3+1; M=M/3;} while (M%5==0) {n5=n5+1; M=M/5;} 115

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} while (toupper(Rpta)!='N'); getch();

cout<<"\nLas potencias del numero para los factores 2, 3 y 5 son: "; cout<<"\n"<<n2<<", "<<n3<<" y "<<n5<<" respectivamente"; cout<<"\n\nDesea continuar (S/N)? "; cin>>Rpta;

# include <iostream.h> # include <conio.h> # include <ctype.h> # include <math.h> void main() { int R,k,max,min; long int N,M,suma,suma1,inv; float prom,desv; char Rpta; clrscr(); max=0; min=9; do { cout<<"Ingrese numero: "; cin>>N; M=N; inv=0; k=0; suma=0; while (M>0) { R=M%10; inv=inv*10+R; M=M/10; if (R>max) max=R; if (R<min) min=R; suma=suma+R; suma1=suma1+R*R; k++; } prom=suma*1.0/k; desv=sqrt(suma1*1.0/k-pow(prom,2)); cout<<"\nEl mayor numero es :"<<max; cout<<"\nEl menor numero es :"<<min; cout<<"\nEl numero tiene "<<k<<" cifras"; cout<<"\nEl promedio de las cifras del numero es "<<prom<<"\n"; cout<<"\nLa desviacion estandar de las cifras del numero es <<desv<<"\n"; cout<<"\n\nDesea continuar (S/N)? "; cin>>Rpta; } while (toupper(Rpta)!='N'); getch(); }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

116

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

# include <iostream.h> # include <conio.h> # include <ctype.h> void main() { int R,k; long N,M,inv; char Rpta; clrscr(); do { cout<<"Ingrese numero: "; cin>>N; M=N; inv=0; k=0; while (M>0) { R=M%10; M=M/10; if (R%2!=0) R=R-1; inv=inv*10+R; k++; } M=inv; inv=0; while (M>0) { R=M%10; M=M/10; inv=inv*10+R; } cout<<"\nEl nuevo numero formado es :"<<inv; cout<<"\nEl numero tiene "<<k<<" cifras"; cout<<"\n\nDesea continuar (S/N)? "; cin>>Rpta; } while (toupper(Rpta)!='N'); getch(); }

# include <iostream.h> # include <conio.h> # include <ctype.h> void main() { int i,n1,n2,n3,n4,N,Dato; long suma; float prom; char Rpta; clrscr(); do { cout<<"Ingrese numero de datos: "; cin>>N; i=1; n1=0; n2=0; n3=0; n4=0; suma=0; while (i<=N) 117

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} while (toupper(Rpta)!='N'); getch();

} prom=suma/(i-1); cout<<"\nLa Tabla de frecuencias para los datos es: "; cout<<"\n[00 - 08] "<<n1; cout<<"\n<08 - 13] "<<n2; cout<<"\n<13 - 17] "<<n3; cout<<"\n<17 - 20] "<<n4; cout<<"\n\nDesea continuar (S/N)? "; cin>>Rpta;

cin>>Dato; suma=suma+Dato; if (Dato<=8) n1=n1+1; if (Dato<=13 && Dato>8) n2=n2+1; if (Dato<=17 && Dato>13) n3=n3+1; if (Dato>17) n4=n4+1; i=i+1;

#include <iostream.h> #include <conio.h> void main() { int anno, i; clrscr(); i=3; while(anno!=0) { gotoxy(3,i); cout<<"Ingrese el ao (0 para terminar): "; cin>>anno; gotoxy(3,i+1); if (((anno%4)==0 && (anno%100!=0)) || (anno%400==0)) cout<<"El ao dado es Bisiesto\n"; else cout<<"El ao dado No es Bisiesto\n"<<"\n"; i=i+2; } getch(); }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

118

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <iostream.h> #include <conio.h> #include <math.h> #include <ctype.h> void main() { int N,i; double Dato,Suma=0,Suma1=0,Media,Varianza,Rango; char Rpta; clrscr(); do { cout<<"Ingrese cantidad de datos: "; cin>>N; cout<<"\nIngreso de datos\n"; cout<<"Dato 1: "; cin>>Dato; Suma=Suma+Dato; Suma1=Suma1+pow(Dato,2); float Mayor, Menor; Mayor=Dato; Menor=Dato; for (i=2; i<=N; i++) { cout<<"\nDato "<<i<<": "; cin>>Dato; Suma=Suma+Dato; Suma1=Suma1+pow(Dato,2); if (Dato<Menor) Menor=Dato; if (Dato>Mayor) Mayor=Dato; } Media=(Suma/N); Varianza=Suma1-pow(Media,2); Rango=Mayor-Menor; cout<<"\n\nLas estadisticas para el conjunto de valores dado son:"; cout<<"\nMedia = "<<Media<<" Varianza = "<<Varianza<<" Rango = "<<Rango; cout<<"\n\nDesea continuar (S/N): "; cin>>Rpta; } while (Rpta != 'N' && Rpta != 'n' ); getch(); }

#include <iostream.h> #include <conio.h> #include <math.h> void main() { long int Num,n,Inv; int digmenor,digmayor,digito,K; char Rpta; do { digmenor=9; digmayor=0; cout<<"Ingrese un numero entero: ";cin>>Num; n=Num; Inv=0; K=0; 119

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

cout<<"\nLos digitos del numero dado son: "; do { digito=fmod(n,10); cout<<digito<<" "; if (digito<digmenor) { digmenor=digito; } if (digito>digmayor) { digmayor=digito; } n=(n-digito)/10; //N=N/10; Inv=Inv*10+digito; K=K+1; } while (n>0); cout<<"\nEl digito menor es "<<digmenor<<" y el mayor es "<<digmayor<<""; if (Num==Inv) cout<<"\nEl numero dado ES CAPICUA"; else cout<<"\nEl numero dado NO ES CAPICUA"; cout<<"\nEl numero tiene "<<K<<" digitos"; cout<<"\n\nDesea continuar (S/N): "; cin>>Rpta;} while (Rpta != 'N' && Rpta != 'n' ); getch();

#include <iostream.h> #include <conio.h> #include <math.h> #include <ctype.h> void main() { int N,i; float x0,y0,a,b,c,d,dx,x,y,fx,fy,U,L; char Rpta; clrscr(); do { cout<<"Ingrese Numero de particiones: "; cin>>N; cout<<"\nIngrese limites de la integral: "; cin>>x0>>y0; cout<<"\nIngrese coeficientes del polinomio: "; cin>>a>>b>>c>>d; dx=(y0-x0)/N; U=0; L=0; for (i=0; i<=N; i++) { x=x0+i*dx; y=x0+(i+1)*dx; fx=a*pow(x,3)+b*pow(x,2)+c*x+d; fy=a*pow(y,3)+b*pow(y,2)+c*y+d; if (fx<=fy) {U=U+fy; L=L+fx;} 120

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

} while (Rpta != 'N' && Rpta != 'n' ); getch(); }

else {U=U+fx; L=L+fy;} } float Integral=(U+L)/2; cout<<"\nEl valor aproximado de la integral es: "<<Integral; cout<<"\n\nDesea continuar (S/N): "; cin>>Rpta;

#include <iostream.h> #include <conio.h> void main() { int N, i; long int factorial; clrscr(); gotoxy(1,2); cout<<"Ingrese nmero entero (0 para terminar) "; cin>>N; while(N!=0) {factorial=1; for (i=1; i<=N; i++) factorial=factorial*i; cout<<"El factorial de "<<N<<" es "<<factorial; cout<<"\nIngrese nmero entero (0 para terminar) "; cin>>N; }; getch(); }

#include <iostream.h> #include <conio.h> void main() { int N, i; long int pen, ult, suma,aux; clrscr(); gotoxy(2,2); cout<<"Ingrese nmero de trminos para la Serie de Fibonacci (menor que 35) "; cin>>N; pen=0; ult=1; //Condiciones iniciales i=2; suma=pen+ult; cout<<"\n\nLos primeros "<<N<<" trminos de la serie de Fibonacci son:\n"; 121

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

cout<<pen<<" "<<ult<<" "; for (i=3; i<=N; i++) { aux=pen+ult; pen=ult; ult=aux; suma=suma+ult; cout<<ult<<" "; } cout<<"\n\nLa suma de los primeros "<<N<<" trminos de la Serie de Fibonacci es:\n"; cout<<suma; getch();

#include <iostream.h> #include <conio.h> void main() { int N,i, j; clrscr(); gotoxy(3,2); cout<<"Ingrese nmero de estudiantes: "; cin>>N; cout<<"\n"; int nota[100], temp; for (i=1;i<=N;i++) { gotoxy(3,i+3); cout<<"Ingrese nota del estudiante "<<i<<" cin>>nota[i]; } //Ordenamiento de las notas for (i=1;i<=N-1;i++) for (j=i+1;j<=N;j++) if (nota[i]>nota[j]) { temp=nota[i]; nota[i]=nota[j]; nota[j]=temp; } clrscr(); gotoxy(3,2); int k=4; cout<<"Las notas ordenadas en forma ascendente son:"; for (i=1;i<=N;i++) if (i<=18) { gotoxy(4*i,k); cout<<nota[i]; } else if (i<=36) {

";

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

122

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

gotoxy(4*(i-18),k+1); cout<<nota[i]; } else if (i<=54) { gotoxy(4*(i-36),k+2); cout<<nota[i]; } cout<<"\n"; cout<<"\n"; if (N%2==0) { j=N/2; cout<<" La mediana de las notas es: "<<nota[j]; } else { j=(N+1)/2; cout<<" La mediana de las notas es: "<<nota[j]; } getch();

#include <iostream.h> #include <conio.h> void main() { int M, N, i, j, k; clrscr(); //Ingreso de datos gotoxy(2,2); cout<<"Ingrese nmero de elementos del primer vector: "; cin>>M; cout<<"\nIngrese nmero de elementos del segundo vector: "; cin>>N; double A[100], B[100], C[100]; for (i=1; i<=M; i++) { gotoxy(3,i+4); cout<<"Ingrese elemento "<<i<<" del primer vector: "; cin>>A[i]; cout<<"\n"; } clrscr(); for (j=1; j<=N; j++) { gotoxy(3,j+2); cout<<"Ingrese elemento "<<j<<" del segundo vector: "; cin>>B[j]; cout<<"\n"; } k=0; for (i=1; i<=M; i++) for (j=1; j<=N; j++) 123

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

clrscr(); if (k>0) { cout<<"El vector interseccin de los vectores A y B es:\n"; for (i=1; i<=k; i++) { gotoxy(4*i+1,3); cout<<C[i]; } } getch();

if (A[i]==B[j]) { k++; C[k]=A[i]; }

#include <iostream.h> #include <conio.h> main() { int N, i, nota[100], A, B, C, D; clrscr(); cout<<"Ingrese cantidad de notas N="; cin>>N; A=0; B=0; C=0; D=0; cout<<"\nIngrese las notas\n"; for (i=1; i<=N; i++) { cin>>nota[i]; if (nota[i]<=7) A++; else if (nota[i]<=11) B++; else if (nota[i]<=16) C++; else D++; } cout<<"\n\Histograma de frecuencias\n"; cout<<"A=[01,07] "<<A<<" "; for (i=1; i<=A; i++) cout<<"*"; cout<<"\n"; cout<<"B=[08,11] "<<B<<" "; for (i=1; i<=B; i++) cout<<"*"; cout<<"\n"; cout<<"C=[12,16] "<<C<<" "; for (i=1; i<=C; i++) cout<<"*"; cout<<"\n"; cout<<"D=[17,20] "<<D<<" "; for (i=1; i<=D; i++) cout<<"*"; cout<<"\n"; cout<<"\n"; getch(); }

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

124

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

#include <iostream.h> #include <conio.h> main() { int M, N, i, j, Fmax, Cmax, Fmin, Cmin; float A[100][100], Mayor, Menor; clrscr(); cout<<"Ingrese orden de la matriz (M,N) "; cin>>M>>N; cout<<"\nElementos de la matriz"; for (i=1; i<=M; i++) //Proceso de ingreso de elementos de la Matriz { cout<<"\nIngrese elementos de la fila "<<i<<"\n"; for (j=1; j<=N; j++) cin>>A[i][j]; } Mayor=A[1][1]; Menor=A[1][1]; for (i=1; i<=M; i++) for (j=1; j<=N; j++) { if (A[i][j]>Mayor) { Mayor=A[i][j]; Fmax=i; Cmax=j; } if (A[i][j]<Menor) { Menor=A[i][j]; Fmin=i; Cmin=j; } } cout<<"\n\nEl mayor elemento de la matriz es: "<<Mayor; cout<<"\nubicado en la fila "<<Fmax<<" y columna "<<Cmax; cout<<"\n\nEl menor elemento de la matriz es: "<<Menor; cout<<"\nubicado en la fila "<<Fmin<<" y columna "<<Cmin; getch(); }

E T S S ES ST TR RA A TE EG GIIA A SM ME ET TO OD DO OL L G GIIC CA A S
Presentacin de la unidad a cargo del profesor. Actividades desarrolladas en sala.

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

125

rea de programacin - Grado 10 Lenguaje C++ ______________________________________________________________________________

R RE EC CU UR RS SO OS S
Humanos: Profesor y alumnos Institucionales: Sala de computo Materiales: Texto gua

IIN D L C ND DIIC CA A DO OR RE ES SD DE EE EV VA A LU UA A CII N N


Evaluacin de las actividades desarrollas en sala.

C L C CR RIIT TE ER RIIO OS SD DE EE EV VA A LU UA A CII N N


Qe es el lenguaje C++? Cal es la estructura bsica de un programa en C++? Cales son los tipos de datos manejados en el lenguaje C++?

Politcnico Colombiano Jaime Isaza Cadavid Facultad de Ingenieras

126

También podría gustarte