1- ¿Qué es lenguaje de programación?
Lenguaje de programación En informática, cualquier lenguaje artificial que puede utilizarse para
definir una secuencia de instrucciones para su procesamiento por un ordenador o computadora. Es
complicado definir qué es y qué no es un lenguaje de programación. Se asume generalmente que la
traducción de las instrucciones a un código que comprende la computadora debe ser completamente
sistemática. Normalmente es la computadora la que realiza la traducción.
2- ¿Qué es lenguaje de programación C?
Lenguaje de programación C. También conocido como “Lenguaje de programación de sistemas”
desarrollado en el año 1972 por Dennis Ritchie para UNIX un sistema operativo multiplataforma. El
lenguaje C es del tipo lenguaje estructurado como son Pascal, Fortran, Basic. Sus instrucciones son
muy parecidas a otros lenguajes incluyendo sentencias como if, else, for, do y while... . Aunque C es
un lenguaje de alto nivel (puesto que es estructurado y posee sentencias y funciones que simplifican
su funcionamiento) tenemos la posibilidad de programar a bajo nivel ( como en el Assembler tocando
los registros, memoria etc. ). Para simplificar el funcionamiento del lenguaje C tiene incluidas
librerías de funciones que pueden ser incluidas haciendo referencia la librería que las incluye, es decir
que si queremos usar una función para borrar la pantalla tendremos que incluir en nuestro programa
la librería que tiene la función para borrar la pantalla.
3- Historia del lenguaje de programación C
A finales de los años 60 en la empresa AT&T se comenzó a trabajar en un nuevo lenguaje de
programación, exactamente en los Laboratorios Bell. Los primeros pasos se dieron en el año 1969,
pero el concepto del lenguaje C se fue extendiendo y el momento de mayor plenitud, cuando de
verdad se asentaron las bases, se produjo en 1972. Fue entonces cuando se decidió que de forma
definitiva este lenguaje de programación tendría el nombre por el cual lo conocemos, en referencia a
que se inspiraba en el lenguaje B y tenía sentido que se siguiera con el uso del alfabeto.
La historia del origen de C tiene muchas irregularidades y agujeros que distintos expertos han
intentado rellenar con sus propios recuerdos, pero que todavía dejan en el aire algunos misterios. La
historia más popular es que el lenguaje nació como respuesta al interés que tenían varios
programadores de jugar en su empresa a un juego muy popular llamado Space Travel (que había sido
creado por uno de estos dos programadores). Se encontraron con que el mainframe de su empresa no
era capaz de proporcionarles el rendimiento que necesitaban, dado que estaba demasiado saturado.
Al jugar no disfrutaban de un nivel de control adecuado y el juego les resultaba imposible de disfrutar.
Esto les llevó a plantearse soluciones. La que se les ocurrió fue adaptar Space Travel a un sistema
PDP-7 que estaba abandonado en la empresa y que no se usaba. De esa forma tenían la posibilidad
de jugar sin que molestaran a nadie y suponemos que sin que sus superiores se enterasen. Por
desgracia para ellos, se encontraron con que el PDP-7 no tenía sistema operativo.
Por ello tuvieron que tomar una decisión. La más sencilla parecía que sería utilizar el sistema
operativo de un PDP-11 que había también en la empresa. Pero al ponerse a hacerlo vieron que era
un trabajo imposible que les llevaría mucho tiempo. Era hora de tomar otra decisión. Pensaron en qué
tipo de sistema operativo necesitaban y en cómo podrían crearlo. La primera idea fue usar el lenguaje
de programación B, pero no tenía lo necesario. Así que llegaron a la conclusión de que tenían que dar
forma a otro lenguaje. Y así es como nació C, como forma de conseguir jugar a Space Travel. Y los
creadores en cuestión que lo hicieron realidad fueron Dennis Ritchie y Ken Thompson (creador
también del juego en cuestión).
4- Ventajas del lenguaje de programación C
* El lenguaje C ha sido pensado para ser altamente transportable.
* Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones
matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
* Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados
es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).
* Un sistema de tipos que impide operaciones sin sentido.
* Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir
múltiples archivos de código fuente.
* Acceso a memoria de bajo nivel mediante el uso de punteros.
* Interrupciones al procesador con uniones.
* Un conjunto reducido de palabras clave.
* Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se
consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
* Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y
polimorfismo.
Gracias a este tipo de programas la tecnología ha podido alcanzar un gran avance en todos los ámbitos
tanto nacionales como internacionales, es por eso que es necesario que este tipo de lenguaje se
aprenda para poder realizar utilerías capaces de trabajar y apoyar proyectos que ayudarán al manejo
mas sencillo de una empresa ó en particular pequeñas aplicaciones en el hogar.
El Lenguaje C es relativamente sencillo, pero su gran flexibilidad es terreno abonado para la creación
de vicios y prácticas no adecuadas de programación, por lo cual debe cuidarse la enseñanza de su
estilo de programación, técnica y filosofía de trabajo.
La programación en C tiene una gran facilidad para escribir código compacto y sencillo a su misma
vez. En el lenguaje C no tenemos procedimientos como en otros lenguajes solamente tenemos
funciones los procedimientos los simula y esta terminante mente prohibido escribir funciones ,
procedimientos y los comandos en mayúscula todo se escribe en minúsculas (a no ser las constantes
J ) Los archivos en la C se escriben en texto puro de ASCII del Dos si se escribe en WORD por
ejemplo el mismo incluye muchos códigos no entendidos por el compilador y generara errores ;una
vez escrito se debe pasar a compilar el archivo; los archivos tienen 2 Extensiones archivo. C que es
el archivo a compilar el que contiene todos los procedimientos funciones y código de nuestro
programa y archivo.h que es las librerías que contienen las funciones de nuestro programa. (NOTA:
El compilador genera Archivos con extensión .EXE). Cada instrucción que pasemos a poner en C va
seguida de un punto y coma para decirle al compilador que hasta ahí llega la instrucción simula un
Enter del teclado. Ejemplo: clrscr(); /* borra la pantalla */
5- Desventajas
Desventajas:
Al igual que otros lenguajes tiene sus inconvenientes como:
* Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc"
desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.
* Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un
preprocesador que traducía código fuente de C++ a C.
* Encapsulación.
* Funciones anidadas, aunque GCC tiene esta característica como extensión.
* Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone
de un soporte rudimentario para la programación genérica.
* Soporte nativo para programación multihilo y redes de computadores.
* Carece de instrucciones de entrada/salida, de instrucciones para manejo de cadenas de caracteres,
con lo que este trabajo queda para la librería de rutinas, con la consiguiente pérdida de
transportabilidad.
La excesiva libertad en la escritura de los programas puede llevar a errores en la programación que,
por ser correctos sintácticamente no se detectan a simple vista. Por otra parte, las precedencias de los
operadores convierten a veces las expresiones en pequeños rompecabezas. A pesar de todo, C ha
demostrado ser un lenguaje extremadamente eficaz y expresivo.
6- Características
Es un lenguaje de medio nivel, pero ¿qué significa esto? Los lenguajes de alto nivel se asemejan a
nuestra forma de razonar, aislando al programador de los detalles técnicos (referentes a la máquina
física). Esto hace que este tipo de lenguajes sean poco eficientes. Por el contrario, los lenguajes
de bajo nivel controlan directamente la circuitería del ordenador, pudiendo obtenerse con ellos la
eficiencia máxima (sin embargo, resultan incómodos y poco portables). Así las ventajas de los
lenguajes de alto nivel respecto a los de bajo nivel son:
Sencillez.
Uniformidad.
Portabilidad.
En todo caso, un programa escrito en un lenguaje de alto nivel debe ser traducido a un lenguaje que
entienda la máquina antes de poder ser ejecutado. Esto se conoce como compilación (si traducen el
programa completo a código máquina antes de ejecutar cualquiera de las instrucciones)
o interpretación (si recorren el programa tomando instrucciones una a una en pequeños grupos que
traducen y ejecutan).
Un compilador o intérprete, también es un programa. Acepta como datos de entrada un programa en
alto nivel (programa fuente) y genera como resultado un programa en lenguaje máquina (programa
objeto).
Programa Fuente
Compilación
Programa Objeto
En un nivel intermedio se sitúa el lenguaje C, permitiendo beneficiarse de las ventajas de ambos
tipos de lenguajes, y reduciendo sus inconvenientes.
Es un lenguaje de propósito general. Se ha utilizado para el desarrollo de muy diversas aplicaciones:
sistemas operativos, hojas de cálculo, gestores de bases de datos...
Es un lenguaje portable, es decir, es independiente del hardware. Los programas escritos en C son
fácilmente trasportables a otros sistemas.
7- Sentencias o instrucciones del
Sentencias de comparación y repeticiones
Instrucción IF La sentencia if permite comparar 2 valores entre si. Por medio de la condición cuando
se cumple (TRUE) entra a realizar la accion1 si no pasa a cumplir la accion2
if ( condición_logica )
{ ....
acción 1
....
}
else
{ .....
acción 2
.....
}
Sentencia SWITCH La sentencia switch puede comparar una variable con mas de un posible
resultado Si ustedes tuvieron el gusto de programar en clipper la sentencia es muy parecida a Case.
Switch (variable)
{
case comparacion1 : .....
accion...
break
.....
case comparacion n : .....
accion...
break
default : ..... /* en caso de que no se cumpla ninguna...*/
accion...
break
}
Repeticiones
Es el mas usado en su sintaxis puesto que es muy parecido al de otros lenguajes como clipper pascal
visual basic.... While primero evalúa la condición y no se cumple entra en el ciclo While hasta que la
condición se cumpla.
While (condición)
{
....
sentencias
....
}
Sentencia for
La sentencia for o para permite ejecutar un conjunto de sentencias evaluando la condición central
del for.
For ( variable = valor inicial ; condición ; incremento)
{...
....
sentencias....
...
....
}
Punteros :
C permite el manejo de punteros a memoria de una forma fácil y ágil por medio de punteros podremos
desarrollar funciones que no devuelvan un solo valor sino que devuelvan mas valores a su misma
vez. solamente tenemos que tener en cuenta un par de cosas y podemos acceder a posiciones de
memoria de las variables apuntado hacia ella, & dirección hacia donde apunta el objeto o variable
Manejo de archivos en C
Para el manejo de archivos en C tenemos que tomar en cuenta varias partes primero la parte de
apertura, el modo de trabajo y luego cerrar el archivo (necesario para no perder datos o que el archivo
quede en memoria corrupto).
Al abrir un archivo tenemos que tener en cuenta el modo de apertura del mismo si es de lectura,
escritura, creación, binario etc.
Primero tenemos que definir la variable que va a contener en el la información de el comportamiento
del archivo (si existe, si se produjo un error al grabar al recuperar etc.) Las variables de tipo archivo
se definen como punteros ej.
FILE *archivo
Esto solamente define una variable de tipo de archivo la información de el archivo
se encuentra almacenada en un puntero hacia el mismo.
Archivo = fopen ( "Nombre_fisico", "modo");
En el modo de apertura del archivo podemos tener en cuenta si el archivo se quiere crear (w) si el
archivo es de solo lectura (r) modo binario (b) etc.
2- ¿Qué es lenguaje de programación C++?
C++ es un lenguaje de programación diseñado en 1979 por Bjarne Stroustrup. La intención de su
creación fue extender al lenguaje de programación C mecanismos que permiten la manipulación de
objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un
lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se sumaron a los paradigmas
de programación estructurada y programación orientada a objetos. Por esto se suele decir que el C++
es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los
fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos
que se comporten como tipos fundamentales.
El nombre "C++" fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado
por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En
C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
3- Historia del lenguaje de programación C++
Su origen data del año 1979 y se le atribuye a Bjarne Stroustrup. El lenguaje que inspiró a Stroustrup
fue el lenguaje Simula (lenguaje usado para simulaciones), que es considerado el primer lenguaje en
permitir programación orientada a objetos. Stroustrup considero que esta funcionalidad del lenguaje
Simula era muy útil en el desarrollo de software, pero Simula era muy lento para un uso práctico.
Stroustrup comenzó a trabajar en su lenguaje llamado “C with classes” (C con clases) , su meta era
agregar programación orientada a objetos al lenguaje C. El primer compilador de este lenguaje fue
Cfront (un compilador escrito en C with classes) derivado del compilador de lenguaje C llamado
CPre, aunque en 1993 se dejaría de usar por la dificultad para agregar nuevas funciones.
En 1983 el nombre del lenguaje fue cambiado de “C with classes” a “C++”. Podemos entender con
esto la imagen que tenía Stroustrup de su lenguaje como una mejora del lenguaje “C” (al ser ++ un
incrementador de variable).
Para 1985 Stroustrup publicó su referencia al lenguaje “The C++ Programming Language” (“El
lenguaje de programación C++), el cual fue muy importante debido a la falta de estandarización del
lenguaje recién creado. En 1990 se publicó “The Annotated C++ Reference Manual” (Manual de
referencia anotada de C++) y ese mismo año salió al mercado el compilador “Turbo C++”
(desarrollado por Borland Software Corporation) que agregaba una gran cantidad de nuevas librerías
al lenguaje, ayudando a su desarrollo. El proyecto de librerías “Boost” agrego nuevas funcionalidades
al lenguaje tales como aleatorización comprehensiva y una nueva librería de tiempo.
4- Ventajas del lenguaje de programación C++
- Lenguaje de programación orientado a objetos.
- Lenguaje muy didáctico, con este lenguaje puedes aprender muchos otros lenguajes con gran
facilidad, como C#, Java, Visual Basic, JavaScript, PHP, entre otros.
- Es muy potente en lo que se refiere a creación de sistemas complejos, un lenguaje muy
robusto.
- Actualmente, puede compilar y ejecutar código de C, ya viene con librerías para realizar esta
labor.
5- Desventajas del C++
- Es mucho más difícil de usar que otros lenguajes de programación.
- Es difícil programar bases de datos.
- Los punteros (es muy complicado su sistema).
6- Características del C++
Las características principales del lenguaje de programación c++ son las siguientes.
Sintaxis heredada del lenguaje C.
Tiene un estandard ISO, conocido como ANSI-C++. La última revisión fue en el 2011.
Lenguaje fuertemente tipado. El programador debe saber como hacer y declarar el código
para que funcione.
Programación orientada a objetos, lo que comunmente se puede encontrar por POO.
o Abstracción.
o Encapsulado.
o Herencia.
o Polimorfismo.
Sobrecarga de operadores.
Soporta expresiones Lambda, también llamadas funciones anónimas.
Control de excepciones.
Biblioteca estándar, que suele venir con el compilador. No solo estamos hablando de las
funciones de sistema, como puede ser cout, sino de:
o Plantillas de clases (o colecciones de objetos) para vectores, listas, mapas, colas,
pilas, ec.
o Soporte multihilo.
Compatibilidad de C con C++. Un compilador de c++ puede compilar código escrito en C,
o usar librerías de c con poca modificación de código..
Uso de punteros.
Es portátil, tiene un gran número de compiladores en diferentes plataformas y sistemas
operativos.
Eficiencia con el hardware, al ser un lenguaje compilado. Además, se acerca bastante a un
lenguaje de bajo nivel.
Una de las pricipales desventajas (o crítica) de C++, es su complejidad. Es un lenguaje pensado para
programadores con experiencia programando.
7- Sentencias o instrucciones del C++
§1 Sinopsis
Las sentencias ("Statements") especifican y controlan el flujo de ejecución del programa. Si no
existen sentencias específicas de selección o salto, el programa se ejecuta de forma secuencial en
el mismo orden en que se ha escrito el código fuente (es el que podríamos considerar orden
"natural" de ejecución).
En este capítulo explicaremos los distintos tipos de sentencias que existen en C++, pero antes
ofreceremos una descripción formal de las mismas señalando qué se entiende por sentencia.
§2 Definición
Una expresión es una secuencia de operadores; operandos; elementos de puntuación y palabras
clave, que especifican una computación. Tiene sentido computacional en sí misma y equivale a
una frase en el lenguaje normal. Entre sus características distintivas están las de poder producir un
resultado y posibles efectos laterales. Ejemplo:
extern x; // No produce un valor
y = 22; // Produce un valor
z = i++; // Valor + efectos laterales
Cualquier expresión finalizada en un punto y coma ; forma una sentencia:
< expresión >;
C++ ejecuta las sentencias evaluando la expresión. Todos los efectos colaterales de la evaluación
son tenidos en cuenta antesde ejecutar la próxima sentencia. La mayoría de sentencias C++ son
asignaciones o llamadas a funciones.
Un caso especial es la sentencia nula; consiste en un punto y coma (;) aislado. Una sentencia
nula no hace nada, pero puede ser necesaria en situaciones en que la sintaxis del lenguaje espere
una sentencia pero nuestro programa no necesita hacer nada.
Nota: como la mayoría de las cosas de C++, la definición anterior tiene su excepción. Existe
un tipo especial de sentencia, las directivas de preproceso en las que el punto y coma
puede omitirse. Este tipo de sentencias no ejecuta una computación de tiempo de ejecución
sino de compilación (realizan modificaciones sobre el fuente). Entre las que sí ejecutan una
computación en runtime también existe una, las etiquetas directas, que no terminan en punto y
coma sino en dos puntos : (ver a continuación )
§2 Clasificación
Dada la definición anterior, resulta evidente que pueden existir infinitas sentencias distintas, e
innumerables criterios para su clasificación. Una de las posibles, que además coincide con la
clasificación del Estándar, distingue las siguientes clases de sentencia:
De etiqueta
De expresión
Compuestas
De selección
De iteración
De salto
De declaración
Bloques de intento
Además de las anteriores, por sus características especiales podríamos considerar las siguientes
clases adicionales:
Sentencias de preproceso
Sentencias ensamblador
§2.1 Sentencias de etiqueta
En C++ existen tres clases de sentencias etiquetadas: las etiquetas directas ( 4.10.1a), las
sentencias case ( 4.10.1b) y las default ( 4.10.1c), estas últimas se utilizan en conjunción con
las sentencias switch.
§2.2 Sentencias de expresión
Podríamos decir que son las que no pertenecen a ninguno de los otros grupos y que, en la
práctica, son las más abundantes. Generalmente son asignaciones o invocaciones de funciones.
Ejemplo:
pint = &x;
foo(c);
§2.3 Sentencias compuestas
Las sentencias compuestas, también denominadas bloques ( 1.3.1) se utilizan en aquellas
situaciones en que la sintaxis espera una sentencia pero se necesita usar varias. Ejemplo:
if (first) ++x;
else {
--x; z = a;
}
En caso de cumplirse la condición hay que incrementar x, lo que puede hacerse en una sola
sentencia, pero si la condición resulta falsa, se precisan dos computaciones. Para que se
comporten como una sola frente a else, se recurre a englobarlas en un bloque entre llaves { ... }.
Las sentencias dentro del bloque se comportan como una sola y constituyen un ámbito léxico. Los
identificadores definidos en su interior eclipsan a los exteriores y las variables automáticas creadas
en él son destruidas al salir del ámbito.
§2.4 Sentencias de selección
Las sentencias de selección o de control de flujo, pueden decidir entre varios cursos de acción
distintos en función de ciertos valores. Existen dos tipos de estas sentencias de
selección: if...else ( 4.10.2) y switch ( 4.10.2).
Ejemplos:
switch ( foo() ) {
case 0: case 1:
if (first) break;
else ++x;
case 2:
...
default:
break;
}
§2.5 Sentencias de iteración
Las sentencias de iteración permiten repetir un conjunto de sentencias ejecutando un bucle. En
C++ existen tres formas de iteraciones: los bucles while ( 4.10.3), do…while ( 4.10.3) y for (
4.10.3).
Ejemplo:
while (first) {
...
for (int x = 1; x < y; ++x) {
...
do { // begin second
...
...
} while (second); // end second
...
} // end for
...
} // end first
§2.6 Sentencias de salto
Las sentencias de salto permiten transferir el control del programa de forma incondicional. Existen
cuatro de estas sentencias: break ( 4.10.4), continue ( 4.10.4), ( 4.10.4) y return (
4.10.4).
Ejemplo:
while (foo) {
start:
if (some) break;
...
if (first) goto start;
...
if (second) continue;
...
if (! any) return;
...
}
Nota: en ocasiones es posible utilizar el mecanismo de excepciones C++ como mecanismo de
salto multinivel ( 1.6).
§2.7 Sentencias de declaración
Este tipo de sentencias introducen uno o más identificadores en un bloque. Ejemplo:
void foo (int x, y z) {
float f = 3.14;
char c;
int x;
...
}
El asunto es tratado extensamente en el capítulo "Declaraciones y definiciones" ( 4.1.2).
§2.8 Bloques de intento
Estas sentencias deben estar seguidas de una sentencia catch y tienen la forma:
try {
...
}
Son utilizadas por el mecanismo de excepciones C++ y han sido expuestas con detalle en el
capítulo correspondiente ( 1.6)
§2.9 Sentencias de preproceso
Como se ha indicado, constituyen un tipo muy especial, tanto en su sintaxis como en su
comportamiento. No representan una computación en tiempo de ejecución (runtime), sino de
compilación, ya que su efecto es realizar modificaciones sobre el código fuente [1]. Su sintaxis
también es especial; no requieren el punto y coma de terminación y comienzan siempre con el
símbolo # ( 4.9.10).
§2.10 Sentencias ensamblador
C++ dispone de la opción de poder escribir directamente instrucciones en lenguaje ensamblador
junto con el resto del código fuente. Para esto dispone de una palabra clave específica: asm.
La palabra asm indica que la cadena literal que sigue será incluida en el código objeto en la
posición indicada.
La sintaxis empleada depende del compilador. En el caso de C++Builder, es la siguiente:
asm <opcode> <operandos> <; o NL>
Ejemplo
asm pop dx;
asm push ebx;
asm call @@std@%basic_ostream$c19std@%char_traits$c%%@put$qc;
asm add esp,8;
asm push ebx;
Se permite que varias instrucciones ensamblador pueden ser agrupadas en un solo bloque
precedido por el indicador asm. Ejemplo:
asm {
mov ax, 0x0e07;
xor bx, bx;
int 0x10;
}
La sintaxis empleada por el compilador C++ GNU para Windows utilizado por Dev-C++ no utiliza
la sintaxis de Intel, sino la de AT&T.
Ejemplo [2]:
int AdrIO; // variable global
static char ValIO; // variable global
void foo() {
__asm("mov _AdrIO, %dx") ; // cargar un registro de 16 bits
__asm("mov _ValIO, %al") ; // cargar un registro de 8 bits
__asm("mov %ax,%dx") ; // mover contenido registro AX a DX
}
Nota: no olvidar incluir el guión bajo ("underscore") precediendo los nombres de variables
globales.
Ni que decir tiene que cualquier código ensamblador insertado mediante asm, es específico, y por
tanto dependiente, de la plataforma sobre la que se ejecutará el programa. Este tipo de sentencias
deben reducirse al máximo si queremos facilitar la portabilidad del código.