Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIÓN AL LENGUAJE C
HISTORIA DEL LENGUAJE C
Fue creado por Brian Kernighan y Dennis Ritchie, en 1978, en los Laboratorios BELL, basándose
en el lenguaje B, creado por Ken Thompson. En 1989, el Instituto Nacional Estadounidense de
Estándares (American National Standards Institute - ANSI) finalizó el trabajo de establecer una
especificación estándar de C. Esta versión estándar del lenguaje se conoce como ANSI C.
A mediados de los ochenta se crea el C++, que es una extensión orientada a objetos de C
ESTRUCTURA DE UN LENGUAJE EN C
INCLUSIÓN DE LIBRERÍAS
La directiva #include permite añadir librerías o funciones que se encuentran en otros archivos
#include "C:\includes\funcion.h"
#include <funcion.h>
IDENTIFICADORES
Nombres dados a las variables o funciones
PALABRAS RESERVADAS
Las palabras reservadas en programación, o palabras clave, tienen un significado especial para
el compilador de cualquier lenguaje de programación.
Todas las palabras reservadas están prohibidas para usarlas con otro propósito. Por ejemplo,
no podemos llamar una variable o función if o int, ya que el compilador lo entendería
como un error.
Tipos de Datos Elementales y Entrada/Salida de
Datos
Constantes
Mantienen su valor a lo largo de todo el programa
Tipos de constantes
Constantes numéricas
Son valores numéricos, enteros o de punto flotante. Se permiten también constantesoctales y
hexadecimales. Ejemplos
Constantes carácter
Cualquier carácter individual encerrado entre comillas simples. Ejemplos
● ‘a’
● ‘Y’
● ‘+’
● ‘7’
Cadenas de caracteres
Un conjunto de caracteres alfanuméricos encerrados entre comillas dobles. Ejemplo
Constantes simbólicas
Poseen un identificador y se definen mediante la palabra reservada CONST
Ejemplo
Ejemplos
#define PI 3.1416
#define NCOLS 20
Tipos de Datos
Calificadores de Tipo
Modifican el rango de valores de un determinado tipo
Signed
La variable lleva signo
Tamaño Rango de
valores
Unsigned
La variable no lleva signo
Tamaño Rango de
valores
Short
Rango de valores en formato corto
Tamaño Rango de
valores
Long
Rango de valores en formato largo
Variables
Una variable representa una posición de memoria referenciada por un identificador. El valor
de una variable puede cambiar durante la ejecución del programa
Declaración e Inicialización
Formato
Variables Globales
Estas variables globales pueden ser utilizadas en cualquier parte del programa y viven durante
toda la ejecución del mismo
Variables Locales
main () {
Duración y Visibilidad
Se refiere al modo de almacenamiento, el cual determina cuándo se crea una variable, cuándo
deja de existir y desde dónde se puede acceder a ella
Las variables locales: Sólo son visibles en el bloque donde están declaradas, se crean cuando
comienza a ejecutarse el bloque y se destruyen cuando éste finaliza su ejecución.
Las variables globales: Son visibles por todas las funciones que están entre la definición y el fin
del fichero. Existen durante toda la ejecución del programa.
Conversiones
Casting (Conversión Explícita): Mecanismo usado para cambios de tipo
int a;
float b;
char c;
b = 65.0;
int a;
float b;
long double > double > float > unsigned long > long > unsigned int > int > char
int x;
x = ((i * j) – j) + 1;
Salida de Datos
printf()
Formato:
Para usar printf hay que escribir al principio del programa la directiva
#include <stdio.h>
%d Entero decimal
%c Carácter simple
%s Cadena de caracteres
Entrada de datos
scanf()
Formato:
En cadena de formato se especifica qué tipo de datos se quieren leer. Se utiliza la misma
descripción de formato que en printf. scanf retorna un entero que representa la cantidad de
conversiones que:
Para usar scanf, hay que escribir al principio del programa la directiva:
#include <stdio.h>
%d Entero decimal
%c Carácter simple
%s Cadena de caracteres
%f Coma flotante
%e Coma flotante
%h Entero corto
Operadores
Son signos especiales que asocian variables y/o constantes para realizar una determinada
operación
Operadores Aritméticos
En C se utilizan cinco operadores aritméticos:
● Suma: +
● Resta: -
● Multiplicación: *
● División: /
● Resto: %
● Incremento: ++
● Decremento: --
● Cambio de signo: -
Operadores de Asignación
Asignan a una variable -depositan en la zona de memoria correspondiente a dicha variable- el
resultado de una expresión o el valor de otra variable
nombre_variable = expresión;
= Asignación simple
+= Asignación y suma
-= Asignación y resta
*= Asignación y multiplicación
/= Asignación y división
Operadores Relacionales
Permiten estudiar si se cumplen una o más condiciones
== Igual que
!= Distinto que
Ejemplos:
Operadores Lógicos
Permiten combinar los resultados de los operadores relacionales, comprobando que se
cumplen simultáneamente varias condiciones
&& AND
|| OR
! NOT
Jerarquía de Operadores
() Mayor precedencia
++ --
*/%
+- Menor precedencia
Precedencia Asociatividad
()[] izda a dcha
+- izda a dcha
== != izda a dcha
|| izda a dcha
= += -= *= /= dcha a izda
Expresiones
Una expresión es una combinación de variables (constantes) y operadores
Una expresión es equivalente al resultado que proporciona el aplicar sus operadores a sus
operandos
Una expresión puede estar formada por otras expresiones más sencillas, y puede contener
paréntesis de varios niveles agrupando distintos términos
if ( condición ) if ( condición )
sentencia 1;
sentencia;
else
sentencia 2;
}
While
La condición es una expresión.
Sintaxis:
while( condición ) {
sentencia;
do ... while
La condición es una expresión.
Sintaxis:
do {
sentencia;
} while (condición )
For
Sintaxis:
sentencia;
}
Enumeraciones, Arreglos y Registros
Enumeraciones
Consisten en tipos de datos definidos por el programador.
Definición:
enum nombre_de_tipo {
lista_de_identificadores
};
Una vez hecha una definición como esta, se pueden emplear variables del tipo
Arreglos
Un arreglo es un identificador que referencia un conjunto de datos del mismo tipo
Arreglos Unidimensionales
También conocido como Vectores
Sólo utiliza un índice para referenciar cada uno de los elementos
Cadenas
Una cadena se define como un arreglo unidimensional de caracteres, con un carácter de
terminación nulo ‘\0’
Ejemplos
char cadena[5]="hola";
char cadena[5]={'h','o','l','a','\0'};
char cadena[]="hola";
fgets lee un máximo de N-1 caracteres, o hasta encontrar un carácter de nueva línea (el Enter
con el que se finaliza la entrada de datos), lo que ocurra primero
#define N 80
...
char cadena[N];
fgets(cadena, N, stdin);
Desbordamientos
Si el usuario escribe más caracteres de los que caben en la cadena destino, igual todos son
leídos y asignados, sobre- escribiendo posiciones de memoria que pueden tener datos
relevantes
strcmp
strcmp(cad1, cad2);
strcpy
strcpy (destino, origen);
Ejemplo:
char str[20];
strcpy(str, “hola”);
printf(“%s”, str);
strcat
strcat(uno, dos);
Ejemplo:
char str[20];
strcpy(str, “Buenos”);
strcat(str, “Dias”);
printf(“%s”, str);
strlen
strlen(str);
Ejemplo:
printf(“%d”, longi);
Arreglos Multidimensionales
Matrices
Una matriz bidimensional, se podría representar gráficamente como una tabla con filas y
columnas
Matrices
Para referenciar cada palabra basta con el primer índice (en una matriz de 2 dimensiones):
printf("%s", dias[i]);
char nombres[10][40];
struct nombre_tipo_estructura {
tipo1 dato1;
tipo2 dato2;
...
tipoN datoN;
};
Una vez definida la estructura, podemos usarla declarando una variable con esa estructura:
struct nombre_tipo_estructura nombre_variable;
nombre_variable.dato1;
MODULARIZACIÓN – FUNCIONES Y
PROCEDIMIENTOS
MODULARIZACIÓN
Una forma natural de atacar problemas grandes es dividirlo en sub-problemas que se puedan
resolver de forma "independiente" y luego combinarse.
Una función recibe valores de entrada (parámetros) y proporciona un valor de salida (valor de
retorno). La función se llama o invoca cuando deseamos aplicarla.
FUNCIONES
Desde el punto de vista matemático, una función es una operación que a partir de uno o más
valores (argumentos), produce un valor denominado resultado o valor de la función.
Una función puede tener varios argumentos, aunque el resultado o valor de la función es
único.
Definición de la función
Describe el funcionamiento interno de la misma, es decir, el algoritmo que se aplica para
calcular el valor que se debe devolver.
El cuerpo de la función: serie de declaraciones y sentencias que deben encerrarse entre llaves
(estructura similar al cuerpo del programa principal)
return((v1+v2)/2.0);
if(nro%2 == 0) return(1);
else return(0);
}
FUNCIONES PREDEFINIDAS
Los lenguajes proveen una serie de funciones predefinidas que facilitan la tarea al
programador. Por ejemplo, las incluidas en las librerías stdio.h, string.h, math.h
Ejemplos:
scanf(“%d”, &numero)
printf(“%d”, numero)
strcpy(cadena, “hola”)
DECLARACIÓN DE FUNCIONES
Declaración o Prototipo de la función
<tipo>: especifica el tipo del valor que devuelve la función (el tipo que tendrá el resultado)
<lista de parámetros> lista que indica cuántos argumentos y de qué tipo se necesitan para
utilizar la función. El nombre del parámetro es opcional.
Ejemplos de prototipos
precio = precioFinal(5.0, 8 );
double subTotal;
return(subTotal + subTotal*IVA);
En la declaración se indica:
Ejemplos
void limpiarPantalla();
REGLAS DE ALCANCE
El buen uso de la programación modular requiere que los módulos (funciones) sean
independientes.
VARIABLES LOCALES
Son aquellas que se declaran en el cuerpo de la función. Solo son "visibles" o "usables" dentro
de la función donde se han declarado.
Dos funciones diferentes, pueden utilizar los mismos nombres de variables sin "interferencias"
ya que se refieren a posiciones diferentes de memoria.
void main () {
int k = 3;
printf(“%d”, cuadrado(k));
printf(“%d”,k);
int cuadrado(int n) {
int k;
k = n*n;
return(k);
La declaración de la función y un comentario adecuado deben ser suficientes para saber cómo
usarla.
Todas las variables utilizadas en el cuerpo de la función deben estar definidas en el cuerpo de
la función.
GENERACIÓN DE NÚMEROS ALEATORIOS
Para generar números aleatorios se usan las funciones rand y srand
int rand();
Entre 0 y 10
Entre 0 y N
Función srand
Supongamos que tenemos un programa que genera 3 número aleatorios entre 0 y 10
● ....
Por defecto, rand calcula los números aleatorios partiendo siempre de una misma semilla
(número inicial). Para generar el segundo número se toma como semilla al primer número
generado, para generar el tercer número se toma como semilla el segundo número, y así
sucesivamente
En el ejemplo, srand toma la hora actual y a partir de eso genera un número semilla para rand
⮚ Por valor
⮚ Por referencia
Es el mecanismo que hemos visto hasta ahora. El valor de los argumentos se copia en los
parámetros formales.
Los cambios hechos en los parámetros de la función no tienen efecto sobre las variables que se
utilizan en la llamada.
Los argumentos que se "pasan" por valor, también reciben el nombre de parámetros de
entrada.
Ejemplos: cuadrado (4), cuadrado(n) C utiliza por defecto la llamada por valor para pasar
argumentos
PASO DE PARÁMETROS POR REFERENCIA
Un parámetro por referencia sirve para que la función comunique valores calculados al
programa que la invocó.
El valor de un parámetro por referencia puede ser leído y modificado dentro de la función y
ésta modificación queda reflejada en el parámetro actual cuando acaba la función.
Para usar parámetros por referencia el identificador del parámetro formal debe estar
precedido por el símbolo clave &
Ejemplos:
Información
Datos procesados.
Ejemplo:
Una tabla/grafico que muestra el total de ventas de una empresa, en un año específico, por
mes.
Administración de datos
Los datos constituyen los bloques de construcción de la información.
El ambiente donde están almacenados los datos debe manejarse con cuidado.
Sistemas de archivos
Los sistemas de archivos preceden a las bases de datos como medios de almacenamiento de
datos en disco.
Los archivos utilizados por una aplicación para almacenar sus datos se diseñaban
específicamente para esa aplicación.
Eficiencia inicial: la estructura de los datos en el archivo está pensada para el programa que lo
va a utilizar.
Al crear programas nuevos que necesitan acceder a los datos del sistema de archivos existente,
por motivos de eficiencia puede ser necesario replicar los archivos, pero con una estructura de
datos nueva, más adecuada para el programa nuevo. Esto puede llevar a:
Información duplicada en más de un archivo (redundancia, se utiliza más espacio en disco del
necesario).
Dificultad de mantenimiento
En archivos con información parcialmente duplicada, realizar actualizaciones de datos es un
proceso complejo y costoso.
Redundancia
Hay redundancia cuando hay datos que no aportan información. Su valor se puede deducir del
de otros datos.
Caso trivial: se incluye más de una vez un mismo dato. Esto no sueleocurrir en un archivo, pero
sí en un sistema de archivos.
Rigidez de búsqueda
La estructura de los datos en un archivo se concibe para que un programa acceda a los datos
de un modo determinado.
El programa debe conocer el orden en que aparecen los datos y accede a ellos
secuencialmente.
Cada vez que hace una lectura, el programa recibe una cadena de caracteres. La información
de dónde comienza y termina cada dato, su tipo, etc., está controlada y es inherente al
programa.
Confidencialidad y seguridad
Al trabajar con un sistema de archivos, el programa se deberá encargar de:
Sin embargo, no se podrá impedir que alguien construya un programa para modificar o ver el
contenido de un archivo, si el sistema operativo le permite el acceso.
Bases de datos
Las bases de datos surgieron como alternativa a los sistemas de archivos, intentando eliminar,
o al menos, reducir sus inconvenientes.
Una base de datos es un sistema formado por un conjunto de datos y un paquete software
para la gestión de dicho conjunto de datos de tal modo que:
Utilización múltiple
Cada usuario puede tener una imagen o visión particular de la estructura de la base de datos
Flexibilidad
Distintos métodos de acceso, tiempos de respuesta cortos
Confidencialidad y seguridad
Se controla el acceso a los datos, impidiéndoselo a usuarios no autorizados
Independencia física
Se puede cambiar el soporte físico de la base de datos (modelo de discos, por ejemplo), sin
que esto repercuta en la base de datos ni en los programas que la usan
Independencia lógica
Se pueden modificar los datos contenidos en la base de datos, las relaciones existentes entre
ellos, o incluir nuevos datos, sin afectar a los programas que los usan
Redundancia controlada
Los datos se almacenan una sola vez
Estos objetos reciben el nombre de entidades. En una base de datos de una empresa se
pueden tener las siguientes entidades: cliente, producto, vendedor, etc.
De cada entidad se almacenan una serie de datos que se denominan atributos de la entidad.
En una base de datos se almacenan, además de las entidades, las relaciones existentes entre
ellas.
Ejemplo:
Cursos y alumnos
Alumnos y profesores
Profesores y asignaturas
Tipos de relaciones
Uno a uno (1 a 1)
Ejemplo: un alumno tiene un expediente académico y un expediente académico corresponde a
un alumno.
Ejemplo: un alumno tiene muchos libros, y cada uno de esos libros tiene un único dueño.
Muchos a muchos (N a M)
Ejemplo: un profesor es profesor de muchos alumnos y cada uno de esos alumnos es alumno
de varios profesores.
Representación de relaciones
El esquema de una base de datos define su estructura lógica: especifica los registros con sus
campos y las relaciones entre ellos.
Un subesquema describe la estructura lógica de una parte de la base de datos que va a ser
usada por uno o más programas.
El subesquema:
● Permite que varios usuarios utilicen distintas estructuras de una misma base de datos
● Jerárquicas
● En red
● Relacionales
Están formadas por tablas. Una tabla es una estructura bidimensional formada por una
sucesión de registros del mismo tipo.
● Todos los registros de una tabla son del mismo tipo. Para almacenar registros de tipos
distintos se usan tablas distintas.
● En ninguna tabla aparecen campos repetidos.
● En ninguna tabla existen registros duplicados.
Lenguaje de manipulación de datos (o DML, del inglés Data Manipulation Language): se utiliza
para el acceso a la base de datos desde lenguajes de alto nivel o en modo conversacional.
Lenguaje de descripción de datos (o DDL, del inglés Data Description Language): utilizado para
la descripción del esquema y de los subesquemas.
El DBMS actúa como intermediario entre los programas de aplicación y el sistema operativo,
esto permite que los programas sean independientes de la estructura física de los datos.
Ejemplos de operaciones:
● La proyección de una tabla es otra tabla que contiene los mismos registros que la tabla de
partida y sólo determinadas columnas. Al proyectar una tabla se especifican las columnas
que se desean obtener.
● Una selección en una tabla produce como resultado otra tabla que contiene los registros
que cumplen una determinada condición. La condición se expresa en función de los
valores de los campos. La tabla creada contiene todas las columnas de la tabla original.
● La composición o unión es una operación que se realiza con dos tablas para producir una
nueva. La unión se realiza en base al valor de algún campo. Para cada par de registros de
las tablas a componer, que tengan el mismo valor en dicho campo, se añade un registro en
la tabla de salida. La tabla de salida contiene los campos que se encuentran en alguna de
las tablas de entrada.
El DML de una base de datos relacional deberá contener al menos sentencias equivalentes a
las siguientes:
Es sencillo diseñar una base de datos, pero a menudo hay que reconsiderar posteriormente la
estructura de los datos, lo cual ocasiona retrasos y modificaciones. Es más lenta la obtención
de un diseño lo más óptimo posible, pero el tiempo invertido se recupera al no tener que
volver atrás para replantearse el diseño de los datos.
Un diseño apresurado o simplemente bosquejado puede mostrarse inservible o muy
mejorable cuando la aplicación ya está parcialmente codificada, o el administrador de la base
de datos ya tiene organizados el mantenimiento y el control de acceso a los datos.
Esquema e instancia
Esquema
Instancia
Nivel conceptual
Nivel físico
Modelos de datos
Estructura general de los datos y técnicas de acceso proporcionadas por un DBMS.
Jerárquico
● Estructura de árbol
● Está obsoleto.
● De red
Estructura de grafos
Fue el primero utilizado comercialmente. Está obsoleto.
Relacional
● Estructura de tablas
El modelo Entidad-Relación
El modelo Entidad-Relación fue propuesto por Peter Chen a mediados de los años setenta
como medio de representación conceptual de los problemas y para representar la visión de un
sistema de forma global.
Un diseñador de base de datos diseña una base de datos usando un modelo Entidad-Relación.
Al hacer esto trabaja a nivel conceptual. Por lo tanto, un modelo Entidad-Relación se puede
implementar luego en diferentes DBMS.
Elementos fundamentales:
Entidades
Relaciones
Entidad
Entidades son los objetos que aparecen en la vida real.
Al convertir un modelo ER a un modelo relacional (fase 4 del diseño de una base de datos), una
entidad da lugar a una tabla de la base de datos.
Atributo
Las entidades están compuestas por atributos, que representan sus propiedades.
Ejemplo: a entidad alumno, tendrá los atributos nombre, CI, nacionalidad, fecha de
nacimiento, ...
Los atributos del modelo ER se convertirán a columnas (campos) de una tabla en una base de
datos relacional.
Elemento
Cada entidad tendrá un número ilimitado de elementos.
Ejemplo: un elemento de la entidad alumno será un alumno en sí; así el alumno Pepe será un
elemento, José será otro, ...
Cada elemento sería una fila o registro de una base de datos relacional.
Tablas
Combinando los conceptos de entidad, atributos, claves primarias y elementos de un modelo
ER, se puede derivar una estructura del tipo tabla de una base de datos relacional.
Relaciones
Las entidades no están aisladas, sino que están relacionadas entre sí.
● 1 a muchos (1 a N)
● Muchos a muchos (M a N)
✔ Insertar información
✔ Eliminar información
✔ Consultar la información
✔ Ordenar la información
✔ Filtrar la información
SQL
SQL = lenguaje de consulta estructurado (por sus siglas en inglés, Structured Query Language)
Una de sus características es el manejo del álgebra y el cálculo relacional que permiten
efectuar consultas con el fin de recuperar de forma sencilla información de interés de bases de
datos, así como hacer cambios en ellas.
Componentes
El lenguaje SQL está compuesto por:
● Comandos
● Cláusulas
● Operadores
● Funciones de agregación
Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases
de datos
Comandos
Existen dos tipos de comandos SQL:
● Los DDL, que permiten crear y definir nuevas bases de datos, tablas, campos e índices.
● Los DML, que permiten insertar, modificar o eliminar datos, así como también generar
consultas para ordenar, filtrar y extraer datos de la base de datos.
Comandos DDL
Comando Descripción
Comandos DML
Comando Descripción
Cláusula Descripción
Operadores
Operadores lógicos
Operador Uso
Operadores de comparación
Operador Uso
<> Distinto de
Funciones de agregación
Las funciones de agregación se usan dentro de una cláusula SELECT en grupos de registros para
devolver un único valor que se aplica al grupo de registro.
Función Descripción
MySQL
MySQL es un sistema de gestión de bases de datos (SGBD) relacional, multihilo y multiusuario,
con más de seis millones de instalaciones.
Es desarrollado por MySQL AB, subsidiaria de Sun Microsystems desde el 2008, y ésta a su vez
de Oracle Corporation desde el 2009.
Es software libre.
Es utilizada por muchos sitios web grandes y populares como Wikipedia, Google (aunque no
para búsquedas), Facebook, Twitter, Flickr y YouTube.
Tipos de datos
Creación de bases de datos y tablas
mysql> USE zoologico ;
El mensaje indica que la base de datos
ERROR 1049: Unknown database 'zoologico' no ha sido creada, por lo tanto,
necesitamos crearla.
mysql>
Database changed
mysql>