Está en la página 1de 14

| Programación - IQ | Unidad 2 |

Programación - IQ
Unidad 2 - Entorno del lenguaje de programación
Competencia específica a desarrollar:
 Estructurar un programa con sus elementos esenciales utilizando una técnica algorítmica para resolver
problemas de la Ing. Química.

2.1 - Fundamentos conceptuales de programación (datos, información, lenguajes de alto


nivel, tipos de datos, lenguajes de aplicación, compiladores, ensambladores, utilería de
archivos, bibliotecas).
Definición de programa
Un programa, también llamado programa informático, programa de computación o programa de
computadora, es simplemente un conjunto de instrucciones para una computadora. Las computadoras
necesitan de los programas para funcionar y un programa no hace nada a menos que sus instrucciones
sean ejecutadas por el procesador. Un programa se puede referir tanto a un programa ejecutable como a
su código fuente, el cual es transformado en un ejecutable cuando es compilado.
El código fuente de un programa informático (o software) es un conjunto de líneas de texto que son las
instrucciones que debe seguir la computadora para ejecutar dicho programa. El código fuente de un
programa está escrito por un programador en algún lenguaje de programación, pero en este primer estado
no es directamente ejecutable por la computadora, sino que debe ser traducido a otro lenguaje (el lenguaje
máquina o código objeto) que sí pueda ser ejecutado por el hardware de la computadora. Para esta
traducción se usan los llamados compiladores, ensambladores, intérpretes y otros sistemas de traducción.
Definición de programación
La programación es un proceso por el cual se escribe (en un lenguaje de programación), se prueba, se
depura y se mantiene el código fuente de un programa informático.
Los programas son los elementos que forman el software, que es el conjunto de las instrucciones que
ejecuta el hardware de una computadora para realizar una tarea determinada. Por lo tanto, la programación
es una de las principales áreas dentro de la informática.
Definición de lenguaje de programación
Un lenguaje de programación es un conjunto de símbolos y reglas sintácticas y semánticas que definen su
estructura y el significado de sus elementos y expresiones. Es utilizado para controlar el comportamiento
físico y lógico de una computadora.
Un lenguaje de programación permite a uno o más programadores especificar de manera precisa sobre
qué datos debe operar una computadora, cómo estos datos deben ser almacenados o transmitidos y qué
acciones debe tomar bajo una variada gama de circunstancias.
Introducción y orígenes del lenguaje C
El lenguaje C es un lenguaje de programación de propósito general, es uno de los más rápidos y potentes
que existen. El lenguaje C ha demostrado ser un lenguaje extremadamente eficaz, hasta como para crear
sistemas operativos, como Linux que fue creado en este lenguaje.
El lenguaje C fue inventado e implementado por primera vez por Dennis Ritchie en un DEC PDP-11
usando UNIX como sistema operativo. C es un resultado de un proceso de desarrollo comenzado con un
lenguaje anterior denominado BCPL, este lenguaje fue desarrollado por Martin Richards e influencio otro
lenguaje denominado B, inventado por Ken Thompson, que en los setentas llevo al desarrollo del C.
Con la popularidad de las microcomputadoras se crearon muchas implementaciones de C. En lo que se
podría decir que era un milagro, los códigos fuente aceptados por la mayoría de esas implementaciones
M@lonso © 2016 |1
| Programación - IQ | Unidad 2 |

eran altamente compatibles, sin embargo como no había un estándar empezaron a surgir discrepancias.
Para remediar la situación, el INSTITUTO DE ESTANDARES AMERICANO (ANSI) estableció un comité a
principios de 1983 para crear un estándar que definiera de una vez por todas el lenguaje C. Finalmente el
estándar fue adoptado en 1990 y turbo C implementa completamente el estándar ANSI de C resultante.

2.2 - Estructura de un programa del lenguaje a utilizar.


El formato general de un programa en lenguaje C es el siguiente:
#include /* Archivos de cabecera */
#define /* Constantes */
Declaraciones globales /* Variables usadas en cualquier parte del programa */
main() /* Función especial en C */
{ /* Llave que indica el inicio del programa */
Variables locales
Secuencia de sentencias
}
f1() /* Función 1 */
{
Variables locales
Secuencia de sentencias
}
f2() /* Función 2 */
{
Variables locales
Secuencia de sentencias
}
fn() /* Función n */
{
Variables locales
Secuencia de sentencias
}

El C se basa en el concepto de construcción de módulos estos módulos se llaman Funciones. Un


programa en C es una colección de una o más funciones. Una función, es una subrutina que contiene una
o más sentencias de C, y que lleva a cabo una o más tareas. Cada función tiene un nombre y una lista de
argumentos (parámetros) que recibirá la función.
La única función que debe estar siempre presente es la denominada función main(), siendo la primera
función que es llamada cuando comienza la ejecución del programa, debe de haber una función main() en
algún sitio del programa, esta función es como cualquier otra función, con la diferencia de que la llave que
la cierra indica el fin del programa, solo debe de haber una funcion main() en todo el programa.
Archivos de Cabecera
Muchas funciones que se encuentran en la biblioteca de C trabajan con sus propios tipos de datos y
variables a las que su programa debe acceder. Estas variables y tipos de datos están definidos en los
archivos de cabecera, proporcionados junto con el compilador, y deben incluirse (utilizando #include) en
cualquier archivo que utilice funciones específicas que hagan referencia a ellas.
El C soporta 2 sentencias que simplifican enormemente algunos aspectos de la programación:
La primera es #define, que se utiliza para definir una cadena de caracteres como una constante. Por
ejemplo:

M@lonso © 2016 |2
| Programación - IQ | Unidad 2 |

#define MAX_NUM 100


for ( y = 1 ; y < MAX_NUM ; y ++ )
La sentencia #define obliga al compilador hacer una macro sustitución cada vez que se encuentra la
cadena MAX_NUM.
También se puede utilizar #define para realizar macro sustituciones en cadenas como:
#define ERROR1 "Error de sintaxis"
printf ( ERROR1 );
La segunda sentencia es #include, se utiliza durante la compilación para leer otro archivo fuente,
normalmente indicado como información de la cabecera del programa.
Todo archivo fuente que utilice funciones de la biblioteca estándar deberá contener al principio la línea
#include <stdio.h>.
El archivo stdio.h define ciertos números de variables empleadas por la biblioteca estándar de
Entrada/Salida.
El uso de paréntesis angulares (< >) instruye al compilador para buscar el archivo en un directorio con
información estándar.
Las comillas (“ “) alrededor del nombre del archivo dirigen al compilador a buscar el archivo en el directorio
por omisión del usuario y luego los archivos de la librería estándar.
La extensión .h informa al compilador que el archivo es de encabezamiento. Algunos archivos de cabecera
que son utilizados en el lenguaje C son:
alloc.h dir.h dos.h io.h float.h mem.h
process.h setjmp.h share.h signal.h stdarg.h stdef.h
time.h values.h conio.h ctype.h graphics.h math.h
stdio.h stdlib.h string.h
Datos
Los diferentes objetos de información con los que un programa trabaja se denominan datos.
Todos los datos tienen un tipo asociados con ellos que nos servirá para poder conocer con que información
trabajaremos. Es decir, cuando ingresemos el sueldo de un trabajador necesitamos que este contenga
decimales, o al solicitar la edad de una persona está tiene que estar con números enteros, etc.. Además la
suma entre caracteres no tiene sentido.
La asignación de tipos a los datos tiene dos objetivos principales:
 Detectar errores de operaciones aritméticas en los programas.
 Determinar cómo ejecutar las operaciones.
Tipos de Datos Comunes
Estos son los tipos de datos más utilizados en los lenguajes de programación:
 Numéricos
 Caracteres
 Lógicos
Tipos Numéricos.- Dentro de estos tipos se puede hacer mención de los tipos enteros, reales o de coma
flotante, y de los exponenciales.
Tipos Carácter.- Los tipos carácter se dividen también en caracteres ASCII, como por ejemplo: a A & * ,
etc.. El otro grupo de caracteres son los strings o cadenas de caracteres, como por ejemplo: "Hola Mundo".
Tipos Lógicos.- Los tipos lógicos solamente pueden tomar los valores verdadero o falso.

M@lonso © 2016 |3
| Programación - IQ | Unidad 2 |

Tipos de datos
Existen 5 tipos de datos básicos en el lenguaje C: Carácter (char), Entero (int), Coma Flotante (float), Coma
Flotante de Doble precisión (doublé) y Sin valor (void).
Los valores que pueden tomar los diferentes tipos de datos son:
Tipo Tamaño en bits Rango
char 8 0 255
int 16 -32768 32767
float 32 3.4E-38 3.4E+38
double 64 1.7E-308 1.7E+308
void 0 sin valor
Los valores de tipo char se usan normalmente para guardar valores definidos en el juego de caracteres ASCII,
así como cualquier cantidad de 8 bits.
Las variables de tipo int se usan para guardar cantidades enteras.
Las variables de tipo float o double se usan para guardar numero reales (los números reales son los que
tienen un numero entero y uno fraccionario).
El tipo viod tiene 3 usos: El primero es para declarar explícitamente una función que no devuelve valor
alguno; el segundo es para declarar explícitamente una función sin parámetros y tercero es para declarar
punteros genéricos.
Modificadores de Tipos de Datos
A excepción del tipo void, los tipos de datos básicos pueden tener distintos modificadores. Un modificador se
usa para alterar el significado del tipo base para que se ajuste más precisamente a las necesidades de cada
momento.
Los modificadores de tipo de datos utilizados son:
Modificador Descripción
signed numero con signo
unsigned numero sin signo
long numero de precisión larga
short numero de precisión corta

Las combinaciones resultantes de los tipos básicos y los modificadores del lenguaje C son:
Tipo Tamaño en bits Rango
char 8 -128 127
unsigned char 8 0 255
signed char 8 -128 127
int 16 -32768 32767
unsigned int 16 0 65535
signed int 16 -32768 32767
short int 16 -32768 32767
unsigned short int 16 0 65535
signed short int 16 -32768 32767
long int 32 -2147483648 2147483647
signed long int 32 -2147483648 2147483647
float 32 3.4E-38 3.4E+38
double 64 1.7E-308 1.7E+308
long double 64 1.7E-308 1.7E+308

M@lonso © 2016 |4
| Programación - IQ | Unidad 2 |

2.3 - Declaración de variables.


Los identificadores, representan los nombres de los objetos de un programa (constantes, variables, tipos
de datos, procedimientos, funciones, etc.). Es una secuencia de caracteres que puede ser de cualquier
longitud, aunque tiene ciertas reglas que hay que seguir, las cuales son:
a. La longitud de un identificador en el lenguaje C puede variar entre 1 y 32 caracteres.
b. Debe comenzar con una letra o "_" y no puede contener espacios en blanco.
c. El primer carácter debe ser una letra o un símbolo de subrayado y los caracteres siguientes pueden ser
letras, números o símbolos de subrayado.
d. Las palabras reservadas no se pueden usar como nombres de variables.
e. Todas las variables deben ser declaradas antes de ser usadas.
En síntesis un identificador es un método para nombrar a las celdas de memoria en la computadora, en
lugar de memorizarnos una dirección de memoria.
Se utilizan para nombrar variables, constantes, procedimientos y funciones.
Constantes.- Las constantes son valores que no pueden cambiar en la ejecución del programa. Recibe un
valor en el momento de la compilación del programa y este no puede ser modificado.
Variables.-Las variables son valores que se pueden modificar durante la ejecución de un programa. Al
contrario de las constantes estas reciben un valor, pero este valor puede ser modificado durante la
ejecución o la compilación del programa.
Declaración de Variables
Todas las variables deben de ser declaradas antes de ser usadas. La forma general de declaración es la
que se muestra a continuación:
Tipo_Dato Lista_de_Variables;
Donde:
Tipo_Dato Debe ser un tipo de dato valido en el Lenguaje C.
Lista_de_Varibles Puede consistir de uno o más nombres de identificadores validos separados por
comas.
Ejemplos:
int i ,j ,l ;
short int cuenta ;
unsigned int numero ;
double balance, beneficio, perdida ;
Proposición de asignación
Las sentencias de asignación se utilizan para asignar o almacenar valores a variables o constantes. Es una
operación que sitúa un valor determinado en una posición de memoria. Se demuestra en pseudocódigo
con el símbolo <- (Una flecha apuntando hacia el identificador, donde se desea guardar el valor). Ejemplo:
variable <- expresión
El tipo de expresión debe ser del mismo tipo que el de la variable, en caso contrario en la fase de
compilación se produciría un error de tipos. Aunque a la fecha existen lenguajes de programación con una
potente herramienta para la conversión de datos (tal es el caso de Visual Basic), no es recomendable
asignar valores de un tipo diferente a variables de otro tipo.
El formato general de la sentencia de asignación es:
Nombre_de_Variable = Expresion ;
Donde:
Nombre_de_Variable Es un nombre de identificador de variable previamente definido.

M@lonso © 2016 |5
| Programación - IQ | Unidad 2 |

Expresión Puede ser tan simple como una constante o tan compleja como una
combinación de variables, operadores y constantes.
El destino o parte izquierda de la asignación debe ser una variable, no una función o una constante.
Conversión de Tipos en las Asignaciones
La conversión de tipos se da cuando se mezclan variables de un tipo con variables de otro tipo.
En una sentencia de asignación, la regla de conversión de tipos es muy fácil:
“El valor del lado derecho de la asignación, se convierte al tipo del lado izquierdo“
Ejemplo:
int x;
char ch;
float f;
main()
{
ch = x; /* Linea 1 */
x = f; /* Linea 2 */
f = ch; /* Linea 3 */
f = x; /* Linea 4 */
}
 En la línea 1, los bits más significativos de x se pierden, dejando en ch los 8 bits menos significativos.
Si x tenía un valor entre 0 y 255 antes de la asignación, ch y x tendrán igual valor. De otro modo, el
valor de ch solo reflejara los bits menos significativos de x.
 En la línea 2, x recibirá la parte no fraccionaria de f.
 En la línea 3, f convierte al valor almacenado como entero de 8 bits en ch al formato en punto flotante.
 Esto mismo ocurrirá en la línea 4, excepto que f convierte el valor entero de 16 bits al formato de punto
flotante.
Cuando se convierten enteros en caracteres y enteros largos en enteros, la regla básica es que se eliminan
los bits más significativos que sean necesarios. Esto significa que se perderán 8 bits al convertir un entero
a carácter y se perderán 16 bits cuando se convierta un entero largo a entero.
 La conversión de int a float o de float a double no añade, ni exactitud ni precisión, este tipo de
conversiones solo cambian la forma de representación del valor.
 Algunos compiladores de C tratan siempre una variable char como positiva, independientemente de
que se convierta a un valor int o float.
Inicialización de Variables
Colocando el signo igual y una constante después del nombre de una variable, se puede dar en el lenguaje
C a las variables un valor a la vez que se declaran.
Tipo_Dato Nombre_de_Variable = Constante ;
Ejemplo:
char ch = 'a' ;
int primero = 0 ;
float balance = 123.123 ;

M@lonso © 2016 |6
| Programación - IQ | Unidad 2 |

2.4 - Sentencias de entrada/Salida de datos.

Función: printf()
Convierte, da formato e imprime sus argumentos en la salida estándar, bajo control de la cadena de control.
Formato:
printf( "<cadena de control>" , <lista de argumentos>)
Donde:
cadena de control Consiste en dos tipos de elementos: caracteres que se mostraran en la pantalla
y ordenes de formato que definen la forma en que se muestran los argumentos.
Ver tabla 13
lista de argumentos Son las variables a imprimir con el correspondiente código.
Tabla 13 - Códigos de formato para la función printf()
Código Función Tipo
c Convierte a un carácter sin signo char
d Convierte un entero a decimal con signo int
o Convierte un entero a octal sin signo unsigned int
x, X Convierte un entero a hexadecimal sin signo unsigned int
f Convierte un decimal a punto flotante float
s Cadena de caracteres char[ ]
u Convierte un entero sin signo a decimal sin unsigned int
signo
e,E Convierte de punto flotante o double float en double float
notación científica
g,G Convierte un argumento float o double al double float
formato f ó e
n Convierte un apuntador a entero int
% Imprime el signo de %

Una orden de formato empieza siempre con el signo de % y va seguido por el código de formato, debe
haber exactamente el mismo número de argumentos que de órdenes de formato y ambos deben coincidir en
su orden de izquierda a derecha y en su tipo de dato.
Características de la función printf()
Las órdenes de formato pueden tener modificadores que especifiquen la longitud del campo, el número de
decimales, el ajuste a la izquierda y la densidad del tipo de dato, como se presenta en la tabla 14.

M@lonso © 2016 |7
| Programación - IQ | Unidad 2 |

Tabla 14 - Modificadores de códigos de formato


Modificador Función
- Justifica a la izquierda el resultado
+ Requiere que el signo + esté presente en el resultado
Espacio Antepone un espacio al resultado en una conversión
# Requerido para una forma de conversión alterna
0 Usa ceros en lugar de espacios para rellenar el ancho del
campo
Numero Asigna el ancho mínimo del campo
. Separa el campo para la precisión del numero
h Se aplica a d, i, o, u, x o X para especificar un argumento short
int o unsigned short int
l Se aplica a d, i, o, u, x o X para especificar un argumento long
int o unsigned long int
L Se aplica a e, E, f, g o G para especificar un argumento en long
doublé

Notas:
 Un entero situado entre el signo de % y el código de formato actúa como un especificador de
longitud mínima de campo. Hace que se rellene la salida con espacios para asegurar que el campo
alcance una cierta longitud mínima.
 Si la cadena o el número es más largo que el mínimo, se imprimirá en toda su longitud, aunque
sobrepase el mínimo.
 Si se quiere rellenar con ceros, se ha de poner un 0 antes del especificador de longitud de campo.
Por ejemplo: %05d rellenara con ceros un numero con menos de 5 dígitos para que su longitud total
sea cinco.
 Para especificar el número de posiciones decimales que se han de imprimir para un numero en
punto flotante, se coloca un punto tras el especificador de longitud de campo, seguido del numero
de decimales que se desea que aparezcan. Por ejemplo: %10.4f imprime un número de al menos
10 caracteres con cuatro posiciones decimales.
 Si se aplica a las cadenas o a enteros, el número que sigue al punto especifica la longitud máxima
del campo. Por ejemplo: %5.7s imprime una cadena de al menos cinco caracteres de longitud y no
más de siete. Si la cadena es más larga que la longitud máxima del campo se truncaran los
caracteres finales de la derecha.
 Por defecto todas las salidas están ajustadas a la derecha, se puede forzar que la salida sea
ajustada a la izquierda situando un signo de menos directamente después del %. Por ejemplo %-
10.2f hace que se ajuste a la izquierda un número en coma flotante con dos espacios para
decimales en un campo de 10 caracteres.

Ejemplos:

printf( " La cantidad es: %d \n ", 100 ) ;


printf( " La perdida es %d ",-3600 ) ;
printf( " H o l a %s " , " que tal ! " ) ;
printf( " G R U P O \t \t P R O M E D I O \n " ) ;
printf( " %c %0.2f \n " , 'A' , 90.80 ) ;
printf( " El porcentaje de ganacias es %0.2f %%", 20.3 ) ;
printf( " %s \a \a \a " , " Cuidado hay error !! " ) ;

M@lonso © 2016 |8
| Programación - IQ | Unidad 2 |

Función: scanf()
Lee los caracteres de la entrada estándar, los interpreta de acuerdo con el formato especificado en control y
almacena los resultados en los restantes argumentos.
Formato:
scanf( "<cadena de control>" , <lista de argumentos>) ;
Donde:
Cadena de control Códigos de tipos de datos a leer.
Lista de argumentos Variables donde se almacenaran los valores leídos, donde cada variable
debe ser un apuntador.
Tabla 15 - Códigos de formato para scanf()
Código Función
%c Lee un único carácter
%s Lee una cadena de caracteres
%d Lee un entero decimal
%f Lee un numero con coma flotante
%h Lee un entero corto
%o Lee un entero en octal
%x Lee un entero en hexadecimal

Ejemplos:

printf( " Teclear su nombre: " ) ;


scanf( " %s ", &nombre ) ;

printf( "Teclear la edad : " ) ;


scanf( " %d " , &edad ) ;

printf( " Teclear el sueldo: " ) ;


scanf( " %f " , &sueldo ) ;

printf( " Teclear sexo (m/f): " ) ;


scanf( " %c " , &sexo ) ;

printf( "Teclaer el codigo postal, telefono, numero de seguro social " ) ;


scanf( " %ld , %s , %d " , &cp , &tel , &ss ) ;

printf( " Teclear peso y altura " ) ;


scanf(" %f ,%f ", &peso, &altura ) ;

M@lonso © 2016 |9
| Programación - IQ | Unidad 2 |

Otras funciones de Entrada / Salida


Tabla 15 - Funciones de entrada y salida
Función Descripción
getchar() lee un carácter desde el teclado y espera enter.
getche() lee un carácter con eco, no espera enter.
getch() lee un carácter sin eco, no espera enter
putchar() escribe un carácter en la pantalla.
gets() lee una cadena desde el teclado.
puts() escribe una cadena en la pantalla.
clrscr() limpia la pantalla.
clreol() borra una línea, de izquierda a derecha desde la posición actual
del cursor hasta el final de la ventana.
delline() hace que se borre la línea en donde se encuentra el cursor y que
las líneas que se encuentran por debajo suban.
insline() produce la inserción de una línea nueva en blanco, justo debajo
de la línea donde se encuentra el cursor y en consecuencia las
líneas de debajo bajaran una línea.
gotoxy() posiciona el cursor en un lugar de la pantalla las coordenadas
son: columna, renglón.

2.5 - Expresiones (Aritméticas, lógicas y relacionales).


Los operadores, las constantes y las variables son los constituyentes de las expresiones.
Un operador es un símbolo que indica al compilador que lleve a cabo ciertas manipulaciones matemáticas o
lógicas.
En el lenguaje C hay tres clases de operadores:
 Aritméticos
 Relaciónales
 Lógicos.
Los operadores aritméticos son:
Operador Descripción
- Resta, también menos unario
+ Suma
* Multiplicación
/ División
% División en modulo
-- Decremento
++ Incremento

En C el operador de % (división de modulo) actúa igual que en otros lenguajes, proporciona el resto de una
división entera. Por ello no puede aplicarse a los tipos de punto flotante.
Ejemplo:
int x, y ;
x = 10 ;
y=3;
printf( "%d",x / y ); /* Mostrara 3, la parte entera de la división */
printf( "%d",x % y ); /* Mostrara 1, el resto de la división entera */

M@lonso © 2016 | 10
| Programación - IQ | Unidad 2 |

Incremento y Decremento
El operador ++ (doble mas) suma uno a su operando y - - (doble menos) le resta uno.
Por lo que: x = x + 1; equivale a ++x ;
y x = x - 1; equivale a - -x ;
Los operadores de incremento y decremento pueden preceder o seguir al operando.
Ejemplo:
++ x ;
x ++;
x--;
--x;
Sin embargo, existe una diferencia cuando se utilizan estos operadores en una expresión.
Cuando un operador de incremento o decremento precede a su operando, C lleva a cabo la operación de
incremento o decremento antes de utilizar el valor del operando. Si el operador sigue al operando, C utiliza su
valor antes de incrementar o decrementar el operando.
Ejemplo:
Si x = 10;
y = ++x ; Resulta: y = 11 x = 11
y = x++ ; Resulta: y = 10 x = 11

Operadores Relacionales
En el término operador relacional la palabra relacional se refiere a la relación entre unos valores y otros.
Los operadores relacionales son:
Operador Función
> Mayor que
>= mayor que o igual
< menor que
<= menor que o igual
== Igual
!= Diferente

Operadores Lógicos
En el término operador lógico la palabra lógica se refiere a las formas en que esas relaciones pueden
conectarse entre si siguiendo las reglas de la lógica formal.
Los operadores lógicos son:
Operador Función
&& and
|| or
! not

Los operadores lógicos a nivel de bit son:


Operador Función
& Y lógico
| O lógico
^ O lógico exclusivo
<< Rotación o desplazamiento a la izquierda
>> Rotación a la derecha
~ Complemento a 1 (unitario)
M@lonso © 2016 | 11
| Programación - IQ | Unidad 2 |

Prioridad de operadores, evaluación de expresiones


La interpretación de cualquier expresión en el lenguaje C está determinada por la precedencia y
asociatividad de los operadores en dicha expresión. Cada operador tiene una precedencia, y los
operadores en una expresión se evalúan en orden de mayor a menor precedencia. La evaluación de
operadores con la misma precedencia viene determinada por su asociatividad. Y, al igual que en
matemáticas, los paréntesis anulan las reglas de precedencia.
En la siguiente tabla se listan los operadores del lenguaje C , su precedencia y su asociatividad. Los
operadores se listan en orden de prioridad decreciente (los situados más arriba tienen mayor prioridad).
Los operadores en la misma línea horizontal tienen la misma precedencia.
La precedencia de los operadores aritméticos es:
Precedencia Operador
Mayor ++ - -
- (Menos unario)
* / %
Menor + -

Los operadores del mismo nivel de precedencia son evaluados por el compilador de izquierda a derecha.
Conversiones de Tipos en las Expresiones
Cuando en una expresión se mezclan constantes y variables de distintos tipos, se convierten a un tipo único.
El compilador de C convierte todos los operandos al tipo del mayor operando.
 Cualquier char y short int es convertido a int.
 Cualquier float es convertido a double.
 Para todos los pares de operandos, si uno de los operandos es long double , el otro operando se
convierte en long double.
De lo contrario, si el operador es:
double se convierte a double
long se convierte a long
unsigned se convierte a unsigned
Reglas de Evaluación
Todas las subexpresiones entre parentesis se evalún primero. Las subexpresiones entre parentesis
anidados se evalúan de adentro hacia afuera, es decir, que el parentesis mas interno se evalúa primero.
Prioridad de Operaciones: Dentro de una misma expresión o subexpresión, los operadores se evalúan en
el orden de precedencia.
Los operadores en una misma expresión o subexpresión con igual nivel de prioridad se evalún de izquierda
a derecha

M@lonso © 2016 | 12
| Programación - IQ | Unidad 2 |

2.6 - Depuración de un programa.

La depuración de programas, es el proceso de identificar y corregir errores de programación. En inglés


se le conoce como debugging, es que se asemeja a la eliminación de bichos (bugs), manera en que se
conoce informalmente a los errores de programación. Se dice que el término bug proviene de la época de
las computadoras de válvula termoiónica, en los cuales los problemas se generaban por los insectos que
eran atraídos por las luces y estropeaban el equipo.
Los errores humanos dentro de la programación de computadoras, mediante el uso de programas, son
muchos y aumentan considerablemente con la complejidad del problema. El proceso de identificar y
eliminar errores, para dar paso a una solución sin errores se le llama depuración.
Las tareas de pruebas y depuración de programas, consiste básicamente en explorar el algoritmo,
ejecutándolo (darle seguimiento) paso a paso y comparando en todo momento los valores que van
tomando las distintas variables con los valores esperados. Es necesario, por tanto, haber analizado con
anterioridad algunos casos de prueba que permitan anticipar en todo momento los valores que deben
tomar las variables y saber si la progresión del algoritmo en el programa es correcta o no.
Suponiendo que un algoritmo es representado mediante un programa de computadora, para realizar las
fases de prueba y depuración, tenemos:
 La Prueba se realiza tras la compilación.
Si tras la compilación se presentan errores (errores de compilación) en el programa fuente, es preciso
volver a editar el programa, corregir los errores y compilar de nuevo, este proceso se repite hasta que
no se producen errores.
De esta manera se obtiene el programa objeto, que todavía no es ejecutable directamente, pero si no
contiene errores se debe instruir al sistema para que realice la fase de montaje o enlace del programa
objeto con las librerías del programa del compilador; este proceso de montaje produce un programa
ejecutable.
 La Depuración es el proceso de encontrar los errores del programa y corregir o eliminar dichos errores.
Cuando se ejecuta un programa, se pueden producir tres tipos de errores:
1. Errores de compilación. Se producen normalmente por un uso incorrecto de las reglas del
lenguaje de programación y suelen ser errores de sintaxis, por lo tanto la computadora no puede
comprender la instrucción, y obviamente no se obtendrá el programa objeto, y el compilador
imprimirá una lista de todos los errores encontrados durante la compilación.
2. Errores de ejecución. Estos errores se producen por instrucciones que las computadoras
pueden comprender, pero no ejecutar. Ejemplos de éstos son: una división por cero, y raíces
cuadradas de números negativos; por lo que en este caso se detiene la ejecución del programa
y se imprime un mensaje de error.
3. Errores lógicos. Se producen en la lógica del programa y la fuente del error suele ser el diseño
del algoritmo. Estos errores son los más difíciles de detectar, ya que el programa puede
funcionar y no producir errores de compilación ni ejecución, y solo puede detectarse cuando se
advierte un error por la obtención de resultados incorrectos.
Proceso de creación de un ejecutable
Compilar.- Proceso de traducción de un código fuente (escrito en un lenguaje de programación de alto
nivel) a lenguaje máquina (código objeto) para que pueda ser ejecutado por la computadora. Las
computadoras sólo entienden el lenguaje máquina. La aplicación o la herramienta encargada de la
traducción se llama compilador.

M@lonso © 2016 | 13
| Programación - IQ | Unidad 2 |

Código fuente.- Texto escrito en un lenguaje de programación específico y que puede ser leído por un
programador. Debe traducirse a lenguaje máquina para que pueda ser ejecutado por la computadora o a
bytecode para que pueda ser ejecutado por un intérprete. Este proceso se denomina compilación.
Código Objeto.- En programación, el código objeto es el resultado de la compilación del código fuente.
Puede ser en lenguaje máquina o bytecode, y puede distribuirse en varios archivos que corresponden a
cada código fuente compilado. Luego un enlazador (linker) se encarga de juntar todos los archivos de
código fuente para obtener el programa ejecutable.
Lenguaje maquina.- El lenguaje máquina es el único lenguaje que puede ejecutar una computadora. El
lenguaje de máquina es un código que es interpretado directamente por el microprocesador. Tambien es
conocido como código ejecutable o programa ejecutable. El lenguaje está compuesto por un conjunto de
instrucciones ejecutadas en secuencia (con eventuales cambios de flujo causados por el propio programa o
eventos externos) que representan acciones que la máquina podrá tomar. Un lenguaje máquina es
específico de cada arquitectura de computadora.
El proceso de creación pasa por tres fases, desde la creación del código fuente, pasando por la generación
del código objeto y finalmente, el código ejecutable, estas fases se ilustran en la siguiente figura:

Código Fuente → Código Objeto → Código Ejecutable


prog.c prog.obj prog.exe

M@lonso © 2016 | 14

También podría gustarte