Vous êtes sur la page 1sur 21

UNIDAD IV.

- CONCEPTOS BSICOS DE PROGRAMACIN TIEMPO APROXIMADO: 10 Horas OBJETIVO DE LA UNIDAD: Disear algoritmos y aplicar los conceptos esenciales para la elaboracin de programas bsicos. CONTENIDO 4.1. Componentes bsicos de un lenguaje de programacin 4.1.1. Palabras reservadas 4.1.2. Comentarios 4.1.3. Tipos de datos 4.1.4. Identificadores 4.1.5. Operadores 4.2 Estructura general de un programa 4.3 Programas bsicos

4.1. Componentes bsicos de un lenguaje de programacin Lenguajes de programacin Un programa es un conjunto de instrucciones que se dan al ordenador indicndoles las operaciones o tareas a realizar. Estas instrucciones se dan en un determinado lenguaje de programacin, el cual tiene una determinada sintaxis (palabras clave, smbolos) y debe redactarse cumpliendo una determinada gramtica (reglas). LENGUAJE DE PROGRAMACIN---> herramienta que nos permite transformar un algoritmo en un programa. Consta de: Un lxico. Una gramtica. Una semntica. Los circuitos electrnicos de la UC slo pueden interpretar instrucciones escritas en lenguaje mquina, por lo que los programas escritos en Lenguajes de alto nivel hay que traducirlos a lenguaje mquina para que el procesador los pueda procesar. Para realizar esta tarea existen unos programas llamados traductores que realizan esta labor (le damos un programa escrito en un lenguaje de alto nivel y genera un programa equivalente escrito en lenguaje mquina). Existen dos tipos de traductores: compiladores e intrpretes. Compiladores: traducen el programa inicial (programa fuente) y generan un programa (programa objeto). Intrpretes: van analizando, traduciendo y ejecutando una a una las instrucciones del programa fuente; no se analiza una instruccin hasta que la anterior se haya ejecutado. Los intrpretes no generan programa objeto. Clasificacin de los lenguajes de programacin Los lenguajes de programacin los podemos clasificar en los siguientes grupos: Lenguaje mquina (prcticamente no utilizado). Son directamente inteligibles por el ordenador, ya que sus instrucciones son cadenas binarias. Dificultad de codificacin, poca fiabilidad, dificultad grande de verificar y poner a punto, slo ejecutable en el procesador especfico. Lenguaje de bajo nivel (ensamblador). Dependen de la mquina en particular y difcil de programar. Son ms fciles de codificar que en lenguaje mquina. Dependen de la mquina particular donde se ejecutan. Son ms difciles de programar que los lenguajes de alto nivel. Lenguajes de alto nivel. Son independientes de la mquina, no dependen del diseo del hardware, son muy portables. Ms fciles de programar y entender. La sintaxis usada est ms cerca del lenguaje humano que de la mquina. Inconvenientes: Tiempo de ejecucin mayor y no se aprovechan los recursos internos de la mquina eficientemente. Existen muchos lenguajes de programacin de alto nivel (C/C++, COBOL, Visual Basic, Java, Modula-2, LISP, etc.) El Lenguaje C. - Es un lenguaje de nivel medio: combina elementos de lenguajes de alto nivel con la funcionalidad del ensamblador. - Permite hacer cosas que otros lenguajes de alto nivel no pueden hacer (manipulacin de bits, bytes, direcciones) y es tan fcil de usar como cualquier otro lenguaje de alto nivel. - Es particularmente adecuado para la programacin de sistemas. Es muy portable, es decir, es posible adaptar el software escrito para un tipo de ordenador en otro.

Historia del Lenguaje. Surge de dos lenguajes de programacin previos, BCPL y B.BCPL, fu desarrollado en 1967 por Martin Richards como lenguaje para escribir software de sistemas operativos y compiladores. Tanto BCPL y B eran lenguajes carentes de tipos. El lenguaje fu una evolucin del B llevada a cabo por Dennis Ritchie en los laboratorios Bell y originalmente se implement en una computadora DEC PDP-11 en 1972. C se vale de muchos conceptos bsicos de BCPL y B, aadiendo tipos de datos y otras caractersticas. Al principio C se volvi ampliamente conocido como el lenguaje de desarrollo del sistema operativo UNIX. Actualmente la mayora de los sistemas operativos se escriben en C y C++. Durante las ltimas dos dcadas, C ha quedado disponible en casi todas las computadoras (a veces llamados plataformas de hardware), por desgracia, tuvo como consecuencias demasiadas variantes. Eran parecidas, pero frecuentemente incompatibles. Qued claro que se requera una versin estndar de C. En 1983 se cre el comit tcnico X3J11 bajo el ANSI en Computadoras y Procesamiento de Informacin (X3) para proporcionar al lenguaje una definicin inequvoca e independiente del equipo. En 1989 se aprob el estndar. ANSI cooper con la ISO en la estandarizacin mundial de C; el documento conjunto del estndar se public en 1990 y se conoce como ANSI/ISO: 1990. La segunda edicin de Kernighan y Ritchie, publicada en 1998, refleja esta versin llamada ANSI C empleada en todo el mundo (Ke88). Libreras o Biblioteca estndar. Son archivos que contienen un nmero determinado de funciones bsicas del lenguaje; tambin conocidas como headers. Son incluidos al inicio del cdigo, su sintaxis es la siguiente: #include <librera> #include librera Algunas libreras bsicas que incluye el lenguaje C son las siguientes: #include stdio.h #include conio.h #include iostream.h #include math.h #include stdlib.h Dependiendo de la ruta donde se encuentre la librera se utilizar <>. Si la librera se desea buscar en los directorios del sistema se usar <> y cuando se desea buscar la librera en el directorio en que se est trabajando. Hay aun una opcin ms si escribimos A: stdio.h buscar la librera stdio.h en la unidad A. 4.1.1. Palabras reservadas Las palabras reservadas son identificadores que utiliza el lenguaje de Programacin que utilicemos. En nuestro caso, utilizaremos el lenguaje de medio nivel C que es un lenguaje estructurado. El lenguaje C posee muy pocas palabras clave (32, donde 27 fueron definidas en la versin original y cinco aadidas por el comit del ANSI, enum, const, signed, void y volatile). Todas las palabras clave de C estn en minsculas (C distingue entre las maysculas y minsculas). En la siguiente tabla se muestran las 32 palabras clave: auto continue enum if break default extern int case do float long char double for register const else goto return

short switch volatile

signed typedef while

sizeof union

static unsigned

struct void

Es importante recalcar que para usar identificadores en variables no se deben usar nombres de palabras reservadas. En el uso de algoritmos no es tan importante, pero en la codificacin del algoritmo si es primordial recordar este consejo. 4.1.2. Comentarios Los comentarios son sentencias o expresiones que el compilador no toma en cuenta, es decir, son ignorados en la traduccin del cdigo fuente. Los comentarios son textos que no son procesados por el compilador. Sirven como informacin al programador. En Pseudocdigo y Lenguaje C su usa la misma sintaxis: Si es un comentario de una sola lnea se usa //. Ejemplo: //Soy un comentario de una lnea En cambio, Para que un texto sea comentario debe estar entre los smbolos /* (marca el comienzo) y */ (marca el final de comentario). Ejemplo: /* Soy un comentario de varias lneas */ 4.1.3. Tipos de datos Como ya vimos anteriormente, existen varios tipos de datos con los cuales podemos trabajar (Enteros, reales, caracteres, cadenas, arreglos, registros, Listas, Arboles, etc.), segn sea el caso, utilizaremos los ms convenientes. Tipos de Datos Simples y su equivalente en Lenguaje C en maquinas de 16 bits. Nombre Palabra Tamao Rango de reservada Valores -----------------+---------------------+-----------------------------+--------------------------------------Entero int 2 bytes (16 bits) [-32768, 32767] long int 4 bytes (32 bits) [-2147483648,2147483647] short int 2 bytes (16 bits) [-32768,32767] Real float 4 bytes (32 bits) double 8 bytes (64 bits) Caracter char 1 byte [0,255] LOS ENTEROS De acuerdo a su alcance tienen diferentes formas de representacin en C: Enteros (int). Estos se guardan en 1 palabra (dos bytes), el bit ms significativo (el 15) es de signo (0 positivo, 1 negativo), los otros 15 bits (del 0 al 14) son bits de datos: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

el rango de valores que se puede contener un entero es: -2


15

<= entero <= 2 1

15

que es lo mismo que: -32768 <= entero <= 32767 Esta representacin es para compiladores de 16 bits. Para compiladores de 32 bits como Watcom C, se tiene un bit de signo, el 31, y 31 bits de datos, del 0 al 30, lo que da un rango de valores: -2 <= entero <= 2 1 Enteros cortos (short). Para compiladores de 16 bits y 32 bits, un entero corto coincide con la definicin y rango dado para enteros (int). Enteros Largos (long).- Para mquinas de 16 y 32 bits los enteros largos se almacenan en 4 bytes, igualmente el bit ms significativo (el 31) ser el bit de signo, mientras que los 31 restantes sern de datos (del 0 al 30), con lo que tenemos un 31 31 rango de valores entre -2 y 2 -1. Enteros sin signo (unsigned).- Para mquinas de 16 bits los enteros sin signo se almacenan en 2 bytes, y para mquinas de 32 bits se almacenan en 4 bytes. Como su nombre lo dice, no se toma en cuenta el bit de signo, es decir que todos los bits 16 son de datos, con esto tenemos un rango de valores entre 0 y 2 para mquinas de 32 16 bits, y entre 0 y 2 para mquinas de 32 bits. LOS FLOTANTES Los valores de punto flotante se refieren a aquellos en que deben estar presentes el punto decimal, y exponentes con base 10, que son los nmeros reales como por ejemplo: 1.3456 3.146570.8754 1.2e-34 -20 -19 1.2e representa a 0.12*10 El rango de valores que puede tomar el tipo flotante, est entre 10 y 10 . Los nmeros de punto flotante (float y double) representan internamente a la mantiza, que es la parte fraccionaria, y al exponente. Para el ltimo ejemplo, en la mantiza encontramos el valor 12 (la parte fraccionaria) y el exponente es -19. Tanto float como double tienen el mismo rango de valores, sin embargo double da una mayor precisin en la mantiza, teniendo hasta diez dgitos de precisin frente a seis dados por float. A continuacin se indica una tabla con los tipos de datos bsicos: Tipo Tamao(bits) Rango ______________________________________________________________ char 8 bits -128 a 127 int 32 -32768 a 32767 unsigned int 16 0 a 65535 long int 32 -2,147,483,648 a -2,147,483,647 float 32 seis dgitos de precisin double 64 diez dgitos de precisin long double 128 diez dgitos de precisin _____________________________________________________________
-37 +37 31 31

El diagrama que se muestra a continuacin representa las formas en que podemos combinar los tipos de datos elementales con las respectivas extensiones para obtener nuevos tipos de datos; por ejemplo el grupo de enteros est conformado por el tipo de dato elemental int y tambin por unsigned int, short int y long int. tipo elemental > char unsigned> int short> unsigned> long> float double long>

TIPO DE DATO VOID Es tipo de dato void no especifica un tipo de dato fijo, sino que puede adaptarse a cualquier tipo dada una circunstancia especfica. Tipo char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double Tamao en bits 8 8 8 16 16 16 16 16 16 32 32 32 32 64 64 Rango -127 a 127 0 a 255 -127 a 127 -32767 a 32767 0 a 65535 -32767 a 32767 -32767 a 32767 0 a 65535 -32767 a 32767 -2147483647 a 2147483647 -2147483647 a 2147483647 0 a 4294967295 seis dgitos de precisin 3.4E-38 a 3.4E+38 diez dgitos de precisin 1.7E-308 a 1.7E+308 diez dgitos de precisin

CARACTER Estos corresponden a la tabla de caracteres del cdigo ASCII. Cada caracter corresponde con un valor entero de 0 a 127, pues el tamao en bytes de este tipo de datos es de 1 Byte. En la siguiente imagen estn representados los caracteres que conforman el cdigo ASCII y su notacin decimal y hexadecimal.

Ejemplos de caracteres: '1','e','$',' ','*' Cada caracter debe estar encerrado entre comillas simples. Ejemplo: char c='S'; Existe una lista de caracteres especiales conocidas como constantes de caracter. Una constante de caracter es un entero, escrito como un caracter dentro de apstrofos o comillas simples, tal como 'x'. El valor de una constante de caracter es el valor numrico en el conjunto de caracteres de la mquina. Por ejemplo, en el conjunto de caracteres ASCII el caracter constante '0' tiene el valor de 48; ciertos caracteres pueden ser representados en constantes de caracter y cadena, por medio de secuencias de escape como \n (nueva lnea); esas secuencias se ven como dos caracteres, pero representan solo uno. El conjunto completo de secuencias de escape es: \a -caracter de alarma \b -retroceso \f -avance de hoja \n -nueva lnea \r -retorno de carro \t -tabulador horizontal \v -tabulador vertical \\ -diagonal invertida \? -interrogacin \' -apstrofo \ -comillas \ooo -nmero octal \xhh -nmero hexadecimal \0 -caracter nulo Otros tipos de datos. El lenguaje C tiene otros tipos de datos ya sea del lenguaje o creados por el usuario. Ellos son los Arrays, punteros (pointers), estructs. En otra seccin detallaremos estos tipos de datos. Modificadores de tipo. Todos los tipos bsicos excepto void pueden tener modificadores. Se usan para alterar el significado de un tipo base de acuerdo con nuestras necesidades. Los modificadores son: signed unsigned long short

4.1.4. Identificadores Ya definimos anteriormente a los identificadores. Ahora los veremos con el Lenguaje C. Se usan para referenciar las variables, las funciones, las etiquetas y otros objetos definidos por el usuario. La longitud del identificador puede variar entre uno o varios caracteres (se recomienda no ms de 31 y si el identificador est envuelto en el proceso de enlazado al menos los seis primeros deben ser significativos). El primer carcter debe ser una letra o un smbolo subrayado y los caracteres siguientes pueden ser letras, nmeros o smbolos de subrayado. Las minsculas y las

maysculas se tratan como distintas. Un identificador no puede ser igual a una palabra clave de C y no debe tener el mismo nombre que una funcin ya escrita o que se encuentre en la biblioteca de C. Ejemplos: id,_identificador, numero, nombre, _apellido Como nombres de variables se admiten letras y nmeros (por norma letras minsculas). El primer carcter debe ser una letra. No se admiten blancos pero s el signo de subrayado. Slo se admiten los ocho primeros caracteres. Maysculas y minsculas se diferencian. No se pueden emplear palabras clave del lenguaje. Variables. Ya que sabemos qu tipo de datos existen y que son los identificadores, vamos a declarar variables en lenguaje C. En Lenguaje C se usa la siguiente sintaxis: <clase> <tipo de dato> <identificador(es)>; Ejemplos: int edad; auto int a,b,c; float sueldo; char c='n'; Segn donde se declare una variable, estas pueden ser: 1) Variables locales (dentro de funciones). 2) Parmetros formales (argumentos de funciones). 3) Variables Globales (fuera de funciones). Variables locales. Son todas las variables que se declaran dentro de una funcin. Su tiempo de vida es el tiempo que dure la ejecucin de dicha funcin, luego de lo cual se destruye. Esto, en cuanto a funciones, pero tambin son locales las variables que se crean dentro de bloques (un bloque queda delimitado por { }). Veamos dos ejemplos:

en funcin: func1 ( ) { int x ; ... } func2 ( ) { int x ; ... } fig. 1

en bloque: ... if (condicin) { int array[20] ; ... } fig. 2

En el caso de la figura 1, tenemos dos funciones, en ambas se declara una

variable x, la variable x de func1 nada tiene que ver con la variable x de func2, son totalmente independientes. Para el caso de la figura 2 tenemos una declaracin dentro de un bloque, int array[20]; esta variable local se crear en forma automtica si y solo si se ejecuta el respectivo bloque, si hacemos referencia a esta variable fuera del bloque, entonces obtendremos un error. Las variables locales tambin pueden declararse como: auto int x; pero esto es innecesario, pues toda variable que no es global es local o automtica, es por ello que la palabra reservada auto, que significa automtica, local, casi no es utilizada. Hemos dicho que una variable local est creada mientras dura la ejecucin de la funcin donde se las declara, esto impide que se las pueda inicializar en tiempo de compilacin, es por ello que si queremos inicializar o mantener su valor sin que se destruya, podemos declararlas con la palabra reservada static: static int x = 5 ; static float fx ; Esto implica que durante la ejecucin del programa se va a mantener el espacio en memoria para las variables estticas en lugar de crearse o destruirse automticamente, pero el acceso a ellas es solo por medio de las funciones donde se las declare. Parmetros formales. Los parmetros formales son los argumentos de una funcin, si es que una funcin tiene argumentos como en el siguiente caso: int suma (int a, int b) { return (a+b); } En este ejemplo los parmetros formales son a y b. Variables globales. Las variables globales se mantienen durante todo el programa y pueden ser llamadas y cambiadas en cualquier parte de l (como las variables en BASIC), la declaracin de una variable global debe hacerse desde fuera de las funciones, por ejemplo: int cuenta; /* cuenta es variable global */ main ( ) { ... cuenta = 100 ; func ( ) ; /* el valor de cuenta ahora es de 101 */ ... } func() { ... ++cuenta; /* cuenta adquiere un nuevo valor (101)*/ ... }

Inicializacin de variables. La inicializacin de variables permite que stas tengan un valor al momento de compilacin del programa. La inicializacin de variables solo es posible para variables globales y estticas. Observemos los siguientes ejemplos: char ch = 'a' ; int primero = '0' ; static float balance = 123.23 ; Mas adelante, en el estudio de tipos de datos derivados nos extenderemos en formas ms complejas de inicializacin. Constantes Son valores que no varan durante la ejecucin de un programa. Pueden adoptar cualquiera de los tipos de datos declarados anteriormente. Es conveniente declararlas al principio del programa. La sentencia #define es usada para definir las constantes y se coloca al principio del programa antes de la funcin main ( ). #define PI 3.14159 #define PRIMO 13 Son conocidas tambin como expresiones constantes y no solo pueden ser simples, las hay tambin ms complejas. Pueden contener cualquier tipo de dato. Por ejemplo, en los anteriores solo usamos enteros, pero pueden contener cadenas u expresiones compuestas. #define cad hola, soy una cadena #define max (A, B) ((A)>(B)?(A):(B)) En el segundo ejemplo, cuando se encuentre la lnea: x = max (p+q, r+s); ser reemplazada por la lnea: x=((p+q)>(r+s)?(p+q):(r+s)); No se deben involucrar operadores incrementales o de entrada y salida; hay que tener cuidado con los parntesis. Las constantes como norma se suelen escribir con maysculas. Su sintaxis es la siguiente: #define NOMBRE texto_de_reemplazo Tambin se pueden hacer uso de constantes con la palabra reservada const. 4.1.5. Operadores Los operadores son palabras o smbolos que hacen que un programa acte sobre las variables. En C existen seis tipos de operadores. Aritmticos, relacionales, de asignacin, lgico, de direccin y de movimiento. Existe otro tipo de operador denominado molde que su funcin es hacer posible que una expresin sea de un tipo determinado utilizando la sintaxis (tipo) expresin;

Operadores aritmticos OPERADORES ARITMETICOS OPERADOR SIGNIFICADO + Suma Resta * Producto / Cociente de una divisin % Resto de una divisin Operadores lgicos OPERADORES LOGICOS OPERADOR SIGNIFICADO ! Not (no lgico) && And (y lgico) || Or ( lgico) Operadores relacionales OPERADORES RELACIONALES OPERADOR SIGNIFICADO == Igual a != No igual a > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que Operadores de asignacin OPERADORES DE ASIGNACION OPERADOR SENTENCIA SENTENCIA NO ABREVIADA ABREVIADA = = = ++ m++ m=m+1 -m-m=m-1 += m+=n m=m+n -= m-=n m=m-n *= m*=n m=m*n /= m/=n m=m/n %= m%=n m=m%n Los operadores de asignacin ++ y pueden ir antes o delante de una expresin formando una nueva expresin. Estas expresiones se denominan postincrementos o pre-incrementos (decrementos si el operador es --) y son expresiones compuestas, normalmente son del tipo y=x++; (y=++x;). Existen una diferencia entre el post-incremento y el pre-incremento. El postincremento primero suma uno a la variable (x en el ejemplo) y luego asigna ese valor (y en el ejemplo), mientras con el pre-incremento, la asignacin es anterior. Por ejemplo: int x=1, y; y=x++; /* y es 1 y x vale 2 */ int x=1, y; y=++x; /* x vale 2 e y tambin vale 2 */

Operadores de direccin OPERADORES DE DIRECCION OPERADOR SIGNIFICADO * Operador de contenido de apuntado u operador de indireccin & Operador de direccin Operadores de movimiento Existe un tipo de operadores, no comentado hasta el momento, los operadores de movimiento (<<, movimiento a la izquierda y >>, a la derecha). Su funcin es desplazar los bits de la palabra de memoria dada tantos espacios como se le indiquen a derecha o izquierda. La forma general es: expresion1 << expresion2 Los dos operandos deben ser del tipo entero, y mueve los bits de la expresion1 tantas posiciones como se lo indique la expresion2 (en este caso hacia la izquierda). Por ejemplo, sea x un entero con representacin interna: 00010001110011000101010111111111 x<<4; da como resultado: 00011100110001010101111111110000 Prioridad y asociatividad de los operadores Operador Asociatividad () [] De izquierda a derecha - ++ -- ! ~ * & sizeof(tipo) De derecha a izquierda */% De izquierda a derecha +De izquierda a derecha << >> De izquierda a derecha < <= > >= De izquierda a derecha == != De izquierda a derecha & De izquierda a derecha && De izquierda a derecha || De izquierda a derecha ?: De derecha a izquierda = *= /= %= += -= &= <<= >>= De derecha a izquierda , De izquierda a derecha Otros operadores (manejo de bits, ?, sizeof) C soporta un completo juego de operadores a nivel de bits. Dado que el lenguaje se diseo para sustituir al ensamblador en muchas tareas de programacin, era importante permitir todas las operaciones que se pueden hacer en ensamblador. Estas operaciones se refieren a la comprobacin, asignacin o desplazamiento de los bits reales que componen un byte o una palabra, que corresponden a los tipos estndar de C char e int. Las operaciones a nivel de bits no se pueden usar sobre otros tipos. La tabla de la siguiente pgina lista los operadores que se aplican a las operaciones a nivel de bits. Los operadores &, | y ~ a nivel de bits estn basados en la misma tabla de verdad que sus equivalentes lgicos, excepto que trabajan bit a bit. Para el caso de XOR, el resultado es verdad si uno y slo uno de los operandos es verdad

Operador & | ^ ~ >> <<

Accin (Y) (O) (XOR) Complemento a uno (NOT) Desplazamiento a la derecha Desplazamiento a la izquierda

Como ejemplo, se detalla una funcin que leer un caracter del puerto del modem, utilizando la funcin leer_modem() y pondr el bit de paridad a cero: char car_del_modem(void) { char c; c = leer_modem(); return( c & 127) } El bit de paridad, el cual se utiliza para indicar que el resto de los bits del byte no han cambiado, utiliza el bit ms significativo de cada byte, que es el octavo bit. Al realizar un AND (Y) entre un byte que tenga los bits de 1 a 7 en uno y el bit ocho en cero y el byte recibido por el modem, la paridad se pone a cero. La expresin c & 127 da como resultado esta operacin. En el ejemplo se supone que en c se ha recibido el carcter "A" con el bit de paridad a uno: Bit de paridad V 1 1 0 0 0 0 0 1 c conteniendo "A" con paridad a 1 0 1 1 1 1 1 1 1 127 en binario & hacer Y a nivel de bits 0 1 0 0 0 0 0 1 "A" sin paridad

/*obtener un caracter del puerto del modem */

La operacin OR (O) bit a bit siendo la inversa de (Y), pone los bits a uno. Cualquier bit del operando que est puesto a 1 hace que el correspondiente bit de la variable se ponga a uno. Recuerde que los operadores relacionales y lgicos siempre producen un resultado que es 0 1. Los operadores de desplazamiento >> y <<, mueven todos los bits de una variable a la derecha o a la izquierda segn se especifique. La forma general de una sentencia de desplazamiento a la derecha es: variable >> nmero de posiciones en bits La sentencia de desplazamiento a la izquierda es: variable << nmero de posiciones en bits A medida que se desplazan los bits hacia un extremo se va rellenando con ceros por el extremo opuesto, recuerde que un desplazamiento no es una rotacin, es decir que los bits que salen por el un extremo no ingresan al otro. Las operaciones de desplazamiento de bits pueden ser muy tiles cuando se

decodifica la entrada a travs de dispositivos externos, como los convertidores D/A, y en la lectura de informacin de estado. Se pueden utilizar tambin para operaciones rpidas de multiplicacin y divisin entre enteros. Un desplazamiento a la izquierda equivale a una multiplicacin por 2 y uno a la derecha una divisin por 2 Ejemplo de desplazamiento. #include "stdio.h" { unsigned int i; int j; i = 1; /* desplazamientos a la izquierda */ for (j=0; j<4; j++) { i = i << 1;/*desplazar i a la izquierda en 1, que es lo mismo que multiplicarlo por 2 */ printf("desplazamiento a la izquierda %d: %d\n",j,i); } } El operador de complemento a uno (~) cambia el estado de cada bit en la variable especificada, es decir, los 1 se ponen a 0 y los 0 a 1. Los operadores a nivel de bits se usan a menudo en rutinas de cifrado. Si se quiere que un archivo parezca ilegible, basta con llevar a cabo en l algunas operaciones a nivel de bits. El operador ? C contiene un operador muy potente que se usa para sustituir ciertas sentencias en la forma if-then-else. El operador ternario ? toma la forma general: Exp1? Exp2: Exp3 donde Exp1, Exp2 y Exp3 son expresiones. y ? acta de la siguiente forma: Evala Exp1. Si es cierta, evala Exp2 y toma ese valor para la expresin, Si Exp1 es falsa, evala Exp3 tomando su valor para la expresin. Por ejemplo: x = 10; y = x>9? 100: 200; a y se le asigna el valor de 100. Si x hubiera sido menor que 9, y se habra recibido el valor de 200. Este mismo cdigo escrito con la sentencia if-then-else es: x = 10; if (x>9) y = 100; else y = 200; La coma como operador. Como operador, la coma encadena varias expresiones. La parte izquierda del operador coma siempre se evala como void. Esto significa que la expresin de la parte derecha se convierte en el valor de la expresin total separada por coma. Por ejemplo:

x = (y=3, y+1); primero asigna el valor de 3 a y y luego asigna el valor de 4 a x Los parntesis son necesarios debido a que el operador coma tiene menor precedencia que el operador de asignacin. El operador de tiempo de compilacin sizeof El operador sizeof es un operador monario de tiempo de compilacin que devuelve la longitud, en bytes, de la variable o del especificador de tipo entre parntesis al que precede. Por ejemplo, suponiendo que los enteros son de 2 bytes y los float de 8 bytes, entonces float f; printf("%f", sizeof f); printf("%d", sizeof int); mostrar 8 2 Recuerde que para calcular el tamao de un tipo, el nombre del tipo debe ir entre parntesis. LOS OPERADORES PUNTO (.) y FLECHA (->) Estos operadores referencian elementos individuales de las estructuras y de las uniones. Las estructuras y las uniones son tipos de datos compuestos que se pueden referenciar bajo un solo nombre. El operador punto se usa cuando se trabaja realmente con la estructura o la unin, el operador flecha se usa cuando se usa un puntero a una estructura o una unin. Por ejemplo, dada la estructura global: struct empleado { char nombre [80]; int edad; float sueldo; } emp; struct empleado *p = &emp;

/* en p, la direccin de emp */

Se escribir el siguiente cdigo para asignar el valor 123,34 al elemento sueldo de la estructura emp: emp.sueldo = 123.23; Sin embargo, la misma asignacin usando un puntero a la estructura emp sera: p->sueldo = 123.23; Los parentesis y los corchetes como operadores Los parntesis son operadores que aumentan la precedencia de las operaciones que contienen. Los corchetes llevan a cabo el indexamiento de arrays. Dado un array, la expresin entre corchetes proporciona un ndice para el array, como en el ejemplo de la siguiente pgina, se asigna primero el valor 'X' al cuarto elemento (recuerde que los arrays en C comienzan en el elemento cero) del array c y luego se imprime ese elemento. #include "stdio.h" char c[80]; void main (void)

{ c[3] = 'X'; printf("%c", c[3]); } 4.2 Estructura general de un programa Estructura en un diagrama de flujo:
// Diagrama de flujo que evalua la edad inicio

Inicio Declaracin de variables

edad : entera cuanto aos tienes:

edad

F
Eres Viejo

Edad < 50

V
Eres Joven

Cuerpo

Fin

Fin

Est formado por un inicio, declaracin de variables(opcional), un cuerpo y un fin. En Pseudocdigo tiene una estructura bsica como esta: /*Comentario(opcional)*/ Cabecera VAR Variables y Constantes INICIO Cuerpo /*Programa de ejemplo*/ Programa_ejemplo VAR ENTERO edad; INICIO Escribir(Cuantos aos tienes?); leer(edad); si(edad<50) Escribir(Eres Joven); si_no Escribir(Eres Viejo); FIN

FIN En lenguaje C: CabeceraPrograma:

Cuerpo: Llave de inicio: Llave de Fin: Ejemplo: //Programa Ejemplo #include <stdio.h> int edad;

//Comentario sobre el nombre del Programa. Libreras Variables Globales main() { Bloque de Instrucciones; }

main() { printf(Cuantos aos tienes?); scanf(%d,&edad); if(edad<50) printf(Eres Joven); else printf(Eres Viejo); } Cabecera. En esta seccin encontramos todo lo necesario que nos proporcione informacin sobre el programa; adems contiene los elementos que preparan el entorno de trabajo del funcionamiento del programa como las libreras, variables globales, constantes predefinidas, etc. Cuerpo. Est definida como una funcin llamada main(). El main() es una funcin del lenguaje que contiene el programa principal, si no se usa esta funcin no se puede correr el programa, pues el Sistema Operativo busca sta funcin para poder ejecutar el programa. Para usarla se invoca de la siguiente manera: void main() main() int main() Las tres funcionan bien: La primera y segunda opcin son lo mismo, ya que el tipo void es opcional cuando se define una funcin. La tercera espera un valor de retorno y por lo general se usa con la funcin exit(0) para informar al sistema operativo que el programa ha concluido correctamente. Despus se abre el cuerpo del programa con una llave ( { ) y termina cerrndolo con otra llave ( } ); lo que hay dentro de las llaves es opcional y est a consideracin del programador, el contenido son instrucciones de diferente tipo como asignacin, lectura, escritura, estructuras de control, etc. Fin de instruccin. Para terminar una instruccin es necesario poder emplear una sintaxis en la cual al final de cada instruccin se usa punto y coma ';'. instruccin; Si no se escribe el punto y coma al final de la instruccin el compilador arrojar un error. Ejemplo: printf (Hola); a=2134; d=numero1+80; 4.3 Programas bsicos A continuacin presentaremos algunas prcticas de programacin pseudocdigo y ms adelante los traduciremos a un lenguaje de programacin. //Programa 1 pseudocodigo:Primer_programa:impresion_pantalla 1.inicio 2.escribir(Mi primer programa en C); 3.fin escritas en

//Programa 2 pseudocodigo:Entrada_de_datos var cadena: nombre,direccion; entero: edad; 1.inicio 2.escribir(Ingresa tu nombre:); 3.leer(nombre); 4.escribir(Ingresa tu direccin:); 5.leer(direccion); 6.escribir(Ingresa tu edad:); 7.leer(edad); 8.fin //programa 3 pseudocdigo:operaciones_aritmeticas var real:num1,num2; 1.inicio 2.escribir(Ingresa 2 numeros:); 3.leer(num1); 4.leer(num2); 5.escribir(La suma es:,num1+num2); 6.escribir(La resta es:,num1-num2); 7.escribir(El poducto es:,num1*num2); 8.escribir(El cociente es:,num1/num2); 9.fin

//programa 4 pseudocdigo:numero_par var entero: num; 1.inicio 2.escribir(Ingresa un numero:); 3.leer(num); 4.si (num%2)==0 entonces //si el residuo de la division entre 2 es 0 4.1.escribir(num, es un numero par); si_no 4.2.escribir(num, es un numero impar); fin_si 5.fin //programa 5 pseudocdigo:multiples_opciones var entero: opcion; real: num1,num2; 1.inicio 2.escribir(Ingresa 2 numeros:); 3.leer(num1); 4.leer(num2); 5.escribir(Elije una opcion:); 6.escribir(opcion 1:Suma); 7.escribir(opcion 2:Resta); 8.escribir(opcion 3:Multiplicacin);

9.escribir(opcion 4:Division); 10.escribir(opcion 5:Residuo); 11.leer(opcion); 12.casos para (opcion): cuando es 1: 12.1.escribir(La suma es:,num1+num2); 12.2.romper; cuando es 2: 12.3.escribir(La resta es:,num1-num2); 12.4.romper; cuando es 3: 12.5.escribir(El producto es:,num1*num2); 12.6romper; cuando es 4: 12.7.escribir(La division es:,num1/num2); 12.8.romper; cuando es 5: 12.9.escribir(El residuo es:,num1%num2); 12.10.romper; fin_casos; 13.fin //programa 6 pseudocdigo:ciclo_mientras var caracter: resp='n'; 1.inicio 2.escribir(Desea entrar al ciclo?: y/n); 3.leer(resp); 4.hacer_mientras(resp=='y') 4.1.escribir(Estas en el ciclo); 4.2.escribir(Desea entrar al ciclo nuevamente?: y/n); 4.3.leer(resp); fin_mientras; 5.escribir(Has salido del ciclo); 6.fin //programa 7 pseudocdigo: ciclo_repetir var caracter: resp='n'; entero: cont=0; 1.inicio 2.repetir 2.1.cont++; 2.2.escribir(Estas en el ciclo numero ,cont); 2.3.escribir(Deseas entrar al ciclo nuevamente?: y/n); 2.4.leer(resp); hasta(resp=='n'); 3.escribir(Has salido del ciclo); 4.fin //programa 8 pseudocdigo: ciclo_para var entero: cont;

1.inicio 2.hacer para cont=1 hasta cont>10 2.1.escribir(Estas en el ciclo numero ,cont); 2.2.cont++; fin_para; 3.fin //programa 9 pseudocdigo: serie_fibonnaci var entero: ant,sig,res,cont,tot; 1.inicio 2.escribir(Cuantas series fibonnaci desea?:); 3.leer(tot); 4.ant=0; 5.sig=1; 6.hacer para cont=0 hasta cont>=tot 6.1.escribir(ant,,); 6.2res=ant+sig; 6.3.ant=sig; 6.4.sig=res; 6.5.cont++; fin_para; 7.fin //programa 10 pseudocdigo: tabla_multiplicar var entero: cont,num; 1.inicio 2.hacer para cont=0 hasta cont>10 2.1.escribir(num, * ,cont, = ,num*cont); 2.2.cont++; fin_para; 3.fin //programa 11 pseudocdigo: factorial var entero: num,dec,fact; 1.inicio 2.escribir(Numero a sacar factorial:); 3.leer(num); 4.dec=num-1; 5.fact=num; 6.hacer mientras(dec>=1) 6.1.fact=fact*dec; 6.2.dec--; fin_mientras; 7.escribir(Factorial de ,num, : ,fact); 8.fin

Vous aimerez peut-être aussi