Sie sind auf Seite 1von 86

ANTOLOGA DE PROGRAMACIN

CONCEPTOS DE COMPUTACIN
ANTECEDENTES
La computadora
La computadora, es un dispositivo electrnico capaz de recibir un conjunto de instrucciones y ejecutarlas realizando clculos sobre los datos numricos, o bien compilando y correlacionando otros tipos de informacin. El mundo de la alta tecnologa nunca hubiera existido de no ser por el desarrollo de la computadora.

En la actualidad se utilizan dos tipos principales de computadoras: analgicas y digitales. Sin embargo, el trmino computadora suele utilizarse para referirse exclusivamente al tipo digital. Las computadoras analgicas aprovechan la similitud matemtica entre las interrelaciones fsicas de determinados problemas y emplean circuitos electrnicos o hidrulicos para simular el problema fsico. Las computadoras digitales resuelven los problemas realizando clculos y tratando a cada nmero dgito por dgito.

En la figura 1 se muestra la supercomputadora Cray-1 (diseada por Seymour Cray en Minnesota, EEUU). Fue la primera en ejecutar ms de 100 millones de operaciones por segundo.

Figura 1. Supercomputadora Cray-1

Historia del computador


Durante la segunda Guerra Mundial (1939-1945), un equipo de cientficos y matemticos que trabajaban en Bletchley Park, al norte de Londres; crearon lo que se consider la primera computadora digital totalmente electrnica: el Colossus. En diciembre de 1943 el Colossus, que consista de 1.500 vlvulas o tubos de vaco, era ya operativo. Fue utilizado por el equipo de Alan Turing para decodificar los mensajes de radio cifrados por los alemanes.

Ms tarde en el ao de 1946 se dise el Calculador e integrador electrnico numrico ENIAC (en ingls Electronic Numerical Integrator and Computer), el cual estaba basado principalmente en la computadora Atanasoff-Berry (en ingls ABC, Atanasoff-Berry Computer). Despus de varias dcadas este dispositivo caduco.

A finales de la dcada de 1950, con el uso del transistor; las computadoras marcaron el advenimiento de elementos lgicos ms pequeos, rpidos y verstiles que las mquinas que llegaban a utilizar los tubos de vaco.

En 1960 apareci el circuito integrado (CI), el cual permiti la fabricacin de varios transistores en un solo sustrato de silicio; reducindose as: los costos, el tamao y los porcentajes de error.

Finalmente, a mediados de la dcada de 1970 se cre el microprocesador; gracias a la invencin del circuito de integracin a gran escala (LSI, Large Scale Integrated).

La mayora de las computadoras digitales modernas se pueden dividir en varias categoras, segn su precio y rendimiento: computadora personal, estacin de trabajo,

minicomputadora y el mainframe

FUNCIONES DE LAS COMPUTADORAS


Las funciones que realiza una computadora son: Procesamiento de datos Almacenamiento de datos Transferencia de datos de un sistema a otro Control

En las figuras 2a, 2b, 2c y 2d, se muestran los diagramas de estados para cada una de las funciones. Todas bajo el control de un conjunto de instrucciones que realiza una computadora.

Transferencia

Transferencia

Control

Control

Almacenamiento

Procesamiento

Almacenamiento

Procesamiento

2a. Procesamiento de datos internos almacenados en la memoria

2b. Procesamiento de datos externos almacenados en la memoria

Transferencia

Transferencia

Control

Control

Almacenamiento

Procesamiento

Almacenamiento

Procesamiento

2c. Transmisin de datos externos a otro sistema

2d. Almacenamiento de datos externos a la memoria

Figura 2. Funciones que realiza una computadora

Partes de un Computador (HARDWARE)


En el siguiente cuadro mostraremos la organizacin de una computadora:

Seccin de recepcin: obtiene Unidad de entrada datos y programas de la computadora (teclado) Seccin encarga Unidad de salida de de accesos: tomar Se la

informacin procesada para colocarla en varios

Seccin de almacenamiento Unidad de memoria de rpido acceso y con

capacidad relativamente baja de la computadora (informacin Ejecuta los clculos de suma, Computadora Unidad aritmtica (ALU) resta, multiplicacin y

divisin. Adems de contener los mecanismos de decisin.

Seccin administrativa de la Unidad de Procesamiento central (CPU) computadora. Supervisa las operaciones de las dems secciones (para leer, guardar,

SISTEMAS OPERATIVOS
Los sistemas operativos fueron desarrollados para coordinar y trasladar flujos de datos que procedan de diferentes fuentes, as como las unidades de disco o los coprocesadores1. Un sistema operativo es un programa de control principal, almacenado de forma permanente en la memoria, el cual interpreta los comandos del usuario que solicita diversos tipos de servicios, tales como: visualizacin, impresin o copia de un archivo de datos. Se encarga de presentar tambin una lista de todos los archivos existentes en un directorio o de ejecutar un determinado programa.

PROGRAMACIN
Un programa es una secuencia de instrucciones que indican al hardware las operaciones que debe realizar con los datos. Los programas pueden estar incorporados al propio hardware, o bien pueden existir de manera independiente en forma de software 2 . En algunas computadoras, las instrucciones operativas estn incorporadas en el sistema de circuitos; entre los ejemplos ms comunes pueden citarse las microcomputadoras de las calculadoras, relojes de pulsera, motores de coches, hornos microondas, entre otros. Por otro lado, una computadora de uso general, contiene algunos programas incorporados en la memoria de slo lectura (ROM, Read Only Memory) o instrucciones en el chip del procesador; el cual, depende de los programas externos para ejecutar diferentes tareas. Una vez programado, podr realizar las tareas que le permita el software que lo controla en determinado momento.

Coprocesadores.- Circuitos integrados que ejecutan diferentes operaciones con la unidad central. Software: incluye una amplia variedad de programas de aplicaciones, es decir, instrucciones que se le dan a

la computadora acerca de cmo realizar diversas tareas.

LENGUAJES
Las instrucciones deben darse en un lenguaje de programacin, es decir, en una determinada configuracin de informacin digital binaria. En las primeras computadoras, la programacin era una tarea difcil y laboriosa ya que los conmutadores ON-OFF de los tubos de vaco deban configurarse a mano. Programar tareas tan sencillas como ordenar una lista de nombres requera varios das de trabajo de equipos de programadores. Desde entonces se han inventado varios lenguajes informticos, algunos orientados hacia funciones especficas y otros centrados en la facilidad de uso.

Lenguaje mquina
Es el lenguaje propio de la computadora, basado en el sistema binario, o cdigo mquina. El programador debe introducir todos los datos y cada uno de los comandos en forma binaria, y una operacin sencilla para comparar el contenido de un registro con los datos situados en la memoria puede tener el siguiente formato: 11001010 00010111 11110101 00101011. La programacin en lenguaje mquina es una tarea tan tediosa y consume tanto tiempo que muy raras veces lo que se ahorra en la ejecucin del programa justifica los das o semanas que se han necesitado para escribirlo.

Lenguaje ensamblador
Uno de los mtodos inventados por los programadores para reducir y simplificar el proceso es la denominada programacin con el lenguaje ensamblador. Al asignar un cdigo mnemotcnico (por lo general de tres letras) a cada comando en lenguaje mquina, es posible escribir, depurar o eliminar los errores lgicos y de datos en los programas escritos en lenguaje ensamblador, empleando slo una fraccin del tiempo necesario para programar en lenguaje mquina. En el lenguaje ensamblador, cada comando equivale a una instruccin de mquina. Un programa ensamblador traduce el cdigo fuente a lenguaje mquina y posteriormente ejecuta el programa. Sin embargo, el lenguaje ensamblador puede utilizarse con un solo tipo de chip de CPU o microprocesador. Anteriormente los programadores se vean obligados a aprender un nuevo estilo de programacin cada vez que trabajaban con otra mquina. Lo que se necesitaba era un mtodo abreviado, en el que un enunciado simblico pudiera representar una secuencia de instrucciones en lenguaje

mquina, y un mtodo que permitiera que el mismo programa pudiera ejecutarse en varios tipos de mquinas. Estas necesidades llevaron al desarrollo de lenguajes de alto nivel.

Lenguajes de alto nivel


Los lenguajes de alto nivel utilizan los trminos: LIST, PRINT u OPEN como comandos que representan una secuencia de instrucciones en lenguaje mquina. Los comandos se introducen a travs del teclado, y son identificados por un programa que los traduce a instrucciones en lenguaje mquina.

Los programas traductores pueden ser de tipo intrprete y tipo compiladores. Con un programa intrprete, los programas repiten un ciclo para volver a ejecutar parte de sus instrucciones y reinterpretan la misma instruccin cada vez que aparece. As, los programas interpretados se ejecutan con mucha mayor lentitud que los programas en lenguaje mquina. Por el contrario, los compiladores traducen un programa ntegro a lenguaje mquina antes de su ejecucin, por lo cual se ejecutan con tanta rapidez como si hubiesen sido escritos directamente en lenguaje mquina.

Para facilitar el uso de la computadora en las aplicaciones cientficas, IBM desarroll un lenguaje que simplificara el trabajo que implicaba el tratamiento de frmulas matemticas complejas. FORTRAN (Formula Translator) fue el primer lenguaje de alto nivel de uso generalizado.

En 1957 una asociacin estadounidense (Association for Computing Machinery) comenz a desarrollar un lenguaje universal que corrigiera algunos de los defectos del FORTRAN. Un ao ms tarde fue lanzado otro lenguaje de orientacin cientfica: ALGOL (Algorithmic Language), el cual fue de gran difusin en Europa durante las dcadas de 1960 y 1970. El lenguaje de programacin COBOL (Common Business Oriented Language) es utilizado de forma comercial y empresarial especializado en la organizacin de datos y manipulacin de archivos. El lenguaje BASIC es un cdigo de Instrucciones Simblicas de Uso General para Principiantes, desarrollado en el Dartmouth College a principios de la dcada de 1960. Este lenguaje se universaliz gracias a la gran popularidad que tenan las microcomputadoras en

las dcadas de 1970 y 1980. Calificado de lento, ineficaz y poco esttico por sus detractores, BASIC es sencillo de aprender y fcil de utilizar.

PASCAL es otro lenguaje de programacin, el cual fue diseado en un principio como herramienta de enseanza, hoy es uno de los lenguajes de programacin ms populares; LOGO fue desarrollado para que los nios pudieran acceder al mundo de la informtica; C, es un lenguaje de Bell Laboratories diseado en la dcada de 1970, se utiliza ampliamente en el desarrollo de programas de sistemas, al igual que su sucesor C++. LISP y PROLOG han alcanzado amplia difusin en el campo de la inteligencia artificial.

INTRODUCCIN A LA PROGRAMACIN
PORQU USAR LA COMPUTADORA PARA RESOLVER PROBLEMAS?
Las computadoras presentan muchas ventajas, y una de las ms importantes es la solucin de problemas. Una vez que la computadora sabe cmo resolver el problema lo puede estar realizando las veces que sean necesarias, sin cometer ningn error. Puede realizar una serie de clculos para encontrar resultados de experimentos en las materias de Biologa, Economa, Finanzas, Administracin, etc. Es capaz de realizar varios diseos para las reas de Arquitectura, Diseo grafico, etc. La computadora se vuelve cada da ms comercial y al alcance de la mayora de las personas, razn por la cual, sus costos bajan y los lmites de uso crecen.

PASOS PARA RESOLVER PROBLEMAS EN LA COMPUTADORA


Los pasos para la solucin de un problema son los siguientes: 1. Planteamiento y definicin del problema Se propone el problema Se delimita (que abarcara nuestra solucin) 2. Identificacin de variables de entrada y salida Identificacin de variables de entrada (parmetros de entrada que debemos considerar) Identificacin de salida (resultados que debe proporcionar el programa) 3. Redactar un algoritmo usando pseudocdigo Se realiza una redaccin de todo lo que se ir haciendo en un lenguaje coloquial para obtener el objetivo 4. Dibujar el diagrama de flujo El algoritmo se lleva a una forma grfica, la cual es una manera ms sencilla de visualizar y entender de cmo se estarn realizando las operaciones. 5. Programar (escribir un cdigo en cualquier lenguaje de programacin) Pasar el diagrama de flujo a cualquier lenguaje de programacin

HISTORIA DEL LENGUAJE C


C es un lenguaje de programacin de propsito general que ofrece bajos costos, control de flujo y estructuras sencillas, as como un buen conjunto de operadores. No es un lenguaje de muy alto nivel, sino ms bien un lenguaje pequeo, sencillo y no est especializado en ningn tipo de aplicacin. Esto lo hace un lenguaje potente, con un campo de aplicacin ilimitado y sobre todo, se aprende rpidamente. En poco tiempo, un programador puede utilizar la totalidad del lenguaje.

Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no est ligado a ningn sistema operativo ni a ninguna mquina concreta. Se le suele llamar lenguaje de programacin de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se pueden desarrollar cualquier tipo de aplicacin.

La base de C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX en un DEC PDP-7. stos son lenguajes sin tipos, al contrario que C, que proporciona varios tipos de datos. Los tipos son caracteres, nmeros enteros y en coma flotante, de varios tamaos.

Adems se pueden crear varios tipos mediante la utilizacin de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC PDP-11, quien escribi el propio sistema operativo en C.

C trabaja con diferentes tipos de datos que pueden ser manipulados por las operaciones aritmticas que proporcionan las computadoras, lo que permite que el cdigo generado sea muy eficiente y de ah el xito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de almacenamiento de datos que no sea el esttico y no proporciona mecanismos de entrada ni salida. Ello permite que el lenguaje sea reducido y los compiladores de fcil implementacin en distintos sistemas. stas carencias se compensan mediante la insercin de funciones de librera para realizar todas estas tareas, que normalmente dependen del sistema operativo.

La primera versin de estndar se public en 1988 y actualmente todos los compiladores utilizan la nueva definicin. Una aportacin de ANSI consiste en la definicin de un conjunto de libreras que acompaan al compilador y a las funciones contenidas en ellas. Muchas de las operaciones comunes con el sistema operativo se realizan a travs de stas funciones. Los ficheros de encabezamiento (headers), definen los tipos de datos y funciones incluidas en cada librera. Los programas que utilizan stas bibliotecas para interactuar con el sistema operativo tienen el mismo comportamiento en otro sistema.

ENTORNO DE C
El entorno de C incluye un fichero fuente y un programa con cdigo fuente, ficheros objeto, cdigo objeto, compiladores, libreras, ficheros ejecutables y enlazadores. Fichero fuente y el cdigo fuente: Los programas C y C++ se escriben con la ayuda de un editor de textos. Los ficheros que contiene programas en C o C++ en forma de texto se conocen como ficheros fuente, y el texto del programa que contiene se conoce como programa fuente. Siempre se escribir en los programas fuente y se guardarn en los ficheros fuente. Ficheros objeto, cdigo objeto y compiladores: Los programas fuente no pueden ejecutarse. Son ficheros de texto fcil de entender por los humanos. Para ejecutar un programa se deben seguir algunos pasos. El primero es compilar o traducir el programa fuente a su cdigo objeto equivalente. ste es el trabajo que realizan los compiladores de C y C++. Los compiladores son programas que leen un fichero de texto que contiene el programa fuente y generan un fichero que contiene el cdigo objeto. El cdigo objeto no tiene ningn significado para los seres humanos, al menos no directamente. Adems es diferente para cada computadora y para cada sistema operativo. Por lo tanto existen diferentes compiladores para diferentes sistemas operativos y para cada tipo de computadora.

Ficheros: Junto con los compiladores de C y C++, se incluyen ciertos ficheros llamados libreras. Las libreras contienen el cdigo objeto de muchos programas, que permiten leer el teclado, escribir en la pantalla, manejar nmeros, realizar funciones matemticas, etc. Las libreras se clasifican por el tipo de trabajo que hacen. El conjunto de libreras ANSI o estndar se incluyen con todos los compiladores de C y de C++. Ficheros ejecutables y enlazadores: El fichero objeto, a pesar de ser comprensible para la computadora, no puede ser ejecutado. Debido a que:

a. Es necesario combinar el fichero objeto con las libreras externas ANSI para obtener un ejecutable. b. Generalmente los programas estarn compuestos por varios ficheros fuente, y de cada uno de ellos se obtendr un fichero objeto. Por lo que es necesario unir todos los ficheros objeto, adems de las libreras en un nico fichero ejecutable. c. La computadora requiere de ciertas instrucciones para cargar y organizar en su memoria el programa y los datos, para que el programa intercambie datos con otros programas o con otras partes del propio programa.

Para llevar a cabo los anteriores pasos, se hace uso del enlazador (linker), el cual toma los ficheros objeto que componen el programa, los combina con los ficheros de la librera que sean necesarios y crea un fichero ejecutable. Una vez terminada la fase de enlazado, se puede ejecutar el programa.

Tambin ser necesario algn tipo de sistema operativo para almacenar los programas. Las partes principales del entorno del lenguaje C se muestran en la figura 3.

Editor de Texto

main( ) { /* Esto es divertido*/ }

Almacenado como archivos de cdigo fuente

M
COMPIL Compila uno o ms mdulos fuente que forman el programa completo Almacena archivos objeto MIPROG.OBJ

Archivos incluidos STDIO.H

Montador

Enlaza los archivos objeto con los archivos de biblioteca

Archivos de biblioteca

Se obtiene un archivo con un programa ejecutable

MIPROG.EXE Figura 3. Entorno de C

ERRORES DE PROGRAMACIN
Los errores de programacin se pueden clasificar en varios tipos, dependiendo de cmo se presenten: Errores de sintaxis: Son errores en el programa fuente y se deben a las palabras mal escritas, expresiones errneas o incompletas, variables que no existen, etc. Los errores de sintaxis se detectan en la compilacin. El compilador, adems de generar el cdigo objeto, nos dar una lista de errores de sintaxis. De hecho nos dar slo una cosa o la otra, ya que si hay errores no es posible generar un cdigo objeto. Avisos: adems de errores, el compilador puede dar avisos (warnings). Son errores, pero no lo suficientemente graves como para impedir la generacin del cdigo objeto. No obstante, es importante corregir stos avisos, ya que el compilador tiene que decidir entre varias opciones. Errores de enlazado: Normalmente se refieren a las funciones que no estn definidas en ninguno de los ficheros objetos ni en las libreras. Puede que hayamos olvidado o no declarado de una forma correcta la inclusin de alguna librera, fichero objeto, funcin o variable. Errores de ejecucin: Despus de obtener un fichero ejecutable, es posible que se produzcan errores. Normalmente no existen mensajes de error, sino que simplemente el programa terminar bruscamente. stos errores son ms difciles de detectar y corregir. Sin embargo, existen programas auxiliares llamados depuradores (debuggers) para buscar estos errores. Estos programas detienen la ejecucin los programas, inspeccionan las variables y ejecutan el programa paso a paso. Esto resulta til para detectar excepciones, errores sutiles, y fallos que se presentan dependiendo de las circunstancias. Errores de diseo: Son los errores ms difciles de corregir y prevenir, ya que si el programador se ha equivocado al disear su algoritmo, no habr ningn programa que lo pueda ayudar a corregirlo. Contra estos errores slo cabe practicar y pensar.

PORQU C?
Ventajas Lo que esto significa para usted

Diseado para programacin arriba Su programa ser ms fcil de disear abajo Diseado para ser estructurado Su programa ser ms fcil de leer y comprender Permite el diseo Mejora la apariencia de los programas, de forma que otros puedan seguirlos y modificarlos fcilmente. Hace ms fcil la depuracin Un lenguaje eficiente Programas ms compactos y ms rpidos Transportable Programa escrito en alguna

computadora que servir en otra con pocos, o ningn cambio Control de computador Se tiene un control casi absoluto sobre la computadora Flexibilidad Se pueden crear fcilmente otros

lenguajes y sistemas operativos

PARTES DE UN PROGRAMA
Elemento #include <stdio.h> Propsito Le indica al compilador que debe incluir el archivo de entrada / salida estndar main Marca el punto donde el programa C comienza la ejecucin. Es obligatorio en todos los programas () Deben aparecer inmediatamente detrs de main. Habitualmente, entre estos parntesis hay informacin que ser usada por el programa. /* */ Estos smbolos son opcionales y se usan para delimitar los comentarios. Los comentarios son anotaciones usadas para clarificar el programa a otras personas. compilador ; Cada sentencia C termina con un punto y coma. Por ahora puede pensar que una sentencia C est formada por un mandato (orden) C {} Las llaves son necesarias en todos los programas C. Indican el principio y el final de las instrucciones del programa Son ignorados por el

ESTRUCTURA DE UN PROGRAMA EN C
/* */ Comentarios

Inclusin de archivos main ( ) { variables locales flujo de sentencias }

definicin de funciones empleadas en main ( )

figura pagina 12 de

PRINTF ( )
Esta es una funcin separada, como lo es main ( ) y esta incluida en la biblioteca estndar que tienen todos los sistemas C. La funcin printf ( ) se usa para escribir informacin para la salida estndar (normalmente la pantalla de la computadora). La sintaxis de esta funcin es: printf ( cadenas de caracteres con especificadores de formato, variables o valores); los caracteres son delimitados por comillas simples (tal como a) y las cadenas de caracteres son delimitadas por comillas dobles (tal como Esto es una cadena de caracteres). Un especificador de formato instruye a la funcin printf ( ) sobre la forma de convertir, dar e imprimir sus argumentos. Por ahora, puede pensar en un argumento como los valores reales que hay entre los parntesis de la funcin. Un especificador de formato empieza con el carcter del porcentaje (%).

Carcter d i o u x

Argumento entero entero entero entero entero

Salida resultante Entero con signo en base decimal Entero con signo en base decimal Entero sin signo en base octal Entero sin signo en base decimal Entero sin signo en base hexadecimal usando letras minsculas

entero

Entero sin signo en base hexadecimal usando letras maysculas

f e E g

real real real real

Nmero real con signo Nmero real con signo usando notacin e Nmero real con signo usando notacin E Nmero real con signo en formato e f, pero de

tamao corto G real Nmero real con signo en formato E f, pero de tamao corto c s p carcter cadena caracteres ninguno % ninguno Imprime el smbolo % Un carcter individual de Imprime cadenas de caracteres Puntero o direccin de memoria

Hay otro grupo de caracteres individuales, que especifican algunos caracteres especiales del cdigo ASCII, que al combinarse con la diagonal invertida (\) llamada carcter de escape, forman una secuencia de escape.

Secuencia escape \n

de Descripcin Nueva lnea. Coloca el cursor al principio de la siguiente lnea

\t

Tabulador horizontal. Mueve el cursor al siguiente tabulador

\v \r

Tabulador vertical. Mueve el cursor al siguiente tabulador Retorno de carro. Coloca el cursor al principio de la lnea actual; no avanza a la lnea siguiente

\a \\

Alerta. Hace sonar la campana del sistema Diagonal invertida. Imprime un carcter de diagonal invertida en un enunciado printf

Comilla sencilla. Imprime un carcter de comilla sencilla en un enunciado printf

Doble comilla. Imprime un carcter de doble comilla en un enunciado printf

\000 \xHHH

Visualiza un carcter cuyo cdigo ASCII es 000 en octal Visualiza un carcter cuyo cdigo ASCII es HHH en hexadecimal

Ejemplo:

/* Uso de los operadores aritmticos */

#include <stdio.h> main( ) { printf( El valor 92 usando el tipo de campo d es %d. \n, 92); printf( El valor 92 usando el tipo de campo i es %i. \n, 92); printf( El valor 92 usando el tipo de campo u es %u. \n, 92); printf( El valor 92 usando el tipo de campo o es %o. \n, 92); printf( El valor 92 usando el tipo de campo x es %x. \n, 92); printf( El valor 92 usando el tipo de campo X es %X. \n, 92); printf( El valor 92.0 usando el tipo de campo f es %f \n, 92); printf( El valor 92.0 usando el tipo de campo e es %e. \n, 92); printf( El valor 92.0 usando el tipo de campo E es %E. \n, 92); printf( El valor 92.0 usando el tipo de campo g es %g. \n, 92); printf( El valor 92.0 usando el tipo de campo G es %G. \n, 92); printf( El valor 92.0 usando el tipo de campo c es %c. \n, 92); printf( El carcter 9 usando el tipo de campo c es %c. \n, 92); printf( La cadena 92 usando el tipo de campo s es %s. \n, 92); return 0; }

El valor 92 usando el tipo de campo d es 92 El valor 92 usando el tipo de campo i es 92 El valor 92 usando el tipo de campo u es 92 El valor 92 usando el tipo de campo o es 134 El valor 92 usando el tipo de campo x es 5c El valor 92 usando el tipo de campo X es 5C El valor 92.0 usando el tipo de campo f es 92.000000 El valor 92.0 usando el tipo de campo e es 9.20000e+01 El valor 92.0 usando el tipo de campo E es 9.20000E+01 El valor 92.0 usando el tipo de campo g es 92 El valor 92.0 usando el tipo de campo G es 92 El valor 92.0 usando el tipo de campo c es %c. \ El carcter 9 usando el tipo de campo c es %c. 9 La cadena 92 usando el tipo de campo s es %s. 92

ARITMTICA EN C
Operadores aritmticos
Existen dos tipos de operadores aritmticos:

Los binarios:

Operador aritmtico + * / %

Operacin C Suma Resta

en Expresin algebraica f+7 pc b*m x/y r mod s

Expresin en C f+7 p-c b*m x/y r%s

Multiplicacin Divisin Mdulo (resto)

y los unarios:

Operador Operacin en C ++ -Incremento (suma 1) Decremento (resta 1) Cambio de signo

Su sintaxis es:

binarios: <variable1><operador><variable2>

unarios: <variable><operador> y al revs, <operador><variable>.

Ejemplo : /* Uso de los operadores aritmticos */

#include <stdio.h>

main() /* Realiza varias operaciones */ { int a=1,b=2,c=3,r; r=a+b; printf("%d + %d = %d\n",a,b,r); r=c-a; printf("%d - %d = %d\n",c,a,r); b++; printf("b + 1 = %d",b); return 0; }

Operadores de asignacin
La mayora de los operadores aritmticos binarios explicados en el captulo anterior tienen su correspondiente operador de asignacin:

Operador de asignacin Operacin

= += -=

Asignacin simple Suma Resta

*= /= %=

Multiplicacin Divisin Mdulo (resto)

Con estos operadores se pueden escribir, de forma ms breve, expresiones del tipo:

n=n+3 se puede escribir n+=3 k=k*(x-2) lo podemos sustituir por k*=x-2

Ejemplo: /* Uso de los operadores de asignacin */

#include <stdio.h>

main() /* Realiza varias operaciones */ { int a=1,b=2,c=3,r; a+=5; printf("a + 5 = %d\n",a); c-=1; printf("c - 1 = %d\n",c); b*=3; printf("b * 3 = %d",b); return 0; } Los operadores relacionales se utilizan para comparar el contenido de dos variables.

En C existen seis operadores relacionales bsicos:

Operador Relaciones > < >= <= == != Mayor que Menor que Mayor o igual que Menor o igual que Igual que Distinto que

El resultado que devuelven estos operadores es 1 para Verdadero y 0 para Falso.

Si hay ms de un operador se evalan de izquierda a derecha. Adems los operadores == y != estn por debajo del resto en cuanto al orden de precedencia.

Jerarqua de los operadores


Ser importante tener en cuenta la precedencia de los operadores a la hora de trabajar con ellos:

Operador Operacin

() ++, - *, /, % +, -

Mayor precedencia

Menor precedencia

Las operaciones con mayor precedencia se realizan antes que las de menor precedencia. Si en una operacin encontramos signos del mismo nivel de precedencia, dicha operacin se realiza de izquierda a derecha. A continuacin se muestra un ejemplo sobre ello:
a*b+c/d-e 1. a*b resultado = x 2. c/d resultado = y 3. x+y resultado = z 4. z-e

Fijarse que la multiplicacin se resuelve antes que la divisin ya que est situada ms a la izquierda en la operacin. Lo mismo ocurre con la suma y la resta. Ejemplo: /* Jerarqua de los operadores */

#include <stdio.h>

main() /* Realiza una operacin */ { int a=6,b=5,c=4,d=2,e=1,x,y,z,r; x=a*b; printf("%d * %d = %d\n",a,b,x); y=c/d; printf("%d / %d = %d\n",c,d,y); z=x+y; printf("%d + %d = %d\n",x,y,z); r=z-e; printf("%d = %d",r,a*b+c/d-e); return 0; }

DESARROLLO DE PROGRAMAS ESTRUCTURADOS


SEUDOCDIGO
El seudocdigo es un lenguaje artificial e informal que auxilia a los programadores a desarrollar los algoritmos. El seudocdigo que presentamos aqu es en particular til para desarrollar algoritmos que debern ser convertidos en programas estructurados de C. El seudocdigo es similar al ingles coloquial; es cmodo y amigable, aunque no se trate de un lenguaje verdadero de programacin de computadoras. De echo, los programas en seudocdigo no son ejecutados sobre computadoras. Ms bien, slo ayudan al programador a pensar un programa, antes de intentar escribirlo en un lenguaje de programacin como C. El seudocdigo consiste solo de caracteres, por lo que los programadores pueden de forma cmoda escribir los programas en una computadora, utilizando un programa de edicin. Sobre demanda la computadora puede desplegar o imprimir una copia nueva en seudocdigo del programa. Un programa preparado cuidadosamente en seudocdigo, puede ser convertido con facilidad en el programa C correspondiente. Esto se lleva a cabo en muchos casos slo remplazando enunciados en seudocdigo por sus equivalentes en C. El seudocdigo incluye slo enunciados de accin aquellos que deben ser ejecutados cuando el programa haya sido convertido de seudocdigo a C, y luego ejecutado en C. Las declaraciones no son enunciados ejecutables. Son mensajes para el compilador. Por ejemplo, la declaracin Int i; Slo le dice al compilador el tipo de la variable i, as como instruye al compilador que reserve espacio en memoria para esta variable. Pero esta declaracin no causa ninguna accin como sera entrada, salida o clculo para que se ejecute u ocurra al ejecutarse el programa. Algunos programadores deciden enlistar al principio de un programa en seudocdigo cada variable y mencionar de forma breve el objeto de cada una de ellas. El seudocdigo es ms una ayuda informal para el desarrollo del programa.

ALGORITMO
Qu es un algoritmo?
Un algoritmo es un conjunto de instrucciones, generalmente muy precisas, para realizar una tarea determinada. Los algoritmos son esenciales especialmente en el campo de la informtica dado que las computadoras no tienen la capacidad de pensar sino solamente la de obedecer. Para realizar cualquier operacin el computador tiene que ser alimentado previamente con instrucciones muy precisas acerca de la manera de realizar dicha tarea. Por ahora, la nica ventaja del computador sobre el ser humano es su velocidad para ejecutar un algoritmo dado, no importa la cantidad de variables involucradas.

Muchas actividades de la vida diaria se llevan a cabo mediante algoritmos incorporados como hbitos o maneras de proceder. Eso es, por ejemplo, lo que ocurre en la preparacin de los alimentos: un libro de recetas es una coleccin de algoritmos. La revista Nature recibi alguna vez la carta de un lector en la que presentaba un algoritmo con el que se poda determinar el da de la semana de cualquier fecha de la historia. Firmaba Lewis Caroll.

Los algoritmos matemticos no son ms que recetas mediante las cuales se realizan operaciones como la adicin, la multiplicacin, etc. En muchas partes, la enseanza de las matemticas es totalmente algortmica y se limita a instruir a los alumnos en la ejecucin de operaciones concisas.

Ejemplo: Cualquier persona experimentada en armar rompecabezas desarrolla una especie de algoritmo para hacerlo. Usualmente el primer paso consiste en separar del montn las fichas del borde y proceder a armarlo.

Algoritmos empleando seudocdigo: Algoritmo de un da de trabajo. 1. despertar en la maana

2. levantarse de la cama 3. baarse, vestirse y arreglarse 4. desayunar 5. dirigirse al trabajo (transporte) 6. llegar a trabajar

Algoritmo para realizar la operacin y = 1. pedir valores de x, w, t y r

( x * x + w) t (r x ) * 8

2. realizar la multiplicacin de x por x 3. sumarle el valor de w 4. restarle el valor de t 5. guardar el resultado temporal 6. restar x a r 7. multiplicar por 8 8. guardar en un segundo temporal 9. dividir el resultado temporal entre el segundo temporal 10. presentar el resultado

DIAGRAMAS DE FLUJO
Estructuras de control
Por lo regular, en un programa los enunciados son ejecutados uno despus del otro, en el orden en que aparecen escritos. Esto se conoce como ejecucin secuencial. Bohm y Jacopini demostraron que todos los programas podran ser escritos en trminos de slo tres estructuras de control, a saber, la estructura de secuencia, la estructura de seleccin y la estructura de repeticin. Un diagrama de flujo es una representacin grfica de un algoritmo o de una porcin de un algoritmo. Los diagramas de flujo se trazan utilizando ciertos smbolos de uso especial como son rectngulos, diamantes, valos y pequeos crculos; estos smbolos estn conectados entre s por flechas, conocidas como lneas de flujo. Al igual que el seudocdigo, los diagramas de flujo son tiles para el desarrollo y la representacin de algoritmos. Los diagramas de flujo muestran con claridad cmo operan las estructuras de control.

Secuencia

Figura 4. Secuencia de ejecuciones

Estructura if (una seleccin)

Seleccin
Estructura if/else (doble seleccin)

Estructura switch (mltiple seleccin)

break

break

break

break

Figura 5. Diagramas de seleccin

Estructura while

Estructura do/while

Estructura for

Repeticin

Figura 6. Lazos o repeticiones

Reglas para la formacin de diagramas de flujo: 1) Empiece con el diagrama ms simple 2) Cualquier rectngulo (accin) puede ser remplazado por dos rectngulos (acciones) en secuencia 3) Cualquier rectngulo (accin) puede ser remplazado por cualquier estructura de control (secuencia, if, if/else, switch, while, do/while, o bien for) 4) Las reglas 2 y 3 pueden ser aplicadas tan frecuentemente como se desee y en cualquier orden

Regla 2

Regla 2

Regla 2

Figura 7. Una accin puede descomponerse en varias acciones

Regla 3

Regla 3

Regla 3

Figura 8. Una accin puede remplazarse por una estructura de control

DIAGRAMAS DE NASSI-SCHNEIDERMAN
Diagramas Estructurados (Nassi-Schneiderman)
Estos diagramas fueron desarrollados por I. Nassi y B. Shneiderman, tambin conocido como diagrama de Chapin.

Dado que muestran las estructuras de un programa, se denominan tambin estructogramas, los cuales permiten formular algoritmos mediante una representacin geomtrica en el que se omiten las flechas de unin y las cajas son contiguas. Cada bloque (o secuencia de acciones) se representa dentro de un rectngulo. Cada estructura utiliza una forma de representacin particular, pudiendo a su vez encerrar otros bloques.

Las estructuras N-S son las siguientes: lineal, if, case, for, while y repeat.

Estructura lineal
En la estructura lineal, las acciones se ejecutan siempre en el mismo orden.

Ejemplo 10. Estructura Lineal Inicio Leer a; Leer b: c <- a+b; Escribir c; Fin.

Estructura condicional (if..then..else..)


En esta estructura, se analizan los valores de verdad de una proposicin o condicin. Si resulta verdadera, se ejecutan ciertas acciones; si es falsa, se ejecutan otras.

Ejemplo 11. Estructura Condicional (if..then..else..)

Si (a > 5) entonces a <- a / 2; Escribir 'a es mayor que cinco.' fin sino a <- a + 3; Escribir 'a no es mayor que cinco' fin;

Estructura condicional ("if..then..")


Similar al caso anterior, si la proposicin resulta falsa, no se ejecuta ninguna accin.

Ejemplo 12. Estructura condicional (if..then) Si (a > 5) entonces a <- a / 2; Escribir 'a es mayor que cinco.' fin;

Estructura condicional (case)


En esta estructura, una variable de control puede tomar distintos valores. Segn sea el caso, se realizan distintas acciones.

Ejemplo 13. Estructura condicional (case) Casos de a

1: r <- c + d; 2: inicio d <- b - c; r <- d - d fin; 3: inicio

c <- 2b - d; r <- c / d fin; fin;

Estructura iterativa (while..do)


El control de esta estructura lo efecta una proposicin: mientras sea verdadera, la accin o secuencia de acciones se ejecuta.

Ejemplo 14. Estructura iterativa (while..do) Mientras (a > 5) hacer a <- a 1;

Estructura iterativa (repeat..until)


A diferencia del caso anterior, la proposicin determina cuando se debe dejar de ejecutar la secuencia de acciones.

Ejemplo 15. Estructura Iterativa (repeat..until) Repetir a <- a + 1; b <- b + a Hasta (a > 10);

CONTROL DE PROGRAMA
DECLARACIN DE VARIABLES, CMO PEDIR DATOS Y CLCULO DE EXPRESIONES ARITMTICAS
Declaracin de variables
Una caracterstica importante y til de C es la declaracin de variables; ya que nos ayuda a obtener cdigos ms compactos y eficaces. Adems contribuye a facilitar la depuracin, deteccin y correccin de errores.

Una variable es un espacio reservado en la computadora, para contener valores que pueden cambiar durante la ejecucin de un programa. Los tipos determinan cmo se manipular la informacin contenida en esas variables.

Para declarar una variable, primero se especifica el tipo y posteriormente una lista de variables, terminando en ";".

La sintaxis es: <tipo> <lista de variables>;

Las variables declaradas dentro de una funcin slo sern accesibles dentro de esa funcin, y se conocen como variables locales de la funcin. Las variables que se declaran fuera de las funciones estn accesibles desde su punto de declaracin hasta el final del fichero fuente (conjunto de sentencias encerradas entre {}), y se conocen como variables globales.

La definiciones de sintaxis de C++ se escribirn usando el color verde. Los valores entre corchetes son opcionales, los valores separados con | indican que slo debe escogerse uno de los valores. Los valores entre <> indica que debe escribirse un texto obligatoriamente.

Los tipos fundamentales son: void, char, int, float y double. En C++ se incluye el tipo bool, donde ciertos modificadores ajustan algunas propiedades de cada tipo. Estos modificadores puede ser: short, long, signed y unsigned o combinaciones de ellos.

[signed|unsigned] char <identificador> significa que se puede usar signed o unsigned, o ninguna de las dos, ya que ambas estn entre corchetes. Adems debe escribirse un texto, que debe ser una nica palabra que actuar como identificador 3 o nombre de la variable.

Tipo carcter (char)


La sintaxis es: [signed|unsigned] char <identificador>

Es el tipo alfanumrico que puede contener un carcter, un dgito numrico o un signo de puntuacin. Desde el punto de vista de la computadora, todos esos valores son caracteres. El tamao de memoria es de un octeto (byte). En C un carcter es tratado como un nmero, de hecho puede ser declarado con o sin signo. Si no se especifica el modificador de signo, se asume que es con signo.

Este tipo de variables se utilizan para almacenar nmeros pequeos, como los dedos que tiene una persona, o letras, como la inicial de mi nombre de pila.

Tipo entero (int)


La sintaxis es: [signed|unsigned] [short|long] int <identificador> [signed|unsigned] long [int] <identificador> [signed|unsigned] short [int] <identificador>

Los identificadore son nombres dados a constantes, variables, tipos, funciones y etiquetas de un programa.

Las variables enteras almacenan nmeros enteros dentro de los lmites de su tamao, el cual depende de la plataforma del compilador.

Tipo coma flotante (float)


La sintaxis es: float <identificador>

Las variables de este tipo almacenan nmeros en formato de coma flotante, mantisa y exponente, o sea, son nmeros con decimales. Son aptos para variables de tipo real, o para nmeros muy grandes. Lo ms importante de estos nmeros no es la precisin, sino el orden de magnitud, es decir lo grande o pequeo que es el nmero que contiene.

Tipo Booleana (bool)


La sintaxis es: bool <identificador>

Las variables de este tipo slo pueden tomar dos valores "verdadero" o "falso". Sirven para evaluar expresiones lgicas. Tambin se usan para almacenar respuestas, por ejemplo: Posees licencia de conducir?. O para almacenar informaciones que slo pueden tomar dos valores, por ejemplo: qu mano usas para escribir.

Tipo coma flotante de doble precisin (double)


La sintaxis es: [long] double <identificador>

Las variables de este tipo almacenan nmeros en formato de coma flotante, mantisa y exponente, al igual que float, pero stos son ms precisos.

Tipo "void
La sintaxis es: void <identificador>

Es un tipo especial que indica la ausencia de tipo. Se usa con frecuencia en las funciones que no devuelven ningn valor, tambin en las funciones donde no requieren parmetros, aunque este uso slo es obligatorio en C, y opcional en C++. Lo mismo se aplica en las funciones sin parmetros de entrada.

Tipo enumerado ("enum")


La sintaxis es: enum [<identificador de tipo>] {<nombre de constante> [= <valor>], ...} [lista de variables];

Este tipo define conjuntos de constantes, normalmente de tipo int, llamados datos de tipo enumerado. Las variables declaradas slo podrn tomar valores entre los que ya estn definidos. El identificador de tipo es opcional, y declara ms variables del tipo enumerado en otras partes del programa:

La sintaxis es: [enum] <identificador de tipo> <variable1> [,<variable2>[...]];

Varios identificadores pueden tomar el mismo valor, pero cada identificador slo puede usarse en un tipo enumerado.

Ejemplo 1. Tipo enumerado (enum)

enum tipohoras { uno=1, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez, once, doce, trece=1, catorce, quince, dieciseis, diecisiete, dieciocho, diecinueve, veinte, ventiuna, ventidos, ventitres, venticuatro = 0};

En este caso, uno y trece valen 1, dos y catorce valen 2, etc. Y veinticuatro vale 0. Como se puede ver en el ejemplo, una vez que se asigna un valor a un elemento de la lista, los siguientes elementos toman valores correlativos. Si no se asigna ningn valor, el primer elemento tomar el valor 0.

FUNCIN IF
Sentencia If
La sentencia slo se ejecuta si se cumple la condicin. En caso contrario el programa sigue su curso sin ejecutar la sentencia.

La sintaxis es: if ( condicin ) sentencia

La condicin es una expresin de cualquier clase. Si el resultado de la expresin es CERO, se considera una condicin falsa. Si el resultado de la expresin NO es CERO, se considera una condicin verdadera.

Ejemplo 16. Sentencia If int x = 1; main() { if ( x == 1 ) printf (la variable x vale uno\n); if ( x>=2 && x<=10 ) printf (x est entre 2 y 10\n); }

IF...ELSE
Sintaxis: if (condicin) sentencia;

La sentencia solo se ejecuta si se cumple la condicin. En caso contrario el programa sigue su curso sin ejecutar la sentencia.

Otro formato:

if (condicin) sentencia1; else sentencia2;

Si se cumple la condicin ejecutar la sentencia1, sin ejecutar la sentencia2. En cualquier caso, el programa continuar a partir de la sentencia2

Ejemplo: /* Uso de la sentencia condicional IF. */

#include <stdio.h>

main() /* Simula una clave de acceso */ { int usuario,clave=18276; printf("Introduce tu clave: "); scanf("%d",&usuario); if(usuario==clave) printf("Acceso permitido");

else printf("Acceso denegado"); return 0; }

Otro formato, if anidados:

if (condicin) sentencia1; else if (condicin) sentencia2; else if (condicin) sentencia3; else sentencia4;

Con este formato el flujo del programa nicamente entra en una de las condiciones. Si una de ellas se cumple, se ejecuta la sentencia correspondiente y salta hasta el final de la estructura para continuar con el programa.

Existe la posibilidad de utilizar llaves para ejecutar ms de una sentencia dentro de la misma condicin. Ejemplo: /* Uso de la sentencia condicional ELSE...IF. */

#include <stdio.h>

main() /* Escribe beb, nio o adulto */ { int edad; printf("Introduce tu edad: "); scanf("%d",&edad);

if (edad<1) printf("Lo siento, te has equivocado."); else if (edad<3) printf("Eres un beb"); else if (edad<13) printf("Eres un nio"); else printf("Eres adulto"); return 0; }

INCREMENTOS Y DECREMENTOS
Operador Operacin en C ++ -+= -= *= /= variable +1 variable 1 variable + incremento variable - incremento variable * incremento variable / incremento

Variable = variable operador incremento Si el operador ++ o -- se coloca a la izquierda, se llama preincremento o predecremento, respectivamente. Si se coloca a la derecha, se llama postincremento o postdecremento. Cuando se escriben estas expresiones dentro de expresiones ms complejas, el valor que se devuelve es: 1. Operaciones pre: El valor nuevo de la variable afectada 2. Operaciones post: el valor anterior de la variable afectada

Ejemplo: x=1; A = ++x; /* preincremento*/ /* A valdr 2, x valdr 2*/ x=1; A = x++; /* postincremento:*/ /* A valdr 1, x valdr 2*/

Las asignaciones compuestas devuelven el nuevo valor de la variable:

x=2; A=(x*=3)+1;

/* x valdr 6, A valdr 7 */

Cont++ ;

/*esta es una forma de hacer cont = cont+1 */

#include <stdio.h> main() { int c;

c=5; printf(%d\n,c); printf(%d\n,c++); /* postincremento*/ printf(%d\n\n,c);

c=5; printf(%d\n,c); printf(%d\n,++c); /* preincremento */ printf(%d\n,c); return 0; }

FUNCIN WHILE
Bucles
Los bucles son estructuras que ejecutan partes del cdigo de forma repetida mientras se cumpla una condicin.

Esta condicin puede ser simple o compuesta de otras condiciones unidas por operadores lgicos.

Sentencia While
Con esta sentencia se controla la condicin antes de entrar en el bucle. Si sta no se cumple, el programa no entrar en el bucle.

Obviamente, si en el interior del bucle hay ms de una sentencia, stas debern ir entre llaves para que se ejecuten como un bloque.

La sintaxis es: While (condicin) { .... sentencias .... };

Ejemplo 17. Sentencia While while (x < 100)x =x +1;

Se incrementar el valor de x mientras x sea menor que 100.

Este ejemplo se puede escribir, usando el lenguaje C con propiedad y elegancia, de un modo ms compacto:

while (x++ < 100);

Este es el uso de una sentencia nula. Como se puede ver el bucle simplemente se repite, y la sentencia ejecutada es ";", es decir, nada.

FUNCIN FOR
Sentencia For
La sentencia for realiza un conjunto de sentencias evaluando la condicin central. La sintaxis es: For ( variable = valor inicial ; condicin ; incremento) {... .... sentencias.... ... .... }

La expresin inicial se ejecuta antes de entrar en el bucle. Si la condicin es cierta, se ejecuta la sentencia y despus se incrementa. La sentencia se ejecuta varias veces hasta que la evaluacin de la condicin sea falsa. Todas las expresiones son opcionales, si no se especifica la condicin se asume que es verdadera.

Ejemplo 18. Sentencia For Muestra el contenido de la variable cont 10 veces.

for (cont =0 ; cont <= 10 ; cont++) { printf( %d ,cont); };

Ejemplo 19. Sentencia For

for(int i =0;i <100;i =i +1);

Como las expresiones son opcionales, podemos simular bucles "while": for(;i < 100;)i =i +1; for(;i++ < 100;);

O bucles infinitos: for(;;);

FUNCIN SWITCH
Sentencia Switch
Esta estructura se utiliza en los mens, de manera que dependiendo de la opcin que se seleccione, se ejecuta una serie de sentencias.

La sintaxis es: switch (variable){ case contenido_variable1: sentencias; break; case contenido_variable2: sentencias; break; default: sentencias; }

Cada "case" puede incluir una o ms sentencias sin necesidad de ir entre llaves, ya que se ejecutan hasta que se encuentra la sentencia "break". La variable evaluada slo puede ser de tipo entero o carcter. Si no se satisface ningn "case", el control parar a la siguiente sentencia despus de la etiqueta "default". Esta etiqueta es opcional y si no aparece abandonar la sentencia "switch". Ejemplo 20. Sentencia Switch int opcion; printf ( "Escriba 1 si desea continuar; 2 si desea terminar: " ); scanf ( "%d", &opcion );

switch ( opcion ) { case 1: printf ("Continuar\n"); break; case 2: salir = 1; break; default: printf ("opcin no reconocida\n"); }

En este ejemplo aparecer en la pantalla el valor de 1 si se desea continuar y 2 cuando desee terminar.

FUNCIN DO/WHILE
Sentencia (do...while)
Esta sentencia va un paso ms all que el "while", pero iterando al menos una vez.

La sintaxis es: do{ sentencia1; sentencia2; } while (condicin);

La sentencia se ejecuta varias veces mientras la condicin resulte falsa. Si no se especifica condicin se asume que es "verdadera", y el bucle se ejecutar indefinidamente. La nica diferencia entre las sentencias while y do...while es que con la segunda, el cuerpo del bucle se ejecutar por lo menos una vez.

Ejemplo 21. Sentencia Do/While do x =x +1; while (x < 100);

En este ejemplo el valor de x se incrementar hasta que valga 100.

PALABRAS RESERVADAS: BREAK Y CONTINUE


Control de bucles: ("break") y ("continue")
break y continue permiten controlar la ejecucin de bucles while, for y

do...while.

Sentencia de ruptura ("break")


Esta sentencia se utiliza para terminar la ejecucin de un bucle o salir de una sentencia switch. La sintaxis es: Break;

Ejemplo 22. Sentencia Break ..Continue y =0; x =0; while(x < 1000) { if(y == 1000) break; y++;

x =1;

En este ejemplo el bucle no terminara nunca si no fuera por la lnea del "break", ya que x no cambia. Despus del "break" el programa continuara en la lnea "x = 1".

Sentencia de "Continue"
Se utiliza dentro de un bucle. Cuando el programa llega a una sentencia continue no ejecuta las lneas de cdigo que hay a continuacin y salta a la siguiente iteracin del bucle.

Su sintaxis es:

continue; Ejemplo 23. Sentencia Continue y =0; x =0; while(x < 1000) { x++; if(y >= 100) continue; y++; }

En este ejemplo la lnea "y++" slo se ejecutara mientras "y" sea menor que 100, en cualquier otro caso el control pasa a la lnea "}", con lo que el bucle volvera a evaluarse.

OPERADORES LGICOS
Los operadores lgicos bsicos son tres:

operador Operacin en C && || ! AND OR NOT (El valor contrario)

Los operadores "&&", "||" y "!" relacionan expresiones lgicas, formando a su vez nuevas expresiones lgicas.

Sintaxis: <expresin1> && <expresin2> <expresin1> || <expresin2> !<expresin> El operador "&&" equivale al "AND" o "Y"; devuelve "true" slo si las dos expresiones evaluadas son "true" o distintas de cero, en caso contrario devuelve "false" o cero. Si la primera expresin evaluada es "false", la segunda no se evala. Generalizando, con expresiones AND con ms de dos expresiones, la primera expresin falsa interrumpe el proceso e impide que se continue la evaluacin del resto de las expresiones. Esto es lo que se conoce como "cortocircuito", y es muy importante, como veremos posteriormente. A continuacin se muestra la tabla de verdad del operador &&:

Expresin 1 Expresin 2 Expresin 1 && Expresin 2 falsa ignorada falsa

verdadera verdadera

falsa verdadera

falsa verdadera

El operador "||" equivale al "OR" u "O inclusivo"; devuelve "true" si cualquiera de las expresiones evaluadas es "true" o distinta de cero, en caso contrario devuelve "false" o cero. Si la primera expresin evaluada es "true", la segunda no se evala.

Expresin 1 Expresin 2 Expresin 1 || Expresin 2 falsa falsa verdadera falsa verdadera ignorada falsa verdadera verdadera

El operador "!" es equivalente al "NOT", o "NO", y devuelve "true" slo si la expresin evaluada es "false" o cero, en caso contrario devuelve "true". La expresin "!E" es equivalente a (0 == E).

Expresin 1 !Expresin 1 falsa verdadera verdadera falsa

ARREGLOS UNIDIMENSIONALES
Un arreglo es un grupo de posiciones en memoria relacionadas entre si, por el echo de que todos tienen el mismo nombre y son del mismo tipo. Para referirnos a una posicin o elemento dentro del arreglo especificamos el nombre del arreglo y el nmero de posiciones.

Un arreglo de enteros llamado c esta dado por:

c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9] c[10] c[11]

-45 6 0 72 1543 -89 0 62 -3 5 21 -3


Posicin numrica del elemento dentro del arreglo c Nombre del arreglo (note que todos los elementos de este arreglo tienen el mismo nombre C

La numeracin de los elementos se inicia a partir del elemento cero, por lo tanto iniciamos en c[0] y el segundo es c[1] de tal forma que el elemento i de c es c[i-1].

El nmero dentro del corchete se conoce como subndice; a=5yb=2

podemos combinar variables de tal forma que: c[a + b] += 2 /* aade 2 al elemento 7 de c */

Podemos realizar operaciones con sus elementos como: printf(%d, c[0] + c[1] + c[2]); x = c[I] / 2;

Cmo declarar los arreglos?


Los arreglos ocupan espacio en memoria. El programador especifica el tipo de cada elemento y el nmero de elementos requeridos por cada arreglo. int c[12]; sta lnea reserva 12 localidades enteras, se puede reservar varios arreglos dentro de una sola declaracin. int b[100], x[27];

Se pueden declarar de otro tipo de datos como char caracteres.

Ejemplo: #include <stdio.h> main() { int n[100], i; for( i=0; i <= 9; i++) n[i]=0; printf(%s%13s\n,Elemento,valor); for( i=0; i <= 9; i++) printf(%7d%13d\n, i, n[i]);

returno 0; }

Iniciacin de arreglos
Para inicializar un arreglo a cero se inicializa el primer elemento y los dems elementos son iniciados a cero, es decir: int n[10] = 0;

Inicia todos los elementos de n a cero. Podemos declarar los valores de los arreglos como: int n[10] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37};

Si de una declaracin con una lista con los valores iniciales del arreglo se omite el tamao, el nmero de elementos en el arreglo ser el nmero de elementos incluidos en la lista. int n[ ] = {1, 2, 3, 4, 5} /*Creara un arreglo de cinco elementos */

La directiva de procesador #define como: #define TAMAO 10 valor es 10 */ /* Define una constante simblica TAMAO cuyo

Facilita a los programadores el hacer a los programas ms dimensionables pues en los programas para aumentar las dimensiones slo tiene que cambiarse la definicin de la variable sin alterar el programa:

Ejemplo: #include <stdio.h> #define TAMAO 10 main() {

int s[TAMAO], i; for( i=0; i <= TAMAO - 1; i++) s[i] = 2 + 2 * i; printf(%s%13s\n, Elemento, Valor); for( i=0; i <= TAMAO - 1; i++) printf(%7d%13d\n, j, s[i]); return 0; }

#include <stdio.h> #define TAMAO 12 main() { int a[TAMAO] = {1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45}, i, total = 0; for( i=0; i <= TAMAO - 1; i++) total += a[i]; printf(suma total del arreglo %d\n, total); return 0; }

ARREGLOS BIDIMENSIONALES
Matrices
Una matriz es un arreglo multidimensional. Se definen igual que los vectores excepto que se requiere un ndice por cada dimensin.

La sintaxis es la siguiente: tipo nombre [tamao 1][tamao 2]...;

Una matriz bidimensional se podra representar grficamente como una tabla con filas y columnas. Si al declarar una matriz tambin se quiere inicializarla, habr que tener en cuenta el orden en el que los valores son asignados a los elementos de la matriz.

Ejemplo 28. Matrices int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

Los valores introducidos quedaran asignados de la siguiente manera:

numeros[0][0]=1 numeros[0][1]=2 numeros[1][0]=5 numeros[1][1]=6

numeros[0][2]=3 numeros[1][2]=7

numeros[0][3]=4 numeros[1][3]=8

numeros[2][0]=9 numeros[2][1]=10 numeros[2][2]=11 numeros[2][3]=12

Tambin se pueden inicializar cadenas de texto: char dias[7][10]={"lunes","martes","mircoles","jueves","viernes","sbado","domingo"};

Para referirnos a cada palabra bastara con el primer ndice: printf("%s",dias[i]);

ARREGLOS DE CARACTERES
Los arreglos de caracteres tienen varias caracterstica nicas. Un arreglo de caracteres puede ser inicializado utilizando una literal de cadena. char string1[ ] = primero;

Ejemplo: #include <stdio.h> #define TAMAO 10 main() { int n[TAMAO] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1}; int i, j; printf(%s%13s%17s\n, Elemento, Valor, Histograma); for( i=0; i <= TAMAO - 1; i++) { printf(%7d%13d , I, n[i]);

for( j=0; j <= n[i] ; j++) printf(%c,*); printf(\n); } return 0; }

Los arreglos de caracteres tambin pueden ser inicializados con constantes individuales de caracteres en una lista de inicializacin: char string1[ ] = {f, i, r, s, t, \0};

Tambin podemos introducir desde el teclado directamente una cadena en un arreglo de caracteres, utilizando scanf y la especificacin de conversin %s

char string2[20]; scanf(%s, string2);

Note que para ste caso no es necesario el & al inicio de la variable o el origen

Ejemplo: #include <stdio.h>

main() { int h[5]; for( i=0; i < 5; i++) scanf(%d, &h[i] for( i=0; i < 5 ; i++) printf(%d, h[i]); return 0; }

CADENAS DE CARACTERES
En C no existe un tipo predefinido para manipular cadenas de caracteres (strings). Sin embargo, el estndar de C define algunas funciones de biblioteca para tratamiento de cadenas.

La forma de declarar una cadena en C es mediante un vector de caracteres:

char hola [5];

Toda cadena ha de terminar con el carcter especial 0 (cero).

El C no tiene otra manera de detectar el final de una cadena.

Literales e iniciacin de cadenas

Los literales tipo cadena son de la forma

"texto entre comillas"

Al declarar una vector de caracteres, se le puede inicializar con un literal:

char texto [4] = "abc";

Pero NO se puede hacer una asignacin de ese tipo en una sentencia:

texto = "xyz"; /* ERROR */

En su lugar, hay que emplear ciertas funciones de biblioteca.

Tres formas equivalentes de inicializar una cadena:

char hola [5] = { 'h', 'o', 'l', 'a', 0 }; char hola [5] = "hola"; Ejemplo : main() { char hola [5]; hola[0] = h;

hola[1] = o; hola[2] = l; hola[3] = a; hola[4] = 0; }

Obsrvese que una cadena de N elementos es capaz de almacenar un texto de N-1 caracteres (el ltimo siempre ha de ser un cero).

No importa que un vector de caracteres contenga una cadena de menos letras, el carcter cero marca el final de la cadena.

Lo que s es un error peligroso (y adems no lo detecta siempre el compilador) es intentar asignarle a un vector de caracteres una cadena de mayor tamao. Hay que cuidar mucho que las cadenas queden dentro del espacio reservado para ellas.

Visualizacin de cadenas

La funcin printf admite formato de cadenas, con %s

char cadena[80]; ... printf ( "El texto es %s\n", cadena );

Para usar printf, debera incluirse la cabecera <stdio.h>

El formato %s admite modificadores. Por ejemplo:

%20s Texto a la derecha, ocupando siempre 20 caracteres

%-15s Texto alineado a la izquierda, ocupando 15 caracteres

Para imprimir slo la cadena, seguida de un salto de lnea, se puede emplear puts (tambin pertenece a <stdio.h>):

puts (cadena);

Biblioteca de manejo de cadenas (string.h)

La biblioteca <string.h> contiene un conjunto de funciones para manipular cadenas: copiar, cambiar caracteres, comparar cadenas, etc. Las funciones ms elementales son:

Funcin "strlen()"
Calcula la longitud de una cadena. Sintaxis: size_t strlen(const char *s); "strlen" calcula la longitud de la cadena s. Valor de retorno: "strlen" devuelve el nmero de caracteres que hay en s, excluyendo el carcter nulo de terminacin de cadena.

Ejemplo: #include <iostream.h> #include <string.h> int main() { char *cadena = "Una cadena C++ termina con cero"; cout << "La cadena: [" << cadena << "] tiene " < strlen(cadena) << " caracteres" << endl; return 0; }

Funcin "strcpy()"
Copia una cadena en otra. Sintaxis:

char *strcpy(char *dest, const char *orig); Copia la cadena orig a dest, la copia de caracteres se detendr cuando sea copiado el carcter nulo. Valor de retorno: "strcpy" devuelve el puntero dest.

Ejemplo: #include <iostream.h> #include <string.h> int main() { char *cadena = "Cadena ejemplo"; char cad[32]; cout << strcpy(cad, cadena) << endl; cout << cad << endl; return 0; }

Funcin "strcmp()"
Compara dos cadenas. Sintaxis: int strcmp(char *cad1, const char *cad2); Compara las dos cadenas, si la cad1 es mayor que cad2 el resultado ser mayor de 0, si cad1 es menor que cad2, el resultado ser menor de 0, si son iguales, el resultado ser 0. La comparacin se realiza carcter a carcter. Mientras los caracteres comparados sean iguales, se contina con el siguiente carcter. Cuando se encuentran caracteres distintos, aqul que tenga un cdigo ASCII menor pertenecer a la cadena menor. Por supuesto, si las cadenas son iguales hasta que una de ellas se acaba, la ms corta es la menor.

Ejemplo:

#include <iostream.h> #include <string.h> int main() { char *cadena1 = "Cadena ejemplo 1"; char *cadena2 = "Cadena ejemplo 2"; char *cadena3 = "Cadena"; char *cadena4 = "Cadena"; if(strcmp(cadena1, cadena2) < 0) cout << cadena1 << " es menor que " << cadena2 << endl; else if(strcmp(cadena1, cadena2) > 0) cout << cadena1 << " es menor que " << cadena2 << endl; else cout << cadena1 << " es igual que " << cadena2 << endl; cout << strcmp(cadena3, cadena2) << endl; cout << strcmp(cadena3, cadena4) << endl; return 0; }

Funcin "strcat()"
Aade o concatena una cadena a otra. Sintaxis: char *strcat(char *dest, const char *orig); "strcat" aade una copia de orig al final de dest. La longitud de la cadena resultante ser strlen(dest) + strlen(orig). Valor de retorno: "strcat" devuelve un puntero a la cadena concatenada.

Ejemplo: #include <iostream.h> #include <string.h>

int main() { char *cadena1 = "Cadena de"; char *cadena2 = " ejemplo"; char cadena3[126]; strcpy(cadena3, cadena1); cout << strcat(cadena3, cadena2) << endl; return 0; }

Funcin "strncpy()"
Copia un determinado nmero de caracteres de una cadena en otra. Sintaxis: char *strncpy(char *dest, const char *orig, size_t maxlong); Copia maxlong caracteres de la cadena orig a dest, si hay ms caracteres se ignoran, si hay menos se rellenar con caracteres nulos. La cadena dest no se terminar con nulo si la longitud de orig es maxlong o ms. Valor de retorno: "strncpy" devuelve el puntero dest.

Ejemplo: #include <iostream.h> #include <string.h> int main() { char *cadena = "Cadena ejemplo"; char cad[32]; strncpy(cad, cadena, 4); cad[4] = '\0'; cout << cad << endl; return 0;

Funcin "strncmp()"
Compara dos porciones de cadenas. Sintaxis: int strncmp(char *cad1, const char *cad2, size_t maxlong); Compara las dos cadenas igual que strcmp, pero slo se comparan los primeros maxlong caracteres.

Ejemplo: #include <iostream.h> #include <string.h> int main() { char *cadena1 = "Cadena ejemplo 1"; char *cadena2 = "Cadena ejemplo 2"; char *cadena3 = "Cadena"; char *cadena4 = "Cadena"; if(strncmp(cadena1, cadena2, 6) < 0) cout << cadena1 << " es menor que " << cadena2 << endl; else if(strncmp(cadena1, cadena2, 6) > 0) cout << cadena1 << " es menor que " << cadena2 << endl; else cout << cadena1 << " es igual que " << cadena2 << endl; cout << strncmp(cadena3, cadena2, 5) << endl; cout << strncmp(cadena3, cadena4, 4) << endl; return 0; }

Funcin "strncat()"
Aade o concatena una porcin de una cadena a otra.

Sintaxis: char *strncat(char *dest, const char *orig, size_t maxlong); "strncat" aade como mximo maxlong caracteres de la cadena orig al final de dest, y despus aade el carcter nulo. La longitud de la cadena resultante ser strlen(dest) + maxlong. Valor de retorno: "strncat" devuelve un puntero a la cadena concatenada.

Ejemplo: #include <iostream.h> #include <string.h> int main() { char *cadena1 = "Cadena de"; char *cadena2 = " ejemplo"; char cadena3[126]; strcpy(cadena3, cadena1); cout << strcat(cadena3, cadena2, 5) << endl; return 0; }

Funcin "strtok()"
Busca dentro de una cadena conjuntos de caracteres o smbolos (tokens) separados por delimitadores. Sintaxis: char *strtok(char *s1, const char *s2); "strtok" considera la cadena s1 como una lista de smbolos separados por delimitadores de la forma de s2. La primera llamada a "strtok" devuelve un puntero al primer caracter del primer smbolo de s1 e inserta un carcter nulo a continuacin del smbolo retornado. Las

siguientes llamadas, especificando null como primer argumento, siguen dando smbolos hasta que no quede ninguno. El separador, s2, puede ser diferente para cada llamada. Valor de retorno: "strtok" devuelve un puntero al smbolo extraido, o NULL cuando no quedan smbolos.

Ejemplo: #include <string.h> #include <iostream.h> int main(void) { char entrada[32] = "abc,d,efde,ew,231"; char *p; // La primera llamada con entrada p = strtok(entrada, ","); if(p) cout << p << endl; // Las siguientes llamadas con NULL while(p) { p = strtok(NULL, ","); if(p) cout << p << endl; } return 0; }

28.2.- Arreglos (Arrays) Empezaremos con los tipos de datos estructurados, y con el ms sencillo, los arrays. Los arreglos permiten agrupar datos usando un mismo identificador. Todos los elementos de un arreglo son del mismo tipo, y para acceder a cada elemento se usan subndices.

La sintaxis es: <tipo> elementos>]...]; <variable de arreglo>[<nmero de elementos>][[<nmero de

Los valores para el nmero de elementos deben ser constantes, y se pueden usar tantas dimensiones como queramos, limitado slo por la memoria disponible.

Cuando slo se usa una dimensin se suele hablar de listas o vectores, y cuando se usan dos dimensiones se refiere a las tablas.

Las cadenas de caracteres son un tipo especial de arrays. Se trata en realidad de arrays de una dimensin de tipo char. Los subndices son enteros, y pueden tomar valores desde 0 hasta <nmero de elementos>-1. Esto es muy importante, y hay que tener mucho cuidado.

Ejemplo 29. Arrays int Vector[10]; Crear un array con 10 enteros a los que podr tener acceso como Vector[0] a Vector[9]. Como subndice se puede usar cualquier expresin entera.

En general C++ no verifica el mbito de los subndices. Si se declara un array de 10 elementos, no obtendremos errores al acceder al elemento 11. Sin embargo, si se asignan valores a los elementos fuera del mbito declarado, se entrar a algunas zonas de memoria que puedan pertenecer a otras variables o incluso al cdigo ejecutable de el programa, generalmente con algunas consecuencias.

Ejemplo 30. Arrays int Tabla[10][10]; char DimensionN[4][15][6][8][11]; ... DimensionN[3][11][0][4][6] = DimensionN[0][12][5][3][1]; Tabla[0][0] += Tabla[9][9];

En este ejemplo, cada elemento de Tabla, desde Tabla[0][0] hasta Tabla[9][9] es un entero. Del mismo modo, cada elemento de DimensionN es un carcter.

28.1 Arrays multidimensionales


28.1.1.- Mltiples dimensiones Se pueden declarar matrices de dos o ms dimensiones.

La sintaxis es: tipo matriz [ dimensin1 ] [ dimensin2 ] ... ;

Ejemplo 31. Arrays multidimensionales int matriz [3][8] ;

Se accede a los elementos con esta expresin: matriz [i][j]

NOTA: la expresin matriz[i,j] no es vlida, pero es una expresin correcta en C y no dar ningn error de compilacin (equivale a haber escrito matriz[j]). 28.1.2.- Precauciones con los vectores El compilador de C reconoce la expresin vector[i,j], pero es un error. El C numera los elementos de un vector desde CERO. El C no detecta ndices fuera de rango.

Si A y B son vectores, la expresin A = B es ilegal.

26. Reglas para la formacin de programas estructurados


26.1.- Estructuras Una estructura es un nuevo tipo de datos que puede ser manipulado de la misma forma que los tipos predefinidos como float, int, char, entre otros. Una estructura se puede definir como una coleccin de datos de diferentes tipos, lgicamente relacionados. En C una estructura slo puede contener declaraciones de variables. En otros compiladores, este tipo de construcciones son conocidas como registros.

La sintaxis es: struct tipo_estructura { tipo_variable nombre_variable1; tipo_variable nombre_variable2; tipo_variable nombre_variable3; };

Donde tipo_estructura es el nombre del nuevo tipo de dato que se ha creado. Por ltimo, tipo_variable y nombre_variable son las variables que forman parte de la estructura.

Para declarar una variable de tipo estructura, la estructura tiene que estar declarada antes de la funcin main.

El manejo de las estructuras es muy sencillo, as como el acceso a los campos ( o variables ) de estas estructuras. La forma de acceder a estos campos es la siguiente:

variable.campo;

Donde variable es el nombre de la variable de tipo estructura que se ha creado, y campo es el nombre de la variable que forma parte de la estructura.

Otra caracterstica interesante de las estructuras es que permiten pasar el contenido de una estructura a otra, siempre que sean del mismo tipo.

Al igual que con los otros tipos de datos, tambin es posible inicializar variables de tipo estructura en el momento de su declaracin:

struct trabajador fijo={"Pedro","Hernndez Surez", 32, "gerente"};

Si uno de los campos de la estructura es un arreglo de nmeros, stos valores debern ir entre llaves:

Ejemplo 24. Estructuras struct notas { char nombre[30]; int notas[5]; };

struct notas alumno={"Carlos Prez",{8,7,9,6,10}};

26.2.- Estructuras y funciones


Se puede enviar una estructura a una funcin de dos maneras: 1.- Por valor: la sintaxis es:

void visualizar(struct trabajador);

Despus declararamos la variable fijo y su llamada sera: visualizar(fijo);

Por ltimo, el desarrollo de la funcin sera: void visualizar(struct trabajador datos)

2.- Por referencia: la sintaxis es: void visualizar(struct trabajador *);

Despus de declarar la variable fijo su llamada ser: visualizar(&fijo);

Por ltimo, el desarrollo de la funcin ser: void visualizar(struct trabajador *datos)

En la funcin visualizar, el acceso a los campos de la variable datos se realiza mediante el operador ->, ya que se trata con un puntero. En estos casos siempre se utiliza el operador >.

26.3.- Asignacin de Estructuras La asignacin de estructuras es entre las variables del mismo tipo de estructura y funciona conforme a la intuicin.

Ejemplo 25. Asignacin de estructuras struct Punto { int x, y; Punto() {x = 0;y =0;} } Punto1, Punto2; int main() {

Punto1.x = 10; Punto1.y = 12; Punto2 = Punto1; } Donde la lnea: Punto2 = Punto1; equivale a: Punto2.x = Punto1.x; Punto2.y = Punto1.y;

26.4.- Estructuras anidadas: Tambin est permitido anidar estructuras, con lo cual se pueden hacer superestructuras muy elaboradas.

Ejemplo 26. Estructuras anidadas struct stDireccion { char Calle[64]; int Portal; int Piso; char Puerta[3]; char CodigoPostal[6]; char Poblacion[32]; }; struct stPersona { struct stNombre { char Nombre[32]; char Apellidos[64]; } NombreCompleto;

stDireccion Direccion; char Telefono[10]; }; ... En el ejemplo anterior para poder acceder a una estructura se necesita hacer referencia a la estructura ms externa. Por ejemplo para declarar una variable del tipo stNombre hay que utilizar el operador de acceso (::): stPersona::stNombre NombreAuxiliar;

Sin embargo para declarar una variable de tipo stDireccion basta con declararla: stDireccion DireccionAuxiliar;

26.5.- Arreglos de estructuras Cuando los elementos de una arreglo son de tipo estructura, el arreglo recibe el nombre de arreglo de estructura o arreglo de registros.

Ejemplo 27. Arreglos de Estructuras struct trabajador { char nombre[20]; char apellidos[40]; int edad; }; struct trabajador fijo[20];

En este ejemplo se pueden almacenar los datos de 20 trabajadores. Para ver el nombre del cuarto trabajador utilizamos: fijo[3].nombre;. Para ver la tercera letra del nombre del cuarto trabajador se usa: fijo[3].nombre[2];. Para inicializar la variable en el momento de declararla se hace de la siguiente manera: struct trabajador fijo[20]={{"Jos","Herrero Martnez",29},{"Luis","Garca Snchez",46}};