programacion basica

95
INTRODUCCION Históricamente, los lenguajes de programación 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 generación, 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 características que se describen más adelante. Hace muchos años, se vio la necesidad de un lenguaje que sirviera para escribir programas que pudieran funcionar sobre maquinas de diferentes tamaños o propósitos, con el objetivo de poder realizar algoritmos portables de tal forma que un usario final pudiera cambiar de marca y plataforma de trabajo según 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 máquina. 1

Transcript of programacion basica

Page 1: programacion basica

INTRODUCCION

Históricamente, los lenguajes de programación 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 generación, 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 características que se describen más adelante.

Hace muchos años, se vio la necesidad de un lenguaje que sirviera para escribir programas que pudieran funcionar sobre maquinas de diferentes tamaños o propósitos, con el objetivo de poder realizar algoritmos portables de tal forma que un usario final pudiera cambiar de marca y plataforma de trabajo según 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 máquina.

El programa es el mismo para todas las maquinas, es el compilador el encargado de hacer la traducción del programa, de acuerdo con la máquina que tiene la versión usada por determinado computador de cada librería, así se logra que pueda ser ejecutado en distintas máquinas.

1

Page 2: programacion basica

DEFINICIÓN DE COMPUTADORA

Una computadora es una máquina electrónica que resuelve tareas relacionadas con el procesamiento de información, con una gran velocidad y precisión.

Se entiende por procesamiento de información el tratamiento que reciben los datos para producir nueva información. 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.

DEFINICIÓN 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 información.

CLASIFICACIÓN DE LOS COMPONENTES DE UN SISTEMA COMPUTACIONAL

Un sistema computacional consta de componentes físicos y lógicos. Los componentes físicos, o tangibles, conocidos como hardware, son los que realizan las tareas y entre ellos se encuentran los componentes eléctricos y electromagnéticos, así como sus interconexiones.

Los componentes lógicos o intangibles, conocidos como software, son los que indican al hardware qué hacer y cómo hacerlo.

2

Page 3: programacion basica

CLASIFICACIÓN DEL HARDWARE

La clasificación de los componentes considerados como hardware está apegada a los recursos que utiliza el hombre cuando resuelve alguna tarea de procesamiento de información.Los componentes se clasifican en:

A) DISPOSITIVOS DE ENTRADAB) DISPOSITIVOS DE SALIDAC) DISPOSITIVOS DE PROCESAMIENTOD) DISPOSITIVOS DE ALMACENAMIENTO PERMANENTE

Por ejemplo, si se pretende que una computadora realice la tarea de obtener el promedio de tres números cualesquiera, ésta debe tener medios para preguntar cuáles son esos tres números. También debe tener manera de efectuar la suma de éstos y la división entre 3. Asimismo, debe tener un medio de comunicación para mostrar el promedio que obtuvo.

Si este problema lo tratara de resolver un humano en vez de la computadora, tendría que hacer lo siguiente:

1) Pedir el primer número y anotarlo en algún lugar, para evitar olvidarlo.2) Pedir el segundo número y anotarlo.3) Pedir el tercer número y anotarlo.4) Efectuar la suma aritmética de estos tres números y anotar el resultado en algún lugar.5) Dividir el resultado anterior entre 3 y anotarlo en algún lugar.6) Mostrar el resultado anterior.

Quien hizo el proceso debió tener oídos para escuchar los tres números que se le dieron, papel y lápiz para retenerlos y ayudarse a obtener los resultados de la suma y de la división; tener cerebro para realizar estas operaciones, y voz para leer el resultado.

3

Page 4: programacion basica

Así pues, esta persona tuvo canales de comunicación para preguntar datos y emitir resultados, y medios de procesamiento para realizar sus operaciones. De un modo análogo, la computadora también tiene canales de comunicación para recibir y emitir datos, así como medios de procesamiento.

Vamos ahora a estudiar las partes de una computadora analizándola desde el punto de vista de la información que emite, recibe y procesa.

A) Dispositivos de entrada

Éstos son los componentes que le permiten a la computadora recibir información.El dispositivo más común que permite recibir información del exterior es el teclado, el cual permite que se introduzca información cuando se oprimen sus teclas.

Otro dispositivo común es el ratón o mouse el cual permite que se seleccione información para así darle órdenes a la computadora, deslizándose a través de la pantalla.

Alternativamente existen más dispositivos para que la recepción o entrada de datos se lleve a cabo; algunos de ellos son: el lápiz óptico, el scanner, etcétera.

B) Dispositivos de salida

Son los componentes que le permiten a la computadora mostrar al exterior la información.

El dispositivo más usado para exteriorizar la información procesada es el monitor o pantalla, el cual permite visualizar letras, números, símbolos especiales e imágenes.

4

Page 5: programacion basica

Otro dispositivo especialmente útil, pues permite obtener la información impresa, es la impresora.

C) Dispositivos de procesamiento

Son los componentes que permiten procesar información.Éstos son en sí el "cerebro" de la computadora. Hasta ahora, tanto los dispositivos de entrada como los de salida, no resultan ser más que dispositivos periféricos a la computadora, porque sólo le sirven para transmitir información de o hacia el exterior. Se compone de dos partes:

CPU (Central Procesing Unit: Unidad Central de Procesamiento). Es un circuito electrónico de la computadora capaz de realizar operaciones aritméticas y lógicas, así como coordinar todas las acciones de la computadora.

b) Memoria principal. Es un conjunto de circuitos electrónicos que permiten almacenar y recuperar datos en forma de señales eléctricas. Las acciones de almacenar y recuperar los datos son ejecutadas por el CPU; la memoria sólo es un lugar de almacén de datos; es temporal, porque los almacena sólo mientras esté presente la corriente eléctrica, pero es de muy rápido acceso pues la información viaja a manera de señales eléctricas.

D) Dispositivos de almacenamiento permanente

Estos componentes son conocidos como memoria secundaria, y permiten almacenar la información en forma permanente.

Debido a que la memoria principal es temporal, la información 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 eléctrica.

5

Page 6: programacion basica

La memoria secundaria es permanente debido a que la información es almacenada por medios electromagnéticos, 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 información que había sido almacenada previamente en memoria secundaria, está recibiendo información. Éstos mismos también son considerados como dispositivos de salida cuando el CPU manda la información 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 (dískette), la cinta y el disco óptico.

CLASIFICACIÓN DEL SOFTWARE

Se clasifica en:

A) Software de aplicaciónB) Software del sistema

A) Software de aplicaciónEs un software que tiene un propósito específico. Por ejemplo:

Software de contabilidadSoftware de nóminaSoftware de facturaciónSoftware de procesamiento de textos, etcétera.

B) Software del sistema

Es un software que ayuda en la creación, modificación y ejecución del software de aplicación. Ejemplos; Sistema operativo: es un software que establece la comunicación entre los componentes del hardware y el resto del software. Su

6

Page 7: programacion basica

función principal es administrar el funcionamiento del hardware según las órdenes dadas por algún 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 impresión, y durante ésta, continúa verificando su estado; si la impresora no está encendida envía un mensaje indicándolo. Si el sistema operativo no estuviera presente la comunicación entre el software de procesamiento de textos y la impresora no podría realizarse. Lo mismo ocurriría con cualquiera otra interacción entre hardware y software.

Lenguajes: es un software que proporciona un conjunto de vocablos y reglas, que se utilizarán para crear el software de aplicación.

A su vez, los lenguajes se clasifican en:

a) Bajo nivel: Utilizan vocablos directamente entendibles por el CPU de la computadora.Por ejemplo: Lenguaje máquina, 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 algún 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 acción, identifique todas las acciones que éste llevaría a cabo y que posteriormente instruya a la computadora para que sea ésta quien haga el trabajo del sujeto de acción.

7

Page 8: programacion basica

Ahora bien, por una parte, está el sujeto de acción en una situación a resolver; por otra, está el programador que debe pensar como el sujeto de acción y también programar la computadora; y por otra, la misma computadora que, ejecutando un programa, resolverá el problema en lugar del sujeto de acción.Es conveniente definir ahora la inter-relación de estos elementos.

Un programador debe tener tres características esenciales:

1) Ser capaz de analizar un problema hasta entenderlo a la perfección.2) Saber enumerar una serie de pasos por medio de los cuales se va a llegar a la solución del problema, tomando en consideración las capacidades de la computadora.3) Conocer un lenguaje de computación adecuado a la solución del problema.

Metodología para la solución de problemas

La práctica debe hacerse mediante una serie de pasos, llamados metodología para la solución de problemas por medio de la computadora, los cuales se enumeran a continuación:

1) Definición del problema2) Planeación de la solución3) Algoritmo4) Codificación y edición del programa5) Pruebas y depuración

1) DEFINICIÓN DEL PROBLEMA

La definición del problema se centra en la elaboración de un texto que nos permitirá saber qué es lo que se pretende

8

Page 9: programacion basica

solucionar, y nos proporcionará información útil para el planteamiento de la solución.

2) PLANEACIÓN DE LA SOLUCIÓN

En este paso se debe entender por completo el problema, y dejar en claro cuál es la información útil que se nos da, qué otra nos hace falta y, con base en esto, determinar la mejor solución. Si nos hiciera falta información, en esta fase del problema se podría determinar que el problema no tiene solución.

En esta fase también definimos formalmente lo que debemos entregar como resultado. Dado que esta información, una vez resuelto el problema, saldrá de la computadora, podemos decir que es una salida de información. De igual manera, la información adicional que necesitemos pedir, constituye una entrada de información 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 reflexión previa del problema dada por el paso anterior (planeación de la solución). Además, se podrá observar que aunque en el paso anterior ya supimos qué fórmula aplicar para obtener la solución al problema del terreno, nada nos dice qué hacer antes y después de aplicar la fórmula.

4) CODIFICACIÓN Y EDICIÓN DEL PROGRAMA

La codificación consiste en traducir el algoritmo solución a instrucciones de un lenguaje de computadora, en nuestro caso C.

9

Page 10: programacion basica

Al conjunto de instrucciones escritas en un lenguaje de computadora se le llama programa.

La edición consiste en introducir el programa a la computadora por medio de un editor de textos.

Debe cuidarse el aspecto de la sintaxis en la codificación de un programa, ya que las instrucciones deben tener un orden en la secuencia de las palabras y símbolos que las componen.

6) PRUEBAS Y DEPURACIÓN

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 solución para cotejarlo con la solución que obtenga la computadora,

Si el programa tiene errores sintácticos éstos pueden corregirse simplemente consultando un libro de instrucciones del lenguaje. No así si el problema es de lógica, en cuyo caso debe revisarse y corregirse desde el algoritmo.

Modelaje y especificación

En este capítulo, se va a aprender la manera de enfrentar los problemas que se pueden presentar en el mundo real y que se quieren resolver a través de un modelo computacional.

1.1. Conceptos Básicos

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

10

Situación inicialSituación Final

Page 11: programacion basica

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 dónde inicia y dónde finaliza.

No siempre se pueden encontrar todos los elementos involucrados en esas situaciones, lo que significa que no es un problema bien definido.

11

Page 12: programacion basica

Ejemplo:el clima que habrá dentro de un mesno 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 más cercano y comprar la lecheSabemos 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 términos de datos y las condiciones que deben cumplir. Mostrándolo de una manera más formal quedaría.

Al inicio (se definen condiciones de entrada):

Dinero suficiente D.

Costo de la leche 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, pérdida del dinero, etc. no se toman en cuenta) y por lo tanto es un problema bien definido.Ya teniendo enmarcado de dónde se sale (Entrada) y a dónde se debe llegar (Salida), lo que falta es tratar de encontrar una solución que nos lleve de un. punto a otro, un algoritmo.

1.2. Algoritmo

12

Page 13: programacion basica

Un algoritmo se define como una sucesión 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 Salida

Fig. 1.2 - Componentes de un Programa.

1.3. ModelajeEl 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 cuáles son los datos de entrada de¡ problema. Es decir, los elementos necesarios para construir la solución.

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 día siguiente conociendo la fecha actual.

2.- Un profesor de matemáticas desea saber el perímetro de un triángulo.

3.- Carlos Parra se quiere comprar un carro y al ir a averiguar precios, queda convencido que debe hacerlo con financiación. Después de mucho investigar, encontró un préstamo que funciona asi:

13

Algoritmo

Page 14: programacion basica

La cuota inicial es del 40% y el 60% restante debe pagarse en 24 cuotas mensuales. Cada cuota tiene un interés del 18% sobre el saldo. Teniendo el costo del carro, Carlos desea saber en cuánto 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 características, dependientes del problema:

Estas

DATOS DE ENTRADA: detallaEstos son los datos que me indican los parámetros o exigencias del problema, deben estar definidos para poder empezar a elaborar el algoritmo.

DATOS DE SALIDA: detallaSon los datos que obtenemos como resultado de seguir paso a paso el algoritmo solución, los datos de salida deben ser la solución esperada por el usuario.Como podemos ver los datos tienen características que los definen claramente, estas características nos permiten expresar el modelo de una forma más detallada y precisa. En particular, en el lenguaje de programación C, las características de los datos están agrupadas en tipo, clase, identificador y valor.1.3.2.l. Características de los datos

l.- ldentíficador: es el nombre con el que representamos los diferentes tipos de datos. Este varía 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 sólo mayúsculas. Por ejemplo, Pl es el nombre que se le da al valor de 3.1416Pl 3.1416

14

Page 15: programacion basica

Para la otra clase de datos, las variables, sus identificadores son una serie de caracteres que consisten de letras y dígitos que no comienzan en dígito. Puede tener cualquier longitud. Ejemplo de posibles identificadores de variables:

Objeto a identificar ldentificadorMayor nota en el curso. mayornotaHora de salida de un vuelo. horasalidaNotas del año 2004. notas2004

Como se puede observar en el ejemplo, los identificadores deben ser nombres que lleven implícito el significado de lo que están 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 diferenciación entre minúsculas y mayúsculas.

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 MINSHORA 60Variable horallegada ?

3.- Valor- representa la situación, en cualquier momento, de algún 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 través de los cuales es posible manipular los valores.

Tipos Básicos:a - Enteros-

15

Page 16: programacion basica

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 multiplicación, la división y el módulo.

Operación

Operador Aritmético

Expresión Algebraica

Expresión en C

Suma + f + 7 f + 7Resta - p – 5 p – 5Multiplicación * bm b * mDivisión / x / y o x ÷ y x / yMódulo % r mod t r % t

La división entera da como resultado un entero. Por ejemplo, la expresión 7 / 4 es igual a 1 o la expresión 17 / 3 es igual a 5. El operador módulo es sólo para enteros y es equivalente al residuo que queda después de realizar la división. 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.

Fig. 1.3 - Relación entre el operador módulo y la división.

Con la división 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 números 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 división. V

16

17 5

2 3División

Modulo

Page 17: programacion basica

c - Caracteres:Son el tipo char de C. Toman valor dentro del conjunto de letras, dígitos y símbolos de escritura. Por ejemplo '+', '8', 'A’, 'b'. Hay que notar la diferencia entre el caracter '8' y el número 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.

Solución: Para poder encontrar el promedio, lo que hay que realizar. es una sumatoria de todas las notas definitivas de cada alumno y después dividir por el número de alumnos (30 para este caso).

CONSTANTES:Si examinamos el problema, el número de alumnos es un valor que no debe cambiar, así tenemos.

NUM-ALUMNOS 30

VARIABLES

ENTRADA:

Según el análisis hecho, vimos que la solución depende de las notas finales de cada alumno para poder sumarlas. Además sabemos que las notas están en el rango de [0.0 1- 5.0] por lo que deben ser reales.

OBJETO IDENTIFICADOR TIPONota de cada alumno. nota Real

SALIDA:Sabemos que el resultado buscado es un promedio:

17

Page 18: programacion basica

OBJETO IDENTIFICADOR TIPOPromediofinal del curso promediocurso Real

Instrucciones básicas de C

Hasta este momento hemos visto la metodología para modelar y especificar cualquier problema del mundo real; además, hemos visto un método para empezar a acercarse a una posible solución por medio de la técnica de refinamiento a pasos.

El siguiente paso consiste en expresar dicho refinamiento en términos de un lenguaje que el computador sea capaz de entender. En este semestre comenzaremos a traducir a instrucciones del lenguaje C.

Conceptos básicos

Estructura de un programa

En general, una de las principales características de un programa en lenguaje C es que puede estar conformado por un numero ilimitado de funciones distribuidas en diferentes módulos, uno de los cuales contiene una función principal para iniciar la ejecución.

Por ahora, nosotros vamos a ocuparnos de programas en C, descritos en un solo módulo, el cual contiene la información suficiente para poderse ejecutar. Un programa en C de este tipo consta de las siguientes partes:

18

Page 19: programacion basica

Estructura basica de un programa en C

*************************• documentación

• librerías

•declaración de constantes

•prototipo de funciones

•declaración de variables globales

intmain (void) /*Función principal.*/

{• declaración de variables locales • cuerpo del programareturn 0;}< declaración de funciones >*********************************Vamos a analizar cada una de ellas:

Documentación > : es una explicaci6n de lo que hace el programa.

Librerías > : sirve para indicarle al programa cual es el comportamiento de algunas funciones propias de C.

Declaración de constantes > : define las constantes del mundo sobre el cual se trabajara.

prototipo de funciones > : ayuda a indicar como es que están definidas las funciones hechas por el programador. beben estar en alfabético por razones de claridad.

19

Page 20: programacion basica

declaración de variables globales > : indica cuales son las variables globales, es decir, aquellos datos que pueden ser modificados desde cualquier parte del programa.

declaración 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 solución.

declaración de funciones > : son los bloques que solucionan cada paso del refinamiento a pasos. Deben estar en orden alfabético 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:

• Asignación

• 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 función de C.

• Llamado a una función creada por el programador.

20

Page 21: programacion basica

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 números enteros.

Solución: según la especificación y el refinamiento a pasos solucionados en el bimestre anterior tenemos:

Programa: según la estructura de un programa, estudiada anteriormente, tenemos lo siguiente:

#include <stdio.h>

#define FACTORPROM 3 //declaración de constantes

intmain (void){int numl, num2, num3, suma, promedio, producto;// declaración de variables/* Aquí va el cuerpo del programa, que es la traducción del refinamiento a pasos. */suma = numl + num2 + num3;promedio =( numl + num2 + num3 ) /FACTORPROM; producto= numl * num2 * num3;

/* falta informar los resultados por pantallareturn 0;}

21

Page 22: programacion basica

Operadores

Los operadores se clasifican en dos grupos: aritméticos y lógicos. En general, su comportamiento es como se conoce la aritmética clásica, excepto en los problemas de manejo de ambigüedades:

Por ejemplo, la expresión: 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 están empleando los mismos números y aparentemente los mismos operadores, por esta razón, 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

Page 23: programacion basica

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.

Instrucción de salida

Para poder mostrar resultados por pantalla, C ofrece un conjunto de funciones para la salida. A continuación vamos a ver la función más común para hacer salida con formato a pantalla.

Vamos a continuar con el ejemplo de la suma, promedio y producto de tres números.

El primer punto lo podemos llevar a cabo con la ayuda de lainstrucción printf. printf("Cuál es el valor del primer número? ");

Con esta instrucción se logra que a la hora de la ejecución 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

Page 24: programacion basica

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 ejecución aparecerá en la pantalla algo como se observa de la siguiente manera:

La suma = 3El promedio 1El 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 ejecución aparecerán los mismos caracteres.

b. (%d) es el especificador de conversión usado cuando se desea imprimir un entero. Como es la primera aparición 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 señalada con la e.

24

Page 25: programacion basica

c. Es el especificador de la segunda variable as! que toma el valor de la variable señalada con la f. Vemos que el %d es para imprimir enteros pero existen otros especificadores:

Tipo de variable Especificador de conversión

Entero %dReal %fCarácter %c

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 línea es decir, que el cursor quedará al comienzo de la siguiente línea.

Existen otras de estas secuencias, como es el ( \t ) que tiene la función del TAB del teclado.

Lo único que nos hace falta de la especificación para terminar el problema, es poder asignarle los valores dados por el usuario a las variables de entrada. Para esto, necesitamos una instrucción de entrada.

25

Page 26: programacion basica

Instrucción de entrada

En casi todos los programas, es necesario que el usuario especifique determinados parámetros 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 instrucción 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 instrucción se logra que en numl quede el valor entero dado por el usuario. El %d es el especificador que indica el tipo de dato leído (numl es un entero), Los especificadores son los mismos del printf.

Si quisiéramos leer las tres variables de una vez podría 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 especificación traducidos el programa queda así:

26

Page 27: programacion basica

***************************************************Programa que calcula la suma, el promedio y el producto de tres números.***************************************************#include <stdio.h>

#define FACTORPROM 3

intmain ( void){

int numl, num2, num3; int suma, promedio, producto;

printf("Cuál es el valor del primer número”);scanf("%d,", &numl);printf("Cuál es el valor del segundo número?”);scanf("%d", &num2);printf("Cuál es el valor de¡ tercer número?);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

Page 28: programacion basica

Ejercicios

Realice el modelaje, especificación y programa de los siguientes problemas:

1.- Leer el valor de 5 números e imprimir el valor con el que quedaron.

2. Calcular la suma de dos enteros.

3.Dados dos números enteros, imprimir el resultado de la división y el módulo entre los dos.

4.Dados tres números, imprimir el resultado de la multiplicación entre los tres y el valor de los números.

5. Se desea que al número 5 se le sume cualquier número dado por el usuario para imprimirlo.

6.- Imprima el área y el perímetro de un triángulo. Sus lados son de tamaño 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 sólo duran tres meses.

Page 29: programacion basica

Calcular cuántas pilas se necesitan para alimentar el aparato, cuánto cuestan y considerando el tiempo de duración, calcular cuántas pilas se necesitan en un año y cuánto cuestan.

11.- Se necesita saber el costo total de la construcción de un puente, los materiales son:

Hierro: cuesta $12.000 la unidad

Concreto: cuesta $10.000 la unidad

Pavimento: cuesta $15.000 la unidad

Dada la cantidad usada para la construcción 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 fórmula de la velocidad

velocidad = a * t + Vo

La aceleración (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 número entero de 4 digitos (OJO!: UN SOLO número entero) calcule en la variable sumdig la suma de sus dígitos y en la variable invert el número invertido. Ej.: si el número es 1234 sumdig = 1 0 e invert = 432 1.

14. Hugo, Paco y Luis desean saber cuánto tienen que pedirle a Tío Rico cada mes, por una deuda adquirida en un paseo a Disney World:

· Cada uno recibió una donación de US$5.oo dada por el Abuelo Rico

Page 30: programacion basica

· 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 tenían. Deben pagar su deuda en 12 cuotas, cada-cuota tiene un valor igual que se obtiene de la siguiente fórmula:

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 dígitos, convertirlos en un sólo número. Por ejemplo, si los números son: 2, 7, 4, 9, 3 debe ser convertido a 27493.

17. Dado un número de tres digitos, decir cuántas unidades, décimas y centésimas contiene. Por ejemplo, el número 275 contiene 2 centésimas, 7 décimas y 5 unidades.

18. Se debe leer un número de cuatro dígitos, separarlo en los dígitos equivalentes e imprimirlos separados por tres espacios. Por ejemplo, si se leeel número 7894 se debe imprimir como resultado el7 8 9 4

19.Leer un número de 3 dígitos y escribirlo invertido. Por ejemplo, si se lee 378 se debe imprimir 873

Page 31: programacion basica

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 validación de datos, toma de decisiones, repeticiones, etc.

Para lograr este tipo de comportamiento, los lenguajes de programación ofrecen estructuras de control que llenan las diferentes necesidades. En este capítulo. veremos las estructuras condicionales básicas, que permiten toma de decisiones de acuerdo con un requerimiento dado.

Introducción

Las estructuras condicionales permiten generar puntos de control de tal forma que se ejecuten diferentes conjuntos de instrucciones dependiendo de alguna condición predeterminada.

Ejemplo:

Suponga el problema de decir cuál es el mayor de dos números enteros:

CONSTANTES: No hay.

VARIABLES:ENTRADA:

IDENTIFICADOR TIPOnumerol Enteronumero2 Entero

SALIDA: uno de los dos de la entrada, dependiendo de cuál es mayor.

Page 32: programacion basica

Planteemos un plan de solución para este problema:

1. Leer los dos valores enteros

2. Comparar los dos valores

3. Si el numerol es mayor, imprimirlo como el resultado

4. Si no, imprimir el numero2 como el resultado

En el plan de solución notamos que existen procesos en la solución que NO, siempre tienen que ejecutarse. Por ejemplo, en el punto 3. la impresión 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 impresión de¡ numeral 3. y se ejecuta todo el numeral 4.

Para tener esta semántica 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 condición. A continuación veremos qué es una condición y luego retomaremos la solución del problema.

Condiciones

Pensemos en la condición del ejemplo anterior: numerol es mayor que el numero2, esta expresión es simple y la expresamos como la aritmética nos ha enseñado:

numerol > numero2.

En general, las condiciones se expresan tal y como son en la vida real, simplemente dándole una representación en el lenguaje C.

Estas expresiones se arman usando los operadores de comparación.

Page 33: programacion basica

Los operadores de este tipo son,.

Nombre Operador en C Ejemploigual == (b == 5)diferente != (c != d)mayor que > (numerol >

numero2)menor que < (car < 'd')mayor o igual >= (c >= (h/5»menor o igual <= (varl <= var2)

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 cómo se expresan condiciones más 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 lógicos 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 Andrés lo acompañan. El significado de esta frase es que sólo si Andrés y Luis van, Carlos va. NO basta con que uno de los dos vaya.

Page 34: programacion basica

Ejemplo 2:

María va a la clase si Camilo va ó Germán va. El significado es que con que u de los dos vaya es suficiente para que María vaya.

En general, los conectores lógicos son los siguientes:

Nombre Operador en C

Ejemplo

y && ((x == 5) && (z <8))O || ((varl > 4) ||

(var2==x1))no ! !var3

La solución de las expresiones propuestas anteriormente, usando los operadores lógicos son:

la variable x entera es mayor que cínco y menor que doce:

((x>5) && (x<12))

Esta expresión 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 unión de cada una de las expresiones armadas individualmente, entre paréntesis agrupadas todas por un paréntesis global.

4.2.1. Ejercicios

Construya las siguientes expresiones:

Page 35: programacion basica

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 mayúscula

if - else

La estructura if - else, nos define una estructura de control de bifurcación, que nos permite agrupar en dos las posibles instrucciones a ejecutar. La sintaxis de la estructura es la siguiente:

if ( condicion){instrucción l;...instrucción n;}else{instrucción 1;..instrucción n;}

En general, entre las instrucciones de un if puede ir cualquier tipo de instrucción (simple, condicional, repetifiva, llamado a función 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:

Page 36: programacion basica

· Se está resolviendo de forma equivocada y existe una mejor solución ó

· El problema es lo bastante complejo como para usar funciones auxiliares.

Usemos. ahora esta estructura de control para completar la solución del problema de imprimir el mayor de dos números.

Completando con el código C queda así:*****************************************Programa para encontrar el mayor de dos números leídos por pantalla******************************************#include <stdio.h>intmain(void){int numerol, numero2; printf( "Teclee el primer número”);scanf( "%d", &numerol ); printf( "Teclee el segundo número”);scanf( "%d", &numero2 );if (numerol > numero2) {printf( "El número mayores el primero %d\n", numerol);}

else{printf ( "El número mayor es el.segundo %d\n", numero2) }

return 0;}

Como podemos ver, independientemente de cual de los dos conjuntos de instrucciones se ejecuta, después de ejecutar el if - else, la postcondición es válida.

Page 37: programacion basica

if de condición 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 decisión propia definió que si el estudiante tenía más de 4.5 en la definitiva, la nota seria cinco (5.O) y de lo contrario quedaría igual.

CONSTANTES:NOTA 4.5DEFINITIVA 5.0

VARIABLES:ENTRADA:

IDENTIFICADOR TIPOnotal Realnota2 Realnota3 Real

SALIDA:IDENTIFICADOR TipoDefinitiva real Con la siguiente especificación:Pre: Se leen tres notas entre 0.0 y 5.0

Post: Se calcula la definitiva, redondeando a 5.0 cuando tiene más de 4.5)

El plan de solución es:

1 .Lea las tres notas2.Calcule la definitiva

Page 38: programacion basica

3.Si tiene más 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 construcción la vamos a llamar if para manejo de excepciones y se codifica en de la siguiente forma:i f ( condicion){instruccionl;...instrucción n;}Ahora, continuemos resolviendo el problema y completémoslo con código 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 NOTA 4.5#define DEFINITIVA 5.0

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

Page 39: programacion basica

if (definitiva > NOTA) {definitiva =DEFINITIVA;printf( "La nota definitiva es %l.lf \n", definitiva);}return 0;

Condiciones excluyentes múltiples

Existe otro tipo de problemas típicos que se resuelven con if. Este tipo de problemas consiste en la definición 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 extendiéndolo 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 más de 4.5

El modelo de datos del problema es parecido al del ejemplo

Page 40: programacion basica

Anterior, realizado una vez el modelaje y la especificación el plan desolución es:

Page 41: programacion basica

1 . Lea las tres notas

2. Calcule la definitiva

3. Si tiene hasta 1.5 entonces modifíquela por (1.5)

4. Sino, Si tiene hasta 2. 5 entonces modifíquela por (2.5)

5. Sino, Si tiene hasta 3..5 entonces modifiquela.por (3.5)

6. Sino, Si tiene hasta 4.5 entonces modifíquela por (4.5)

7. Sino, Si tiene más de 4.5 entonces modifíquela por (5.0)

8. Imprima la definitiva

Como podemos ver, la secuencia de if - else - if - else que se genera da la sensación 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;

}

Page 42: programacion basica

A continuación, veamos la solución en lenguaje C del problema:***************************************************Programa que calcula la definitiva de un estudiante y la redondea de acuerdo a la especificación dada por el profesor a 1.5, 2.5, 3.5, 4.5 y 5. O. ***************************************************#include <stdio.h>

intmain (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

Page 43: programacion basica

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 selección. Esta estructura se conoce como switch.

Observemos el siguiente problema:

Se desea proveer un programa que dados dos números y una operación, se ejecute la operación con los dos números. Por ejemplo:

5 6 + entonces se ejecuta la operación 5 + 6

las operaciones que se desean realizar son las básicas de los enteros: *.-.+./.

Modelando este problema obtenemos que: CONSTANTES:SUMA ‘+’RESTA ‘-‘DIVISION ‘/’MULTIPLICACION ‘ * ’

Definiendo las variables tenemos que el plan de solución es el siguiente:

Page 44: programacion basica

1. Leer los datos de entrada (números y operación)

2. Si la operación es'+'entonces suma los dos números

3. Si la operación es'-'entonces resta los dos números

4. Si la operación es'*' entonces multiplica los dos números

5. Si la operación es'/'entonces:si el número dos es diferente de cero entonces divide los dos números sino, avisa un error de operando

6. Si la operación no es ninguna de estas entonces avisa error de operación.

A continuación veamos cuál es la sintáxis y semántica de la estructura switch:

switch ( expresíon)

case valorl:

instrucciones;

break;

case valor2:

case valor3:

case valor M:

instrucciones;

break; case valor n:

instrucciones;

Page 45: programacion basica

break;

default:

instrucciones;

break;}la semántica de ejecución es la siguiente:Se evalúa la expresión· 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 expresión

En caso de no encontrar un valor asociado ejecuta las instrucciones de la opción default

• La opción default no es obligatoria, en caso de no existir y no coincidir el resultado de la expresión con ningún valor, no se ejecuta ningún bloque de instrucciones.

• En caso de que el resultado de la expresión coincida con algún valor de case valor2:, case valor3:, hasta case valor n:, se ejecuta el mismo bloque de instrucciones que vienen dentro del correspondiente case hasta que encuentre un brake.

· Luego de ejecutar el conjunto de instrucciones asociado al valor del resultado de la expresión, se ejecuta la primera instrucción fuera del switch.

Page 46: programacion basica

**********************#include <stdio.h>

#define SUMA ‘+’#define RESTA ‘-‘#define MULTIPLICACION ‘ *’#define DIVISION ‘ /’

intmain (void){

int numerol, numero2;char operacion;

printf("Escriba la operación”):scanf ("%c", &operacion);

printf ("Escriba el primer número”):scanf("%d", &numerol);

printf("Escriba el segundo número”):scanf("%d", &numero2);

switch ( operacion ) {

case SUMA: printf( "La suma es %d \n", numerol + numero2);break;case RESTA:príntf( "La resta es %d \n", numerol - numero2); break;

case MULTIPLICACION: printf( "La multiplicación es %d \n", numerol * numero2 break);

case DIVISION:

Page 47: programacion basica

if (numero2 != 0){

printf( "La división es %d \n", numerol 1/numero2);}else{ printf( "Error: el denominador debe ser diferente de cero \n");}break,

default:printf( "Error: operación inválida \n");}return 0;}

Ejercicios

Haga un programa que:1.lea un entero y diga:

Si es positivo, negativo o cero

Si es par o impar2.lea dos números y diga si el primero es múltiplo del segundo.3.Lea tres valores enteros y los ordene:De mayor a menorDe menor a mayor

4.Lea dos valores reales (x,y) y diga en que cuadrante del espacio cartesiano está

5.Una empresa de préstamos decidió cambiar su esquema de cobros así:

Si el préstamo es de más de 5000, cobra en tres cuotas

Page 48: programacion basica

Si el préstamo es de menos de 1 000, cobra en una cuota

Si el préstamo es entre 2000 y 3000 cobra en dos cuotas

En los demás casos cobra en cinco cuotas

Adicionalmente, si es de menos de 4000 cobra 12% de interés, en caso contrario cobra 10 % de interés.

El programa debe decir en cuantas cuotas debe pagar y de cuanto es cada cuota (calcule el valor total de la deuda con interés y divídalo en cuotas iguales).

6. Dada la fecha de hoy, calcular la fecha del día siguiente. (Suponga que el ,año no es bisiesto).

7. Lea un caracter y diga:

Si es alfabético, numérico u otro

Si es alfabétíco diga si es mayúscula o minúscula Si es alfabético diga si es vocal o consonante Si es otro diga si es un signo de puntuación8.- Lea un caracter alfabético y diga:Si es minúscula, su equivalente en mayúsculaSi es mayúscula, su equivalente en minúscula

9.- Lea un entero de un digito y diga la letra (mayúscula y minúscula,), correspondiente a ese dígito, suponiendo que el número 0 corresponde ala letra 'A' - 'a'.

10.- Validar que dada una fecha, esta sea correcta. Para que una fecha sea correcta es necesario:

El año debe ser mayor que cero.

El mes debe estar entre 1 y 12.

Page 49: programacion basica

Dependiendo de¡ mes que sea, el día debe estar dentro de los límites válidos.

11.- Leer un número entero X y:

a) Decir si es positivo o negativo

b) Decir si es par o impar

c) Leer otro número Y y decir si X es múkipio 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 además, de qué lado debe ponerse carga adicional y cuánta carga adicional se requiere.

13.- Dados tres puntos con coordenadas (x,y) reales, diga si los tres punto 5 están sobre una línea 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 triángulo y si lo forman, calcule el perímetro de¡ triángulo. El programa no debe abortar por dividir por cero.

15.-Dada una fecha y un número de días, calcular la fecha del día equivalente. (Suponga que el año 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 vehículo (camión o automóvil) que desee cruzar, del número

Page 50: programacion basica

de pasajeros que lleve y de la hora del día: en las horas pico los automóviles con tres pasajeros o más no pagan peaje, los camiones pagan $50; en las horas menos congestionadas el peaje para los automóviles es de $25 y para los camiones es de $30 independiente del número de pasajeros.

Escriba un programa que leyendo el tipo de vehículo, si la hora es pico o no y el número de pasajeros ayude al señor a calcular la tarifa que le debe cobrar a un vehículo.

17.En una sala de cine muy conocida de Bogotá, desean hacer uso de la tecnología para el manejo de la boletería. 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, sábado o domingo, el costo es de $1.500 sin importar la clase

Si es estudiante y el día es un miércoles o un jueves le hacen un descuento de $500

Con todo esto, hay que decirle a una persona en cuánto le sale el costo de su boleta.

18. José Javier realiza muchas llamadas a un país 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 cuánto le sale una llamada para él poder ir ahorrando.

El le cuenta lo siguiente:

Page 51: programacion basica

- Si la duración 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 sábado de 0:00 ama 6:00 am.

30% si la llamada se realiza (comienza) de lunes a sábado de 6:01 ama 9:00 am.

35% si la llamada se realiza (comienza) un domingo (no importa la hora).

Usted, debe leer el día, 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 cuánto le cuesta la llamada.

19.- El alcalde del pueblo "Derecho a ser feliz" encontró que su gente sólo 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 días de picar piedra 1 día de cárcelPor ser infiel:3 días de picar piedra 2 días de cárcelPor no ir a las votaciones:3 días de picar piedra 4 días de cárcel

Page 52: programacion basica

Cada persona sólo confiesa 1 o máximo 2 infracciones.Hay que leer la infracción y decir la penitencia que debe cumplir.

20. Para la construccion de un metro se van a usavagones con capacidad de 20 personas. Se desea hacer unpresupuesto de lo que va a entrar en dinero por vagón así que seentrevista a 20 personas para podersaber lo que se ganará.

· El costo base es $2.000

Si es menor de 1 5 años Descuento del 50%

Si está entre 15 y 20 años y no trabaja Descuento del 40%

Si es menor de 20 años pero trabaja Descuento del 30%

Si está entre 20 y 50 años No hay descuento

Si es de menos de 50 años y no trabaja

Si es de más de 50 años Descuento del 10%

Si es mujer embarazada o es un inválido

Descuento del 20%

Haga un programa que diga, dadas las características de esas 20 personas, cuánto cobraría en total por ese vagón.

21.- Dados cuatro puntos en coordenadas (x,y) reales, diga si los cuatro puntos forman un cuadrado. Suponga que los

Page 53: programacion basica

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 cuánto le sale su pasaje de acuerdo a unas políticas:

- 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 interés del 30%

- Si es mayor de 60 años, 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, dígale al pasajero en cuánto le sale el pasaje.

23.-En la empresa transportadora "VIAJE SEGURO" se presentan muchos choques de sus vehículos por lo que decidieron afiliarse a un seguro. Después de muchas conversaciones con la aseguradora "TRANQUILO", llegaron a ciertos acuerdos:

Después de ver las estadísticas, se dieron cuenta que los choques cumplen ciertas característicát, 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

Page 54: programacion basica

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 CONDUCTOR100 2250150

150150150

150

Hay que realizar el programa para que dado un costo del arreglo, decir cuánto 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 evaluación de los candidato, los que les va asignando unos puntajes de acuerdo con las siguientes reglas:

Si tiene una experiencia de menos de diez años le da 3 puntos

Sí la experiencia es de más o igual a 10 años y menor o igual a 20 años le da un puntaje de 5

Si la experiencia es de más de 20 años le da un puntaje de 7

Page 55: programacion basica

Si la edad es de más de 30 años y tiene más de 10 años de experiencia se le suma un punto

Si es de 30 o menos años y tiene 10 años o menos de experiencia, se resta un punto

Si es del partido político 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 título internacional le suma dos puntos

Solicitando toda la información importante del candidato, decir cuántos 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 ejecución por medio de condiciones, tal y como vimos en el capítulo anterior y otras, basadas en operaciones que se repiten un determinado número de veces hasta llegar a una conclusión. Este tipo de soluciones, se conocen como soluciones basadas en métodos iterativos.

En este capítulo veremos las estructuras de control en C que nos permiten implementar métodos iterativos como solución de problemas.

Introducción

En la vida diaria, encontramos continuamente problemas que solucionamos usando un esquema de repetición mientras que se cumple una condición.

Page 56: programacion basica

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- Táchelo y vuelva a verificar la condición

ArrozPanLecheCaféAzucarJabonSal Te

Si seguimos el proceso de ejecución del programa tenemos que la primera vez: compró el arroz y se repite la ejecución a partir de siguiente estado de la lista:

Mientras haya cosas por comprar haga-.Compre el primero de la lista sin tachartáchelo y vuelva a verificar la condición”

En este caso, vemos cómo se repite la ejecución de las instrucciones.

El problema está en que la lista no necesariamente es de ocho, puede tener más o puede tener menos. Es más, puede ser que no se conozca el tamaño de lista porque la pueden estar dictando desde otra parte.

Para evitar esta repetición tediosa de instrucciones y para poder tener problemas con número de repeticiones variables,

Page 57: programacion basica

se crearon las estructuras repetitivas que veremos en detalle más adelante.

Conceptos básicos

Durante todo el proceso de hacer el mercado a partir de la listaVemos como el conjunto de instrucciones no cambia, lo queCambia es el primero de la lista del mercado, que va variando a Medida que se ejecuta el conjunto de instrucciones. PodemosHacer 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 números enteros:1+ 2 + 3 + 4 + + n

Page 58: programacion basica

Planteemos un plan de solución para este problema:

1. Leer el número de términos 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+2. Hacer suma = 0 + 1+ 2 + 3 ++ k + + n-1 + nn+3. Imprimir la respuesta

El problema está a partir del numeral tres. Para poder desarrollar los siguientes numerales, sería necesario conocer exactamente el valor n para el cual se quiere calcular la suma antes de hacer el programa.Ahora bien, analicemos más 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 0En el numeral 3. Hacemos la operación suma = 0 + 1Teniendo en cuenta que suma es igual a cero, es lo mismo que escribirsuma = 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

Page 59: programacion basica

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 + kEn el momento en que k tome el valor n, hemos calculado toda la sumatoria.Ahora bien, si expresáramos eso con una secuencia de instrucciones, obtendríamos lo siguiente:

suma = 0;

suma = suma + 1;

suma = suma + 2;

suma = suma + 3;

suma = suma + k;

suma = suma + n;

En cuyo caso, también es necesario conocer de antemano el valor de n para poder escribir todas las operaciones necesarias para calcular la suma.

A continuación veremos cómo, a partir de esta solución del problema, generalizamos este tipo de problemas a través de una de las estructuras de control repetitivas que conocemos, como es el while.

Estructura while

La solución anterior al problema, la podemos modificar sin afectarla en su desempeño, de la siguiente forma:

Page 60: programacion basica

Declarar un contador (que cumple la función 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 nos queda de la siguiente forma:

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 cómo hacer para que el valor de n pueda ser variable y el número de repeticiones sea dependiente de este valor.

En general, lo que necesitamos es que las instrucciones:

suma = suma + contador;contador++;

Page 61: programacion basica

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 solución de un problema usando el método de repetición. Para expresar esta solución en términos del lenguaje C, usamos la estructura de control while, que tiene la siguiente sintaxis:

while (condición){instrucciónl;instrucción2;

instrucciónn;}

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 anídar unc de otro, tanto como quiera el programador, pero, lo normal y correcto es no tener más de cuatro niveles de anidamiento.

Resolviendo el ejemplo completo obtenemos:

Page 62: programacion basica

********************************************Programa que calcula la suma de los n primeros enteros positivos********************************************#include <stdio.h>

intmain (void){

int n,suma, contador;

printf( "Escriba el número de términos 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 programación C, otras dos estructuras repetitivas, equivalentes al while, creadas para ofrecer al usuario la facilidad de resolver determinados tipos de problemas con instrucciones cuya semántica (significado), se acople mejor a la solución 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 número es primo o no. En general, en el primer caso tenemos una condición sometida a un proceso de conteo y en el segundo tenemos un proceso de centinela con certeza.

Por estas razones, el lenguaje de programación C ofrece las siguientes estructuras:

Page 63: programacion basica

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:

< inicialización >

while ( < condición >){

instrucciónl;

instrucción2;instrucción n;

< incremento >;

}Mientras la estructura del for es la siguiente:

for ( < inícialización >; < condición >; < incremento >){

instruccionl;instruccion2;

instruccionn;}donde las instrucciones pueden ser de cualquier tipo, básicas, condicionales, repetitivas, etc; en particular pueden ser estructuras for anidadas.

La semántica de la estructura for es la siguiente:

Page 64: programacion basica

< inicialización >: es la instrucción o instrucciones, separadas por comas, que se deben ejecutar ANTES de entrar al ciclo, corresponde exactamente a la <inicialización > del while.

< condición >: es la condición que se debe cumplir antes de ejecutar el ciclo una vez, corresponde exactamente a la < condición > del while.

< incremento >: es la instrucción o instrucciones, separadas por comas, que se ejecutan justo después de ejecutar las instrucciones del ciclo y antes de reevaluar la condición nuevamente, corresponde exactamente al < incremento > del while.

Ejemplo:

suponga el problema de calcular la suma de los n primeros números enteros positivos.Sabemos que la solución del problemausando while es:

suma = 0;

contador = 1;while ( contador <= n ){

suma +=contador;contador++;}Expresando esta solución usando estructura for tenemos:

suma = 0;for (contador = 1; contador <= n; contador++){

Suma += contador;}

Page 65: programacion basica

Ejercicios

Realice el modelaje, la especificación y el programa de los siguientes problemas:

1.- Imprimir los diez primeros números pares.

2.- 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 explicación debe ser comprensible para una persona no familiarizada ni con la programación, ni con las matemáticas).

#include <stdio.h>intmain(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 también debe ser leída.

6. Calcular e imprimir el factorial de¡ 1 al 5.

Page 66: programacion basica

7. Contar los dígitos de un número dado.

8. Encontrar el mayor y el menor de N números enteros.

9. En un curso de numalumnos estudiantes, se desea conocer cuál es el promedio de edades y cuántos hombres y mujeres hay.

10.- Para las votaciones, la registraduría requiere un sistema de conteo automático basado en las siguientes características:

• Se realizan 5 rondas

• Son dos candidatos

En cada ronda se debe leer la cantidad de votos para cada candidato y cuántos en blanco

Al final se debe decir quién es el ganador y la votación de cada candidato.Se informa adicionalmente la votación en blanco obtenida

11.En la población de la isla de Taporu están muy preocupados debido aque tienen que convivir con conejos y éstos se reproducen rápidamente. Los conejos se reproducen según unafórmula:

Población conejos (mañana) = Población (hoy) + Población (ayer)

Ellos se reunieron en concejo y tomaron la decisión que cuando dicha población sobrepase los 70000 van a enviar 40000 conejos a la isla vecina. Ellos quieren saber, dada la población de ayer y de hoy, en cuánto tiempo tendrán que realizar la exportación de conejos.

12.- En una lejana isla quieren hacer el estudio de cómo será el comportamiento de nacimientos. Se tiene un número inicial de mujeres y de hombres y la reproducción se lleva a cabo mientras

Page 67: programacion basica

exista menos de 80.000 humanos o el número de mujeres sea menos de 65.000. Cada año, la reproducción tiene un comportamiento: si el número de hombres es mayor al número de mujeres, la población de hombres aumenta un 10% y la población de mujeres el 15%, de lo contrario, las mujeres aumentan en un 10% y los hombres en un 13%.

Decir en cuántos años se llega a que haya más de 80.000 humanos o el número 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 están 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 fútbol se solicitó hacer un programa con el fin de que para los siguientes 15 partidos de un equipo se pida cuántos fueron los expulsados de cada uno de éstos y cuánto es la multa, para que al final diga cuánto es el total de la multa que tienen que pagar y cuántos fueron todos los expulsados que, si pasan de 15, se le incremento un 10% al total de la multa.

15. Dado un número y una cantidad de dígitos, decir si el número contiene los mismos dígitos

Ejemplo:

número = 5555

digitos = 4

Page 68: programacion basica

Debe imprimir: SI SON LOS MISMOS DIGITÓS

16.En una compañía de préstamos hacen el préstamo y dejan al cliente que decida en cuántas cuotas pagarlo y le da además la libertad de que pague lo que pueda en cada cuota.

Leyendo lo necesario, debe decir al finalizar:

- Si ya terminó, en cuántas cuotas pagó.

- Si no ha terminado, cuánto es el saldo

Ejemplo:Préstamo = 1 000

Cuotas = 5

CUOTA PAGO1 1002 3003 4004 200

TERMINO DE PAGAR EN 4 CUOTAS.17 Dado un número entero n: Calcule n!*Determine si n es un número factorial ( n = k! para algún k positivo)

18 Realizar la suma de los dígitos de un entero.

19 Hay que leer un número, de cualquier longitud menor o igual a cinco, y decir cómo queda invertido. Por ejemplo:

Número 38985Invertido 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

Page 69: programacion basica

mensuales. A cada cuota mensual se le agrega un 32% de interés sobre el saldo.

Sabiendo el costo del carro diga:

Cuál es la cuota inicial

Cuáles son las 24 cuotas restantes

En cuánto le sale el préstamo

21. Hay que leer un xl, un x2 y n números enteros y decir cuántos de esos números son menores o iguales a xl, cuántos son mayores o iguales a x2 cuántos están entre xl y x2.

22. Dado un entero no negativo n calcule en la variable sumdig la suma de sus dígitos y en la variable proDig3 el producto de sus dígitos múltiples de 3. Ejemplo, si n es igual a 3459 en sumdig se obtiene 21 y en proDig3 27. (Si no encuentra dígitos múftiplos de 3 se deja en proDig3 el valor de l).

a) Encontrar el mínimo común multiplo de dos números.

b) Encontrar el máximo común divisor de dos números.

23. En la isla del Edén vive una gran cantidad de hormigas que se reproducen a una tasa del 40% mensual; en la isla existe además un oso hormiguero que se come 7000 hormigas al final de cada mes (o todas las hormigas que hay si la población de hormigas en ese momento es inferior a esa cifra). Cuando la población de hormigas sobrepasa el máximo de 28.000, comienza a haber problemas de alimentación lo que hace que se reduzca la tasa de crecimiento al 31% mensual. Debe recibir como entrada el número de hormigas que hay en un momento dado en la isla y un número x y calcular la población de hormigas después de esos x meses.

Page 70: programacion basica

Bibliografía

Conceptos de Programación Maria Paula Diaz – Jorge Elías Morales

C How to ProgramAddison Wesley Iberoamericana

Curso de programación C++ - Programación orientada a objetosFrancisco CeballosAdison Wesley Iberoamericana