6301-16 Programación, Nociones Básicas

download 6301-16 Programación, Nociones Básicas

of 35

Transcript of 6301-16 Programación, Nociones Básicas

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    1/35

    PPrrooggrraammaacciinn,,

    nnoocciioonneessbbssiiccaassIntroduccin a la

    Programacin

    33AAooCC dd .. 66 33 00 11 -- 11 66

    AA ll eejj aa nn dd rr oo SS cc hh uujj mm aa nn

    DD pp tt oo .. dd ee II nn ff oo rr mm tt ii cc aa

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    2/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 2

    ndice1 Conceptos Bsicos

    . Qu es un programa

    . Qu es un algoritmo

    . Qu es una variable. Tipos

    . Funcin main

    2Expresiones numricas. Operador de asignacin. Operadores numricos. Orden de Precedencia. Expresiones numricas

    3 Funciones para Entrada y Salida

    . printf y scanf

    . constantes de caracteres

    . armar carteles utilizando variables

    4 Primeros programas. sumar 3 y 5 y mostrar el resultado. generalizar para dos nmeros enteros cualesquiera. Calcular el permetro y la superficie

    5Expresiones lgicas. Operadores lgicos. Compuertas lgicas

    . Verdadero y Falso como valores numricos6 Tomas de decisin

    . Instruccin if

    . Uso opcional de else

    . Operador ?

    7 Iteraciones. Instruccin while. Preprocesador, directiva #define. Instruccin for. ms operadores de asignacin

    . operadores de incremento y decremento

    . Instrucciones break y continue

    8 Ejemplos resueltos. Mostrar los divisores de N. Determinar si N es primo. Mostrar nmeros perfectos

    Apndice A. Prctica recomendada para el punto 6

    Apndice B. Prctica recomendada para el punto 7

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    3/35

    P O L I T E C N I C O 3

    Conceptos Bsicos

    Qu es un programa

    Un programa de computadora es una secuencia ordenada de instrucciones que una computadoraes capaz de interpretar y ejecutar.Los programas se escriben utilizando distintos lenguajes de programacin. Los lenguajes son unmedio de comunicacin entre nuestro lenguaje cotidiano y el juego de instrucciones que puedeejecutar la computadora. Este ltimo en general es una secuencia de ceros y unos mientras que unlenguaje de programacin est compuesto por palabras del idioma ingls o abreviaturas de lasmismas.Entonces, escribir un programa consistir en escribir un conjunto de instrucciones en un ordendeterminado que indicarn a la computadora lo que deseamos que haga. Para ello debemosconocer algn lenguaje, la manera en que funciona la computadora y como se almacena lainformacin dentro de la misma.

    A lo largo de este curso utilizaremos el lenguaje de programacin C.Para escribir un programa utilizaremos un procesador de texto en el que escribiremos una a unalas instrucciones que creamos necesarias y de acuerdo con las reglas del lenguaje elegido. Luegoconvertiremos este archivo de texto en un programa ejecutable por medio de un compilador.Un compilador es un programa que convertir nuestro cdigo o secuencia de instrucciones en ellenguaje compuesto de ceros y unos que la computadora es capaz de ejecutarPor ejemplo, este es un programa en C

    intmain () {printf(HOLA \n);

    }

    Si escribimos esto en un procesador de texto, lo guardamos en un archivo y compilamosobtendremos otro archivo con un programa ejecutable. Al ejecutar este programa veremos elresultado. En este caso aparecer en la pantalla la palabra HOLAEntonces para continuar, debemos conocer el conjunto de instrucciones que componen ellenguaje.

    Que es un algoritmoUn algoritmo es la secuencia de pasos que debemos dar para resolver un problema o para ejecutaruna tarea. Un buen ejemplo de esto es una receta de cocina, en la misma tenemos una secuenciadetallada de pasos a seguir para obtener un plato elaborado de comida.Al escribir programas intentamos aplicar algoritmos conocidos o crear nuevos para resolver el

    problema encomendado. Los algoritmos no son nicos ya que siempre podremos encontrar otramanera de resolver el mismo problema. Sin embargo, habr algoritmos ms o menos eficientesteniendo en cuenta aspectos como el tiempo que requiere para obtener una solucin o la cantidadde recursos (memoria, disco rgido, ncleos del microprocesador, etc) que necesitar para llegar aun resultado.Una buena tcnica de programacin ser adems escribir estos algoritmos de manera que

    podamos hacer uso de ellos en otros programas. Lo debemos hacer de la manera ms generalposible de forma de obtener una pieza de cdigo cerrada por la que no tengamos quepreocuparnos al insertarla en un nuevo programa en el futuro.De esta manera podremos construir nuestras partes de programas y no tendremos que empezarcada uno desde cero sino que podremos reutilizar lo que ya hemos escrito en instancias anteriores.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    4/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 4

    Variables y TiposLos programas que escribiremos van a manipular informacin. Esta informacin o estos datosdeben ser alojados en la memoria de la computadora. Para ello disponemos de variables.

    Una variable es un casillero o porcin de la memoria del equipo y la representaremos ydistinguiremos de otras por su nombre. Los nombres son secuencias de caracteres como letras,nmeros o algunos signos (por ejemplo _) SIN ESPACIOS EN BLANCO. Intentaremos que estenombre recuerde lo que la variable almacena para facilitar la comprensin del cdigo. Porejemplo, si almacenamos la cantidad de nmeros de un conjunto llamaremos a la variablecantidado cardinalo cant_num. Podemos utilizar en principio cuantas variables queramos ennuestros programas y la primer limitacin ser la cantidad de memoria de que dispongamos.Las variables tienen asociado un tipo de dato a almacenar. Este tipo se vincula con la variable almomento de declararla. El tipo de dato asociado indica qu informacin puede ser almacenada enesa variable. Esto es importante ya que el sistema operativo (quien administra la memoriadisponible) necesita saber cunto espacio debe reservar para cada variable. No ocupa el mismo

    espacio un dato numrico entero que un decimal o un caracter.En C contamos con estos tipos de dato bsicos. La lista no incluye los incluye a todos.

    Para Almacenar Nombre del Tipo de Dato

    Nmeros

    Enteros

    int

    long

    Decimales oflotantes

    float

    double

    Caracteres char

    En el caso de valores numricos disponemos de distintos tipos que admitirn rangos de valores

    ms grandes pero sacrificando ms memoria. Por ejemplo, en un sistema de 32 bits, un int ocupa32 bits (4 bytes) mientras que un long ocupa 64 bits (8 bytes). Si el conjunto de valores que

    pretendemos almacenar en memoria es lo suficientemente pequeo como para caber en un int noes necesario reservar espacio para un long.En resumen, podemos utilizar variables en nuestros programas para almacenar informacin. Para

    poder utilizar una variable debemos declararla. Declarar una variable implica asignarle un nombrey un tipo de dato. Esto se hace de la siguiente manera

    inta, b, c; Declara 3 variables de tipo int de nombres a, b y c respectivamente.floatpesos; Declara una variable de tipo float y le asigna el nombre pesos

    Del tipo de dato charpara almacenar caracteres nos ocuparemos ms adelante.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    5/35

    P O L I T E C N I C O 5

    FuncionesUn programa en C consta de una o ms funciones. Todo programa tiene por lo menos una funcindenominada main. Para los alcances de este documento, todos los programas comenzarn a

    ejecutar en la primer instruccin de la funcin main y finalizarn en la ltima instruccin de esta.La funcin main podr, de ser necesario, llamar a otras funciones para resolver las tareasencomendadas.Una funcin en informtica es un conjunto de instrucciones que realizan una determinada tarea.Esta forma de escribir cdigo es muy til ya que permite contar con problemas resueltos. Si en un

    programa necesito borrar la pantalla podr utilizar una funcin que realice esta tarea sin tener queescribir el cdigo de la misma y puedo despreocuparme. Este enfoque tambin nos permite dividirun problema complejo en varios problemas ms simples. que pude haber resuelto con anterioridad

    para otros programas y evitar reescribir cdigo.Las funciones pueden recibir informacin tal como las funciones matemticas y pueden tambindevolver un resultado. Por ejemplo, si escribo el cdigo para calcular la raz cuadrada de un

    nmero decimal, para obtener el resultado deber pasar a la funcin como dato o parmetro elvalor decimal del cual deseo obtener la raz. Esta funcin devolver un nmero decimal que,resultar ser la raz del nmero que pasamos como parmetro. Sin embargo existen funciones queno devuelven resultado alguno. Por ejemplo, la funcin que borra la pantalla simplementeejecutar esa tarea sin devolver resultado alguno. Asimismo tenemos funciones que no recibenningn parmetro o dato tal como la funcin que borra la pantalla.La funcin main tendr por ahora esta forma

    intmain () {------------------------------

    ---------------return0;}

    Lo primero que vemos es la palabra int. Esta indica que la funcin devolver como resultado unentero. La funcin main utiliza este entero para informar si hubo algn problema en la ejecucindel programa. Notar que el programa puede ser ejecutado por el usuario o por otro programa. Eneste ltimo caso, nuestro programa le informar a quien lo llam en qu condiciones finaliz. Pornorma, si el programa devuelve como resultado 0 indica que todo funcion correctamente. Se

    puede construir una tabla indicando algn tipo de problema y el valor numrico correspondiente.Por ejemplo si devuelve un 3 podremos decir que no pudo conectarse a internet o si devuelve un 4

    podremos decir que no pudo imprimir, etc.La forma de indicar que valor devolver una funcin es mediante el uso de la instruccin return.Cuando la funcin main llega a la instruccin returnfinaliza la ejecucin de nuestro programa.Luego de la palabra main (que no es ni ms ni menos que el nombre de la funcin) podemos verun juego de parntesis. Estos parntesis delimitan la lista de parmetros o informacin que lafuncin recibe. En este caso, la funcin no espera informacin de quien la llame o de quienejecute el programa y por lo tanto est vaca. Ahondaremos en este punto cuando analicemos conms profundidad el tema funciones.El conjunto de instrucciones que conforman la funcin va encerrado entre llaves {}En este casorepresentamos este conjunto con una serie de lneas (-----------). Lo que finalmente haga nuestro

    programa ser lo que indiquemos mediante estas instrucciones. No existe en principio un lmitepara la cantidad de instrucciones que podemos escribir dentro del cuerpo de la funcin.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    6/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 6

    Expresiones Numricas

    Los distintos programas que generamos y utilizamos a diario manejan nmeros. Reproducir

    msica o videos es para la computadora transferir copiar o mover nmeros de un archivo en eldisco o sobre internet a algn perifrico como puede ser la placa de video o la de sonido. Tambintenemos programas que calculan en base a datos numricos o que procesan textos que en lamemoria de la computadora son almacenados de forma numrica.Entonces, si pretendemos escribir programas debemos aprender a lidiar con nmeros, debemosaprender a almacenarlos en memoria y a realizar clculos con los mismos.Para almacenar valores en memoria nos valdremos de las variables que vimos anteriormente.

    Operador de asignacinEl operador de asignacin sirve para dar valor a una variable. Este valor quedar almacenado enmemoria hasta que lo cambiemos o hasta que termine el programa. Est representado de distintas

    maneras en distintos lenguajes de programacin. En C utilizamos el signo =. Por ejemplo, elsiguiente cdigoa= 3;

    tendr como resultado almacenar en la variable de nombre ael valor numrico 3. Debemos leer lainstruccin de la siguiente manera

    Almacenar el valor 3 en la posicin de memoria referida por la variable de nombre aNtese que el operador de asignacin NO es conmutativo ya que siempre almacenar lo que est ala derecha en la posicin de memoria de la izquierda. No podemos escribir

    3 = a;ya que 3 no es una posicin vlida de memoria ni un nombre vlido para una variable.El operador de asignacin devuelve el valor asignado como resultado. Esto nos permite anidar las

    asignaciones. Por ejemploa=b= c= 2;

    trabajar de la siguiente manera..Se almacena el valor 2 en c..Esta asignacin devuelve como resultado el valor almacenado y este resultado es utilizado por eloperador de asignacin sobre by guardar un 2 en b. Esta asignacin nuevamente devolver elvalor 2 como resultado y este ser utilizado por la asignacin sobre aDe esta forma puedo almacenar el mismo valor en varias variables en una sola instruccin.

    Operadores numricosLos operadores numricos nos permiten realizar cuentas. Los que tenemos disponibles en C sonlos siguientes

    Operador Devuelve

    + Suma

    - Resta

    * Producto

    / Divisin

    % Resto o mdulo

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    7/35

    P O L I T E C N I C O 7

    Entonces, por ejemplo, 3 + 3 devolver 6 y 3 % 2 devolver 1 (el resto de la divisin entre 3 y2)

    Notar que NO EXISTE un operador para la potencia.

    Orden de PrecedenciaLas operaciones se resuelven de acuerdo a la siguiente regla.Primero se resuelven la divisin, el producto y el resto. Luego se resuelven las sumas y restas.Por ejemplo3 + 4 * 2 devolver 11 ya que primero se resuelve el producto entre 4 y 2 y luego la suma.Si queremos forzar otro orden de resolucin podemos utilizar parntesis.(3 + 4) * 2 devolver 14 ya que primero se resuelve el parntesis y luego el producto.

    Expresiones numricasUna expresin numrica es una secuencia de nmeros, operadores y funciones que producencomo resultado un valor numrico

    Por ejemplo1) 2 + 3 * 4 - (17 - 3)2) a* 2 +b* 43) 23 * abs(a)

    son expresiones numricas vlidasen la segunda expresin a y brepresentan variables. Para resolver la expresin la computadorareemplaza los nombres de variables por el valor que tengan almacenado en ese momento.en la tercer expresin utilizamos la funcin abs que devuelve el valor absoluto del nmeroalmacenado en la variable a

    Conversin de tiposComo ya vimos, para almacenar valores numricos contamos con dos grupos de tipos de datos.Los enteros y los flotantes. Es posible almacenar un valor entero en una variable de tipo flotante ya la inversa. Sin embargo, almacenar muchos valores enteros en variables de tipo flotantes es porlo menos un desperdicio de memoria. Adicionalmente almacenar valores de tipo flotante envariables de tipo entero conlleva el truncamiento del valor almacenado, es decir, se almacenar la

    parte entera del valor.Si asignamos a una variable llamada numde tipo int

    num= 3.574en ella se almacenar el nmero 3

    Si realizamos operaciones entre valores enteros el resultado ser tambin un entero. Por ejemplo3 / 2 devolver como resultado 1ya que devuelve la parte entera del resultado. Para obtener el resto de la divisin podemos usar eloperador correspondiente

    5 % 3 devolver como resultado 2 (que es el resto de dividir 5 por 3)El compilador utilizar siempre el tipo de dato ms general posible para devolver un resultado deacuerdo con los tipos de dato de los operandos involucrados en la operacin. Si la operacin esentre enteros devolver como resultado un entero. Si la operacin involucra algn nmero de tipoflotante entonces el resultado se devolver como flotante.Si deseamos obtener el resultado de una divisin entre enteros como un nmero decimal o flotantedebemos forzar alguno de los dos operandos a decimal. Podemos hacer esto de diversas maneras.

    1) multiplicar alguno de los operandos por 1.0 Esta operacin no modifica el valor ya que 1.0

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    8/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 8

    es el elemento neutro del producto y forzar al compilador a considerar el nmero comodecimal ya que 1.0 es un operando decimalcociente = 18 * 1.0 / 10

    2) Utilizar un cast. Esto significa forzar un dato o una variable o una expresin a ser de untipo de dato en particular para la operacin involucrada (y solamente para esta).cociente = float(a) / 10Aqu a ser considerada como variable de tipo flotante para la operacin en cuestinaunque la misma sea de tipo entero.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    9/35

    P O L I T E C N I C O 9

    Funciones de Entrada y Salida

    No nos servir de nada realizar clculos si no logramos que nuestro programa se comunique con

    el mundo exterior, es decir, necesitamos ingresar informacin al mismo durante su ejecucin ypoder mostrar los resultados obtenidos.El ingreso de informacin podr realizarse por varios medios. Podemos por ejemplo consultaralgn archivo almacenado en la mquina o consultar archivos en otros equipos conectados ennuestra red o incluso otros a travs de internet. Sin embargo y por ahora para ingresar informacinnos valdremos del teclado y guardaremos en variables la informacin que de este surjaAsimismo, la salida de informacin puede ser a un archivo en algn equipo o a una impresora

    pero haremos la misma por ahora sobre la pantalla.El lenguaje C no poseen instrucciones para estas tareas. Sin embargo, podemos valernos de losrecursos de la biblioteca estndar. Una biblioteca es un conjunto de funciones provistas por quiengenera el compilador o por terceros para facilitar diversas tareas. En nuestro caso utilizaremos la

    biblioteca stdio y para ello debemos incluir el archivo cabecera de la misma antes que nada ennuestro programa mediante esta declaracin#include

    A partir de la ejecucin de esta lnea tendremos disponibles todas las funciones que componenesta biblioteca. Ms adelante veremos con mayor detalle este tema

    scanfPodemos ingresar valores desde el teclado utilizando cin de la siguiente manera

    scanf(%d,&a);Esto har que el programa espere a que el operador escriba un valor y presione enter. Luego elvalor que haya escrito el operador ser almacenado en la variable a.

    scanf lleva en este caso 2 parmetros. El primero (%d) indica que se est esperando el ingreso deun dato numrico de tipo int. El segundo indica el nombre de la variable donde debe ser alojado.Para esta funcin debemos agregar un smbolo & antes del nombre de cada variable que usemos.La razn de esto se ver ms adelante.Utilizamos la siguiente tabla para los distintos tipos de dato

    Tipo de dato letra que lo identificadespus de %

    int d

    float f

    char c

    printfPodemos mostrar carteles y resultados utilizando printf. Para mostrar un cartel haremos losiguiente

    printf(Hola, buenos das);Esto har que el cartel encerrado entre comillas se muestre en pantalla. Las comillas no sern

    parte del cartel y solamente sirven para indicar los lmites del cartel a mostrar.

    A todo conjunto de caracteres encerrados entre comillas lo llamaremos Constantede caracteres o

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    10/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 10

    Cadenade caracteres constante. La denominacin de constante viene dada por la imposibilidadde cambiar el contenido durante la ejecucin del programa.

    Tambin podemos mostrar el contenido de variables utilizando printf. Por ejemplo

    a= 17;printf(Mi edad es %d aos\n, a);producir el siguiente cartel

    Mi edad es 17 aosNotar aqu que cuando nos referimos a una variable NO UTILIZAMOS comillas. Adems, elvalor de la variable a se coloca dentro del cartel en reemplazo de %d. La tabla de reemplazo de %es la misma que para scanf.

    Por ltimo, si usamos dos printf el segundo continuar mostrando desde el lugar donde termin elprimero.

    printf(Buenos );printf( das);

    producir el siguiente cartelBuenos das

    Para agregar un retorno de carro usamos\nde la siguiente maneraprintf(El da est\n);printf(Soleado);

    producir el siguiente cartelEl da estSoleado

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    11/35

    P O L I T E C N I C O 11

    Primeros ProgramasIntentemos ahora agrupar todas las partes y escribir nuestro primer programa. La idea es sencilla ysolo vamos a mostrar la suma de los nmeros 3 y 5 en pantalla.Veamos primero el cdigo y luego analicemos una a una las instrucciones utilizadas.

    #includeintmain () {

    inta,b, suma;

    a= 3;b= 5;suma= a+b;

    printf(La suma de %d y %d es %d\n, a,b,suma);return0;

    }

    En primer lugar para tener un programa en C debemos tener por lo menos la funcin main. Aqurepetimos la estructura que vimos anteriormente. Dentro de la misma tenemos:La declaracin de tres variables de tipo intdenominadas a,by sumarespectivamente. Dentro delas mismas almacenaremos toda la informacin que necesitamos.Luego tenemos 3 asignaciones. Asignamos un 3 a a, un 5 aby la suma del contenido de aybasumaPor ltimo, mostramos el resultado en pantalla con printf y veremos el siguiente cartel

    La suma de 3 y 5 es 8Si tenemos que mostrar varios valores enteros con printf, simplemente colocamos la cantidad de%d que necesitemos y al cerrar las comillas colocamos las variables a reemplazar en el cartel

    separadas por , en el orden correspondiente.Intentemos modificar el programa anterior para permitir que sume cualquier par de enteros.Para ello debemos permitir al usuario del programa ingresar los valores que desea sumar en vez defijarlos en el cdigo. lograremos esto utilizando scanf para darles valor a las variables a y brespectivamente

    #includeintmain () {

    inta,b, suma;

    printf(Ingrese un nmero );

    scanf(%d, &a);printf(Ingrese otro );scanf(%d, &b);suma= a+b;

    printf (La suma de %d y %d es %d, a,b,suma);return0;

    }ahora nuestro programa solicitar al ejecutarse los valores que corresponden a ambos nmeros asumar. El primero se almacenar en a y el segundo en by mostrar el cartel correspondiente.

    Notar que no podemos anticipar el contenido del cartel ya que no sabemos qu valores va autilizar quien ejecute el programa. Esto le da ms generalidad a nuestro programa ya que no soloser capaz de sumar 3 y 5 sino que podr hacerlo con cualquier par de valores enteros.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    12/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 12

    Dado el radio de una circunferencia mostrar en pantalla el permetro de la misma y lasuperficie del crculo que define.En este caso los datos deben almacenarse en variables de tipo floatya que representan magnitudes

    reales.

    #includeintmain () {

    floatradio,perimetro, superficie;

    printf(Ingrese el radio );scanf(%f, &radio);

    permetro= 2 * 3.14 * radio;superficie= 3.14 * radio *radio;

    printf (El perimetro de la circunferencia es %f\n, perimetro);

    printf (La superficie del crculo es %f\n, superficie);return0;

    }Notar que tanto en scanf como en printf debemos utilizar %f ya que estamos tratando convariables de tipo float.

    Notar que como no tenemos un operador para la potencia la forma de elevar radioal cuadrado esmultiplicar la variable radiopor si misma.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    13/35

    P O L I T E C N I C O 13

    Expresiones LgicasNuestros programas son capaces no slo de realizar clculos numricos mediante expresionesnumricas sino de comparar valores. Para esto contamos con los siguientes operadores.

    Operadores LgicosDados dos valores a y b podemos utilizar los siguientes operadores.

    a Operador b Devuelve verdadero si..

    a > b a es mayor que b

    a < b a es menor que b

    a >= b a es mayor o igual a b

    a 5 devolver verdadero si la variable acontiene un valor mayor a 5a>= (2 *b) devolver verdadero si tenemos en aun valor mayor o igual que el doble de lo queest enb.

    Compuertas LgicasEn muchos casos necesitaremos combinar varias preguntas para determinar un resultado. Porejemplo, para determinar si el valor almacenado en una variable est dentro de un determinadorango necesitamos saber si es mayor al lmite inferior y a la vez menor al lmite superior. Esto enmatemticas se escribe

    a (3 , 5) a > 3 a < 5 Para resolver estas situaciones contamos con las compuertas lgicas. De todas las disponiblesestudiaremos el funcionamiento de tres.

    Compuerta ANDEsta compuerta combina dos preguntas y devolver un resultado de acuerdo con la siguiente tabla.En la misma F simboliza Falso y V verdadero.

    Pregunta 1 Pregunta 2 Resultado

    V F F

    V V V

    F V F

    F F F

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    14/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 14

    En C la compuerta AND se simboliza mediante &&, es decir, se ut ilizan dos smbolos ampersand.Notar que esta compuerta devolver verdadero nicamente si las dos preguntas resultanverdaderas. Volviendo a nuestro ejemplo,

    a> 3 && a< 5

    Si a resulta mayor que 3 Y AL MISMO TIEMPO menor que 5 entonces el resultado serverdadero. En cualquier otro caso el resultado ser falso

    Compuerta OREsta compuerta combina dos preguntas y devolver un resultado de acuerdo con la siguiente tabla

    Pregunta 1 Pregunta 2 Resultado

    V F V

    V V V

    F V V

    F F F

    En C la compuerta OR se simboliza mediante ||, es decir, se utilizan dos smbolos pipe (lneasverticales). Notar que esta compuerta devolver falso nicamente si las dos preguntas resultanfalsas. Por ejemplo,

    a== 3 || a== 5Si aresulta ser 3 o 5 entonces el resultado ser verdadero. En cualquier otro caso el resultado serfalso

    Compuerta NOTEsta compuerta se utiliza para NEGAR una pregunta de acuerdo con la siguiente tabla

    Pregunta Resultado

    V F

    F V

    En C la compuerta NOT se simboliza mediante !, es decir, se utiliza el signo de admiracin. Lautilidad de esta compuerta es permitir preguntar por la negativa. Existen muchas situaciones endonde resulta ms simple preguntar si algo NO sucede que preguntar si lo mismo sucede. Por

    ejemplo, si queremos determinar si el valor de aest fuera del intervalo (3 , 5)! (a> 3 && a< 5)

    Verdadero y Falso como valores numricosLa computadora, tal como dijimos anteriormente, maneja nmeros. Es por esto que los operadoreslgicos devuelven un valor numrico como resultado. La regla en C es que si un operador lgicodevuelve 0 como resultado entonces se interpreta como FALSO y si devuelve cualquier otronmero esto se interpreta como VERDADERO.Entonces es posible, por ejemplo, guardar el resultado de un operador lgico en una variablenumrica

    resultado= a> 5;si esto resultara falso (en el caso que acontenga un valor menor o igual a 5) entonces se guardarun 0 en la variable resultado, de otra forma se guardar un valor distinto a 0.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    15/35

    P O L I T E C N I C O 15

    Toma de DecisinInstruccin ifEn muchos casos debemos elegir si ejecutamos o no un conjunto de instrucciones en un programa

    dependiendo de alguna condicin. Por ejemplo, si pretendemos automatizar el control de latemperatura de una caldera podramos hacer algo de esto.. Cada 30 segundos medir la temperatura en la caldera.. Luego de medir fijarse si el valor es inferior a 70 grados. En ese caso encender el mechero.. Luego de medir fijarse si el valor es superior a 90 grados. En ese caso apagar el mechero.Aqu vemos que existen dos instrucciones (encender y apagar) que se debern ejecutar solo si secumplen ciertas condiciones. Para esto aprovecharemos la instruccin if.

    El formato general para if es el siguienteif (expresin lgica) {

    ---------------------------------------

    }y el funcionamiento es el siguiente.El bloque de instrucciones encerrado entre llaves ser ejecutado si la expresin lgica es evaluadaa verdadero. Luego de esto el programa contina Para seguir nuestro ejemplo

    if (temp< 70) {encender();

    }if (temp> 90) {

    apagar();

    }Notar que la funcin encenderse ejecutar solamente si en la variable temphay un valor menor a70 y la funcin apagar solamente se ejecutar si en la variable temphay un valor mayor a 90.

    Notar adems que no se pueden dar las dos situaciones de forma simultnea.En el caso que dentro del if tenga SOLO una instruccin podremos obviar las llaves.

    if (temp< 70)encender();

    if (temp> 90)apagar();

    La instruccin if tal como el resto del lenguaje evaluar las expresiones de acuerdo con su valornumrico. Por ejemplo

    if (b% 2)printf(El nmero es par \n);if (! (b% 2))

    printf(El nmero es impar \n);son expresiones vlidas. La expresin b % 2 ser evaluada y su resultado ser interpretado deacuerdo con la regla que indica que si es 0 es falso y cualquier otro valor es verdadero.

    Uso de tabuladoresCuando utilizamos una instruccin como if que maneja o controla la ejecucin de variasinstrucciones ms, solemos colocar a estas ltimas desplazadas una tabulacin a la derecha. Esono es obligatorio pero ayuda mucho a comprender el programa. Si la cantidad de instruccionescontroladas por el if es grande se puede apreciar a simple vista desde donde y hasta donde abarcael if.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    16/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 16

    Uso opcional de elseLa instruccin if permite ejecutar o no un bloque de instrucciones de acuerdo con una condicinlgica. Podemos de manera opcional (no es obligatorio hacerlo) indicar otro bloque deinstrucciones a ejecutar en caso que la condicin lgica resulte falsa. Este bloque se agrega luego

    de la palabra else (si no en ingls)Ejemploif (b% 2)

    printf(El numero %d es impar,b);else

    printf(El numero %d NO es par,b);

    los carteles indicarn si el contenido de la variable b es par o impar. Notar que SOLO uno de losdos carteles aparecer en pantalla

    Operador ?

    El operador ?es un operador ternario, es decir, trabaja sobre 3 operandos. El primer operando esuna expresin lgica. Si esta es evaluada a verdadero devolver como resultado el que resulte deevaluar la segunda expresin. Por el contrario, si es evaluada a falso devolver como resultado elque resulte de evaluar la tercer expresin.Por ejemplo:

    if (a>b)result= a;

    elseresult=b;

    se puede escribir de forma ms sintticaresult= a>b? a:b;

    esto guardar en la variable resultel valor del mayor entre ayb. Utilizamos el ?para separar laexpresin lgica de las expresiones a evaluar como resultado y :para separar estas entre s.

    Notar que no es necesario el uso de parntesis para encerrar la primer expresin ya que losoperadores lgicos se resuelven antes que el operador ?

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    17/35

    P O L I T E C N I C O 17

    Ejemplos

    1. Escribir un programa que muestre en pantalla el mayor de dos nmeros enteros distintos

    #includeintmain () {inta,b;

    printf(Ingrese un nmero entero );scanf(%d, &a);

    printf(Ingrese otro );scanf(%d, &b);

    printf(El mayor entre %d y %d es , a,b);if(a>b)

    printf(%d\n, a);

    elseprintf(%d\n,b);

    return0;;}Ingresamos dos valores numricos que se almacenarn en las variables a y b respectivamente.Luego imprimimos un cartel que es comn a ambas situaciones (que el primer nmero sea mayoro menor que el segundo), luego y dependiendo de la comparacin en la instruccin ifse mostrarel contenido de la variable ao el deb.

    Otra forma de resolver el problema

    #includeintmain () {

    inta,b, c;

    printf(Ingrese un nmero entero );scanf(%d, &a);

    printf(Ingrese otro );scanf(%d, &b);c = a >b? a:b;

    printf(El mayor entre %d y %d es %d\n, a,b, c);

    return0;;}Aqu reemplazamos la instruccin ifpor el operador ? almacenando el resultado en la variable c.Si quitamos al enunciado la exigencia de nmeros distintos, es decir, busquemos al mayor entredos enteros que podran ser iguales.

    #includeintmain () {

    inta,b;

    printf(Ingrese un nmero entero );

    scanf(%d, &a);

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    18/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 18

    printf(Ingrese otro );scanf(%d, &b);if(a==b)

    printf(Son iguales);

    else{ printf(El mayor entre %d y %d es ,a,b);if(a>b)

    printf(%d\n, a);else

    printf(%d\n,b);}return0;

    }

    Aqu utilizamos dos instrucciones if. Una dentro de otra. En caso que los valores sean iguales se

    mostrar el cartel indicatorio. Si no es ese el caso, siguiendo el elsemostrar el cartel correcto deacuerdo con el segundo if. Notar que est claramente identificado que elsecorresponde a cada if.

    Notar adems que como el elsedel primer ifabarca ms de una instruccin debemos encerrarlasentre llaves.

    Otra manera de resolver

    #includeintmain () {

    int a,b;

    printf(Ingrese un nmero entero );scanf(%d, &a);

    printf(Ingrese otro );scanf(%d, &b);if(a==b)

    printf(Son iguales);if(a>b)

    printf(El mayor entre %d y %d es %d,a,b, a);if(b> a)

    printf(El mayor entre %d y %d es %d,a,b, b);

    return0;}Aqu hemos utilizado 3 instrucciones ify en ninguna de ellas utilizamos else. Notar que cada casoexcluye a los otros, es decir, si son iguales no se dar ninguno de los otros dos. Si aes mayor que

    bno se dar el caso de igualdad ni el debmayor que ay lo mismo para el ltimo.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    19/35

    P O L I T E C N I C O 19

    2 Mostrar al mayor de tres nmeros enteros distintos

    #includeintmain () {

    inta,b, c;

    printf(Ingrese un nmero entero );scanf(%d, &a);

    printf(Ingrese otro );scanf(%d, &b);

    printf(Ingrese el ltimo );scanf(%d, &c);

    printf(El mayor es );if(a>b &&a >c)

    printf(%d\n,a);else

    if(b> c)printf(%d\n,b);

    elseprintf(%d\n, c);

    return0;}Si aes mayor aby a centonces es nuestro ganador. En caso contrario el mayor estar entre by cy se resolver con el ifque se encuentra dentro del primer else. Notar que el segundo ifes en smismo una sola instruccin y por ende el primer elseno necesita llaves.

    Otra manera#includeintmain () {

    inta,b, c;

    printf(Ingrese un nmero entero );scanf(%d, &a);

    printf(Ingrese otro );scanf(%d, &b);

    printf(Ingrese el ltimo );scanf(%d, &c);

    printf(El mayor es );if(a>b &&a >c)

    printf(%d\n,a);if(b> a &&b >c)

    printf(%d\n,b);if(c> a &&c >b)

    printf(%d\n, c);return0;

    }

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    20/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 20

    Aqu nuevamente nos fue posible prescindir de elseen todos los if. Notar que las tres condicionesson excluyentes, es decir, si resulta afirmativa alguna de las condiciones automticamente sernfalsas las otras dos. Notar tambin que siempre una de las tres ser verdadera.

    3. Dada la longitud de los lados de un tringulo determinar si es equiltero, issceles oescaleno.

    Para este problema debemos ingresar y comparar tres valores numricos decimales entre s. Si lostres lados de un tringulo son iguales entonces ser equiltero. Si dos de ellos son iguales ydistintos al tercero ser issceles y por ltimo si todos son distintos ser escaleno.La cuestin ms difcil en principio ser determinar la condicin de issceles ya que debemosverificar tres condiciones de igualdad y desigualdad. Resulta ms simple determinar si esequiltero, en caso de NO serlo verificar si es escaleno y por descarte declarar al tringuloissceles.

    #includeintmain () {

    floatla1, la2, la3;

    printf(Ingrese longitud de primer lado );scanf(%f, &la1);

    printf(Ingrese longitud del segundo );scanf(%f, &la2);

    printf(Ingrese longitud del ltimo );scanf(%f, &la3);

    printf(El tringulo es );if(la1== la2&& la2== la3)

    printf(Equiltero\n);else

    if(la1!= la2&& la2!= la3&& la3!= la1)printf(Escaleno\n);

    elseprintf(Issceles\n);

    return0;}

    El primer if descarta la opcin de equiltero. Para ello utilizamos la propiedad transitiva. Elsegundo if plantea la opcin de escaleno. Notar que la propiedad transitiva NO aplica al operadordistinto. Por descarte, si no es ni equiltero ni escaleno ser issceles.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    21/35

    P O L I T E C N I C O 21

    4 Tres equipos de ftbol disputan un torneo entre s en el formato todos contra todos. Siconocemos los goles convertidos por cada equipo en cada partido mostrar en pantalla alganador del torneo.

    En torneos todos contra todos con 3 equipos tendremos 3 partidos y nuestros datos son entonces6 valores que corresponden a los goles convertidos por cada equipo en cada partido. Si llamamosa los equipos A, B y C respectivamente entonces para facilitar el seguimiento en el programallamaremos a nuestros datos ab, ac,ba,bc, ca, cb y sern los goles convertidos por el equipo Acuando enfrent al B, los de A cuando enfrent a C, etc.Entonces debemos ingresar los datos, en base a estos asignar los puntos a cada equipo por cada

    partido jugado y luego determinar por mayora de puntos al ganador

    #includeintmain () {

    intab,bc, ba, bc, ca, cb; /* Variables para almacenar los goles */

    intpuntosA,puntosB,puntosC /* Variables para acumular los puntos de cada equipo*/

    printf(Partido entre A y B\n);printf(Ingrese cant, de goles de A a B);scanf(%d, &ab);

    printf(Ingrese cant, de goles de B a A);scanf(%d, &ba);

    printf(Partido entre A y C\n);printf(Ingrese cant, de goles de A a C);scanf(%d, &ac);printf(Ingrese cant, de goles de C a A);scanf(%d, &ca);

    printf(Partido entre B y C\n);printf(Ingrese cant, de goles de B a C);scanf(%d, &bc);printf(Ingrese cant, de goles de C a B);scanf(%d, &cb);

    /* Asignacin de puntos */puntosA=puntosB=puntosC= 0; /* antes de jugar todos tienen 0 puntos */

    /* Partido entre A y B */if(ab>ba)

    puntosA=puntosA+ 3; /* gan A */if(ab==ba) {

    puntosA=puntosA+ 1; /* Empate */puntosB=puntosB+ 1;

    }if(ab

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    22/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 22

    if(ac> ca)puntosA=puntosA+ 3; /* gan A */

    if(ac== ca) {puntosA=puntosA+ 1; /* Empate */

    puntosC=puntosC+ 1;}if(ac< ca)

    puntosC=puntosC+ 3; /* gan C */

    /* Partido entre B y C */if(bc> cb)

    puntosB=puntosB+ 3; /* gan B */if(bc== cb) {

    puntosB=puntosB+ 1; /* Empate */puntosC=puntosC+ 1;

    }if(bc< cb)

    puntosC=puntosC+ 3; /* gan C */

    /* Tabla de posiciones */if(puntosA==puntosB&&puntosB==puntosC)

    printf(No hay ganador. Todos los equipos tienen el mismo puntaje\n);if(puntosA>puntosB&&puntosA>puntosC)

    printf(El ganador es el equipo A);if(puntosB>puntosA&&puntosB>puntosC)

    printf(El ganador es el equipo B);if(puntosC>puntosB&&puntosC>puntosA)

    printf(El ganador es el equipo C);return0;

    }si necesitamos hacer comentarios dentro de nuestro cdigo para facilitar su lectura utilizamos /*.. */. Todo lo que coloquemos entre barra asterisco y asterisco barra ser ignorado porel compilador.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    23/35

    P O L I T E C N I C O 23

    Iteraciones

    Supongamos que deseamos mostrar en pantalla todos los valores enteros entre 0 y 9. Con losconocimientos adquiridos hasta aqu el programa sera el siguiente

    #includeintmain () {

    printf (0\n);printf (1\n);printf (2\n);printf (3\n);printf (4\n);printf (5\n);

    printf (6\n);printf (7\n);printf (8\n);printf (9\n);

    return0;}

    Esto resulta poco prctico, adems en el caso de pretender mostrar en pantalla los valores enterosentre N y M siendo N y M dos nmeros enteros distintos tendramos que modificar el cdigo denuestro programa para cada par de valores N y M.

    Por suerte para resolver esta situacin contamos con mecanismos que permiten repetir una ovarias instrucciones una cierta cantidad de veces.

    Instruccin whileLa instruccin while (mientras en ingls) tiene la siguiente sintaxis

    while (expresin lgica) {--------------------------------

    }

    y funciona de la siguientes maneraMientras la expresin lgica sea verdadera se ejecutar el bloque de instrucciones encerrado entrellaves. Si en algn momento la expresin resulta falsa se continuar el programa desde la primerinstruccin posterior al bloque definido por las llaves. Tal como en la instruccin if, podemosobviar las llaves si solo nos interesa repetir una instruccin.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    24/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 24

    1 Mostrar en pantalla los nmeros del 0 al 9#include intmain () {

    inti = 0;

    while(i< 10) {printf(%d\n,i};i= i+ 1;

    }return0;

    }

    La instruccin while se ejecuta ya que i comienza con el valor 0 que es menor a 10 y continaejecutando el bloque de instrucciones MIENTRAS la condicin permanece verdadera. Notar queen cada vuelta el valor de i crece en 1 y por lo tanto se llegar a 10, lo que vuelve falsa laexpresin lgica y terminar el while.

    La funcin printf dentro del while muestra a cada vuelta el valor de i. tambin a cada vueltacambia el valor de i. Por lo tanto se muestran en pantalla todos los valores del 0 al 9 que serntodos los valores que toma la variable i a medida que se repiten las instrucciones abarcadas porwhile. Cuando la variable i llega al valor 10 la condicin lgica deja de ser verdadera y por lotanto se interrumpe la iteracin y el programa continuar con la instruccin que sigue, en este casoreturn 0.

    2 Mostrar los nmeros del 9 al 0, es decir, invertir el orden#include intmain () {

    inti = 9;

    while(i>= 0) {printf(%d\n,i};i= i- 1;

    }return0;

    }

    Igual que en ejemplo 1, la expresin lgica es verdadera al inicio ya que i vale 9 y se pide que seamayor o igual a 0. En cada iteracin se muestra el valor de i y en este caso se reduce en 1. Cuandoi toma el valor -1 la expresin se vuelve falsa y se interrumpe el while. Notar que el valor -1

    nunca se muestra en pantalla.Otra forma

    #include intmain () {

    inti = 0;

    while(i< 10) {printf(%d\n,9 - i};i= i+ 1;

    }return0;

    }

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    25/35

    P O L I T E C N I C O 25

    Comenzamos con i en 0 e incrementamos a cada iteracin pero mostramos en pantalla ladiferencia entre 9 e i. Notar que a medida que i crece el valor a mostrar decrece comenzando en 9y terminando en 0

    El preprocesadorEn la introduccin de este documento vimos que los programas que nosotros escribimos deben sercompilados antes de usarse. El primer paso en la compilacin de un programa en C es el

    preprocesador.El preprocesador analiza nuestro cdigo o archivo fuente y realiza diversas tareas. Es posible dardirectivas al preprocesador y ya hemos visto una de ellas. Las directivas al preprocesadorcomienzan con un #.Para incluir una biblioteca de funciones en nuestro programa debemos utilizar la orden #include.Esta orden le indica al preprocesador que debe buscar dentro de la carpeta que corresponda la

    biblioteca de funciones que indicamos y agregar al archivo ejecutable el cdigo que corresponda.Tenemos ms directivas del preprocesador para utilizar. Una de ellas es la que permite definir

    macros. Una macro es un valor o una porcin de cdigo asociado a un nombre. Al momento decompilar el preprocesador reemplaza este nombre por el cdigo o el valor asociado al mismo. Estonos permite por ejemplo, definir constantes dentro de nuestro programa y darles un valordeterminado una sola vez para evitar luego tener que buscar dentro del cdigo cada aparicin de lamisma. Veamos un ejemplo

    #include #defineTOPE 10intmain () {

    inti = 0;

    while(i< TOPE) {printf(%d\n,TOPE - i -1};i= i+ 1;

    }return0;

    }

    el preprocesador reemplazar el valor de TOPE por el nmero 10 antes de compilar el programa.Este ejemplo pretende mostrar el funcionamiento de una macro simple. En programas mscomplejos las macros permiten controlar un determinado parmetro sin tener que buscar dentro

    del cdigo cada aparicin del mismo, facilitando la lectura del cdigo y ayudando a evitar errores.Notar que las macros NO son variables. Su valor se define cuando se escribe el cdigo y no puedeser alterado una vez compilado el programa. Para cambiar el valor de una macro debemos corregirel cdigo fuente y volver a compilar. Se estila aunque no es obligatorio, utilizar maysculas paralos nombres de macros. Esto facilita la lectura del cdigo.Con macros se pueden hacer cosas mucho ms complicadas que solo reemplazar texto.Volveremos ms adelante sobre este tema.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    26/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 26

    3 Mostrar en pantalla los enteros entre INICIO y FIN#include #define INICIO 100#define FIN 234

    intmain () {inti = INICIO;

    while(i< FIN) {printf(%d\n, i};i= i+ 1;

    }return0;

    }

    otra forma

    #include intmain () {

    inti, a,b, ini, fin;

    printf(ingrese el lmite inferior);scanf(%d\n,&inii);

    printf(ingrese el lmite superior);scanf(%d\n,&fin);

    i= ini;while(i< fin) {

    printf(%d\n, i};i= i+ 1;

    }return0;

    }En este ejemplo en vez de usar macros dejamos que el usuario de nuestro programa elija losvalores extremos del intervalo a mostrar cada vez que utilice el programa.

    4 Mostrar en pantalla los enteros entre A y B#include

    intmain () {inti, a,b, ini, fin;

    printf(ingrese el lmite inferior);scanf(%d\n,&a);

    printf(ingrese el lmite superior);scanf(%d\n,&b);

    if (a

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    27/35

    P O L I T E C N I C O 27

    ini=b;fin= a;

    }

    i= ini;while(i< fin) {printf(%d\n, i};i= i+ 1;

    }return0;

    }

    En este ejemplo, los extremos pueden o no venir dados en el orden correcto. Como la idea esmostrar en forma ascendente debemos asegurarnos que se inicie por el menor de ellos.

    Instruccin forLa instruccin for permite realizar las mismas tareas que la instruccin while pero presenta unformato ms compacto ya que incluye la inicializacin, la expresin lgica de control y elincremento en una misma lnea. La utilizacin de una u otra es eleccin del programador y no

    presenta una ventajas en eficiencia con respecto a la otra.Tiene la siguiente sintaxis

    for (inicializacin ; expresin lgica ; incremento ) {--------------------------------------------------------

    }Al igual que en while, una instruccin for repite las instrucciones encerradas entre llaves mientrasla expresin lgica sea evaluada a verdadero.La inicializacin se ejecuta solo una vez al principio y sirve para dar valores iniciales a variables.El incremento se ejecuta a cada vuelta o iteracin y antes de evaluar la expresin lgicaEjemplo1 Mostrar en pantalla los nmeros del 0 al 9

    #include intmain () {

    inti ;

    for ( i=0 ; i< 10 ; i = i+1)printf(%d\n,i};return0;

    }

    En esta caso cuando llegamos a la instruccin for, la variable itoma el valor 0 ( inicializacin ),se comprueba la condicin y como es verdadera se ejecuta printf. Luego volvemos al for, seejecuta el incremento ( itoma el valor 1 ), se evala nuevamente la condicin y como sigue siendoverdadera se ejecuta el printf. Esto contina hasta que la variable itoma el valor 10 y la condicindeja de ser verdadera. Notar que si bien la variable i finaliza con el valor 10, el printfcorrespondiente no se ejecuta.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    28/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 28

    Ms Operadores de asignacinCuando debemos incrementar el contenido de una variable, es decir, sumar algo al valor que yatiene haremos lo siguiente por ejemplo:i = i + 1

    una_variable_simpatica = una_variable_simpatica + 253

    podemos escribir estos ejemplos de la siguiente manerai += 1una_variable_simpatica += 253

    que resulta una forma simplificada de escribir.

    tambin existen operadores para acumular productos, restas y divisiones de acuerdo a la siguientetabla

    Operador Se escribe Efecto

    += x += 23 Suma 23 al valor de x

    -= x -= 12 Resta 12 del contenido de x

    *= x *= 21 Multiplica por 21 el valor de x

    /= x /= 2 divide por 2 el contenido de x

    Notar que estos operadores no son imprescindibles pero ayudan a entender ms claramente que sedesea hacer y naturalmente a escribir menos. Existen ms de estos operadores y los veremos amedida que los necesitemos.

    Operadores de incremento y decrementoSi necesitamos incrementar en 1 el contenido de una variable podemos escribir la operacin de lassiguientes maneras

    var = var +1var += 1var ++

    cualquiera de las tres maneras tendr el mismo efecto sobre la variable var. Si deseamos que se lereste 1 al contenido de var tenemos el operador --. vale decir que var -- disminuir en 1 elcontenido de var.Los operadores ++ y -- pueden colocarse antes del nombre de una variable (prefijo) o despus delmismo (postfijo) y el efecto es ligeramente diferente, veamos

    postfijo prefijo

    a = 5; b = a ++; a = 5; b = ++ a;

    a guarda 6 y b guarda 5 a guarda 6 y b guarda 6

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    29/35

    P O L I T E C N I C O 29

    Si colocamos el operador de forma prefija el valor de la variable se incrementa antes de laasignacin. Por el contrario, si el operador es postfijo primero se asigna y luego se incrementa

    Instrucciones break y continue

    Estas instrucciones complementan el control de los ciclos while y for. Pueden ser utilizadas enambos casos con el mismo resultado.Si dentro de un ciclo while o for colocamos una instruccin break el resultado ser la inmediatainterrupcin del mismo. Vale decir que la computadora continuar ejecutando el programa en la

    primer instruccin que siga al while o for correspondiente. Esto nos permite salir antes de que unciclo concluya y es til en distintas situaciones, por ejemplo

    ingresar a lo sumo 20 nmeros y sumarlos. Interrumpir el ingreso si la suma es mayor a 100.Mostrar la suma y la cantidad de nmeros ingresados#include intmain () {

    inti, num, suma = 0;

    for ( i=0 ; i< 20 ; i++) {scanf (%d, num);suma+= num;if (suma> 100)

    break;}

    printf (Se ingresaron %d nmeros y su suma es %d\n,i, suma};return0;

    }Aqu vemos que forda 20 vueltas ingresando nmeros y luego termina. Sin embargo, si la sumade los nmeros que se ingresan supera 100 se interrumpe an sin haber completado las 20 vueltas.

    La instruccin continue tiene el mismo mbito de aplicacin que breaky su efecto es dar porconcluida la presente iteracin para continuar con la siguiente, vale decir que cuando se ejecutacontinuese da por terminada la ejecucin de las instrucciones incluidas en el foro el whiley secontina con la siguiente iteracin. Ejemplo

    Mostrar en pantalla los mltiplos de 3 menores a 100#include

    intmain () {inti ;

    for ( i=3 ; i< 100 ; i++) {if (i % 3)

    continue;printf(%d\n,i};

    }return0;

    }Notar que slo para los mltiplos de 3 no se ejecutar continue

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    30/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 30

    Ejemplos Resueltos

    1) Mostrar en pantalla los divisores de un nmero natural

    La estrategia ser probar entre todos los nmeros naturales menores a N cules son divisores. Parasaber si un cierto nmero es divisor nos valdremos del operador %

    #include intmain () {

    inti, N ;

    printf(Ingrese un nmero natural );scanf (%d,N);for ( i=1 ; i

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    31/35

    P O L I T E C N I C O 31

    28 100

    i N / i i N / i

    1 28 1 100

    2 14 2 50

    4 7 4 25

    5 20

    10 10

    La idea es buscar los divisores que aparecen en la columna de la izquierda y calcular los de la

    columna de la derecha. De esta manera podremos reducir an ms la cantidad de vueltas que danuestro for.La pregunta es entonces Cul es el lmite superior para i?.

    Notar que a medida que i crece N / i decrece. El lmite est dado por el valor para el cual i se haceigual a N / i, es decir

    i = N / ii * i = Ni =

    es decir que nuestros posibles divisores van a ser los naturales menores a la raz cuadrada de N.

    Notar que esto disminuye an ms la cantidad de iteraciones ya que si N es 100000 solo debemosbuscar entre los naturales menores a 10000 (en la primer mejora este tope era 500000).

    #include #include intmain () {

    inti, N ;printf(Ingrese un nmero natural );scanf (%d,N);

    printf (1\n%d\n, N);for ( i=2 ; i< sqrt(N) ; i++)

    if ( ! (N% i))printf(%d\n%d\n, i,N / i);

    if (! N % sqrt(N))printf(%d\n, sqrt(N));

    return0;}

    La funcin sqrt(square root) devuelve la raz cuadrada de N. Se encuentra en la biblioteca math.hque incluimos al principio del programa. El ciclo for se ejecuta hasta la raz de N y cada vez queencuentra un divisor lo muestra junto al que obtenemos por clculo (N / i). Una vez terminado elfornos queda el caso de los cuadrados perfectos como el 100 que pusimos en el ejemplo. Paraestos nmeros la raz cuadrada tambin resulta divisor

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    32/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 32

    2) Determinar si un nmero es o no primoRecordamos que un nmero es primo si solo tiene a 1 y a s mismo como divisores. El 1 no es

    primo por definicin.Luego, podemos utilizar el programa anterior solo que en vez de mostrar los divisores de N

    debemos comprobar que no los tenga.#include #include intmain () {

    inti, N, b = 1;

    printf(Ingrese un nmero natural );scanf (%d,N);for ( i=2 ; i

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    33/35

    P O L I T E C N I C O 33

    whiile (perfecto< TOPE) {acum= 1; /* 1 siempre es divisor */for (i=2 ; i< sqrt(num) ; i++)

    if ( ! (num% i))

    acum+= i + num/ i;if (! num% sqrt(num))acum+= sqrt(num);

    if (acum== num) {printf(%d es perfecto\n, num); /* Si es perfecto lo mostramos */perfecto++; /* aumentamos el contador de perfectos */

    }num++; /* sea o no perfecto probamos con el siguiente */

    }return0;

    }Notar que los ciclos for y while se pueden colocar uno dentro de otro. Tambin es vlido colocarun for dentro de un for y un while dentro de un while. A esto se lo denomina anidar y la regla esque para cada iteracin del ciclo exterior se producen todas las iteraciones del ciclo interior. En

    principio no hay lmites para anidar, vale decir que podemos anidar N ciclos uno dentro de otro.En este programa tenemos un ciclo exterior. Para cada una de las iteraciones de este se ejecutarntodas las del ciclo interior que encuentra y acumula los divisores, es decir, vamos probando paracada entero mayor que 1 si se cumple la definicin de nmero perfecto. El ciclo exterior (while)concluye cuando encontramos 4 nmeros perfectos.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    34/35

    P r o g r a m a c i n , n o c i o n e s b s i c a s

    I n t r o du c c i n a l a Pr o g r a m ac i n I

    P O L I T E C N I C O 34

    Apndice A

    Problemas con tomas de decisin

    1. Dados dos nmeros enteros, mostrar en pantalla si son iguales o caso contrario al mayor deellos

    2. Dados tres nmeros enteros distintos, mostrar en pantalla al mayor y al menor valor entreellos

    3. Dados dos nmeros determinar si uno es el cuadrado del otro

    4. Dados cinco nmeros enteros determinar si el promedio de los que sean mayores alpromedio es o no par

    5. Dadas las tres notas que obtuvo un alumno a lo largo del cuatrimestre determinar supromedio y si aprob o no la materia. Para aprobar necesita un promedio mayor o igual a 6y ninguna nota menor a 4.

    6. Dados tres ngulos, determinar si pueden formar un tringulo

    7. Dados los lados de un tringulo determinar si es rectngulo

    8. Dados los lados de un tringulo determinar si es equiltero, issceles o escaleno

    9. Determinar la categora que le corresponde al socio de un club conociendo su edad yantigedad. Si es menor de 8 aos es NIO. Si no es NIO y es menor de 18 aos esCADETE. Si es mayor de 18 aos y tiene menos de 20 aos de antigedad es ACTIVO.Con 20 aos de antigedad es PASIVO.

    10.Dado el consumo de energa elctrica de una casa durante el ltimo bimestre en Kwh,calcular y mostrar en pantalla el importe en pesos de la factura de acuerdo alsiguiente cuadro tarifario:

    Kwh $ (pesos)Primeros 120 0,19

    Segundos 120 0,23

    Consumo restante 0,38

    Adems se deber agregar una multa de 100 pesos por exceso de consumo si se superanlos 1000 Kwh.

  • 7/26/2019 6301-16 Programacin, Nociones Bsicas

    35/35

    Apndice B

    1. Mostrar la suma de los nmeros pares entre 1 y 1012. Mostrar la suma de los mltiplos de C en el intervalo [A, B]. A, B y C son nmeros

    naturales

    3. Sabiendo que la temperatura en la escala Fahrenheit se puede calcular a partir de lacorrespondiente en la escala Celsius con la siguiente frmula

    F = (C * 9 / 5) + 32mostrar en pantalla una tabla a dos columnas, una para la temperatura Fahrenheit y otra

    para la Celsius, con esta ltima variando de 40 a 100 y creciendo de a 10 grados

    4. Mostrar en pantalla una tabla a dos columnas donde se vea la velocidad y la posicin cadat segundos de un cuerpo en cada libre que parte desde una altura de h metros con unavelocidad inicial v0. Las frmulas para el clculo de posicin y velocidad son lassiguientes:

    x = x0+ v0t +12 g t

    2

    v = v0+ g tel ltimo rengln de la tabla deber mostrar los datos correspondientes a la altura de 0metros

    5. Dada una lista de N nmeros mostrar en pantalla la suma, el promedio, el mayor y el

    menor

    6. Mostrar en pantalla los N primeros nmeros primos.

    7. Mostrar en pantalla los nmeros primos menores a N