Sei sulla pagina 1di 70

INTRODUCCION Histricamente, los lenguajes de programacin han venido evolucionando a un ritmo similar al que se ha venido presentando en el hardware.

Es as como, si a nivel de hardware se habla de computadores de primera, segunda, tercera, cuarta. quinta y hasta sexta generacin, a nivel de lenguajes se habla de lenguajes de primera (ensamblador), segunda (fortran, cobol), tercera (procedimentales como Pascal y C) y cuarta generaci6n (Oracle 4GL, Informix 4GL). En la actualidad se trabaja en el desarrollo de lenguajes 5GL. Antes de empezar a ver las instrucciones del lenguaje C, veamos un poco - su origen. para comprender mejor algunas de las caractersticas que se describen ms adelante. Hace muchos aos, se vio la necesidad de un lenguaje que sirviera para escribir programas que pudieran funcionar sobre maquinas de diferentes tamaos o propsitos, con el objetivo de poder realizar algoritmos portables de tal forma que un usario final pudiera cambiar de marca y plataforma de trabajo segn sus necesidades, disminuyendo el costo de trasladar el software. As fue el nacimiento del lenguaje C. Sin perdida de generalidad, podemos decir que este lenguaje pretende funcionar en cualquier mquina. El programa es el mismo para todas las maquinas, es el compilador el encargado de hacer la traduccin del programa, de acuerdo con la mquina que tiene la versin usada por determinado computador de cada librera, as se logra que pueda ser ejecutado en distintas mquinas.

DEFINICIN DE COMPUTADORA Una computadora es una mquina electrnica que resuelve tareas relacionadas con el procesamiento de informacin, con una gran velocidad y precisin. Se entiende por procesamiento de informacin el tratamiento que reciben los datos para producir nueva informacin. Por ejemplo, si se tienen los datos (horas trabajadas, horas extras y pago por hora de cada uno de los empleados de una empresa, se puede obtener la cantidad total de dinero que recibe cada uno en una semana determinada. La finalidad de la computadora es ayudar al hombre a realizar las tareas en menor tiempo y con mayor exactitud. DEFINICIN DE SISTEMA COMPUTACIONAL Se le llama sistema computacional al conjunto de componentes computacionales que, de manera integral, ayudan a resolver un problema que requiere de procesamiento de informacin. CLASIFICACIN DE LOS COMPONENTES COMPUTACIONAL DE UN SISTEMA

Un sistema computacional consta de componentes fsicos y lgicos. Los componentes fsicos, o tangibles, conocidos como hardware, son los que realizan las tareas y entre ellos se encuentran los componentes elctricos y electromagnticos, as como sus interconexiones. Los componentes lgicos o intangibles, conocidos como software, son los que indican al hardware qu hacer y cmo hacerlo.

CLASIFICACIN DEL HARDWARE La clasificacin de los componentes considerados como hardware est apegada a los recursos que utiliza el hombre cuando resuelve alguna tarea de procesamiento de informacin. Los componentes se clasifican en: A) B) C) D) DISPOSITIVOS DISPOSITIVOS DISPOSITIVOS DISPOSITIVOS DE DE DE DE ENTRADA SALIDA PROCESAMIENTO ALMACENAMIENTO PERMANENTE

Por ejemplo, si se pretende que una computadora realice la tarea de obtener el promedio de tres nmeros cualesquiera, sta debe tener medios para preguntar cules son esos tres nmeros. Tambin debe tener manera de efectuar la suma de stos y la divisin entre 3. Asimismo, debe tener un medio de comunicacin para mostrar el promedio que obtuvo. Si este problema lo tratara de resolver un humano en vez de la computadora, tendra que hacer lo siguiente: 1) Pedir el primer nmero y anotarlo en algn lugar, para evitar olvidarlo. 2) Pedir el segundo nmero y anotarlo. 3) Pedir el tercer nmero y anotarlo. 4) Efectuar la suma aritmtica de estos tres nmeros y anotar el resultado en algn lugar. 5) Dividir el resultado anterior entre 3 y anotarlo en algn lugar. 6) Mostrar el resultado anterior. Quien hizo el proceso debi tener odos para escuchar los tres nmeros que se le dieron, papel y lpiz para retenerlos y ayudarse a obtener los resultados de la suma y de la divisin; tener cerebro para realizar estas operaciones, y voz para leer el resultado.

As pues, esta persona tuvo canales de comunicacin para preguntar datos y emitir resultados, y medios de procesamiento para realizar sus operaciones. De un modo anlogo, la computadora tambin tiene canales de comunicacin para recibir y emitir datos, as como medios de procesamiento. Vamos ahora a estudiar las partes de una computadora analizndola desde el punto de vista de la informacin que emite, recibe y procesa. A) Dispositivos de entrada stos son los componentes que le permiten a la computadora recibir informacin. El dispositivo ms comn que permite recibir informacin del exterior es el teclado, el cual permite que se introduzca informacin cuando se oprimen sus teclas. Otro dispositivo comn es el ratn o mouse el cual permite que se seleccione informacin para as darle rdenes a la computadora, deslizndose a travs de la pantalla. Alternativamente existen ms dispositivos para que la recepcin o entrada de datos se lleve a cabo; algunos de ellos son: el lpiz ptico, el scanner, etctera. B) Dispositivos de salida Son los componentes que le permiten a la computadora mostrar al exterior la informacin. El dispositivo ms usado para exteriorizar la informacin procesada es el monitor o pantalla, el cual permite visualizar letras, nmeros, smbolos especiales e imgenes.

Otro dispositivo especialmente til, pues permite obtener la informacin impresa, es la impresora. C) Dispositivos de procesamiento Son los componentes que permiten procesar informacin. stos son en s el "cerebro" de la computadora. Hasta ahora, tanto los dispositivos de entrada como los de salida, no resultan ser ms que dispositivos perifricos a la computadora, porque slo le sirven para transmitir informacin de o hacia el exterior. Se compone de dos partes: CPU (Central Procesing Unit: Unidad Central de Procesamiento). Es un circuito electrnico de la computadora capaz de realizar operaciones aritmticas y lgicas, as como coordinar todas las acciones de la computadora. b) Memoria principal. Es un conjunto de circuitos electrnicos que permiten almacenar y recuperar datos en forma de seales elctricas. Las acciones de almacenar y recuperar los datos son ejecutadas por el CPU; la memoria slo es un lugar de almacn de datos; es temporal, porque los almacena slo mientras est presente la corriente elctrica, pero es de muy rpido acceso pues la informacin viaja a manera de seales elctricas. D) Dispositivos de almacenamiento permanente Estos componentes son conocidos como memoria secundaria, y permiten almacenar la informacin en forma permanente. Debido a que la memoria principal es temporal, la informacin es trasladada a la memoria secundaria cuando se desea que sta quede almacenada y que su permanencia no dependa de la presencia de la corriente elctrica.

La memoria secundaria es permanente debido a que la informacin es almacenada por medios electromagnticos, pero se reduce significativamente su velocidad de acceso, en contraste con la velocidad de la memoria principal. Los dispositivos de almacenamiento permanente o secundario son considerados como dispositivos de entrada, pues el CPU, al recuperar la informacin que haba sido almacenada previamente en memoria secundaria, est recibiendo informacin. stos mismos tambin son considerados como dispositivos de salida cuando el CPU manda la informacin de memoria principal a la memoria secundaria. Por lo tanto son considerados como dispositivos de entrada y salida. Como ejemplos podemos citar el disco duro, el disco flexible (dskette), la cinta y el disco ptico. CLASIFICACIN DEL SOFTWARE Se clasifica en: A) Software de aplicacin B) Software del sistema A) Software de aplicacin Es un software que tiene un propsito especfico. Por ejemplo: Software Software Software Software de de de de contabilidad nmina facturacin procesamiento de textos, etctera.

B) Software del sistema Es un software que ayuda en la creacin, modificacin y ejecucin del software de aplicacin. Ejemplos; Sistema operativo: es un software que establece la comunicacin entre los componentes del hardware y el resto del software. Su

funcin principal es administrar el funcionamiento del hardware segn las rdenes dadas por algn software. Por ejemplo, si usando un software de procesamiento de textos, se desea imprimir un trabajo, el sistema operativo verifica que la impresora est encendida, si lo est, permite que se realice la impresin, y durante sta, contina verificando su estado; si la impresora no est encendida enva un mensaje indicndolo. Si el sistema operativo no estuviera presente la comunicacin entre el software de procesamiento de textos y la impresora no podra realizarse. Lo mismo ocurrira con cualquiera otra interaccin entre hardware y software. Lenguajes: es un software que proporciona un conjunto de vocablos y reglas, que se utilizarn para crear el software de aplicacin. A su vez, los lenguajes se clasifican en: a) Bajo nivel: Utilizan vocablos directamente entendibles por el CPU de la computadora. Por ejemplo: Lenguaje mquina, ensamblador. b) Alto nivel: Utilizan vocablos parecidos al lenguaje humano pero ininteligibles para el CPU, por lo cual deben ser traducidos a un lenguaje computacional de bajo nivel. Por ejemplo: Basic, Pascal, Java, Delphi, C. La persona capaz de instruir a la computadora usando algn lenguaje computacional, es llamado programador; se le llama programa al conjunto de instrucciones escritas en un lenguaje computacional. Como ahora el problema va a ser solucionado con la ayuda de una computadora, es indispensable que el programador se ponga en lugar del sujeto de accin, identifique todas las acciones que ste llevara a cabo y que posteriormente instruya a la computadora para que sea sta quien haga el trabajo del sujeto de accin.

Ahora bien, por una parte, est el sujeto de accin en una situacin a resolver; por otra, est el programador que debe pensar como el sujeto de accin y tambin programar la computadora; y por otra, la misma computadora que, ejecutando un programa, resolver el problema en lugar del sujeto de accin. Es conveniente definir ahora la inter-relacin de estos elementos. Un programador debe tener tres caractersticas esenciales: 1) Ser capaz de analizar un problema hasta entenderlo a la perfeccin. 2) Saber enumerar una serie de pasos por medio de los cuales se va a llegar a la solucin del problema, tomando en consideracin las capacidades de la computadora. 3) Conocer un lenguaje de computacin adecuado a la solucin del problema. Metodologa para la solucin de problemas La prctica debe hacerse mediante una serie de pasos, llamados metodologa para la solucin de problemas por medio de la computadora, los cuales se enumeran a continuacin: 1) 2) 3) 4) 5) 1) Definicin del problema Planeacin de la solucin Algoritmo Codificacin y edicin del programa Pruebas y depuracin DEFINICIN DEL PROBLEMA

La definicin del problema se centra en la elaboracin de un texto que nos permitir saber qu es lo que se pretende

solucionar, y nos proporcionar informacin til para el planteamiento de la solucin. 2) PLANEACIN DE LA SOLUCIN En este paso se debe entender por completo el problema, y dejar en claro cul es la informacin til que se nos da, qu otra nos hace falta y, con base en esto, determinar la mejor solucin. Si nos hiciera falta informacin, en esta fase del problema se podra determinar que el problema no tiene solucin. En esta fase tambin definimos formalmente lo que debemos entregar como resultado. Dado que esta informacin, una vez resuelto el problema, saldr de la computadora, podemos decir que es una salida de informacin. De igual manera, la informacin adicional que necesitemos pedir, constituye una entrada de informacin hacia la computadora. 3) ALGORITMO Algoritmo es una serie de pasos ordenados, encaminados a resolver un problema. Para establecer esta serie de pasos se requiere de una reflexin previa del problema dada por el paso anterior (planeacin de la solucin). Adems, se podr observar que aunque en el paso anterior ya supimos qu frmula aplicar para obtener la solucin al problema del terreno, nada nos dice qu hacer antes y despus de aplicar la frmula. 4) CODIFICACIN Y EDICIN DEL PROGRAMA La codificacin consiste en traducir el algoritmo solucin a instrucciones de un lenguaje de computadora, en nuestro caso C.

Al conjunto de instrucciones escritas en un lenguaje de computadora se le llama programa. La edicin consiste en introducir el programa computadora por medio de un editor de textos. a la

Debe cuidarse el aspecto de la sintaxis en la codificacin de un programa, ya que las instrucciones deben tener un orden en la secuencia de las palabras y smbolos que las componen. 6) PRUEBAS Y DEPURACIN Una vez que se tiene el programa digitado en la computadora, debe probarse exhaustivamente, ejecutando el programa hasta concluir que los resultados son los deseados y que no tiene errores. Para esto se deben preparar datos de prueba en papel, as como su solucin para cotejarlo con la solucin que obtenga la computadora, Si el programa tiene errores sintcticos stos pueden corregirse simplemente consultando un libro de instrucciones del lenguaje. No as si el problema es de lgica, en cuyo caso debe revisarse y corregirse desde el algoritmo. Modelaje y especificacin En este captulo, se va a aprender la manera de enfrentar los problemas que se pueden presentar en el mundo real y que se quieren resolver a travs de un modelo computacional. 1.1. Conceptos Bsicos
Situacin inicial Situacin Final

Fig. 1. 1 - Esquema de un Problema bien definido

10

En el mundo real siempre nos hallamos con problemas de distinta clase y Para algunos, como se puede observar en la figura anterior, se puede descubrir dnde inicia y dnde finaliza. No siempre se pueden encontrar todos los elementos involucrados en esas situaciones, lo que significa que no es un problema bien definido.

11

Ejemplo: el clima que habr dentro de un mes no lo podemos predecir con exactitud ya que tiene muchos factores externos que no tienen un comportamiento predeterminado. Por el contrario, si el problema es: ir al supermercado ms cercano y comprar la leche Sabemos que al salir se debe llevar una cantidad de dinero suficiente (D) y al volver se tiene que observar que se regresa con leche, cuyo costo fue C, y con el dinero restante de esa compra (R). Como se ve, el problema se expresa en trminos de datos y las condiciones que deben cumplir. Mostrndolo de una manera ms formal quedara. Al inicio (se definen condiciones de entrada): Dinero suficiente Costo de la leche D. C.

Donde D debe ser mayor o igual que C para poder realizar la compra. Al final (se definen condiciones de salida): Se vuelve con la leche. Dinero restante de la compra R. donde R = D - C. Al observar lo anterior, vemos que siempre se debe cumplir esto (las probabilidades de factores externos como un robo, prdida del dinero, etc. no se toman en cuenta) y por lo tanto es un problema bien definido. Ya teniendo enmarcado de dnde se sale (Entrada) y a dnde se debe llegar (Salida), lo que falta es tratar de encontrar una solucin que nos lleve de un. punto a otro, un algoritmo. 1.2. Algoritmo

12

Un algoritmo se define como una sucesin ordenada de pasos que parten de la Entrada y, si se siguen uno a uno, se debe llegar a la Salida. Todo esto se denomina un programa, cuya estructura se puede observar en la figura 1.2. Entrada
Algoritmo

Salida

Fig. 1.2 - Componentes de un Programa.

1.3. Modelaje El modelaje consiste en el seguimiento ordenado de una serie de pasos para poder ir delimitando un problema. Esos pasos son: Leer y/o analizar el problema que se presenta. Determinar cules son los datos de entrada de problema. Es decir, los elementos necesarios para construir la solucin. Determinar los datos de salida. Es decir, los datos en los que se expresa la respuesta. Traducirlo a un modelo computacional. 1.3.1. Ejercicios Realice los tres primeros pasos del modelaje, para los siguientes problemas: 1.- Se desea determinar la fecha del da siguiente conociendo la fecha actual. 2.- Un profesor de matemticas desea saber el permetro de un tringulo. 3.- Carlos Parra se quiere comprar un carro y al ir a averiguar precios, queda convencido que debe hacerlo con financiacin. Despus de mucho investigar, encontr un prstamo que funciona asi:

13

La cuota inicial es del 40% y el 60% restante debe pagarse en 24 cuotas mensuales. Cada cuota tiene un inters del 18% sobre el saldo. Teniendo el costo del carro, Carlos desea saber en cunto le queda la Cuota inicial y cada cuota mensual. 1.3.2. Modelo Computacional Como

Un problema puede ser modelado como datos de entrada y datos de salida. Analizando el ejemplo anterior, veremos que todos los datos tienen ciertas caractersticas, dependientes del problema: Estas DATOS DE ENTRADA: detalla Estos son los datos que me indican los parmetros o exigencias del problema, deben estar definidos para poder empezar a elaborar el algoritmo. DATOS DE SALIDA: detalla Son los datos que obtenemos como resultado de seguir paso a paso el algoritmo solucin, los datos de salida deben ser la solucin esperada por el usuario. Como podemos ver los datos tienen caractersticas que los definen claramente, estas caractersticas nos permiten expresar el modelo de una forma ms detallada y precisa. En particular, en el lenguaje de programacin C, las caractersticas de los datos estn agrupadas en tipo, clase, identificador y valor. 1.3.2.l. Caractersticas de los datos l.- ldentficador: es el nombre con el que representamos los diferentes tipos de datos. Este vara de acuerdo a si el dato es constante o variable. Si el dato es constante, se le asigna un identificador por comodidad. Por razones de uniformidad y claridad es recomendable usar slo maysculas. Por ejemplo, Pl es el nombre que se le da al valor de 3.1416 Pl 3.1416

14

Para la otra clase de datos, las variables, sus identificadores son una serie de caracteres que consisten de letras y dgitos que no comienzan en dgito. Puede tener cualquier longitud. Ejemplo de posibles identificadores de variables: Objeto a identificar ldentificador Mayor nota en el curso. mayornota Hora de salida de un vuelo. horasalida Notas del ao 2004. notas2004 Como se puede observar en el ejemplo, los identificadores deben ser nombres que lleven implcito el significado de lo que estn representando, la escogencia de los caracteres a usar queda a gusto del que est modelando. Es importante saber que al no es igual a Al ya que hay diferenciacin entre minsculas y maysculas. 2.- Clase- puede ser constante o variable. Se dice que un dato es constante si no cambia al examinarlo en cualquier momento del programa. Por el contrario, un dato es variable si cambia. Constante Variable MINSHORA horallegada 60 ?

3.- Valor- representa la situacin, en cualquier momento, de algn dato. Si el dato es constante, el valor es siempre el mismo puesto que representa a un objeto que no cambia. El valor de la constante llamada Pl ser siempre 3.1416. En cambio, si el dato es variable sus valores dependen del tipo. 4.- Tipo: el tipo de un dato depende del conjunto de valores que puede tomar y un grupo de operadores a travs de los cuales es posible manipular los valores. Tipos Bsicos: a - Enteros-

15

Son el tipo int de C. Los valores permitidos se encuentran dentro del rango -32768 ;32768 y los operadores disponibles son la suma, la resta, la multiplicacin, la divisin y el mdulo. Operacin Suma Resta Multiplicacin Divisin Mdulo Operador Aritmtico + * / % Expresin Algebraica f+7 p5 bm x/yo xy r mod t Expresin en C f+7 p5 b*m x/y r%t

La divisin entera da como resultado un entero. Por ejemplo, la expresin 7 / 4 es igual a 1 o la expresin 17 / 3 es igual a 5. El operador mdulo es slo para enteros y es equivalente al residuo que queda despus de realizar la divisin. Por ejemplo, 7 % 4 es igual a 3 o 17 % 5 = 2, mientras 17/5= 3 como se puede apreciar en la figura 1.3.
17 5

Modulo

3 Divisin

Fig. 1.3 - Relacin entre el operador mdulo y la divisin.

Con la divisin siempre hay que tener en cuenta que no se puede dividir por cero, ya que esto genera un error. b - Reales. Son el tipo float de C. Toman valor dentro del conjunto de los nmeros reales y los operadores permitidos son los mismos de ese conjunto. Por ejemplo 8.16 ,-10.345, o 1 1.0. Hay que notar la diferencia entre 1 1.0 y 11. El primero es un real mientras el otro es un entero. Con este tipo hay que tener cuidado con el funcionamiento de la divisin. V

16

c - Caracteres: Son el tipo char de C. Toman valor dentro del conjunto de letras, dgitos y smbolos de escritura. Por ejemplo '+', '8', 'A, 'b'. Hay que notar la diferencia entre el caracter '8' y el nmero entero 8. Ejemplo: Realice el modelaje del siguiente problema. Problema: Se tiene un curso con 30 alumnos y se desea saber el promedio final que hubo en el curso. Solucin: Para poder encontrar el promedio, lo que hay que realizar. es una sumatoria de todas las notas definitivas de cada alumno y despus dividir por el nmero de alumnos (30 para este caso). CONSTANTES: Si examinamos el problema, el nmero de alumnos es un valor que no debe cambiar, as tenemos. NUM-ALUMNOS 30 VARIABLES ENTRADA: Segn el anlisis hecho, vimos que la solucin depende de las notas finales de cada alumno para poder sumarlas. Adems sabemos que las notas estn en el rango de [0.0 1- 5.0] por lo que deben ser reales. OBJETO Nota de cada alumno. IDENTIFICADOR nota TIPO Real

SALIDA: Sabemos que el resultado buscado es un promedio:

17

OBJETO IDENTIFICADOR Promediofinal del curso promediocurso Instrucciones bsicas de C

TIPO Real

Hasta este momento hemos visto la metodologa para modelar y especificar cualquier problema del mundo real; adems, hemos visto un mtodo para empezar a acercarse a una posible solucin por medio de la tcnica de refinamiento a pasos. El siguiente paso consiste en expresar dicho refinamiento en trminos de un lenguaje que el computador sea capaz de entender. En este semestre comenzaremos a traducir a instrucciones del lenguaje C. Conceptos bsicos Estructura de un programa En general, una de las principales caractersticas de un programa en lenguaje C es que puede estar conformado por un numero ilimitado de funciones distribuidas en diferentes mdulos, uno de los cuales contiene una funcin principal para iniciar la ejecucin. Por ahora, nosotros vamos a ocuparnos de programas en C, descritos en un solo mdulo, el cual contiene la informacin suficiente para poderse ejecutar. Un programa en C de este tipo consta de las siguientes partes:

18

Estructura basica de un programa en C ************************* documentacin libreras declaracin de constantes prototipo de funciones declaracin de variables globales int main (void) /*Funcin principal.*/

{ declaracin de variables locales cuerpo del programa return 0; } < declaracin de funciones > ********************************* Vamos a analizar cada una de ellas: Documentacin > : es una explicaci6n de lo que hace el programa. Libreras > : sirve para indicarle al programa cual es el comportamiento de algunas funciones propias de C. Declaracin de constantes > : define las constantes del mundo sobre el cual se trabajara. prototipo de funciones > : ayuda a indicar como es que estn definidas las funciones hechas por el programador. beben estar en alfabtico por razones de claridad.

19

declaracin de variables globales > : indica cuales son las variables globales, es decir, aquellos datos que pueden ser modificados desde cualquier parte del programa. declaracin de variables locales > : termina de definir el mundo de trabajo. Deja establecidos los datos internos con los que se debe trabajar, que deben coincidir con los obtenidos durante el modelaje de un problema. cuerpo del programa > : es el algoritmo de solucin. declaracin de funciones > : son los bloques que solucionan cada paso del refinamiento a pasos. Deben estar en orden alfabtico y cada una de ellas debe ir debidamente documentada. Tanto en la < declaraci6n de funciones > como en el < cuerpo del programa> se hace una traducci6n al lenguaje. Esto consiste en una secuencia de instrucciones separadas por ";" y que pueden ser de la siguiente forma: Asignacin Entrada o salida como por ejemplo printf, scanf, getchar o putchar. De control como son el if, el if - else y el switch. Instrucciones repetitivas que son el while, el for y el do while. Llamado a otra funcin de C. Llamado a una funcin creada por el programador.

20

Instrucciones Vamos a comenzar con las instrucciones de C. Para esto vamos a hacer uso de un ejemplo. Ejemplo: Suponga que tenemos el problema de hallar la suma, el promedio y el producto de tres nmeros enteros. Solucin: segn la especificacin y el refinamiento a pasos solucionados en el bimestre anterior tenemos: Programa: segn la estructura de un programa, estudiada anteriormente, tenemos lo siguiente: #include <stdio.h> #define FACTORPROM 3 //declaracin de constantes

int main (void) { int numl, num2, num3, suma, promedio, producto; // declaracin de variables /* Aqu va el cuerpo del programa, que es la traduccin del refinamiento a pasos. */ suma = numl + num2 + num3; promedio =( numl + num2 + num3 ) /FACTORPROM; producto= numl * num2 * num3; /* falta informar los resultados por pantalla return 0; }

21

Operadores Los operadores se clasifican en dos grupos: aritmticos y lgicos. En general, su comportamiento es como se conoce la aritmtica clsica, excepto en los problemas de manejo de ambigedades: Por ejemplo, la expresin: 5 + 8 * 9 + 9 /3 se puede interpretar como: (5 + 8) * 9 + ( 9/3)= 120 como: 5 + (8 * 9 + 9)/3 = 32. Como se puede ver, los resultados son diferentes aunque se estn empleando los mismos nmeros y aparentemente los mismos operadores, por esta razn, se especific la precedencia y la asociatividad, para definir la forma de resolver este tipo de problemas. la precedencia se define por el orden descendente de la siguiente tabla y la asociatividad tal y como se especifica en ella: Operadores () [] ++ -- ! */ % + < <= > >= == != && || += += -= *= /= %= Asociatividad izquierda a derecha derecha a izquierda izquierda a derecha izquierda a derecha izquierda a derecha izquierda a derecha izquierda a derecha izquierda a derecha derecha a izquierda

22

Ejercicios Haga el refinamiento y cree el programa (suponiendo que tiene los valores de los datos de entrada) para los siguientes problemas: 1.Hallar el volumen de un cono. 2.Convertir de grados Centigrados a grados Fahrenheit. 3.Intercambiar el valor de dos variables. Instruccin de salida Para poder mostrar resultados por pantalla, C ofrece un conjunto de funciones para la salida. A continuacin vamos a ver la funcin ms comn para hacer salida con formato a pantalla. Vamos a continuar con el ejemplo de la suma, promedio y producto de tres nmeros. El primer punto lo podemos llevar a cabo con la ayuda de la instruccin printf. printf("Cul es el valor del primer nmero? "); Con esta instruccin se logra que a la hora de la ejecucin del programa aparezca un mensaje en la pantalla. Para mostrar por pantalla el resultado de una variable le agregamos lo siguiente: printf("La suma=%d y el promedio= %d\n", suma, promedio);

23

printf ("El producto = %d\n", producto); Para ver cual es el comportamiento de estas dos instrucciones vamos a suponer que la suma tiene el valor de 3, el promedio = 1 y el producto = 1. Con estos valores, a la hora de la ejecucin aparecer en la pantalla algo como se observa de la siguiente manera: La suma = 3 El promedio 1 El producto 1 Sintaxis del printf: printf(" frase); printf("< frase > ", variables, .... variable n); vamos a analizar la estrucutra del printf:

a. Estas secciones de la frase son puro texto. A la hora de la ejecucin aparecern los mismos caracteres. b. (%d) es el especificador de conversin usado cuando se desea imprimir un entero. Como es la primera aparicin en esta frase de un especificador, se relaciona con la primera variable que aparezca al terminar la < frase >. Para este caso tomar el valor de la variable sealada con la e.

24

c. Es el especificador de la segunda variable as! que toma el valor de la variable sealada con la f. Vemos que el %d es para imprimir enteros pero existen otros especificadores: Tipo de variable Entero Real Carcter Especificador conversin %d %f %c de

Dependiendo de lo que se desee imprimir se usa el especificador correspondiente. d. ( \n ) es una secuencia de control que indica que en este punto hay que hacer un cambio de lnea es decir, que el cursor quedar al comienzo de la siguiente lnea. Existen otras de estas secuencias, como es el ( \t ) que tiene la funcin del TAB del teclado. Lo nico que nos hace falta de la especificacin para terminar el problema, es poder asignarle los valores dados por el usuario a las variables de entrada. Para esto, necesitamos una instruccin de entrada.

25

Instruccin de entrada En casi todos los programas, es necesario que el usuario especifique determinados parmetros para poder calcular un resultado. Igual que para la salida, C ofrece un conjunto de funciones para la entrada de datos desde el teclado. Una instruccin que nos sirve para leer los valores dados, es el scanf. Sintaxis: scanf(" < formato > ", &variables, .... &variabieN); Ejemplo: Vamos a leer el valor de numl: scanf("%d", &numl); Con esta instruccin se logra que en numl quede el valor entero dado por el usuario. El %d es el especificador que indica el tipo de dato ledo (numl es un entero), Los especificadores son los mismos del printf. Si quisiramos leer las tres variables de una vez podra ser: scanf("%d %d %d", &numl, &nurn2, &num3); En esta sintaxis se muestra como es que se le deben dar los especificadores a cada variable que se desea leer, se muestra que cada variable debe tener su especificador. Ya con todos los pasos de la especificacin traducidos el programa queda as:

26

*************************************************** Programa que calcula la suma, el promedio y el producto de tres nmeros. *************************************************** #include <stdio.h> #define FACTORPROM 3

int main ( void) { int numl, num2, num3; int suma, promedio, producto; printf("Cul es el valor del primer nmero); scanf("%d,", &numl); printf("Cul es el valor del segundo nmero?); scanf("%d", &num2); printf("Cul es el valor de tercer nmero?); scanf("%d", &num3); suma = numl + num2 + num3; promedio= (numl + num2 + num3)/ FACTORPROM; producto = numl * num2 * num3; printf("La suma = %d\nEl promedio=%d\n", suma, promedio); printf("El producto = %d \n", producto); return 0; }

27

Ejercicios Realice el modelaje, especificacin y programa siguientes problemas: de los

1.- Leer el valor de 5 nmeros e imprimir el valor con el que quedaron. 2. Calcular la suma de dos enteros. 3.Dados dos nmeros enteros, imprimir el resultado de la divisin y el mdulo entre los dos. 4.Dados tres nmeros, imprimir el resultado multiplicacin entre los tres y el valor de los nmeros. de la

5. Se desea que al nmero 5 se le sume cualquier nmero dado por el usuario para imprimirlo. 6.- Imprima el rea y el permetro de un tringulo. Sus lados son de tamao real y el formato de respuesta debe ser nicamente con 2 decimales. 7. Leer una temperatura dada en grados Fahrenheit y escribir el valor correspondiente en Centigrados. C = 5/9 (F - 32) 8.- Calcular el volumen de un cono. Volumen = 3.1416* (radio )2 * altura /3. 9.Dados a/b y c/d, hay que obtener la suma. 10. Un aparato consume 200 vatios y para ponerlo a funcionar se utilizan pilas de 25 vatios que cuestan $200 cada una y slo duran tres meses.

Calcular cuntas pilas se necesitan para alimentar el aparato, cunto cuestan y considerando el tiempo de duracin, calcular cuntas pilas se necesitan en un ao y cunto cuestan. 11.- Se necesita saber el costo total de la construccin de un puente, los materiales son: Hierro: Concreto: Pavimento: cuesta $12.000 la unidad cuesta $10.000 la unidad cuesta $15.000 la unidad

Dada la cantidad usada para la construccin del puente de cada material debe imprimir el costo Total de la obra 12. Un corredor de carros contrata un ingeniero para modelar la velocidad de su auto y para ello se vale de la frmula de la velocidad velocidad = a * t + Vo La aceleracin (a) es constante y su valor es de 16 Dado el tiempo de recorrido (t) y una velocidad inicial (Vo) el programa debe calcular la velocidad 13.- Dado un nmero entero de 4 digitos (OJO!: UN SOLO nmero entero) calcule en la variable sumdig la suma de sus dgitos y en la variable invert el nmero invertido. Ej.: si el nmero es 1234 sumdig = 1 0 e invert = 432 1. 14. Hugo, Paco y Luis desean saber cunto tienen que pedirle a To Rico cada mes, por una deuda adquirida en un paseo a Disney World: Cada uno recibi una donacin de US$5.oo dada por el Abuelo Rico

Cada uno gast US$ 30.oo durante el viaje

En el plan que usaron, pagaron una cuota inicial de US$15.oo que era el capital que tenan. Deben pagar su deuda en 12 cuotas, cada-cuota tiene un valor igual que se obtiene de la siguiente frmula: cuota = (Total Deuda * 1.36)/12; 15.Un estudiante se encuentra preocupado por obtener el resultado del promedio de las 4 materias que vi en el semestre. La primera materia vale el 30%, la segunda el 10%, la tercera el 40% y la ltima el 20% del promedio. Calcule el promedio del alumno para el semestre. 16. Dado un conjunto de 5 dgitos, convertirlos en un slo nmero. Por ejemplo, si los nmeros son: 2, 7, 4, 9, 3 debe ser convertido a 27493. 17. Dado un nmero de tres digitos, decir cuntas unidades, dcimas y centsimas contiene. Por ejemplo, el nmero 275 contiene 2 centsimas, 7 dcimas y 5 unidades. 18. Se debe leer un nmero de cuatro dgitos, separarlo en los dgitos equivalentes e imprimirlos separados por tres espacios. Por ejemplo, si se lee el nmero 7894 se debe imprimir como resultado el 7894 19.Leer un nmero de 3 dgitos y escribirlo invertido. ejemplo, si se lee 378 se debe imprimir 873 Por

Instrucciones condicionales Hasta este momento hemos visto la forma de solucionar problemas sencillos usando el lenguaje C; pero en general, los Problemas son de mayor complejidad, necesitando puntos de control para validacin de datos, toma de decisiones, repeticiones, etc. Para lograr este tipo de comportamiento, los lenguajes programacin ofrecen estructuras de control que llenan diferentes necesidades. En este captulo. veremos estructuras condicionales bsicas, que permiten toma decisiones de acuerdo con un requerimiento dado. Introduccin Las estructuras condicionales permiten generar puntos de control de tal forma que se ejecuten diferentes conjuntos de instrucciones dependiendo de alguna condicin predeterminada. Ejemplo: Suponga el problema de decir cul es el mayor de dos nmeros enteros: CONSTANTES: No hay. VARIABLES: ENTRADA: IDENTIFICADOR numerol Entero numero2 Entero de las las de

TIPO

SALIDA: uno de los dos de la entrada, dependiendo de cul es mayor.

Planteemos un plan de solucin para este problema: 1. 2. 3. 4. Leer los dos valores enteros Comparar los dos valores Si el numerol es mayor, imprimirlo como el resultado Si no, imprimir el numero2 como el resultado

En el plan de solucin notamos que existen procesos en la solucin que NO, siempre tienen que ejecutarse. Por ejemplo, en el punto 3. la impresin se ejecuta si el numerol es mayor y en ese caso no se debe ejecutar el numeral 4. Por el contrario, si el numerol no es mayor, no se ejecuta la impresin de numeral 3. y se ejecuta todo el numeral 4. Para tener esta semntica usando C, es necesario definir una estructura de control que nos de ese significado, la cual llamaremos if - else. Esta estructura nos permite evaluar condiciones y decidir respecto al resultado la condicin. A continuacin veremos qu es una condicin y luego retomaremos la solucin del problema. Condiciones Pensemos en la condicin del ejemplo anterior: numerol es mayor que el numero2, esta expresin es simple y la expresamos como la aritmtica nos ha enseado: numerol > numero2. En general, las condiciones se expresan tal y como son en la vida real, simplemente dndole una representacin en el lenguaje C. Estas expresiones se arman usando los operadores de comparacin.

Los operadores de este tipo son,. Nombre igual diferente mayor que menor que mayor o igual menor o igual Ejemplos: X es menor o igual que y: (x<=y) x es igual a y: (x == y) Estas condiciones son intuitivas y en general, sencillas de armar, pero cmo se expresan condiciones ms complejas? por ejemplo: la variable x entera es mayor que cinco y menor que doce la variable z real es menor que tres o mayor o igual que nueve En general, las condiciones de los problemas son condiciones simples, relacionadas por medio de conectores lgicos como "y" y "o", los cuales se comportan tal y como funcionan en la vida real: Ejemplo 1: Carlos va a la fiesta si Luis y Andrs lo acompaan. El significado de esta frase es que slo si Andrs y Luis van, Carlos va. NO basta con que uno de los dos vaya. Operador en C == != > < >= <= Ejemplo (b == 5) (c != d) (numerol numero2) (car < 'd') (c >= (h/5 (varl <= var2)

>

Ejemplo 2: Mara va a la clase si Camilo va Germn va. El significado es que con que u de los dos vaya es suficiente para que Mara vaya. En general, los conectores lgicos son los siguientes: Nombre Operador en Ejemplo C y && ((x == 5) && (z <8)) O || ((varl > 4) (var2==x1)) no ! !var3

||

La solucin de las expresiones propuestas anteriormente, usando los operadores lgicos son: la variable x entera es mayor que cnco y menor que doce: ((x>5) && (x<12)) Esta expresin se hace cierta cuando el valor de x es 6, 7, 8, 9, 10 y 11, por que son los nicos valores enteros que cumplen las dos restricciones al tiempo. la variable z real es menor que tres o mayor o igual que nueve: ((z<3) || (z>=9)) Como podemos ver, las expresiones complejas, son simplemente la unin de cada una de las expresiones armadas individualmente, entre parntesis agrupadas todas por un parntesis global. 4.2.1. Ejercicios Construya las siguientes expresiones:

1.- x menor o igual a cinco 2.- y menor que tres 3.- x est entre ocho y 76 4.- y es menor que ocho o est entre doce y treinta S.- la letra a es mayscula if - else La estructura if - else, nos define una estructura de control de bifurcacin, que nos permite agrupar en dos las posibles instrucciones a ejecutar. La sintaxis de la estructura es la siguiente: if ( condicion) { instruccin l; ... instruccin n; } else { instruccin 1; .. instruccin n; } En general, entre las instrucciones de un if puede ir cualquier tipo de instruccin (simple, condicional, repetifiva, llamado a funcin etc.) y este "anidamiento" puede continuar en profundidad de forma indefinida. Sin embargo, cuando se est resolviendo un problema, no es normal necesitar anidamientos de profundidad mayor a tres, y en caso de encontrarlos, muy seguramente pasa que:

Se est resolviendo de forma equivocada y existe una mejor solucin El problema es lo bastante complejo como para usar funciones auxiliares. Usemos. ahora esta estructura de control para completar la solucin del problema de imprimir el mayor de dos nmeros. Completando con el cdigo C queda as: ***************************************** Programa para encontrar el mayor de dos nmeros ledos por pantalla ****************************************** #include <stdio.h> int main(void){ int numerol, numero2; printf( "Teclee el primer nmero); scanf( "%d", &numerol ); printf( "Teclee el segundo nmero); scanf( "%d", &numero2 ); if (numerol > numero2) { printf( "El nmero mayores el primero %d\n", numerol); } else{ printf ( "El nmero mayor es el.segundo %d\n", numero2) } return 0; } Como podemos ver, independientemente de cual de los dos conjuntos de instrucciones se ejecuta, despus de ejecutar el if - else, la postcondicin es vlida.

if de condicin simple En algunos casos, las condiciones de control no representan casos excluyentes de la forma if - else, sino manejo de condiciones excepcionales. Ejemplo: Supongamos que un profesor desea calcular la nota definitiva de un estudiante, con base en tres notas de igual porcentaje. El profesor, por decisin propia defini que si el estudiante tena ms de 4.5 en la definitiva, la nota seria cinco (5.O) y de lo contrario quedara igual. CONSTANTES: NOTA 4.5 DEFINITIVA 5.0 VARIABLES: ENTRADA: IDENTIFICADOR TIPO notal Real nota2 Real nota3 Real SALIDA: IDENTIFICADOR Tipo Definitiva real Con la siguiente especificacin: Pre: Se leen tres notas entre 0.0 y 5.0 Post: Se calcula la definitiva, redondeando a 5.0 cuando tiene ms de 4.5) El plan de solucin es: 1 .Lea las tres notas 2.Calcule la definitiva

3.Si tiene ms de 4.5 entonces modifiquela a cinco (5.0) 4.Imprima la definitiva Como podemos ver, el if que se genera en el plan no tiene else. Este tipo de construccin la vamos a llamar if para manejo de excepciones y se codifica en de la siguiente forma: i f ( condicion){ instruccionl; ... instruccin n; } Ahora, continuemos resolviendo el problema y completmoslo con cdigo C. ******************************************** Programa para calcular una nota definitiva con base en tres notas equivalentes y redondeando por encima de 4.5 a 5.0 ********************************************** #include <stdio.h> #define #define int main (void) { float notal, nota2, nota3; float definitiva; printf( "indique la primera nota); scanf( "%f, &notal); printf( "Indique la segunda nota); scanf( "%f', &nota2); printf( "Indique la tercera nota): scanf( "%f, &nota3); definitiva = ( nota 1 + nota2 + nota3 ) / 3.0; NOTA 4.5 DEFINITIVA 5.0

if (definitiva > NOTA) { definitiva =DEFINITIVA; printf( "La nota definitiva es %l.lf \n", definitiva); } return 0; Condiciones excluyentes mltiples Existe otro tipo de problemas tpicos que se resuelven con if. Este tipo de problemas consiste en la definicin de varias condiciones excluyentes, (no necesariamente dos condiciones). Este tipo de problemas se resuelve con el encadenamiento de varios if -else en una estructura que llamaremos cascada. Ejemplo: Consideremos el problema anterior de redondeo de notas pero extendindolo a todas las notas de acuerdo a un esquema definido por el profesor de la siguiente forma: La nota de 1.5 para los que en definitiva obtengan hasta 1.5 La nota de 2.5 para los que en definitiva obtengan entre 1.51 y 2.5 La nota de 3.5 para los que en definitiva obtengan entre 2.51 y 3.5 La nota de 4.5 para los que en definitiva obtengan entre 3.51 y 4.5 La nota de 5.0 para los que en definitiva obtengan ms de 4.5 El modelo de datos del problema es parecido al del ejemplo

Anterior, realizado una vez el modelaje y la especificacin el plan de solucin es:

1 . Lea las tres notas 2. Calcule la definitiva 3. Si tiene hasta 1.5 entonces modifquela por (1.5) 4. Sino, Si tiene hasta 2. 5 entonces modifquela por (2.5) 5. Sino, Si tiene hasta 3..5 entonces modifiquela.por (3.5) 6. Sino, Si tiene hasta 4.5 entonces modifquela por (4.5) 7. Sino, Si tiene ms de 4.5 entonces modifquela por (5.0) 8. Imprima la definitiva Como podemos ver, la secuencia de if - else - if - else que se genera da la sensacin de una cascada, la cual se expresa en C de la siguiente forma: if (condicion){ instrucciones; } else if ( condicion2){ instrucciones; } else if ( condicion3){ instrucciones; } else{ instrucciones; }

A continuacin, veamos la solucin en lenguaje C del problema: *************************************************** Programa que calcula la definitiva de un estudiante y la redondea de acuerdo a la especificacin dada por el profesor a 1.5, 2.5, 3.5, 4.5 y 5. O. *************************************************** #include <stdio.h> int main (void) { float notal, nota2, nota3; float definitiva; printf("indique la primera nota): scanf("%f, &notal); printf("indique la segunda nota): scanf("%f, &nota2); printf("Indique la tercera nota): scanf("%f, &nota3); definitiva = ( notal + nota2 + nota3 ) / 3.0; if ( (definitiva <= 1.5){ definitiva = 1.5; } else if (definitiva<= 2.5 ) { definitiva = 2.5; } else if ( definitiva <= 3.5){ definitiva = 3.5; } else if ( definitiva <= 4.5 ) { definitiva = 4.5; } else

definitiva = 5.0; printf( "La definitiva de estudiante es %l.lf \n", definitiva); return 0; } Switch En general, todos los problemas condicionales se pueden resolver usando la estructura if -else; sin embargo, el lenguaje C provee una estructura adicional para el manejo de problemas de seleccin. Esta estructura se conoce como switch. Observemos el siguiente problema: Se desea proveer un programa que dados dos nmeros y una operacin, se ejecute la operacin con los dos nmeros. Por ejemplo: 5 6 + entonces se ejecuta la operacin 5 + 6

las operaciones que se desean realizar son las bsicas de los enteros: *.-.+./. Modelando este problema obtenemos que: CONSTANTES: SUMA + RESTA - DIVISION / MULTIPLICACION * Definiendo las variables tenemos que el plan de solucin es el siguiente:

1. 2. 3.

Leer los datos de entrada (nmeros y operacin) Si la operacin es'+'entonces suma los dos nmeros Si la operacin es'-'entonces resta los dos nmeros

4. Si la operacin es'*' entonces multiplica los dos nmeros 5. Si la operacin es'/'entonces: si el nmero dos es diferente de cero entonces divide los dos nmeros sino, avisa un error de operando 6. Si la operacin no es ninguna de estas entonces avisa error de operacin. A continuacin veamos cul es la sintxis y semntica de la estructura switch: switch ( expreson) case valorl: instrucciones; break; case valor2: case valor3: case valor M: instrucciones; break; case valor n: instrucciones;

break; default: instrucciones; break; } la semntica de ejecucin es la siguiente: Se evala la expresin Compara en cada case contra cada uno de los valores Ejecuta el primer bloque para el cual el valor coincide con el resultado de la expresin En caso de no encontrar un valor asociado ejecuta las instrucciones de la opcin default La opcin default no es obligatoria, en caso de no existir y no coincidir el resultado de la expresin con ningn valor, no se ejecuta ningn bloque de instrucciones. En caso algn valor se ejecuta dentro del brake. de que el resultado de la expresin coincida con de case valor2:, case valor3:, hasta case valor n:, el mismo bloque de instrucciones que vienen correspondiente case hasta que encuentre un

Luego de ejecutar el conjunto de instrucciones asociado al valor del resultado de la expresin, se ejecuta la primera instruccin fuera del switch.

********************** #include <stdio.h> #define #define #define #define SUMA + RESTA - MULTIPLICACION * DIVISION /

int main (void) { int numerol, numero2; char operacion; printf("Escriba la operacin): scanf ("%c", &operacion); printf ("Escriba el primer nmero): scanf("%d", &numerol); printf("Escriba el segundo nmero): scanf("%d", &numero2); switch ( operacion ) { case SUMA: printf( "La suma es %d \n", numerol + numero2); break; case RESTA: prntf( "La resta es %d \n", numerol - numero2); break; case MULTIPLICACION: printf( "La multiplicacin es %d \n", numerol * numero2 break); case DIVISION:

if

(numero2 != 0){

printf( "La divisin es %d \n", numerol 1/numero2); } else{ printf( "Error: el denominador debe ser diferente de cero \n"); } break, default: printf( "Error: operacin invlida \n"); } return 0; } Ejercicios Haga un programa que: 1.lea un entero y diga: Si es positivo, negativo o cero Si es par o impar 2.lea dos nmeros y diga si el primero es mltiplo del segundo. 3.Lea tres valores enteros y los ordene: De mayor a menor De menor a mayor 4.Lea dos valores reales (x,y) y diga en que cuadrante del espacio cartesiano est 5.Una empresa de prstamos decidi cambiar su esquema de cobros as: Si el prstamo es de ms de 5000, cobra en tres cuotas

Si el prstamo es de menos de 1 000, cobra en una cuota Si el prstamo es entre 2000 y 3000 cobra en dos cuotas En los dems casos cobra en cinco cuotas Adicionalmente, si es de menos de 4000 cobra 12% de inters, en caso contrario cobra 10 % de inters. El programa debe decir en cuantas cuotas debe pagar y de cuanto es cada cuota (calcule el valor total de la deuda con inters y divdalo en cuotas iguales). 6. Dada la fecha de hoy, calcular la fecha del da siguiente. (Suponga que el ,ao no es bisiesto). 7. Lea un caracter y diga: Si es alfabtico, numrico u otro Si es alfabtco diga si es mayscula o minscula Si es alfabtico diga si es vocal o consonante Si es otro diga si es un signo de puntuacin 8.- Lea un caracter alfabtico y diga: Si es minscula, su equivalente en mayscula Si es mayscula, su equivalente en minscula 9.- Lea un entero de un digito y diga la letra (mayscula y minscula,), correspondiente a ese dgito, suponiendo que el nmero 0 corresponde ala letra 'A' - 'a'. 10.- Validar que dada una fecha, esta sea correcta. Para que una fecha sea correcta es necesario: El ao debe ser mayor que cero. El mes debe estar entre 1 y 12.

Dependiendo de mes que sea, el da debe estar dentro de los lmites vlidos. 11.- Leer un nmero entero X y: a) b) c) Decir si es positivo o negativo Decir si es par o impar Leer otro nmero Y y decir si X es mkipio de Y

12.- Una balanza se encuentra en equilibrio cuando el producto de la carga aplicado sobre el brazo derecho de la longitud de este brazo, es igual al producto de la carga aplicado sobre el brazo izquierdo por la longitud de este otro brazo. Escriba un programa que lea la longitud de cada brazo de la balanza y la carga aplicada a cada uno, e indique si la balanza est en equilibrio. Si la balanza no est en equilibrio, el programa debe indicar adems, de qu lado debe ponerse carga adicional y cunta carga adicional se requiere. 13.- Dados tres puntos con coordenadas (x,y) reales, diga si los tres punto 5 estn sobre una lnea recta. El programa no debe abortar por dividir por cero. 14.- Dados tres puntos en coordenadas (x,y) reales, diga si los tres forman un tringulo y si lo forman, calcule el permetro de tringulo. El programa no debe abortar por dividir por cero. 15.-Dada una fecha y un nmero de das, calcular la fecha del da equivalente. (Suponga que el ao no es bisiesto). 16.Un colombiano que vive en San Francisco decidi poner un peaje en un puente de all. Este peaje depende del tipo de vehculo (camin o automvil) que desee cruzar, del nmero

de pasajeros que lleve y de la hora del da: en las horas pico los automviles con tres pasajeros o ms no pagan peaje, los camiones pagan $50; en las horas menos congestionadas el peaje para los automviles es de $25 y para los camiones es de $30 independiente del nmero de pasajeros. Escriba un programa que leyendo el tipo de vehculo, si la hora es pico o no y el nmero de pasajeros ayude al seor a calcular la tarifa que le debe cobrar a un vehculo. 17.En una sala de cine muy conocida de Bogot, desean hacer uso de la tecnologa para el manejo de la boletera. Para esto, le cuentan a usted los siguientes datos al respecto del costo de las boletas: Primera clase, costo igual a $5.500 si es de lunes a jueves Segunda clase, costo igual a $2.500 si es de lunes a jueves o Si es un viernes, sbado o domingo, el costo es de $1.500 sin importar la clase Si es estudiante y el da es un mircoles o un jueves le hacen un descuento de $500 Con todo esto, hay que decirle a una persona en cunto le sale el costo de su boleta. 18. Jos Javier realiza muchas llamadas a un pas lejano y la ltima vez no le alcanzaron los ahorros para pagarlas, por lo que le toc pedir prestado a un amigo (menos mal ya le pudo devolver la deuda). Como no quiere que este mes lo coja desprevenido, quiere que usted le haga un programa que le diga en cunto le sale una llamada para l poder ir ahorrando. El le cuenta lo siguiente:

- Si la duracin de la llamada es de menos o igual de tres (3) minutos su costo es de $5.500 y por cada minuto extra debe pagar $1.380. - Usando el discado directo internacional se hacen unos descuentos: 40% si la llamada se realiza (comienza) de lunes a sbado de 0:00 ama 6:00 am. 30% si la llamada se realiza (comienza) de lunes a sbado de 6:01 ama 9:00 am. 35% si la llamada se realiza (comienza) un domingo (no importa la hora). Usted, debe leer el da, la hora (est es el rango de 0 a 23) y la cantidad de minutos (los minutos son en cifra cerrada, no hay segundos) que dur la llamada y calcular cunto le cuesta la llamada. 19.- El alcalde del pueblo "Derecho a ser feliz" encontr que su gente slo comete 3 tipos de infracciones: 1 - Robar gallinas 2. Ser infiel 3. No ir a las votaciones La penitencia que coloca es: Por robar gallinas: 2 das de picar piedra 1 da de crcel Por ser infiel: 3 das de picar piedra 2 das de crcel Por no ir a las votaciones: 3 das de picar piedra 4 das de crcel

Cada persona slo confiesa 1 o mximo 2 infracciones. Hay que leer la infraccin y decir la penitencia que debe cumplir. 20. Para la construccion de un metro se van a usa vagones con capacidad de 20 personas. Se desea hacer un presupuesto de lo que va a entrar en dinero por vagn as que se entrevista a 20 personas para poder saber lo que se ganar. El costo base es $2.000

Si es menor de 1 5 aos Descuento del 50% Si est entre 15 y 20 aos y no trabaja Descuento del 40% Si es menor de 20 aos pero trabaja Descuento del 30% Si est entre 20 y 50 aos No hay descuento Si es de menos de 50 aos y no trabaja Si es de ms de 50 aos Descuento del 10% Si es mujer embarazada o es un invlido Descuento del 20% Haga un programa que diga, dadas las caractersticas de esas 20 personas, cunto cobrara en total por ese vagn. 21.- Dados cuatro puntos en coordenadas (x,y) reales, diga si los cuatro puntos forman un cuadrado. Suponga que los

puntos son dados en orden. El programa no debe abortar por dividir por cero. 22.- En una agencia de viajes lo contrataron para decirle a cada cliente en cunto le sale su pasaje de acuerdo a unas polticas: - Si el pasajero es menor de edad, se le hace un descuento del 10% Si es estudiante se le hace un descuento del 15% Si es fumador, se le cobra un inters del 30% Si es mayor de 60 aos, se le hace un descuento del 20%

- Si no es fumador y es estudiante menor de edad se le hace un descuento adicional del 12% Pidiendo todos los datos necesarios, dgale al pasajero en cunto le sale el pasaje. 23.- En la empresa transportadora "VIAJE SEGURO" se presentan muchos choques de sus vehculos por lo que decidieron afiliarse a un seguro. Despus de muchas conversaciones con la aseguradora "TRANQUILO", llegaron a ciertos acuerdos: Despus de ver las estadsticas, se dieron cuenta que los choques cumplen ciertas caracterstict, similares -por lo que los dividieron en -tres clases: 1 - El costo del arreglo es de hasta $500 2 - El costo del arreglo est entre $500 y $2.000 3 - El costo es mayor de $2.000

Para cada clase se decidi lo siguiente: Si es un choque del tipol, la empresa paga $100 y el resto lo debe pagar el conductor. Si el choque es del tipo 2, la empresa paga 500, la aseguradora el 80% del saldo y el conductor el resto. Y por ltimo, si el choque es del tipo 3, la empresa debe pagar 1 00, la aseguradora el 75% del saldo y el conductor debe pagar lo que falta en cinco cuotas, por ejemplo si el costo del arreglo es de 3100 para cada parte queda as!: EMPRESA ASEGURADORA 100 2250150 150 150 150 150 CONDUCTOR

Hay que realizar el programa para que dado un costo del arreglo, decir cunto debe pagar la empresa, la aseguradora y el conductor. 24.- El gobierno est buscando un nuevo Ministro de Hacienda y para esto, necesita un programa que le ayude con la evaluacin de los candidato, los que les va asignando unos puntajes de acuerdo con las siguientes reglas: Si tiene una experiencia de menos de diez aos le da 3 puntos S la experiencia es de ms o igual a 10 aos y menor o igual a 20 aos le da un puntaje de 5 Si la experiencia es de ms de 20 aos le da un puntaje de 7

Si la edad es de ms de 30 aos y tiene ms de 10 aos de experiencia se le suma un punto Si es de 30 o menos aos y tiene 10 aos o menos de experiencia, se resta un punto Si es del partido poltico A le suma un punto y si es del B le resta un punto Si es de la universidad Vieja le resta dos puntos, si es de la Media ni le quita ni le pone y si es de la Nueva le suma dos puntos Si tiene un ttulo internacional le suma dos puntos Solicitando toda la informacin importante del candidato, decir cuntos puntos obtiene de acuerdo a las reglas anteriores. Instrucciones repetitivas En general, los problemas complejos exigen diferentes tipos de soluciones. Algunas, basadas en control del flujo de ejecucin por medio de condiciones, tal y como vimos en el captulo anterior y otras, basadas en operaciones que se repiten un determinado nmero de veces hasta llegar a una conclusin. Este tipo de soluciones, se conocen como soluciones basadas en mtodos iterativos. En este captulo veremos las estructuras de control en C que nos permiten implementar mtodos iterativos como solucin de problemas. Introduccin En la vida diaria, encontramos continuamente problemas que solucionamos usando un esquema de repeticin mientras que se cumple una condicin.

Ejemplo: Pensemos en el problema de comprar una lista de mercado Las instrucciones que nos dan son: Mientras haya cosas por comprar haga: - Compre el primero de la lista sin tachar - Tchelo y vuelva a verificar la condicin Arroz Pan Leche Caf Azucar Jabon Sal Te Si seguimos el proceso de ejecucin del programa tenemos que la primera vez: compr el arroz y se repite la ejecucin a partir de siguiente estado de la lista: Mientras haya cosas por comprar haga-. Compre el primero de la lista sin tachar tchelo y vuelva a verificar la condicin En este caso, vemos cmo se repite la ejecucin de las instrucciones. El problema est en que la lista no necesariamente es de ocho, puede tener ms o puede tener menos. Es ms, puede ser que no se conozca el tamao de lista porque la pueden estar dictando desde otra parte. Para evitar esta repeticin tediosa de instrucciones y para poder tener problemas con nmero de repeticiones variables,

se crearon las estructuras repetitivas que veremos en detalle ms adelante.

Conceptos bsicos Durante todo el proceso de hacer el mercado a partir de la lista Vemos como el conjunto de instrucciones no cambia, lo que Cambia es el primero de la lista del mercado, que va variando a Medida que se ejecuta el conjunto de instrucciones. Podemos Hacer un equivalente de la siguiente forma: El conjunto de instrucciones del mercado es equivalente al conjunto de instrucciones de un programa La lista es equivalente a las variables que manipulamos con unas instrucciones El problema consiste en determinar las variables y las instrucciones necesarias para armar el ciclo. Ejemplo. Suponga el problema de sumar los n primeros nmeros enteros: 1+ 2 + 3 + 4 + +n

Planteemos un plan de solucin para este problema: 1. Leer el nmero de trminos a sumar (n) 2. inicializar suma con cero para calcular el total de la suma suma 0) 3. Hacer suma 0 + 1 4. Hacer suma 0 + 1 + 2 k+2. Hacer suma = 0 + 1 + 2 + 3 + +k + n-1 + n

n+2. Hacer suma = 0 + 1+ 2 + 3 ++ k + n+3. Imprimir la respuesta

El problema est a partir del numeral tres. Para poder desarrollar los siguientes numerales, sera necesario conocer exactamente el valor n para el cual se quiere calcular la suma antes de hacer el programa. Ahora bien, analicemos ms detalladamente el numeral 3.: El valor de suma al final debe ser suma = 0 + 1 El valor de suma antes de ejecutar el numeral 3. Es 0 En el numeral 3. Hacemos la operacin suma = 0 + 1 Teniendo en cuenta que suma es igual a cero, es lo mismo que escribir suma = suma + 1 Igual raciocinio podemos hacer con el punto 4. a partir del 3.: El valor de suma al final debe ser suma = 0 + 1 + 2 El valor de suma al final de numeral 3. es 0 + 1 Es equivalente escribir: suma suma + 2

Extendiendo el raciocinio hasta el paso k+2. Obtenemos lo siguiente: El valor de suma al final debe ser suma = 0 + 1 + 2 + ... + k-l + k El valor de suma al final de numeral k+l. es 0 + 1 + 2 + + k-l Es equivalente escribir: suma = sunna + k En el momento en que k tome el valor n, hemos calculado toda la sumatoria. Ahora bien, si expresramos eso con una secuencia de instrucciones, obtendramos lo siguiente: suma = 0; suma = suma + 1; suma = suma + 2; suma = suma + 3; suma = suma + k; suma = suma + n; En cuyo caso, tambin es necesario conocer de antemano el valor de n para poder escribir todas las operaciones necesarias para calcular la suma. A continuacin veremos cmo, a partir de esta solucin del problema, generalizamos este tipo de problemas a travs de una de las estructuras de control repetitivas que conocemos, como es el while. Estructura while La solucin anterior al problema, la podemos modificar sin afectarla en su desempeo, de la siguiente forma:

Declarar un contador (que cumple la funcin de la k) lnicializarlo en 1 lncrementarlo de uno en uno hasta que tenga el valor de n Usarlo con cada valor para calcular la suma El conjunto de instrucciones suma = 0; contador = 1; suma = suma + contador; contador++; suma = suma + contador; contador++; suma = suma + contador; contador++; suma = suma + contador; Como podemos ver, contador hace que el valor sumado vaya cambiando desde hasta n, dado que se repite n veces. Ahora pensemos en cmo hacer para que el valor de n pueda ser variable y el nmero de repeticiones sea dependiente de este valor. En general, lo que necesitamos es que las instrucciones: suma = suma + contador; contador++; nos queda de la siguiente forma:

Se ejecuten mientras que el valor del contador sea menor o igual a n. Planteando el problema de la suma utilizando esta estructura, obtenemos lo siguiente: Mientras que el contador sea menor o igual a n haga: - suma = suma + contador - contador++ Este es, en general, el esquema para plantear la solucin de un problema usando el mtodo de repeticin. Para expresar esta solucin en trminos del lenguaje C, usamos la estructura de control while, que tiene la siguiente sintaxis: while (condicin){ instruccinl; instruccin2; instruccinn; } Donde las instrucciones pueden ser de cualquier tipo (asignaciones, llamar funciones de C, llamados a funciones del usuario, condicionales, rep, etc). En general, al igual que en el if - else, el while se puede andar unc de otro, tanto como quiera el programador, pero, lo normal y correcto es no tener ms de cuatro niveles de anidamiento. Resolviendo el ejemplo completo obtenemos:

******************************************** Programa que calcula la suma de los n primeros enteros positivos ******************************************** #include <stdio.h> int main (void) { int n,suma, contador;

printf( "Escriba el nmero de trminos que desea leer): scanf( "%d", &n); suma = 0; contador = 1; while ( contador <= n){ suma = suma + contador; contador++; } printf( "La suma de los %d primeros enteros es %d \n", n, suma); return 0; } Otras estructuras repetitivas Existen en el lenguaje de programacin C, otras dos estructuras repetitivas, equivalentes al while, creadas para ofrecer al usuario la facilidad de resolver determinados tipos de problemas con instrucciones cuya semntica (significado), se acople mejor a la solucin del problema. Por ejemplo: no es lo mismo resolver un problema donde sabemos que tenemos que repetir un ciclo n veces, que el problema de encontrar si un nmero es primo o no. En general, en el primer caso tenemos una condicin sometida a un proceso de conteo y en el segundo tenemos un proceso de centinela con certeza. Por estas razones, el lenguaje de programacin C ofrece las siguientes estructuras:

Estructura for La estructura for pretende ofrecer al usuario una herramienta para solucionar problemas de conteos. Vamos a ver que la estructura del while y la estructura del for tienen los mismos componentes y funcionan de la misma forma. La estructura del while tiene la siguiente sintaxis: < inicializacin > while ( < condicin >){ instruccinl; instruccin2; instruccin n; < incremento >; } Mientras la estructura del for es la siguiente: for ( < incializacin >; < condicin >; < incremento >){ instruccionl; instruccion2; instruccionn; } donde las instrucciones pueden ser de cualquier tipo, bsicas, condicionales, repetitivas, etc; en particular pueden ser estructuras for anidadas. La semntica de la estructura for es la siguiente:

< inicializacin >: es la instruccin o instrucciones, separadas por comas, que se deben ejecutar ANTES de entrar al ciclo, corresponde exactamente a la <inicializacin > del while. < condicin >: es la condicin que se debe cumplir antes de ejecutar el ciclo una vez, corresponde exactamente a la < condicin > del while. < incremento >: es la instruccin o instrucciones, separadas por comas, que se ejecutan justo despus de ejecutar las instrucciones del ciclo y antes de reevaluar la condicin nuevamente, corresponde exactamente al < incremento > del while. Ejemplo: suponga el problema de calcular la suma de los n primeros nmeros enteros positivos.Sabemos que la solucin del problema usando while es: suma = 0; contador = 1; while ( contador <= n ){ suma +=contador; contador++; } Expresando esta solucin usando estructura for tenemos: suma = 0; for (contador = 1; contador <= n; contador++){ Suma += contador; }

Ejercicios Realice el modelaje, la especificacin y el programa de los siguientes problemas: 1.2.Imprimir los diez primeros nmeros pares. Haga un programa que escriba su nombre n veces

3.- Desarrolle un programa que imprima los primeros n valores de la secuencia: 4.- Explique qu resultado produce el siguiente programa. (Su explicacin debe ser comprensible para una persona no familiarizada ni con la programacin, ni con las matemticas). #include <stdio.h> int main(void) { int i, x = 1, y = 1, z; printf("%dln", x); printf("%dln", y); i = 2; while (i != 1 00){ Z=X+ y; printf("%dln", z); X = y; Y=z; j++; } } 5. Calcular el promedio de un curso cuya cantidad de estudiantes tambin debe ser leda. 6. Calcular e imprimir el factorial de 1 al 5.

7. Contar los dgitos de un nmero dado. 8. Encontrar el mayor y el menor de N nmeros enteros. 9. En un curso de numalumnos estudiantes, se desea conocer cul es el promedio de edades y cuntos hombres y mujeres hay. 10.- Para las votaciones, la registradura requiere un sistema de conteo automtico basado en las siguientes caractersticas: Se realizan 5 rondas Son dos candidatos En cada ronda se debe leer la cantidad de votos para cada candidato y cuntos en blanco Al final se debe decir quin es el ganador y la votacin de cada candidato. Se informa adicionalmente la votacin en blanco obtenida 11.En la poblacin de la isla de Taporu estn muy preocupados debido a que tienen que convivir con conejos y stos se reproducen rpidamente. Los conejos se reproducen segn una frmula: Poblacin conejos (maana) = Poblacin (hoy) + Poblacin (ayer) Ellos se reunieron en concejo y tomaron la decisin que cuando dicha poblacin sobrepase los 70000 van a enviar 40000 conejos a la isla vecina. Ellos quieren saber, dada la poblacin de ayer y de hoy, en cunto tiempo tendrn que realizar la exportacin de conejos. 12.- En una lejana isla quieren hacer el estudio de cmo ser el comportamiento de nacimientos. Se tiene un nmero inicial de mujeres y de hombres y la reproduccin se lleva a cabo mientras

exista menos de 80.000 humanos o el nmero de mujeres sea menos de 65.000. Cada ao, la reproduccin tiene un comportamiento: si el nmero de hombres es mayor al nmero de mujeres, la poblacin de hombres aumenta un 10% y la poblacin de mujeres el 15%, de lo contrario, las mujeres aumentan en un 10% y los hombres en un 13%. Decir en cuntos aos se llega a que haya ms de 80.000 humanos o el nmero de mujeres sea mayor a 65.000. 13. Un vendedor desea calcular sus ganancias durante el mes. El sabe que los productos que tienen un valor estrictamente menor a $25000 le dan una ganancia del 10%, los que estn entre $25000 y $50000 le dan una ganancia del 38%, los que son mayores o iguales a $50000 y estrictamente menor que $75000 le dan una ganancia de 32% y los mayores o iguales a $75000 le dan una ganancia del 18%. Pidiendo los datos necesarios, calcule la ganancia del vendedor durante el mes. 14. Debido a tantos problemas que se presentan con los equipos de ftbol se solicit hacer un programa con el fin de que para los siguientes 15 partidos de un equipo se pida cuntos fueron los expulsados de cada uno de stos y cunto es la multa, para que al final diga cunto es el total de la multa que tienen que pagar y cuntos fueron todos los expulsados que, si pasan de 15, se le incremento un 10% al total de la multa. 15. Dado un nmero y una cantidad de dgitos, decir si el nmero contiene los mismos dgitos Ejemplo: nmero = 5555 digitos = 4

Debe imprimir: SI SON LOS MISMOS DIGITS 16.En una compaa de prstamos hacen el prstamo y dejan al cliente que decida en cuntas cuotas pagarlo y le da adems la libertad de que pague lo que pueda en cada cuota. Leyendo lo necesario, debe decir al finalizar: - Si ya termin, en cuntas cuotas pag. - Si no ha terminado, cunto es el saldo Ejemplo: Prstamo = 1 000 Cuotas = 5 CUOTA PAGO 1 100 2 300 3 400 4 200 TERMINO DE PAGAR EN 4 CUOTAS. 17 Dado un nmero entero n: Calcule n! *Determine si n es un nmero factorial ( n = k! para algn k positivo) 18 Realizar la suma de los dgitos de un entero. 19 Hay que leer un nmero, de cualquier longitud menor o igual a cinco, y decir cmo queda invertido. Por ejemplo: Nmero 38985 Invertido 58983 20. Jaime va a comprar un carro financiado. Debe pagar el 30% de cuota inicial y el 70% restante lo debe pagar en 24 cuotas

mensuales. A cada cuota mensual se le agrega un 32% de inters sobre el saldo. Sabiendo el costo del carro diga: Cul es la cuota inicial Cules son las 24 cuotas restantes En cunto le sale el prstamo 21. Hay que leer un xl, un x2 y n nmeros enteros y decir cuntos de esos nmeros son menores o iguales a xl, cuntos son mayores o iguales a x2 cuntos estn entre xl y x2. 22. Dado un entero no negativo n calcule en la variable sumdig la suma de sus dgitos y en la variable proDig3 el producto de sus dgitos mltiples de 3. Ejemplo, si n es igual a 3459 en sumdig se obtiene 21 y en proDig3 27. (Si no encuentra dgitos mftiplos de 3 se deja en proDig3 el valor de l). a) b) Encontrar el mnimo comn multiplo de dos nmeros. Encontrar el mximo comn divisor de dos nmeros.

23. En la isla del Edn vive una gran cantidad de hormigas que se reproducen a una tasa del 40% mensual; en la isla existe adems un oso hormiguero que se come 7000 hormigas al final de cada mes (o todas las hormigas que hay si la poblacin de hormigas en ese momento es inferior a esa cifra). Cuando la poblacin de hormigas sobrepasa el mximo de 28.000, comienza a haber problemas de alimentacin lo que hace que se reduzca la tasa de crecimiento al 31% mensual. Debe recibir como entrada el nmero de hormigas que hay en un momento dado en la isla y un nmero x y calcular la poblacin de hormigas despus de esos x meses.

Bibliografa

Conceptos de Programacin Maria Paula Diaz Jorge Elas Morales C How to Program Addison Wesley Iberoamericana Curso de programacin C++ - Programacin orientada a objetos Francisco Ceballos Adison Wesley Iberoamericana

Potrebbero piacerti anche