SlideShare una empresa de Scribd logo
1 de 25
REPÚBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN
UNIVERSIDAD FERMIN TORO.
CABUDARE-ESTADO LARA.
EL LENGUAJE C
Estudiante
María Gabriela Castillo
CI: 24162676
Introducción a la computación
Saia A
30/07/2016
El lenguaje C es uno de los lenguajes de programación
estructurada más utilizados en nuestros días. El principal componente
estructural de C es la función. En C, las funciones son bloques en los
cuales ocurren las actividades de un programa. Esto nos permite
separar los programas en tareas, lo que nos conduce a la programación
modular.
El lenguaje de programación C fue creado por Dennis
Ritchie entre 1969 y 1973 cuando trabajaba en Bell Laboratorios de
AT&T junto con Ken Thompson en el diseño del sistema operativo UNIX.
C fue creado para poder escribir dicho sistema operativo en un lenguaje
de alto nivel, independiente del hardware donde se ejecutara. Contar
con un lenguaje de alto nivel permitió el avance de los sistemas
operativos, ya que el mismo código podía ser utilizado en las distintas
plataformas, propiciando la reutilización de código y reduciendo los
tiempos de desarrollo. Así es que los sistemas operativos basados en
UNIX, el sistema BSD, el sistema GNU/Linux y muchos otros fueron
desarrollados en C. Este lenguaje ha sido estrechamente ligado al
sistema operativo UNIX, puesto que fueron desarrollados
conjuntamente. Sin embargo, este lenguaje no está ligado a ningún
sistema operativo ni a ninguna máquina concreta. Se le suele llamar
lenguaje de programación de sistemas debido a su utilidad para escribir
compiladores y sistemas operativos, aunque de igual forma se puede
desarrollar cualquier tipo de aplicación. Además, con el paso del tiempo
se han desarrollado cientos de bibliotecas que permiten a los
programadores de C utilizar el código desarrollado por otros para la
realización de tareas comunes. Esto, a su vez, ha propiciado el
desarrollo de aplicaciones en lenguaje C. En 1978 Kernighan y Ritchie
publican su descripción en el libro "The C Programming Language",
versión que es llamada hoy en día 'K&R C'. Este libro se suele llamar
entre los programadores “La biblia del C”, existen varias ediciones, en
las universidades suele ser el libro principal de la bibliografía. A
mediados de los ochenta ya había en el mercado numerosos
compiladores C, y muchas aplicaciones habían sido rescritas a él para
aprovechar sus ventajas. Durante este periodo fabricantes introducen
mejoras en el lenguaje, las cuales son recogidas por un comité de
estandarización ANSI y establecen las especificaciones de lo que se
conoce hoy en día como 'ANSI C'. El C se encuentra en la jerarquía de
lenguajes en un nivel intermedio entre Pascal y el Ensamblador.
Pretende ser un lenguaje de alto nivel con la versatilidad del bajo nivel.
En 1980 Bjarne Stroustrup de los laboratorios Bell de Murray Hill, New
Jersey, adiciono las características de la programación orientada a
objetos (incluyendo la ventaja de una biblioteca de funciones orientada
a objetos) y lo denomino C con clases. Para 1983 dicha denominación
cambio a la de c++. Con este nuevo enfoque surge la nueva metodología
que aumente las posibilidades de la programación bajo nuevos
conceptos. Con la posibilidad de las microcomputadoras se crearon
muchas implementaciones de C. Sin embargo, como no existía ningún
estándar, aparecieron discrepancias. Para remediar la situación, el
instituto de Estándares Americano (ANSI) estableció un comité a
mediados de 1983 para crear un estándar que definiera al lenguaje C.
Este comité ANSI termino el proceso de formalización en 1990.
Actualmente es imposible contar la cantidad de aplicaciones y
herramientas desarrolladas en C.
Uno de los objetivos de diseño del lenguaje C es que sólo sean
necesarias unas pocas instrucciones en lenguaje máquina para traducir
cada elemento del lenguaje, sin que haga falta un soporte intenso en
tiempo de ejecución. Es muy posible escribir C a bajo nivel de
abstracción; de hecho, C se usó como intermediario entre diferentes
lenguajes. En parte a causa de ser de relativamente bajo nivel y de
tener un modesto conjunto de características, se pueden desarrollar
compiladores de C fácilmente. En consecuencia, el lenguaje C está
disponible en un amplio abanico de plataformas (más que cualquier
otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el
lenguaje se desarrolló para incentivar la programación independiente de
la máquina. Un programa escrito cumpliendo los estándares e
intentando que sea portátil puede compilarse en muchos computadores.
C se desarrolló originalmente (conjuntamente con el sistema
operativo Unix, con el que ha estado asociado mucho tiempo) por
programadores para programadores. Sin embargo, ha alcanzado una
popularidad enorme, y se ha usado en contextos muy alejados de
la programación de software de sistema, para la que se diseñó
originalmente. Entre sus principales características podemos mencionar
1.-Tiene un conjunto completo de instrucciones de control.
2.-Permite la agrupación de instrucciones.
3.-Incluye el concepto de puntero (variable que contiene la dirección de
otra variable).
4.-Los argumentos de las funciones se transfieren por su valor.
5.- E/S no forma parte del lenguaje, sino que se proporciona a través de
una biblioteca de funciones.
6.-Permite la separación de un programa en módulos que admiten
compilación independiente.
Originalmente el Lenguaje C estuvo muy ligado al sistema
operativo UNIX como se había mencionado antes que, en su mayor
parte, está escrito en C. Más adelante se comenzó a utilizar en otros
sistemas operativos para programar editores, compiladores, etc. Aunque
se le conoce como un lenguaje de programación de sistemas, no se
adapta mal al resto de aplicaciones. De hecho, hoy en día un alto
porcentaje de software para ordenadores personales está escrito en
Lenguaje C. Por ejemplo, el sistema operativo MS-DOS. Algunas de las
características más importantes que definen el lenguaje y que han
permitido que sea tan popular, como lenguaje de programación son:
Tamaño pequeño, Uso extensivo de llamadas a funciones, Comandos
breves (poco tecleo), Lenguaje estructurado, Programación de bajo nivel
(nivel bit), Implementación de apuntadores - uso extensivo de
apuntadores para la memoria, arreglos, estructuras y funciones.
Aunque la lista de las características útiles de las que carece C es larga,
este factor ha sido importante para su aceptación, porque escribir
rápidamente nuevos compiladores para nuevas plataformas, mantiene
lo que realmente hace el programa bajo el control directo del
programador, y permite implementar la solución más natural para cada
plataforma. Ésta es la causa de que a menudo C sea más eficiente que
otros lenguajes. Típicamente, sólo la programación cuidadosa en
lenguaje produce un código más rápido, pues da control total sobre la
máquina, aunque los avances en los compiladores de C y la complejidad
creciente de los microprocesadores modernos han reducido
gradualmente esta diferencia. Todo programa escrito en C consta de
una o más funciones, una de las cuales se llama main. El programa
siempre comenzará por la ejecución de la función main. Cada función
debe contener:
 Una cabecera de la función, que consta del nombre de la función,
seguido de una lista opcional de argumentos encerrados con
paréntesis.
 Una lista de declaración de argumentos, si se incluyen estos en la
cabecera.
 Una sentencia compuesta, que contiene el resto de la función.
Para la estructura del lenguaje C los argumentos son símbolos que
representan información que se le pasa a la función desde otra parte
del programa. (También se llaman parámetros a los argumentos). Cada
sentencia compuesta se encierra con un par de llaves, {.....}. Las llaves
pueden contener combinaciones de sentencias elementales
(denominadas sentencias de expresión) y otras sentencias compuestas.
Así las sentencias compuestas pueden estar anidadas, una dentro de
otra. Cada sentencia de expresión debe acabar en punto y coma (;). Los
comentarios pueden aparecer en cualquier parte del programa,
mientras estén situados entre los delimitadores /*................ */ (por
ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para
identificar los elementos principales de un programa o simplemente
para orientar a un posible usuario de ese código. Todo programa en 'C'
consta de una o más funciones, una de las cuales se llama main. El
programa comienza en la función main, desde la cual es posible llamar
a otras funciones. Cada función estar formada por la cabecera de la
función, compuesta por el nombre de la misma y la lista de argumentos
(si los hubiese), la declaración de las variables a utilizar y la secuencia
de sentencias a ejecutar.
Encabezamiento
main( )
{
variables locales
sentencias
}
f1( )
{
variables locales
sentencias
}
...
...
...
fn( )
{
variables locales
sentencias
}
Uno de los procedimientos más comunes y útiles en el
procesamiento de datos, es la ordenación de los mismos. Se considera
ordenar al proceso de reorganizar un conjunto dado de objetos en una
secuencia determinada (patrón de arreglo). El objetivo de este proceso
generalmente es facilitar la búsqueda de uno o más elementos
pertenecientes a un conjunto.
Como ejemplos de conjunto de datos ordenados tenemos:
 Meses del año (ordenados de 1 al 12).
 Listado de estudiantes (ordenados alfabéticamente).
 Guías Telefónicas (ordenadas por País/por región/por sector/por
orden alfabético)
La ordenación, tanto numérica como alfanumérica, sigue las mismas
reglas que empleamos nosotros en la vida normal. Esto es, un dato
numérico es mayor que otro cuando su valor es más grande, y una
cadena de caracteres es mayor que otra cuando esta después por orden
alfabético.
Los métodos de ordenación, pueden agruparse en dos grandes grupos:
 Los internos: Es cuando los datos están disponibles en un área de la
memoria principal, como cuando se leen un conjunto de datos desde
el teclado.
 Los externos: Los datos están guardados en un medio externo, como
puede ser un fichero, una base de datos, etc. En donde los datos
están alojados en el disco duro u otro medio físico.
En este sección explicaremos solo tres modos de ordenamiento, los mas
usados como son:
 Algoritmo de Ordenamiento Burbuja (Buble Sort)
 Algoritmo de Ordenamiento Insercion
 Algoritmo de Ordenamiento Quick Sort
Método de Burbuja (Bubble Sort)
El método de ordenamiento de burbuja, es un algoritmo que se aplica
para poder ordenar una cantidad de datos ya sea de forma ascendente o
descendente.
Es el algoritmo más fácil de implementar, pero a cambio pagamos un
alto precio en procesamiento, ya que este método evalúa una cantidad
los datos muchas veces y en ocasiones innecesariamente (como por
ejemplo cuando son iguales).
A estas alturas posiblemente ya tengas conocimiento de sencillos pasos
para ordenar datos, como por ejemplo, Determinar cual es el mayor o
menor de dos números, pues aplicando este método podremos ordenar
array, estructuras y cualquier tipo de dato NO atómico (es decir que se
pueda dividir)
Este libro trata de programación en C, entonces a continuación nos
aplicamos a esto:
Este metodo necesita de lo siguiente para implementarse:
 Un array o estructura que ordenar (>1 elemento).
 Dos variables contadoras de ciclos (i,j por ejemplo).
 Una variable temporal (para almacenar un dato momentaneamente).
 Dos ciclos y un Condicional...
 ....
 //DE MENOR A MAYOR (Ascendente)
 #define Nelementos 4
 ....

 int i,j; //Variables contadoras del ciclo.
 int lista[Nelementos]={6,9,3,1}; //Declaracion e inicializacion
de un arreglo de 4 elementos.
 int temp=0; //Variable temporal.

 for (i=1;i<Nelementos;i++)
 {
 for (j=0; j <= Nelementos-1 ;j++) // for(j=0; j <
Nelementos-1; j++) es menor y no menor igual
 {
 if (lista[j] > lista[j+1])//Condicion mayor-menor
 {
 temp=lista[j];
 lista[j]=lista[j+1];
 lista[j+1]=temp;
 }
 }
 }
 //Para cambiar el modo de ordenamiento solo debemos
cambiar la condicion < ó >




 '''<big>Explicando un poco lo que dice el codigo
tenemos:</big>'''

 # Iniciamos i a 1, de esta forma correremos el ciclo
solamente 3 veces. Asi evitamos correr ciclos
innecesariamente.
 # El segundo for, se ejecutara 3 veces por cada primer ciclo.
 # La condicion nos dice:
 * Si, el valor de lista 0 es mayor al valor de lista 1, es decir
 * '''Si, 6 > 9''', pero como la condicion no se cumple, pasamos
del ciclo y '''J=1'''.
 * Si, el valor de lista 1 es mayor al valor de lista 2, es decir
 * '''Si, 9 > 3''', como es '''verdadera''' hacemos:
 # Guardamos momentaneamente en la variable temporal el
valor de lista 1, es decir 9.
 # En la posicion de lista 1, guardamos el valor de lista 2, es
decir 3.
 # En la posicion de lista 2, guardamos el valor de temp, es
decir 9
 '''Volvemos''' nuevamente '''al ciclo''', ahora '''J=2'''...
 * Si, el valor de lista 2 es mayor al valor de lista 3, es decir
 * Si, '''9 > 1''', (recuerda que anteriormente '''movimos''' al 9 a
la posicion de 3), es verdadera =>
 # Guardamos momentaneamente en la variable temporal el
valor de lista 2, es decir 9.
 # En la posicion de lista 2, guardamos el valor de lista 3, es
decir 1.
 # En la posicion de lista 3, guardamos el valor de temp, es
decir 9.

 De esta forma el ciclo se repite hasta que todos los datos se
hallan movido. Como veras hasta ahora solo hemos estado
moviendo el 9. Tu lista se veria asi:

 * ''Original:'' 6 '''9''' 3 1
 :* ''1er Mov:'' 6 3 '''9''' 1
 :* ''2do Mov:'' 6 3 1 '''9'''

 Si bien ya esta mas ordenada que la original, aun falta
bastante, pero recuerda que estábamos en el primer ciclo del
primer for (i).

 '''Acá te dejo como serán los demás movimientos:'''
 * ''Segundo Ciclo i:''
 :* 3 6 1 9
 :* 3 1 6 9

 * ''Tercer Ciclo i:''
 :* 1 3 6 9
 :* YA!

 En un principio, pensaba no presentarles las variaciones
que hay de este algoritmo, pero revisando en varios libros me
percate de que aunque es el mismo algoritmo y funciona de
la misma forma (con sus ventajas y desventajas), Creo que
es preferible mostrarselos para evitar confusiones y enredos
innecesarios.

 == Variantes ==

 Buscando en varios libros e Internet me he encontrado
numerosas variantes, y por motivos pedagógicos voy a
mostrarlos, ya que considero que aunque sean el mismo
algoritmo, su diferente implementacion puede llevar a
confusiones.

 En lo personal considero que el algoritmo planteado al
principio es el que mejor se expresa (entiende), y es el que
recomiendo implementar, pero hay libros que lo
implementan de otra forma, por lo que los que se guían con
el, pueden tener confusiones a la hora de apoyarse con este
libro.

 ==== Variante: 1 Ciclo. ====

 Aunque en realidad usa dos ciclos un while y un for, el
while hace la función de nuestro primer for. Sin embargo la
demás implementaciones son técnicamente las mismas, solo
que en vez de usar una variable ya preparada (j en nuestro
caso), este evalúa con la variable i.
Variante: Restar
Esta es una de las más usuales que he visto en los libros, folletos y
otros. Todo es igual, pero cambian las condiciones, de esta forma se
trabaja a la inversa de nuestro algoritmo.
Ejemplos
El algoritmo burbuja esta preparado para correr con todo tipo de datos
NO atómicos, es por esto que no importa si el arreglo es de tipo char,
int, float, etc. Funcionara con sus respectivas modificaciones. El
siguiente ejemplo ordenara una lista de tamaño 6, que esta ordenada.
Recuerden como buena práctica:
Definir las variables en un solo punto del código.
 Definir el tamaño del array como constante.
 Usar la indentacion correspondiente (Tabulaciones).
//Realizado por Master crack cocaino
//UNAN-LEON Nicaragua.
#include <stdio.h>
#define TAM 6
int main()
{
int lista[TAM]={12,10,5,6,1,3}; //Declaracion e Inicializacion de un
array
int temp=0; //Variable temporal
int i,j; //variables corredoras del ciclo
printf("La lista DESORDENADA es: n");
for (i=0;i<TAM;i++)
printf("%3d",lista[i]); //impresion de la lista con espacio de 3 lineas
(%3d)
for (i=1;i<TAM;i++)
{
for (j=0;j<TAM-1;j++)
{
if (lista[j] > lista[j+1]) //condicion
{
temp = lista[j]; //temp guarda
momentaneamente el valor de lista[j]
lista[j]=lista[j+1]; //Asigno al la posicion lista[j],
lo que hay en lista[j+1]
lista[j+1]=temp;//obtendra un nuevo valor por
parte de temp.
}
}
}
printf("nLos valores ORDENADOS de lista son: n");
for(i=0;i<TAM;i++)
printf("%3d",lista[i]);
return 0;
}
//Revisado por: Gustavo A. Chavarria.
//UNAN-LEON Nicaragua
Método de Inserción
Este método se podría decir que es algo superior al método de la
burbuja, ya que logra evaluar menos veces la condición. Sin embargo
aun es un algoritmo muy pobre y que utiliza recursos técnicamente
igual que el algoritmo burbuja.
Concepto
El algoritmo consiste en ordenar los dos primeros elementos de la
matriz, luego se inserta el tercer elemento en la posición correcta con
respecto a los dos primeros, a continuación se inserta el cuarto
elemento en la posición correcta con respecto a los tres primeros
elementos ya ordenados y así sucesivamente hasta llegar al ultimo
elemento de la matriz.
Explicación
Ejemplos
Método QuickSort
Es el ultimo método del que hablaremos en este libro, es el algoritmo
que mas calidad tiene, pudiendo llegar a lo mismo que el método
burbuja e inserción, mas rápido y con uso de menos recursos.
Concepto
El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en
la técnica de divide y vencerás. Esta es probablemente la técnica más
rápida conocida. Fue desarrollada por Tony Hoare en 1960.
La idea del algoritmo es simple, se basa en la división en particiones de
la lista a ordenar, por lo que se puede considerar que aplica la técnica
divide y vencerás. El método es, posiblemente, el más pequeño de
código, más rápido, más elegante, más interesante y eficiente de los
algoritmos de ordenación conocidos.
Explicación
El método se basa en dividir los n elementos de la lista a ordenar en dos
partes o particiones separadas por un elemento: una partición
izquierda, un elemento central denominado pivote o elemento de
partición, y una partición derecha. La partición o división se hace de tal
forma que todos los elementos de la primera sublista (partición
izquierda) son menores que todos los elementos de la segunda sublista
(partición derecha). Las dos sublistas se ordenan entonces
independientemente. Para dividir la lista en particiones (sublistas) se
elige uno de los elementos de la lista y se utiliza como pivote o elemento
de partición. Si se elige una lista cualquiera con los elementos en orden
aleatorio, se puede seleccionar cualquier elemento de la lista como
pivote, por ejemplo, el primer elemento de la lista. Si la lista tiene algún
orden parcial conocido, se puede tomar otra decisión para el pivote.
Idealmente, el pivote se debe elegir de modo que se divida la lista
exactamente por la mitad, de acuerdo al tamaño relativo de las claves.
Una vez que el pivote ha sido elegido, se utiliza para ordenar el resto de
la lista en dos sublistas: una tiene todas las claves menores que el
pivote y la otra, todos los elementos (claves) mayores que o iguales que
el pivote (o al revés). Estas dos listas parciales se ordenan
recursivamente utilizando el mismo algoritmo; es decir, se llama
sucesivamente al propio algoritmo quicksort. La lista final ordenada se
consigue concatenando la primera sublista, el pivote y la segunda lista,
en ese orden, en una única lista. La primera etapa de quicksort es la
división o «particionado» recursivo de la lista hasta que todas las
sublistas constan de sólo un elemento. El algoritmo es éste:
 Recorres la lista simultáneamente con i y j: por la izquierda con i
(desde el primer elemento), y por la derecha con j (desde el último
elemento).
 Cuando lista[i] sea mayor que el elemento de división y lista[j] sea
menor los intercambias.
 Repites esto hasta que se crucen los índices.
El punto en que se cruzan los índices es la posición adecuada para
colocar el elemento de división, porque sabemos que a un lado los
elementos son todos menores y al otro son todos mayores (o habrían
sido intercambiados). Al finalizar este procedimiento el elemento de
división queda en una posición en que todos los elementos a su
izquierda son menores que él, y los que están a su derecha son
mayores.
El primer objetivo de un programa informático es el manejo de
datos. Un dato es toda aquella información que se puede tratar en un
programa informático. Existen unos datos de entrada y unos datos de
salida. Los datos de entrada se manipulan en el programa produciendo
unos datos de salida.
Un dato dentro de un programa se caracteriza por llevar asociado un
identificador, un tipo y un valor. Hay dos clases de tipos de datos: tipos
fundamentales y tipos derivados. Hablaremos de los tipos de datos
fundamentales.
Tipo entero: representa números enteros con o sin signo, que estarán
compuestos por los dígitos del 0 al 9, pudiendo ser precedidos por los
signos + o -.
Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc.
Para definir variables en C se antepone la palabra reservada del tipo al
identificador de la variable. El tipo de datos entero se define en el
lenguaje de programación C por la palabra reservada int.
Para definir un tipo de dato en C se escribe lo siguiente:
int nombre_variable = valor;
No es necesario que la variable tenga un valor predeterminado. Se
puede definir sin asignarle ningún valor.
Si tenemos varios datos que son del mismo tipo, se pueden definir todas
en la misma línea de código escribiendo un único int, separando el
nombre de las variables por “,”. Una vez que se haya acabado de definir
variables, se cierra la línea de código con “;”,
Por ejemplo: int edad = 24;
int edad;
int edad, num, contador;
Tipo real: Se emplean para representar números reales (con decimales).
Para definir datos reales se antepone la palabra reservada float al
identificador de la variable.
float identificador = valor;
Por ejemplo: float numero1, numero2;
float numero3 = 123.43;
float numero3;
Tipo carácter: Este tipo de datos se emplea para representar un carácter
perteneciente a un determinado código utilizado por el ordenador
(normalmente el código ASCII).
Para representar este tipo de dato se antepone la palabra reservada
char al identificador de la variable.
Char identificador = ‘valor’;
Una constante tipo char se representa como un solo carácter encerrado
entre comillas simples.
Por ejemplo: char letra, letra2;
char letra=’a’;
Tipo cadena de caracteres: una cadena de caracteres es un número de
caracteres consecutivos (incluso ninguno) encerrado entre unos
delimitadores determinados, que en el lenguaje C son las comillas
dobles.
Para definir variables de tipo cadena, estas se definen como vectores de
caracteres, esto es, anteponiendo la palabra reservada char al
identificador de la variable, y después entre corchetes la longitud
máxima de cadena.
Char identificador[cantidad] = “ mensaje ”;
Por ejemplo: char cadena[20];
char cadena[20] = “Hola mundo”;
char cadena[] = “HOLA”;
En la siguiente tabla se hace un resumen de los distintos tipos de
datos:
Los operadores relacionales, también denominados operadores binarios
lógicos y de comparación, se utilizan para comprobar la veracidad o
falsedad de determinadas propuestas de relación (en realidad se trata
Tipo de dato Palabra reservada Ejemplo
Entero Int Int numero=0;
Real Float Float numero=12.2;
Carácter Char Char letra = ‘a’;
Cadena de carácter Char Char palabra[10] = “HOLA”;
respuestas a preguntas). Las expresiones que los contienen se
denominan expresiones relacionales. Aceptan diversos tipos de
argumentos, y el resultado, que es la respuesta a la pregunta, es
siempre del tipo cierto/falso, es decir, producen un resultado booleano
(3.2.1b)
Si la propuesta es cierta, el resultado es true (un valor distinto de cero),
si es falsa false (cero). C++ dispone de los siguientes:
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual que (identidad)
!= Desigual que (desigualdad)
Sintaxis
expresión-relacional <>
expresión-relacional > shift-expresion
expresión-relacional <= shift-expresion
expresión-relacional >= shift-expresion
expresión-de-igualdad == expresión-relacional
expresión-de-igualdad != expresión-relacional
Comentario
Como puede verse, todos ellos son operadores binarios (utilizan dos
operandos), de los cuales, dos de ellos son de igualdad: == y !=, y sirven
para verificar la igualdad o desigualdad entre valores aritméticos o
punteros. Estos dos operadores pueden comparar ciertos tipos de
punteros, mientras que el resto de los operadores relacionales no
pueden utilizarse con ellos.
Observe que los operadores == y != tienen una menor precedencia que
el resto de los operadores relacionales < y >, <= y >=.
El operador de desigualdad != tiene otra forma estándar de designación
mediante la palabra clave not_eq (4.9.8)
Cualquiera que sea el tipo de los operandos, por definición, un operador
relacional, produce un bool (true ofalse) como resultado, aunque en
determinadas circunstancias puede producirse una conversión
automática de tipo a valores int (1 si la expresión es cierta y 0 si es
falsa).
Ejemplo de comprobación:
#include
int main() {
float f = 12.1, g = 12.2;
cout << "Tipo: " <<>
Salida
Tipo: bool
Condiciones
En las expresiones relacionales E1 E2, los operandos deben cumplir
alguna de las condiciones siguientes:
1. E1 y E2 son tipos aritméticos.
2. E1 y E2 son punteros a versiones cualificadas o no cualificadas
de tipos compatibles.
3. Uno de ellos es un puntero a un objeto, mientras que el otro es
un puntero a una versión cualificada o no cualificada de void.
4. Uno de los dos es un puntero, mientras que el otro es un puntero
nulo constante.
Cuando se trata de tipos definidos por el usuario (que no cumplen las
condiciones anteriores) estos operadores pueden ser sobrecargados de
forma que puedan ser utilizados con dichos tipos (4.9.18b1).
Precauciones
Con el operador de igualdad
Las expresiones relacionales de igualdad son frecuentísimas en la
programación. En multitud de ocasiones se comparan dos expresiones y
se toma una decisión en función del resultado cierto / falso obtenido.
Por ejemplo, la condición de la sentencia de iteración while(4.10.3)
puede ser una expresión relacional de igualdad:
int x = 1; y = 2;
...
while (x == y ) {
cout << "Son iguales..." <<>
Es muy frecuente que, tanto el principiante, como el programador
acostumbrado a otros lenguajes, donde el operador de asignación y el
de igualdad son distintos a los utilizados en C++ (por ejemplo := y =),
confundan el operador de igualdad == con el de asignación =. Es este
caso, el código anterior sería escrito erróneamente:
while (x = y ) {
cout << "Son iguales..." <<>
El resultado es que el bucle se ejecuta mientras sea y != 0, ya que la
expresión asigna y a x, y el resultado es cierto mientras que x sea
distinto de cero.
Los operadores Lógicos son muy utilizados en informática, lógica
proposicional y Algebra Booleana , entre otras disciplinas. Los
operadores lógicos nos proporcionan un resultado a partir de que se
cumpla o no una cierta condición. Esto genera una serie de valores que,
en los casos más sencillos, pueden ser parametrizados con los valores
numéricos 0 y 1, como se puede apreciar en los ejemplos de abajo. La
combinación de dos o más operadores lógicos conforma una función
lógicos.
 Los más sencillos son (nótese su relación con los operadores
relacionales):
 Operador NO-lógico: '¬A' significa todo lo que no es A'
 Operador Y-lógico: 'A ∧ B' significa 'A y B a la vez';
resultando FALSO (0) si no se cumple y VERDADERO (1) si
sí lo hace.
 Operador O-lógico: 'A ∨ B' significa 'O bien A, o bien B, o
bien los dos'; resultando FALSO (0) si no se dan ni A ni B y
VERDADERO (1) si se da alguno de los dos o los dos a la
vez.
 Operador =: 'A = B' significa 'A debe ser igual a B';
resultando FALSO (0) si esto no es así y VERDADERO (1) en
caso contrario.
 Operador <: 'A <>
 Los operadores más complejos se construyen a partir de los
anteriores (podría incluirse alguno más) y ya entran dentro de lo
que sería una función lógica. Un ejemplo muy utilizado sería 'SI
(condición;A;B)' ('IF condición THEN A ELSE B' en la mayoría de
los lenguajes de programación) cuyo resultado sería A si se
satisface la 'condición' o B en caso contrario.
Ejemplo: Habiendo declarado las variables:
En pseudocódigo:
entero r = 2, s = 9, t = 8
En lenguaje C:
int r = 2, s = 9, t = 8;
se puede escribir
En pseudocódigo:
no( r = s o r <= t )
En lenguaje C:
!( r == s || r <= t )
La expresión se evalúa a
En pseudocódigo:
falso (actúan en orden los operadores: (<=), (==), (||) y (!))
En lenguaje C:
0 (C simula el valor lógico falso con el valor entero 0)
Los operadores Aritméticos Comprenden las cuatro operaciones
básicas, suma, resta, multiplicación y división, con un agregado, el
operador módulo. Los operadores aritméticos existentes en C son,
ordenados de mayor a menor precedencia:
Los operadores ++, -- y % solo pueden usarse con datos de tipo int o
char. El operador incremento (++), incrementa en una unidad el valor
de la variable sobre la que se aplica, el operador decremento (--),
decrementa en una unidad el valor de la variable, y el operador módulo
(%), calcula el resto de una división de dos variables de tipo entero o
carácter. Un aspecto que conviene explicar es el hecho de que los
operadores incremento y decremento pueden preceder o posceder a su
operando, lo cual permite escribir, si x es una variable de tipo int, las
expresiones ++x o x++. Usado de forma aislada no presenta ninguna
diferencia, sin embargo, cuando se usa en una expresión existe una
diferencia en el orden de ejecución del mismo. Cuando el operador
incremento (o decremento) precede al operando, C primero realiza el
incremento (o decremento), y después usa el valor del operando,
realizándose la operación al contrario si el operador poscede al
operando.
Así, considérense el siguiente código de un programa:
int var1=10,var2;
var2=++var1; /* Pone 11 en var2, pues primero incrementa var1,*/
/* y luego asigna su valor a var2 */
Mientras que el siguiente código funciona de forma distinta:
int var1=10,var2;
var2=var1++; /* Pone 10 en var2, pues primero asigna su valor */
/* a var2, y luego incrementa var1 */
Los operadores por Asignación el lenguaje C, a diferencia de otros
lenguajes tales como Pascal, no diferencia la asignación de cualquier
otro operador del lenguaje. Para C, la asignación es un operador, el
llamado operador asignación (=), el cual posee la prioridad más baja de
todos los operadores. Es por ello que en C podemos escribir expresiones
del tipo:
if ((c=a*b)<0) /* if es la comprobación condicional de C, que */
/* se vera con posterioridad */
Esta expresión asigna a la variable c el valor de a*b y devuelve su valor
para compararlo con el valor constante 0. Los paréntesis son necesarios
pues el operador asignación tiene la prioridad mas baja de todos los
operadores.
Para terminar podríamos dar como conclusión donde C es un lenguaje
de programación de nivel medio ya que combina los elementos del
lenguaje de alto nivel con la funcionalidad del ensamblador.
Su característica principal es ser portable, es decir, es posible adaptar
los programas escritos para un tipo de computadora en otra. Otra de
sus características principales es el ser estructurado, es decir, el
programa se divide en módulos (funciones) independientes entre sí.
El lenguaje C inicialmente fue creado para la programación de:
-Sistemas operativos
-Intérpretes
-Editores
-Ensambladores
-Compiladores
-Administradores de bases de datos.
Actualmente, debido a sus características, puede ser utilizado para todo
tipo de programas.
Para poder leer y escribir datos en el lenguaje de programación C
existen una serie de funciones agrupadas en un conjunto de librerías de
código objeto, que constituyen la llamada biblioteca estándar del
lenguaje. En el caso concreto de las funciones de entrada y salida
(lectura y escritura), su archivo de cabecera es stdio.h.
Existen varias funciones que realizan la entrada y salida de datos en el
lenguaje de programación C, pero nos vamos a centrar solamente en
dos de ellas: printf() y scanf().
Funcion printf()
La función printf() sirve para escribir datos en la pantalla con un
formato determinado.
El prototipo de esta función es la siguiente:
int printf(const char *formato, arg1, arg2, …, argn)
donde:
formato: hace referencia a una cadena de caracteres que contiene
información sobre el formato de salida.
Arg1, arg2, …, argn: argumentos que representan los datos de salida
La cadena de control puede constar de hasta tres tipos de información:
- texto: que será mostrado por pantalla tal cual este escrito
- Secuencias de escape: secuencias reservadas propias del
lenguaje. Van precedidas por '' y las más importantes son 'n' que
introduce un salto de línea, y 't' que introduce un tabulador.
- Especificadores de formato: son ciertos caracteres precedidos del
carácter tanto por ciento '%'.
A continuación se muestra una tabla con estos especificadores de
formato dependiendo del tipo de dato a los que representan:
Tipo de dato Especificadores de
formato
Comentario
Int %d Entero con signo
Float %f Real con signo
Char %c carácter
Char [n] %s Cadena de caracteres
Ejemplos:
printf(“n Valores: %d, %f”, entero, real);
Salida por pantalla:
(Retorno de carro)Valores: 2, 2.3
printf(“%st%dn%f”, concepto, num, coste);
Salida por pantalla:
Cremallera 1234
12.345
Función scanf()
La función scanf() se pude considerar de alguna manera como la inversa
de la función printf(), pues sirve para introducir datos desde el teclado
con un formato determinado.
El prototipo de esta función es el siguiente:
int scanf(const char *formato, arg1, arg2, …, argn);
donde:
 formato: hace referencia a una cadena de caracteres
(cadena de control) que contiene información sobre el formato
de los datos que se van a introducir mediante el teclado.
 arg1, arg2, …, argn: son los argumentos que representan
los datos de entrada.
La cadena de control puede constar de:
 Especificadores de formato, que son ciertos caracteres
precedido por el carácter tanto por ciento '%'.
 Caracteres de espacio
 Otros caracteres no espacios, para entradas con formato
A continuación se muestra una tabla con estos especificadores de
formato dependiendo del tipo de dato a los que representan:
Tipo de dato Especificadores de
formato
Comentario
Int %d Entero con signo
Float %f Real con signo
Char %c carácter
Char [n] %s Cadena de caracteres
Ejemplos:
scanf(“%d”, numero);
scanf(“%d %s %f”, numero, &cadena, &real);

Más contenido relacionado

La actualidad más candente

Estructura selectiva simple con Java
Estructura selectiva simple con JavaEstructura selectiva simple con Java
Estructura selectiva simple con JavaNora O. Martínez
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptxWaldirOzuna2
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programaciónEdison Morales
 
Estructuras condicionales
Estructuras condicionalesEstructuras condicionales
Estructuras condicionaleswladimirclipper
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamicagusolis93
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesJosé Antonio Sandoval Acosta
 
CreacióN De Objetos En MySQL
CreacióN De Objetos En MySQLCreacióN De Objetos En MySQL
CreacióN De Objetos En MySQLalexmerono
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosJosé Antonio Sandoval Acosta
 
Variables y Constantes en C++
Variables y Constantes en C++Variables y Constantes en C++
Variables y Constantes en C++ivanjvic
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalizacióncintiap25
 
Memoria Estatica
Memoria EstaticaMemoria Estatica
Memoria EstaticaJ M
 

La actualidad más candente (20)

Analisis Algoritmo
Analisis AlgoritmoAnalisis Algoritmo
Analisis Algoritmo
 
Sintaxis del lenguaje c++
Sintaxis del lenguaje c++Sintaxis del lenguaje c++
Sintaxis del lenguaje c++
 
Estructura selectiva simple con Java
Estructura selectiva simple con JavaEstructura selectiva simple con Java
Estructura selectiva simple con Java
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptx
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programación
 
Estructuras condicionales
Estructuras condicionalesEstructuras condicionales
Estructuras condicionales
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Transaccion
TransaccionTransaccion
Transaccion
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
CreacióN De Objetos En MySQL
CreacióN De Objetos En MySQLCreacióN De Objetos En MySQL
CreacióN De Objetos En MySQL
 
Tópicos Avanzados de Programación - Unidad 1 GUI
Tópicos Avanzados de Programación - Unidad 1 GUITópicos Avanzados de Programación - Unidad 1 GUI
Tópicos Avanzados de Programación - Unidad 1 GUI
 
Estructura selectiva doble
Estructura selectiva dobleEstructura selectiva doble
Estructura selectiva doble
 
Dev-C++
Dev-C++ Dev-C++
Dev-C++
 
Taller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 ConectividadTaller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 Conectividad
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Variables y Constantes en C++
Variables y Constantes en C++Variables y Constantes en C++
Variables y Constantes en C++
 
Diagrama entidad-relacion normalización
Diagrama entidad-relacion normalizaciónDiagrama entidad-relacion normalización
Diagrama entidad-relacion normalización
 
Memoria Estatica
Memoria EstaticaMemoria Estatica
Memoria Estatica
 

Destacado

Asignacion n° 1 Getsemany matematica III
Asignacion n° 1 Getsemany matematica IIIAsignacion n° 1 Getsemany matematica III
Asignacion n° 1 Getsemany matematica IIIGetsemany Cona
 
TYPOGRAPHY TRADITIONAL
TYPOGRAPHY TRADITIONALTYPOGRAPHY TRADITIONAL
TYPOGRAPHY TRADITIONALAyat Aljafar
 
Agences immobilières
Agences immobilièresAgences immobilières
Agences immobilièresbeaty22
 
Trends, recruitment and remuneration in the Healthcare & Life Sciences sector
Trends, recruitment and remuneration in the Healthcare & Life Sciences sectorTrends, recruitment and remuneration in the Healthcare & Life Sciences sector
Trends, recruitment and remuneration in the Healthcare & Life Sciences sectorMichael Page
 
Galtier Concilier securite et simplicite
Galtier Concilier securite et simpliciteGaltier Concilier securite et simplicite
Galtier Concilier securite et simpliciteAntoine Vigneron
 
Baromètre RH - Rapport global
Baromètre RH - Rapport globalBaromètre RH - Rapport global
Baromètre RH - Rapport globalMichael Page
 
Jona assessment in affective domain
Jona  assessment in affective domainJona  assessment in affective domain
Jona assessment in affective domainDENR-EMB CALABARZON
 
Which font should I use?
Which font should I use?Which font should I use?
Which font should I use?Alexei Kapterev
 

Destacado (11)

Asignacion n° 1 Getsemany matematica III
Asignacion n° 1 Getsemany matematica IIIAsignacion n° 1 Getsemany matematica III
Asignacion n° 1 Getsemany matematica III
 
Actividad Nª 1
Actividad Nª 1Actividad Nª 1
Actividad Nª 1
 
TYPOGRAPHY TRADITIONAL
TYPOGRAPHY TRADITIONALTYPOGRAPHY TRADITIONAL
TYPOGRAPHY TRADITIONAL
 
Passed pupils
Passed pupilsPassed pupils
Passed pupils
 
Agences immobilières
Agences immobilièresAgences immobilières
Agences immobilières
 
Trends, recruitment and remuneration in the Healthcare & Life Sciences sector
Trends, recruitment and remuneration in the Healthcare & Life Sciences sectorTrends, recruitment and remuneration in the Healthcare & Life Sciences sector
Trends, recruitment and remuneration in the Healthcare & Life Sciences sector
 
Galtier Concilier securite et simplicite
Galtier Concilier securite et simpliciteGaltier Concilier securite et simplicite
Galtier Concilier securite et simplicite
 
Baromètre RH - Rapport global
Baromètre RH - Rapport globalBaromètre RH - Rapport global
Baromètre RH - Rapport global
 
Hilton ( service industry)
Hilton ( service industry) Hilton ( service industry)
Hilton ( service industry)
 
Jona assessment in affective domain
Jona  assessment in affective domainJona  assessment in affective domain
Jona assessment in affective domain
 
Which font should I use?
Which font should I use?Which font should I use?
Which font should I use?
 

Similar a Lenguaje C historia características

Lenguaje c
Lenguaje cLenguaje c
Lenguaje cAle2417
 
Lenguaje de Programación C
Lenguaje de Programación CLenguaje de Programación C
Lenguaje de Programación Cgrecia morales
 
LENGUAJE en C
LENGUAJE en CLENGUAJE en C
LENGUAJE en CDaniel bg
 
Lenguaje c completo 6 g x revisar x los estudiantes
Lenguaje c completo 6 g x revisar x los estudiantesLenguaje c completo 6 g x revisar x los estudiantes
Lenguaje c completo 6 g x revisar x los estudiantesJhon Jairo C Q
 
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)pedrolrc
 
Aplicacion de c
Aplicacion de cAplicacion de c
Aplicacion de chek_sk8
 
Poner a punto mediante el uso de un editor de lenguaje de programacion
Poner a punto mediante el uso de un editor de lenguaje de programacionPoner a punto mediante el uso de un editor de lenguaje de programacion
Poner a punto mediante el uso de un editor de lenguaje de programacionlupitagarcia07
 
Lenguaje c.Luis Carrodeguas.16418180
Lenguaje c.Luis Carrodeguas.16418180Lenguaje c.Luis Carrodeguas.16418180
Lenguaje c.Luis Carrodeguas.16418180Luiscarrodeguas
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje cvictdiazm
 
C# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptualC# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptualFernando Jose
 
CONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADO
CONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADOCONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADO
CONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADOadark
 

Similar a Lenguaje C historia características (20)

Informe.
Informe.Informe.
Informe.
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Lenguaje de Programación C
Lenguaje de Programación CLenguaje de Programación C
Lenguaje de Programación C
 
LENGUAJE en C
LENGUAJE en CLENGUAJE en C
LENGUAJE en C
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Lenguaje c completo 6 g x revisar x los estudiantes
Lenguaje c completo 6 g x revisar x los estudiantesLenguaje c completo 6 g x revisar x los estudiantes
Lenguaje c completo 6 g x revisar x los estudiantes
 
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
Presentación lenguaje c (pedro luis rodriguez c.i. 16388340)
 
Lenguaje C
Lenguaje CLenguaje C
Lenguaje C
 
Aplicacion de c
Aplicacion de cAplicacion de c
Aplicacion de c
 
PROGRAMACION EN C
PROGRAMACION EN CPROGRAMACION EN C
PROGRAMACION EN C
 
C#
C#C#
C#
 
Poner a punto mediante el uso de un editor de lenguaje de programacion
Poner a punto mediante el uso de un editor de lenguaje de programacionPoner a punto mediante el uso de un editor de lenguaje de programacion
Poner a punto mediante el uso de un editor de lenguaje de programacion
 
Lenguaje c.Luis Carrodeguas.16418180
Lenguaje c.Luis Carrodeguas.16418180Lenguaje c.Luis Carrodeguas.16418180
Lenguaje c.Luis Carrodeguas.16418180
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje c
 
C# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptualC# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptual
 
CONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADO
CONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADOCONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADO
CONOCIMIENTO DE PROGRAMACIÓN Y UN LENGUAJE ESTRUCTURADO
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Informe lpi
Informe lpiInforme lpi
Informe lpi
 
Unidad-1.pptx.pdf
Unidad-1.pptx.pdfUnidad-1.pptx.pdf
Unidad-1.pptx.pdf
 

Más de Maria gabriela Castillo (11)

ACTIVIDAD DE SOLDADURA Y RESORTE
ACTIVIDAD DE SOLDADURA Y RESORTE ACTIVIDAD DE SOLDADURA Y RESORTE
ACTIVIDAD DE SOLDADURA Y RESORTE
 
ACTIVIDAD DE TORNILLO
ACTIVIDAD DE TORNILLO ACTIVIDAD DE TORNILLO
ACTIVIDAD DE TORNILLO
 
Resumen unidad III
Resumen unidad IIIResumen unidad III
Resumen unidad III
 
TAREA 3 CAMPO ELÉCTRICO
TAREA 3 CAMPO ELÉCTRICO TAREA 3 CAMPO ELÉCTRICO
TAREA 3 CAMPO ELÉCTRICO
 
EXAMEN #1 ANÁLISIS NUMERICO
EXAMEN #1 ANÁLISIS NUMERICOEXAMEN #1 ANÁLISIS NUMERICO
EXAMEN #1 ANÁLISIS NUMERICO
 
Maria gabriela castillo a2 pdf
Maria gabriela castillo a2 pdfMaria gabriela castillo a2 pdf
Maria gabriela castillo a2 pdf
 
Presentacion como archivo
Presentacion como archivoPresentacion como archivo
Presentacion como archivo
 
Estrucutras Repetitvas
Estrucutras Repetitvas Estrucutras Repetitvas
Estrucutras Repetitvas
 
Estructura del computador
Estructura del computadorEstructura del computador
Estructura del computador
 
UNIDAD 2 Calculo de predicados
UNIDAD 2 Calculo de predicadosUNIDAD 2 Calculo de predicados
UNIDAD 2 Calculo de predicados
 
Asignación 1
Asignación 1  Asignación 1
Asignación 1
 

Último

Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfMIGUELANGELCONDORIMA4
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptxGARCIARAMIREZCESAR
 
183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdfEdwinAlexanderSnchez2
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaSHERELYNSAMANTHAPALO1
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7luisanthonycarrascos
 
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENSMANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENSLuisLobatoingaruca
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamientoRobertoAlejandroCast6
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxSergioGJimenezMorean
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptEduardoCorado
 

Último (20)

Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
 
183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresa
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7
 
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENSMANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENS
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.ppt
 

Lenguaje C historia características

  • 1. REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN UNIVERSIDAD FERMIN TORO. CABUDARE-ESTADO LARA. EL LENGUAJE C Estudiante María Gabriela Castillo CI: 24162676 Introducción a la computación Saia A 30/07/2016
  • 2. El lenguaje C es uno de los lenguajes de programación estructurada más utilizados en nuestros días. El principal componente estructural de C es la función. En C, las funciones son bloques en los cuales ocurren las actividades de un programa. Esto nos permite separar los programas en tareas, lo que nos conduce a la programación modular. El lenguaje de programación C fue creado por Dennis Ritchie entre 1969 y 1973 cuando trabajaba en Bell Laboratorios de AT&T junto con Ken Thompson en el diseño del sistema operativo UNIX. C fue creado para poder escribir dicho sistema operativo en un lenguaje de alto nivel, independiente del hardware donde se ejecutara. Contar con un lenguaje de alto nivel permitió el avance de los sistemas operativos, ya que el mismo código podía ser utilizado en las distintas plataformas, propiciando la reutilización de código y reduciendo los tiempos de desarrollo. Así es que los sistemas operativos basados en UNIX, el sistema BSD, el sistema GNU/Linux y muchos otros fueron desarrollados en C. Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no está ligado a ningún sistema operativo ni a ninguna máquina concreta. Se le suele llamar lenguaje de programación de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar cualquier tipo de aplicación. Además, con el paso del tiempo se han desarrollado cientos de bibliotecas que permiten a los programadores de C utilizar el código desarrollado por otros para la realización de tareas comunes. Esto, a su vez, ha propiciado el desarrollo de aplicaciones en lenguaje C. En 1978 Kernighan y Ritchie publican su descripción en el libro "The C Programming Language", versión que es llamada hoy en día 'K&R C'. Este libro se suele llamar entre los programadores “La biblia del C”, existen varias ediciones, en las universidades suele ser el libro principal de la bibliografía. A mediados de los ochenta ya había en el mercado numerosos compiladores C, y muchas aplicaciones habían sido rescritas a él para aprovechar sus ventajas. Durante este periodo fabricantes introducen mejoras en el lenguaje, las cuales son recogidas por un comité de estandarización ANSI y establecen las especificaciones de lo que se conoce hoy en día como 'ANSI C'. El C se encuentra en la jerarquía de lenguajes en un nivel intermedio entre Pascal y el Ensamblador. Pretende ser un lenguaje de alto nivel con la versatilidad del bajo nivel.
  • 3. En 1980 Bjarne Stroustrup de los laboratorios Bell de Murray Hill, New Jersey, adiciono las características de la programación orientada a objetos (incluyendo la ventaja de una biblioteca de funciones orientada a objetos) y lo denomino C con clases. Para 1983 dicha denominación cambio a la de c++. Con este nuevo enfoque surge la nueva metodología que aumente las posibilidades de la programación bajo nuevos conceptos. Con la posibilidad de las microcomputadoras se crearon muchas implementaciones de C. Sin embargo, como no existía ningún estándar, aparecieron discrepancias. Para remediar la situación, el instituto de Estándares Americano (ANSI) estableció un comité a mediados de 1983 para crear un estándar que definiera al lenguaje C. Este comité ANSI termino el proceso de formalización en 1990. Actualmente es imposible contar la cantidad de aplicaciones y herramientas desarrolladas en C. Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes. En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores. C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de software de sistema, para la que se diseñó originalmente. Entre sus principales características podemos mencionar 1.-Tiene un conjunto completo de instrucciones de control. 2.-Permite la agrupación de instrucciones. 3.-Incluye el concepto de puntero (variable que contiene la dirección de otra variable). 4.-Los argumentos de las funciones se transfieren por su valor.
  • 4. 5.- E/S no forma parte del lenguaje, sino que se proporciona a través de una biblioteca de funciones. 6.-Permite la separación de un programa en módulos que admiten compilación independiente. Originalmente el Lenguaje C estuvo muy ligado al sistema operativo UNIX como se había mencionado antes que, en su mayor parte, está escrito en C. Más adelante se comenzó a utilizar en otros sistemas operativos para programar editores, compiladores, etc. Aunque se le conoce como un lenguaje de programación de sistemas, no se adapta mal al resto de aplicaciones. De hecho, hoy en día un alto porcentaje de software para ordenadores personales está escrito en Lenguaje C. Por ejemplo, el sistema operativo MS-DOS. Algunas de las características más importantes que definen el lenguaje y que han permitido que sea tan popular, como lenguaje de programación son: Tamaño pequeño, Uso extensivo de llamadas a funciones, Comandos breves (poco tecleo), Lenguaje estructurado, Programación de bajo nivel (nivel bit), Implementación de apuntadores - uso extensivo de apuntadores para la memoria, arreglos, estructuras y funciones. Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia. Todo programa escrito en C consta de una o más funciones, una de las cuales se llama main. El programa siempre comenzará por la ejecución de la función main. Cada función debe contener:  Una cabecera de la función, que consta del nombre de la función, seguido de una lista opcional de argumentos encerrados con paréntesis.  Una lista de declaración de argumentos, si se incluyen estos en la cabecera.
  • 5.  Una sentencia compuesta, que contiene el resto de la función. Para la estructura del lenguaje C los argumentos son símbolos que representan información que se le pasa a la función desde otra parte del programa. (También se llaman parámetros a los argumentos). Cada sentencia compuesta se encierra con un par de llaves, {.....}. Las llaves pueden contener combinaciones de sentencias elementales (denominadas sentencias de expresión) y otras sentencias compuestas. Así las sentencias compuestas pueden estar anidadas, una dentro de otra. Cada sentencia de expresión debe acabar en punto y coma (;). Los comentarios pueden aparecer en cualquier parte del programa, mientras estén situados entre los delimitadores /*................ */ (por ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para identificar los elementos principales de un programa o simplemente para orientar a un posible usuario de ese código. Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. El programa comienza en la función main, desde la cual es posible llamar a otras funciones. Cada función estar formada por la cabecera de la función, compuesta por el nombre de la misma y la lista de argumentos (si los hubiese), la declaración de las variables a utilizar y la secuencia de sentencias a ejecutar. Encabezamiento main( ) { variables locales sentencias } f1( ) { variables locales sentencias } ... ... ... fn( ) { variables locales sentencias }
  • 6. Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado de objetos en una secuencia determinada (patrón de arreglo). El objetivo de este proceso generalmente es facilitar la búsqueda de uno o más elementos pertenecientes a un conjunto. Como ejemplos de conjunto de datos ordenados tenemos:  Meses del año (ordenados de 1 al 12).  Listado de estudiantes (ordenados alfabéticamente).  Guías Telefónicas (ordenadas por País/por región/por sector/por orden alfabético) La ordenación, tanto numérica como alfanumérica, sigue las mismas reglas que empleamos nosotros en la vida normal. Esto es, un dato numérico es mayor que otro cuando su valor es más grande, y una cadena de caracteres es mayor que otra cuando esta después por orden alfabético. Los métodos de ordenación, pueden agruparse en dos grandes grupos:  Los internos: Es cuando los datos están disponibles en un área de la memoria principal, como cuando se leen un conjunto de datos desde el teclado.  Los externos: Los datos están guardados en un medio externo, como puede ser un fichero, una base de datos, etc. En donde los datos están alojados en el disco duro u otro medio físico. En este sección explicaremos solo tres modos de ordenamiento, los mas usados como son:  Algoritmo de Ordenamiento Burbuja (Buble Sort)  Algoritmo de Ordenamiento Insercion  Algoritmo de Ordenamiento Quick Sort
  • 7. Método de Burbuja (Bubble Sort) El método de ordenamiento de burbuja, es un algoritmo que se aplica para poder ordenar una cantidad de datos ya sea de forma ascendente o descendente. Es el algoritmo más fácil de implementar, pero a cambio pagamos un alto precio en procesamiento, ya que este método evalúa una cantidad los datos muchas veces y en ocasiones innecesariamente (como por ejemplo cuando son iguales). A estas alturas posiblemente ya tengas conocimiento de sencillos pasos para ordenar datos, como por ejemplo, Determinar cual es el mayor o menor de dos números, pues aplicando este método podremos ordenar array, estructuras y cualquier tipo de dato NO atómico (es decir que se pueda dividir) Este libro trata de programación en C, entonces a continuación nos aplicamos a esto: Este metodo necesita de lo siguiente para implementarse:  Un array o estructura que ordenar (>1 elemento).  Dos variables contadoras de ciclos (i,j por ejemplo).  Una variable temporal (para almacenar un dato momentaneamente).  Dos ciclos y un Condicional...  ....  //DE MENOR A MAYOR (Ascendente)  #define Nelementos 4  ....   int i,j; //Variables contadoras del ciclo.  int lista[Nelementos]={6,9,3,1}; //Declaracion e inicializacion de un arreglo de 4 elementos.  int temp=0; //Variable temporal.   for (i=1;i<Nelementos;i++)  {
  • 8.  for (j=0; j <= Nelementos-1 ;j++) // for(j=0; j < Nelementos-1; j++) es menor y no menor igual  {  if (lista[j] > lista[j+1])//Condicion mayor-menor  {  temp=lista[j];  lista[j]=lista[j+1];  lista[j+1]=temp;  }  }  }  //Para cambiar el modo de ordenamiento solo debemos cambiar la condicion < ó >      '''<big>Explicando un poco lo que dice el codigo tenemos:</big>'''   # Iniciamos i a 1, de esta forma correremos el ciclo solamente 3 veces. Asi evitamos correr ciclos innecesariamente.  # El segundo for, se ejecutara 3 veces por cada primer ciclo.  # La condicion nos dice:  * Si, el valor de lista 0 es mayor al valor de lista 1, es decir  * '''Si, 6 > 9''', pero como la condicion no se cumple, pasamos del ciclo y '''J=1'''.  * Si, el valor de lista 1 es mayor al valor de lista 2, es decir  * '''Si, 9 > 3''', como es '''verdadera''' hacemos:  # Guardamos momentaneamente en la variable temporal el valor de lista 1, es decir 9.  # En la posicion de lista 1, guardamos el valor de lista 2, es decir 3.  # En la posicion de lista 2, guardamos el valor de temp, es decir 9  '''Volvemos''' nuevamente '''al ciclo''', ahora '''J=2'''...  * Si, el valor de lista 2 es mayor al valor de lista 3, es decir  * Si, '''9 > 1''', (recuerda que anteriormente '''movimos''' al 9 a la posicion de 3), es verdadera =>  # Guardamos momentaneamente en la variable temporal el valor de lista 2, es decir 9.  # En la posicion de lista 2, guardamos el valor de lista 3, es decir 1.
  • 9.  # En la posicion de lista 3, guardamos el valor de temp, es decir 9.   De esta forma el ciclo se repite hasta que todos los datos se hallan movido. Como veras hasta ahora solo hemos estado moviendo el 9. Tu lista se veria asi:   * ''Original:'' 6 '''9''' 3 1  :* ''1er Mov:'' 6 3 '''9''' 1  :* ''2do Mov:'' 6 3 1 '''9'''   Si bien ya esta mas ordenada que la original, aun falta bastante, pero recuerda que estábamos en el primer ciclo del primer for (i).   '''Acá te dejo como serán los demás movimientos:'''  * ''Segundo Ciclo i:''  :* 3 6 1 9  :* 3 1 6 9   * ''Tercer Ciclo i:''  :* 1 3 6 9  :* YA!   En un principio, pensaba no presentarles las variaciones que hay de este algoritmo, pero revisando en varios libros me percate de que aunque es el mismo algoritmo y funciona de la misma forma (con sus ventajas y desventajas), Creo que es preferible mostrarselos para evitar confusiones y enredos innecesarios.   == Variantes ==   Buscando en varios libros e Internet me he encontrado numerosas variantes, y por motivos pedagógicos voy a mostrarlos, ya que considero que aunque sean el mismo algoritmo, su diferente implementacion puede llevar a confusiones.   En lo personal considero que el algoritmo planteado al principio es el que mejor se expresa (entiende), y es el que recomiendo implementar, pero hay libros que lo implementan de otra forma, por lo que los que se guían con
  • 10. el, pueden tener confusiones a la hora de apoyarse con este libro.   ==== Variante: 1 Ciclo. ====   Aunque en realidad usa dos ciclos un while y un for, el while hace la función de nuestro primer for. Sin embargo la demás implementaciones son técnicamente las mismas, solo que en vez de usar una variable ya preparada (j en nuestro caso), este evalúa con la variable i. Variante: Restar Esta es una de las más usuales que he visto en los libros, folletos y otros. Todo es igual, pero cambian las condiciones, de esta forma se trabaja a la inversa de nuestro algoritmo. Ejemplos El algoritmo burbuja esta preparado para correr con todo tipo de datos NO atómicos, es por esto que no importa si el arreglo es de tipo char, int, float, etc. Funcionara con sus respectivas modificaciones. El siguiente ejemplo ordenara una lista de tamaño 6, que esta ordenada. Recuerden como buena práctica: Definir las variables en un solo punto del código.  Definir el tamaño del array como constante.  Usar la indentacion correspondiente (Tabulaciones). //Realizado por Master crack cocaino //UNAN-LEON Nicaragua. #include <stdio.h> #define TAM 6
  • 11. int main() { int lista[TAM]={12,10,5,6,1,3}; //Declaracion e Inicializacion de un array int temp=0; //Variable temporal int i,j; //variables corredoras del ciclo printf("La lista DESORDENADA es: n"); for (i=0;i<TAM;i++) printf("%3d",lista[i]); //impresion de la lista con espacio de 3 lineas (%3d) for (i=1;i<TAM;i++) { for (j=0;j<TAM-1;j++) { if (lista[j] > lista[j+1]) //condicion { temp = lista[j]; //temp guarda momentaneamente el valor de lista[j] lista[j]=lista[j+1]; //Asigno al la posicion lista[j], lo que hay en lista[j+1] lista[j+1]=temp;//obtendra un nuevo valor por parte de temp. } } } printf("nLos valores ORDENADOS de lista son: n"); for(i=0;i<TAM;i++) printf("%3d",lista[i]); return 0; } //Revisado por: Gustavo A. Chavarria. //UNAN-LEON Nicaragua
  • 12. Método de Inserción Este método se podría decir que es algo superior al método de la burbuja, ya que logra evaluar menos veces la condición. Sin embargo aun es un algoritmo muy pobre y que utiliza recursos técnicamente igual que el algoritmo burbuja. Concepto El algoritmo consiste en ordenar los dos primeros elementos de la matriz, luego se inserta el tercer elemento en la posición correcta con respecto a los dos primeros, a continuación se inserta el cuarto elemento en la posición correcta con respecto a los tres primeros elementos ya ordenados y así sucesivamente hasta llegar al ultimo elemento de la matriz. Explicación Ejemplos Método QuickSort Es el ultimo método del que hablaremos en este libro, es el algoritmo que mas calidad tiene, pudiendo llegar a lo mismo que el método burbuja e inserción, mas rápido y con uso de menos recursos. Concepto El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás. Esta es probablemente la técnica más rápida conocida. Fue desarrollada por Tony Hoare en 1960. La idea del algoritmo es simple, se basa en la división en particiones de la lista a ordenar, por lo que se puede considerar que aplica la técnica divide y vencerás. El método es, posiblemente, el más pequeño de código, más rápido, más elegante, más interesante y eficiente de los algoritmos de ordenación conocidos.
  • 13. Explicación El método se basa en dividir los n elementos de la lista a ordenar en dos partes o particiones separadas por un elemento: una partición izquierda, un elemento central denominado pivote o elemento de partición, y una partición derecha. La partición o división se hace de tal forma que todos los elementos de la primera sublista (partición izquierda) son menores que todos los elementos de la segunda sublista (partición derecha). Las dos sublistas se ordenan entonces independientemente. Para dividir la lista en particiones (sublistas) se elige uno de los elementos de la lista y se utiliza como pivote o elemento de partición. Si se elige una lista cualquiera con los elementos en orden aleatorio, se puede seleccionar cualquier elemento de la lista como pivote, por ejemplo, el primer elemento de la lista. Si la lista tiene algún orden parcial conocido, se puede tomar otra decisión para el pivote. Idealmente, el pivote se debe elegir de modo que se divida la lista exactamente por la mitad, de acuerdo al tamaño relativo de las claves. Una vez que el pivote ha sido elegido, se utiliza para ordenar el resto de la lista en dos sublistas: una tiene todas las claves menores que el pivote y la otra, todos los elementos (claves) mayores que o iguales que el pivote (o al revés). Estas dos listas parciales se ordenan recursivamente utilizando el mismo algoritmo; es decir, se llama sucesivamente al propio algoritmo quicksort. La lista final ordenada se consigue concatenando la primera sublista, el pivote y la segunda lista, en ese orden, en una única lista. La primera etapa de quicksort es la división o «particionado» recursivo de la lista hasta que todas las sublistas constan de sólo un elemento. El algoritmo es éste:  Recorres la lista simultáneamente con i y j: por la izquierda con i (desde el primer elemento), y por la derecha con j (desde el último elemento).  Cuando lista[i] sea mayor que el elemento de división y lista[j] sea menor los intercambias.  Repites esto hasta que se crucen los índices.
  • 14. El punto en que se cruzan los índices es la posición adecuada para colocar el elemento de división, porque sabemos que a un lado los elementos son todos menores y al otro son todos mayores (o habrían sido intercambiados). Al finalizar este procedimiento el elemento de división queda en una posición en que todos los elementos a su izquierda son menores que él, y los que están a su derecha son mayores. El primer objetivo de un programa informático es el manejo de datos. Un dato es toda aquella información que se puede tratar en un programa informático. Existen unos datos de entrada y unos datos de salida. Los datos de entrada se manipulan en el programa produciendo unos datos de salida. Un dato dentro de un programa se caracteriza por llevar asociado un identificador, un tipo y un valor. Hay dos clases de tipos de datos: tipos fundamentales y tipos derivados. Hablaremos de los tipos de datos fundamentales. Tipo entero: representa números enteros con o sin signo, que estarán compuestos por los dígitos del 0 al 9, pudiendo ser precedidos por los signos + o -. Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc. Para definir variables en C se antepone la palabra reservada del tipo al identificador de la variable. El tipo de datos entero se define en el lenguaje de programación C por la palabra reservada int. Para definir un tipo de dato en C se escribe lo siguiente: int nombre_variable = valor; No es necesario que la variable tenga un valor predeterminado. Se puede definir sin asignarle ningún valor.
  • 15. Si tenemos varios datos que son del mismo tipo, se pueden definir todas en la misma línea de código escribiendo un único int, separando el nombre de las variables por “,”. Una vez que se haya acabado de definir variables, se cierra la línea de código con “;”, Por ejemplo: int edad = 24; int edad; int edad, num, contador; Tipo real: Se emplean para representar números reales (con decimales). Para definir datos reales se antepone la palabra reservada float al identificador de la variable. float identificador = valor; Por ejemplo: float numero1, numero2; float numero3 = 123.43; float numero3; Tipo carácter: Este tipo de datos se emplea para representar un carácter perteneciente a un determinado código utilizado por el ordenador (normalmente el código ASCII). Para representar este tipo de dato se antepone la palabra reservada char al identificador de la variable. Char identificador = ‘valor’; Una constante tipo char se representa como un solo carácter encerrado entre comillas simples. Por ejemplo: char letra, letra2; char letra=’a’;
  • 16. Tipo cadena de caracteres: una cadena de caracteres es un número de caracteres consecutivos (incluso ninguno) encerrado entre unos delimitadores determinados, que en el lenguaje C son las comillas dobles. Para definir variables de tipo cadena, estas se definen como vectores de caracteres, esto es, anteponiendo la palabra reservada char al identificador de la variable, y después entre corchetes la longitud máxima de cadena. Char identificador[cantidad] = “ mensaje ”; Por ejemplo: char cadena[20]; char cadena[20] = “Hola mundo”; char cadena[] = “HOLA”; En la siguiente tabla se hace un resumen de los distintos tipos de datos: Los operadores relacionales, también denominados operadores binarios lógicos y de comparación, se utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relación (en realidad se trata Tipo de dato Palabra reservada Ejemplo Entero Int Int numero=0; Real Float Float numero=12.2; Carácter Char Char letra = ‘a’; Cadena de carácter Char Char palabra[10] = “HOLA”;
  • 17. respuestas a preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un resultado booleano (3.2.1b) Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa false (cero). C++ dispone de los siguientes: < Menor que > Mayor que <= Menor o igual que >= Mayor o igual que == Igual que (identidad) != Desigual que (desigualdad) Sintaxis expresión-relacional <> expresión-relacional > shift-expresion expresión-relacional <= shift-expresion expresión-relacional >= shift-expresion expresión-de-igualdad == expresión-relacional expresión-de-igualdad != expresión-relacional Comentario Como puede verse, todos ellos son operadores binarios (utilizan dos operandos), de los cuales, dos de ellos son de igualdad: == y !=, y sirven para verificar la igualdad o desigualdad entre valores aritméticos o punteros. Estos dos operadores pueden comparar ciertos tipos de punteros, mientras que el resto de los operadores relacionales no pueden utilizarse con ellos. Observe que los operadores == y != tienen una menor precedencia que el resto de los operadores relacionales < y >, <= y >=.
  • 18. El operador de desigualdad != tiene otra forma estándar de designación mediante la palabra clave not_eq (4.9.8) Cualquiera que sea el tipo de los operandos, por definición, un operador relacional, produce un bool (true ofalse) como resultado, aunque en determinadas circunstancias puede producirse una conversión automática de tipo a valores int (1 si la expresión es cierta y 0 si es falsa). Ejemplo de comprobación: #include int main() { float f = 12.1, g = 12.2; cout << "Tipo: " <<> Salida Tipo: bool Condiciones En las expresiones relacionales E1 E2, los operandos deben cumplir alguna de las condiciones siguientes: 1. E1 y E2 son tipos aritméticos. 2. E1 y E2 son punteros a versiones cualificadas o no cualificadas de tipos compatibles. 3. Uno de ellos es un puntero a un objeto, mientras que el otro es un puntero a una versión cualificada o no cualificada de void. 4. Uno de los dos es un puntero, mientras que el otro es un puntero nulo constante. Cuando se trata de tipos definidos por el usuario (que no cumplen las condiciones anteriores) estos operadores pueden ser sobrecargados de forma que puedan ser utilizados con dichos tipos (4.9.18b1).
  • 19. Precauciones Con el operador de igualdad Las expresiones relacionales de igualdad son frecuentísimas en la programación. En multitud de ocasiones se comparan dos expresiones y se toma una decisión en función del resultado cierto / falso obtenido. Por ejemplo, la condición de la sentencia de iteración while(4.10.3) puede ser una expresión relacional de igualdad: int x = 1; y = 2; ... while (x == y ) { cout << "Son iguales..." <<> Es muy frecuente que, tanto el principiante, como el programador acostumbrado a otros lenguajes, donde el operador de asignación y el de igualdad son distintos a los utilizados en C++ (por ejemplo := y =), confundan el operador de igualdad == con el de asignación =. Es este caso, el código anterior sería escrito erróneamente: while (x = y ) { cout << "Son iguales..." <<> El resultado es que el bucle se ejecuta mientras sea y != 0, ya que la expresión asigna y a x, y el resultado es cierto mientras que x sea distinto de cero. Los operadores Lógicos son muy utilizados en informática, lógica proposicional y Algebra Booleana , entre otras disciplinas. Los operadores lógicos nos proporcionan un resultado a partir de que se cumpla o no una cierta condición. Esto genera una serie de valores que, en los casos más sencillos, pueden ser parametrizados con los valores numéricos 0 y 1, como se puede apreciar en los ejemplos de abajo. La combinación de dos o más operadores lógicos conforma una función lógicos.  Los más sencillos son (nótese su relación con los operadores relacionales):  Operador NO-lógico: '¬A' significa todo lo que no es A'  Operador Y-lógico: 'A ∧ B' significa 'A y B a la vez'; resultando FALSO (0) si no se cumple y VERDADERO (1) si sí lo hace.
  • 20.  Operador O-lógico: 'A ∨ B' significa 'O bien A, o bien B, o bien los dos'; resultando FALSO (0) si no se dan ni A ni B y VERDADERO (1) si se da alguno de los dos o los dos a la vez.  Operador =: 'A = B' significa 'A debe ser igual a B'; resultando FALSO (0) si esto no es así y VERDADERO (1) en caso contrario.  Operador <: 'A <>  Los operadores más complejos se construyen a partir de los anteriores (podría incluirse alguno más) y ya entran dentro de lo que sería una función lógica. Un ejemplo muy utilizado sería 'SI (condición;A;B)' ('IF condición THEN A ELSE B' en la mayoría de los lenguajes de programación) cuyo resultado sería A si se satisface la 'condición' o B en caso contrario. Ejemplo: Habiendo declarado las variables: En pseudocódigo: entero r = 2, s = 9, t = 8 En lenguaje C: int r = 2, s = 9, t = 8; se puede escribir En pseudocódigo: no( r = s o r <= t ) En lenguaje C: !( r == s || r <= t ) La expresión se evalúa a En pseudocódigo: falso (actúan en orden los operadores: (<=), (==), (||) y (!)) En lenguaje C: 0 (C simula el valor lógico falso con el valor entero 0)
  • 21. Los operadores Aritméticos Comprenden las cuatro operaciones básicas, suma, resta, multiplicación y división, con un agregado, el operador módulo. Los operadores aritméticos existentes en C son, ordenados de mayor a menor precedencia: Los operadores ++, -- y % solo pueden usarse con datos de tipo int o char. El operador incremento (++), incrementa en una unidad el valor de la variable sobre la que se aplica, el operador decremento (--), decrementa en una unidad el valor de la variable, y el operador módulo (%), calcula el resto de una división de dos variables de tipo entero o carácter. Un aspecto que conviene explicar es el hecho de que los operadores incremento y decremento pueden preceder o posceder a su operando, lo cual permite escribir, si x es una variable de tipo int, las expresiones ++x o x++. Usado de forma aislada no presenta ninguna diferencia, sin embargo, cuando se usa en una expresión existe una diferencia en el orden de ejecución del mismo. Cuando el operador incremento (o decremento) precede al operando, C primero realiza el incremento (o decremento), y después usa el valor del operando, realizándose la operación al contrario si el operador poscede al operando. Así, considérense el siguiente código de un programa: int var1=10,var2; var2=++var1; /* Pone 11 en var2, pues primero incrementa var1,*/ /* y luego asigna su valor a var2 */
  • 22. Mientras que el siguiente código funciona de forma distinta: int var1=10,var2; var2=var1++; /* Pone 10 en var2, pues primero asigna su valor */ /* a var2, y luego incrementa var1 */ Los operadores por Asignación el lenguaje C, a diferencia de otros lenguajes tales como Pascal, no diferencia la asignación de cualquier otro operador del lenguaje. Para C, la asignación es un operador, el llamado operador asignación (=), el cual posee la prioridad más baja de todos los operadores. Es por ello que en C podemos escribir expresiones del tipo: if ((c=a*b)<0) /* if es la comprobación condicional de C, que */ /* se vera con posterioridad */ Esta expresión asigna a la variable c el valor de a*b y devuelve su valor para compararlo con el valor constante 0. Los paréntesis son necesarios pues el operador asignación tiene la prioridad mas baja de todos los operadores. Para terminar podríamos dar como conclusión donde C es un lenguaje de programación de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador. Su característica principal es ser portable, es decir, es posible adaptar los programas escritos para un tipo de computadora en otra. Otra de sus características principales es el ser estructurado, es decir, el programa se divide en módulos (funciones) independientes entre sí. El lenguaje C inicialmente fue creado para la programación de: -Sistemas operativos -Intérpretes -Editores
  • 23. -Ensambladores -Compiladores -Administradores de bases de datos. Actualmente, debido a sus características, puede ser utilizado para todo tipo de programas. Para poder leer y escribir datos en el lenguaje de programación C existen una serie de funciones agrupadas en un conjunto de librerías de código objeto, que constituyen la llamada biblioteca estándar del lenguaje. En el caso concreto de las funciones de entrada y salida (lectura y escritura), su archivo de cabecera es stdio.h. Existen varias funciones que realizan la entrada y salida de datos en el lenguaje de programación C, pero nos vamos a centrar solamente en dos de ellas: printf() y scanf(). Funcion printf() La función printf() sirve para escribir datos en la pantalla con un formato determinado. El prototipo de esta función es la siguiente: int printf(const char *formato, arg1, arg2, …, argn) donde: formato: hace referencia a una cadena de caracteres que contiene información sobre el formato de salida. Arg1, arg2, …, argn: argumentos que representan los datos de salida La cadena de control puede constar de hasta tres tipos de información: - texto: que será mostrado por pantalla tal cual este escrito - Secuencias de escape: secuencias reservadas propias del lenguaje. Van precedidas por '' y las más importantes son 'n' que introduce un salto de línea, y 't' que introduce un tabulador. - Especificadores de formato: son ciertos caracteres precedidos del carácter tanto por ciento '%'. A continuación se muestra una tabla con estos especificadores de formato dependiendo del tipo de dato a los que representan:
  • 24. Tipo de dato Especificadores de formato Comentario Int %d Entero con signo Float %f Real con signo Char %c carácter Char [n] %s Cadena de caracteres Ejemplos: printf(“n Valores: %d, %f”, entero, real); Salida por pantalla: (Retorno de carro)Valores: 2, 2.3 printf(“%st%dn%f”, concepto, num, coste); Salida por pantalla: Cremallera 1234 12.345 Función scanf() La función scanf() se pude considerar de alguna manera como la inversa de la función printf(), pues sirve para introducir datos desde el teclado con un formato determinado. El prototipo de esta función es el siguiente: int scanf(const char *formato, arg1, arg2, …, argn); donde:  formato: hace referencia a una cadena de caracteres (cadena de control) que contiene información sobre el formato de los datos que se van a introducir mediante el teclado.  arg1, arg2, …, argn: son los argumentos que representan los datos de entrada. La cadena de control puede constar de:  Especificadores de formato, que son ciertos caracteres precedido por el carácter tanto por ciento '%'.  Caracteres de espacio  Otros caracteres no espacios, para entradas con formato A continuación se muestra una tabla con estos especificadores de formato dependiendo del tipo de dato a los que representan:
  • 25. Tipo de dato Especificadores de formato Comentario Int %d Entero con signo Float %f Real con signo Char %c carácter Char [n] %s Cadena de caracteres Ejemplos: scanf(“%d”, numero); scanf(“%d %s %f”, numero, &cadena, &real);