Documente Academic
Documente Profesional
Documente Cultură
Introducción a la programación
Tipos de programas
Los programas pueden clasificarse en: programas lineales, alternativos y cíclicos.
• Programas lineales: compuestos por una secuencia de acciones primitivas. Su ejecución
es lineal y secuencial.
• Programas alternativos: compuestos por acciones alternativas anidadas. Su ejecución se
realiza mediante procedimientos alternativos.
• Programas cíclicos: compuestos por un conjunto de acciones que se repiten un número
determinado o indeterminado de veces. Su ejecución se realiza en procesos denominados
bucles.
Lenguajes de Programación
Se entiende como lenguaje de programación a la notación para escribir un programa, que
posteriormente será traducido a un programa de máquina, compuesto por una secuencia de 0 o
1. El lenguaje ensamblador es una evolución del lenguaje de máquina que sustituye una cadena
de símbolos binarios por símbolos nemotécnicos. Los lenguajes evolucionaron y se convirtieron
en lenguajes de alto nivel.
Evolución de lenguajes
1955 Fortran
1960 Lisp – Algol – Cobol
1965 Apl – Snobol – Pl/1 – Basic
1970 Prolog – Algol68 – Simula67
1975 C – Pascal
1980 Modula-2 – Lis – Euclid
1985 Ada
Tipos de datos
Los tipos de datos permiten representar los diferentes datos que son necesarios para implementar
un programa.
• Datos enteros
o Byte: puede representar datos enteros que se encuentran en el rango -128 +127.
Su tamaño es de 8 bits.
o Short: puede representar datos enteros que se encuentran en el rango -32768
+32767. Su tamaño es de 16 bits.
o Int: puede representar datos enteros que se encuentran en el rango -2147483648
+2147483647. Su tamaño es de 32 bits.
o Long: puede representar datos enteros que se encuentran en el rango -
9223372036854775808 +9223372036854775807. Su tamaño es de 64 bits.
• Datos flotantes
o Float: representar datos en coma flotante que se encuentran en el rango
1.40239846e–45f y 3.40282347e+38f. Su tamaño de tipo short es de 32 bits.
o Double: representar datos en coma flotante que se encuentran en el rango
4.94065645841246544e–324d y 1.7976931348623157e+308d. Su tamaño de
tipo short es de 64 bits.
• Datos boolean
o Representan valores lógicos: true(verdadero) o false(falso).
• Datos char
o El tipo de dato char se usa para representar caracteres (código Unicode).
Identificadores
Identificador es una secuencia de caracteres, letras, dígitos o guion bajo, que se pueden utilizar
para declarar variables, constantes, procedimientos o funciones.
Palabras reservadas
Las palabras reservadas son identificadores predefinidos reservados que tienen significados
especiales y no se pueden utilizar como identificadores de sus programas.
break case catch char class
Const_cast cast continue default delete
deprecated dllexport dllimport do Double
Estructuras de control
La estructura de control permite al programador, modificar el flujo de instrucciones para la
ejecución de un programa.
Hay tres tipos básicos de estructuras de control
Secuenciales • Asignación
• Entrada
• Salida
Condicionales • Simples
Estructuras de control
• Múltiples
Cíclicas • Hacer para
• Hacer mientras
• Repetir hasta
Estructuras secuenciales: Estructura más simple que se caracteriza por ejecutar instrucciones,
una tras otra, desde el inicio hasta el final.
• Estructura de asignación: Parte del programa donde se realiza una declaración de
variables como también la asignación o no de valores.
• Estructura de entrada: Parte del programa en el que se realiza la entrada de valores por
algún periférico de entrada.
• Estructura de salida: Parte del programa que permite representar la salida de los
resultados de los procesos o mensajes que se despliegan al usuario.
Estructuras condicionales: Son estructuras que permiten seleccionar el código que se quiere
ejecutar, dependiendo de la veracidad o falsedad de una o varias condiciones.
• Estructura condicional simple: Proceso que permite evaluar la condición que, en caso de
ser verdadera, ejecuta una o varias instrucciones.
• Estructura condicional doble: Proceso que permite evaluar la condición que, si es
verdadera, ejecuta una o varias instrucciones, pero, si es falsa, ejecuta otra o varias otras
instrucciones.
o Estructura condicional doble, anidada: Proceso que permite evaluar la condición
que, si es verdadera, ejecuta una o varias instrucciones, sino, evalúa otra
condición, que a su vez, de ser verdadera, ejecuta una o varias instrucciones,
sino, ejecuta otra o varias otras instrucciones. Posteriormente, ejecuta una o
varias instrucciones si la condición inicial es falsa
• Estructura condicional múltiple: Proceso que permite seleccionar varias alternativas. Para
cada selección, hay un caso que contiene las instrucciones que se van a ejecutar. El caso
termina con una instrucción de fin o break. Si ningún caso coincide, se ejecuta el caso
predefinido o default que permite finalizar con el proceso de selección alternativo.
Estructuras cíclicas: Procesos conocidos como estructuras repetitivas que permiten ejecutar un
bloque de código un número controlado de veces. Consta de los siguientes componentes:
Variable de control: variable de incremento o decremento que controla el número de veces
que se repite el ciclo.
Condición: es la condición que controla la finalización o paro del ciclo.
Interacción por ciclo: indica la manera como se modificará la variable de control
(incremento o decremento).
Operadores
Los operadores son símbolos que indican la manera como se deben manipular los operandos y
ambos forman una expresión, formando así una fórmula que define el cálculo de un valor. Los
operandos pueden ser constantes, variables o llamadas a funciones. Existe una regla de prioridad
para la evaluación de los operadores. Se puede modificar el orden de prioridad con la utilización
de paréntesis para algunos grupos de operandos.
Tipos de operadores
• Aritméticos
• Casting
• Monarios
• Relacionales y lógicos
• Asignación
• Condicional
• Tratamiento de bits
• Punteros
• Secuencial
• Acceso a estructuras y uniones
• []y()
Operadores aritméticos
Operador Propósito
+ Adición
- Sustracción
* Multiplicación
/ División
% Resto de la división entera (módulo)
Consideraciones
• Para aplicar % se requiere que ambos operandos sean enteros y el segundo no nulo.
• Para aplicar / se requiere que el segundo operando sea no nulo.
o Para 2 operandos enteros, el resultado será entero, truncado solo la parte entera.
o Para 2 operandos en coma flotante, el resultado será otro número en coma
flotante.
o Para un número entero y otro en coma flotante, el resultado será otro número en
coma flotante.
o Para algún número negativo, el resultado será otro número entero que estará
truncada hacia cero, es decir, siempre menor al valor absoluto que el verdadero
cociente.
Casting
Se puede cambiar el tipo de una variable a través del operador casting, anteponiendo al operando,
el nombre del tipo requerido, encerrado entre paréntesis. El tipo puede ser un puntero o un
modificador de tipo.
Monarios
Son operadores que actúan sobre un sólo operando para producir un nuevo valor. En C todas las
constantes numéricas son positivas. Por tanto, un número negativo es en realidad una expresión,
que consiste en el operador monario menos (-), seguido de una constante numérica positiva. No
debemos confundir este menos, con el de la operación de la sustracción, el cual requiere dos
operandos.
Otros operadores monarios son
++ operador de incremento que hace que su operando se incremente en 1
-- operador de decremento que hace que su operando se incremente en 1
Lógicos y relacionales
Operador Propósito
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual a
!= Distinto
&& And lógico
|| Or lógico
! Not lógico
Consideraciones
Los operadores tienen un orden de precedencia, pudiéndose diferenciar de mayor a menor
precedencia, en caso de igualdad de precedencia todos se asocian de izquierda a derecha
(excepto los monarios, los condicionales, y los de asignación, que lo hacen de derecha a
izquierda), esto quiere decir que si la asociatividad es de izquierda a derecha, y se nos presentan
operadores con la misma precedencia, comenzaremos a mirar los operadores más a la izquierda,
e iremos avanzando hacia la derecha, dicho esto presentamos los distintos grupos de operadores:
Asignación
Se utiliza el operador =, dentro de una asignación, para asignar valores a una variable.
variable = expresión
variable operador = expresión
variable = variable operador expresión
Operador Propósito
++ Incremento unario
-- Decremento unario
= Asignación simple
*= Asignación de la multiplicación
/= Asignación de la división
%= Asignación del resto
+= Asignación de la suma
-= Asignación de la resta
<<= Asignación del desplazamiento a la izquierda
>>= Asignación del desplazamiento a la derecha
&= Asignación de la operación and
|= Asignación de la operación or
^= Asignación de la operación xor
Consideraciones
Cuando se evalúa una expresión se obtiene un tipo de resultado que depende de los operandos.
Si un operador tiene operandos de tipos diferentes, éstos se convierten a tipo según una jerarquía
preestablecida. Las conversiones aritméticas implícitas se realizan mediante la siguiente
secuencia, y en ese orden:
• char y short se convierten a int.
• si un operando es long double, el otro se convierte en long double, y el resultado también.
Cuando se realiza una asignación de variables de diferentes tipos, el valor del lado derecho se
ajusta al tipo de variable del lado izquierdo de la expresión.
Condicional
Este operador (?:) se utiliza para reemplazar estructuras sencillas de decisión. Si se desea que
una instrucción determinada se ejecute según una cierta condición, se emplea este operador
ternario de la siguiente forma:
<condición>?<expresión-v>: <expresión-f>
Primero se evalúa la condición <condición>, si es verdadera se evalúa la <expresión-v>, si es falsa
se evalúa la <expresión-f>
Tratamiento de bits
Operador Propósito
& Operación and
| Operación or
^ Operación xor
>> Desplazamiento a la derecha
<< Desplazamiento a la izquierda
Estos operadores sólo pueden usarse con los tipos int y char y funcionan bit a bit. El operador de
desplazamiento se puede utilizar para realizar multiplicaciones o divisiones rápidas, pues cada
desplazamiento a la izquierda multiplica por 2, y cada desplazamiento a la derecha divide por 2.
El C distingue entre desplazamientos aritméticos y lógicos:
• Los desplazamientos aritméticos se realizan sobre tipos enteros y mantienen el signo (el
bit más alto).
o Con los desplazamientos a la izquierda el bit no se altera.
o Con los desplazamientos a la derecha el bit se copia en la posición siguiente, con
la intención de mantener el signo del dato.
• Los desplazamientos lógicos se realizan sobre datos unsigned. No tienen ninguna
consideración particular con el signo.
[]()
Los corchetes se utilizan para acceder a los diferentes elementos de una matriz (se verá
posteriormente en temas sucesivos). Para seleccionar un elemento se necesita un índice que
indique la posición a utilizar. Los paréntesis se pueden utilizar dentro de las expresiones para
modificar el orden de evaluación predeterminado por el lenguaje.
Optimización de programas
La generación del código se realiza durante el proceso de análisis del programa y tiene la
particularidad que es libre del contexto.
La optimización del programa se realiza después de la generación del código o de una función,
procedimiento, método, etc., ejecutable del programa y tiene la particularidad que es dependiente
del contexto.
Código fuente
Analizador lexicográfico,
sintáctico y semántico
Optimizador
Programa objeto
Declaración de variables
Consiste en escribir una sentencia que proporciona información al compilador para que reserve un
espacio de almacenamiento en la memoria. Las variables usadas en un programa deben ser
declaradas previamente
Sintaxis
<tipo de dato><nombre de variable>;
int n;
<tipo de dato><lista de variables>;
int n, x, y;
<tipo de dato><nombre de variable> = valor;
int n = 25;