El comité
para el estándar ANSI C fue formado en 1983 con el objetivo de crear un
lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie
en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en
1978 por estos dos autores.
El
lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue B. Stroustrup,
también de la
ATT. Al comienzo era una extensión del lenguaje C que
fue denominada C with classes. Este nuevo lenguaje comenzó a ser
utilizado fuera de la ATT en 1983. El nombre C++ es también de
ese año, y hace referencia al carácter del operador incremento de C (++). Ante
la gran difusión y éxito que iba obteniendo en el mundo de los programadores,
la ATT comenzó a estandarizarlo internamente en 1987.
En 1989 se formó un comité ANSI (seguido algún tiempo después por un comité
ISO) para estandarizarlo a nivel americano e internacional.
En la
actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre
los programadores profesionales le ha llevado a ocupar el primer puesto como
herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C
en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y
eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del
C original. La evolución de C++ ha continuado con la aparición de Java,
un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se
utiliza para realizar aplicaciones en Internet.
Hay que
señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C,
como por ejemplo en la forma de declarar las funciones, en los punteros a void,
etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son
anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++.
De igual
forma hay que indicar que C++ mantiene compatibilidad casi completa con C, de
forma que el viejo estilo de hacer las cosas en C es también permitido en C++,
aunque éste disponga de una mejor forma de realizar esas tareas.
Sin
embargo un punto importante que tiene que conocer cualquier programador es que
los ficheros fuente de C++ tienen la extensión *.cpp
(de C plus plus, que es la forma oral de llamar al lenguaje en
inglés), en lugar de *.c. Esta
distinción es muy importante, pues determina ni más ni menos el que se utilice
el compilador de C o el de C++. La utilización
de nombres incorrectos en los ficheros puede dar lugar a errores durante el proceso de compilación
Fases para la Resolución de Problemas:.
Las fases o etapas constituyen el ciclo de vida del
software, ayudarán en el proceso de resolución de un problema, estas consisten
en:
1. Análisis del problema.
2. Diseño del algoritmo.
3. Codificación (Implementación).
4. Compilación y ejecución.
5. Verificación
6. Depuración.
7. Mantenimiento.
8.
Documentación.
Las dos
primeras etapas conducen a un diseño detallado escrito de forma de algoritmo.
Durante la tercera
etapa (Codificación) se implementa el algoritmo en un
código escrito en un lenguaje de programación reflejando las ideas desarrolladas
en las fases de análisis y diseño (Joyanes, 2003).
La
Compilación, Ejecución y Verificación realiza la traducción y ejecución del
programa, se comprueba rigurosamente y se
eliminan todos los errores que pueda tener. Si existen errores es necesario
modificarlo y actualizarlo de manera que
cumplan todas las necesidades de cambio de sus usuarios, para ello se usan las
etapas de Verificación y Depuración.
Finalmente
se debe usar la fase de Documentación, es decir, es la escritura de las
diferentes fases del ciclo de vida del software, esencialmente el análisis,
diseño y codificación, unidos a manuales de usuario y de referencia, así
como normas para el mantenimiento.
En
este pequeño apartado se pondrán a prueba las cuatro primeras fases, aunque se
recomienda realizar las fases faltantes para terminar con el ciclo de vida del
software.
Análisis del Problema:
En esta
fase se requiere una clara definición del problema, para poder hacer esto es
conveniente realizar las siguientes preguntas:
1. ¿Qué entradas se requieren?
(tipo y cantidad)
2. ¿Cuál es la salida deseada?
(tipo y cantidad)
3. ¿Qué método produce la salida
deseada?
Con
dichas preguntas se determina qué necesita el programa para resolver el
problema. La solución puede llevarse a cabo mediante varios algoritmos
(Joyanes, 2004). Un algoritmo dado correctamente resuelve un problema definido
y determinado.
El
algoritmo debe cumplir diferentes propiedades:
1. Especificación precisa de la
entrada. Se debe dejar claro el número y tipo de valores de la entrada y las
condiciones iniciales que deben cumplir dichos valores.
2. Especificación precisa de la
instrucción. No debe haber ambigüedad sobre las acciones que se deben ejecutar
en cada momento.
3. Exactitud, corrección. Se debe
mostrar que el algoritmo resuelva el problema.
4. Etapas bien definidas y
concretas. Concreto quiere decir que la acción descrita por esa etapa está
totalmente comprendida por la persona o máquina que debe ejecutar el algoritmo.
Cada etapa debe ser ejecutable en una cantidad finita de tiempo.
5. Numero finitos de pasos. Un
algoritmo se debe componer de un número finitos de pasos.
6. Un algoritmo debe terminar. En
otras palabras, no debe entrar en un ciclo infinito.
7.
Descripción del resultado o efecto. Debe estar claro cuál es la tarea que el
algoritmo debe ejecutar. La mayoría de las veces, esta condición se expresa con
la producción de un valor como resultado que tenga ciertas propiedades.
Ejemplo 1:
¿Es un algoritmo
la siguiente instrucción?
Problema:
Escribir una lista de todos los enteros positivos
Solución: Es imposible ejecutar la
instrucción anterior dado que hay infinitos enteros positivos.
Ejemplo
2:
Problema:
Calcular la paga neta de un trabajador conociendo el número de horas
trabajadas, la tarifa horaria y la tasa de impuestos.
Solución: Debemos definir el
problema.
1. ¿Qué
datos de entrada se requieren?
Número de
horas trabajadas
Tarifa
Impuestos
2. ¿Cuál
es la salida deseada?
Paga Neta
3. ¿Cuál
es el método a usar? (Algoritmo)
Inicio
Leer
Número de horas trabajadas
Leer
Tarifa
Leer
Impuestos
Calcular
Paga Bruta = Número de horas trabajadas * Tarifa
Calcular
Impuestos = Paga Bruta * Tasa
Calcular
Pago Neta = Paga Bruta – Impuestos
Visualizar
Paga Bruta
Visualizar
Impuestos
Visualizar
Pago Neta
Fin
Diseño
del Algoritmo:
En esta
fase, como se ha mencionado anteriormente, se determina cómo hace el programa
la tarea solicitada.
Los
métodos más eficaces para el proceso de diseño se basan en el conocido divide y
vencerás, esto es dividiendo el problema en subproblemas y a continuación dividir estos
subproblemas en otros de nivel más bajo hasta que pueda ser implementada la solución.
Existen
diferentes herramientas de programación, las más utilizadas para diseñar
algoritmos son:
1. Diagramas de flujo: Es una
representación gráfica de un algoritmo. Los símbolos normalizados por el
Instituto Norteamericano
de Normalización (ANSI) y los más frecuentes empleados se muestran a
continuación.
2. Pseudocódigo: Es una herramienta
de programación en la que las instrucciones se escriben en palabras similares
en inglés o español, que facilitan tanto la escritura como la lectura de
programas.
Comentarios:
En
C los comentarios empiezan por los caracteres /* y terminan con los
caracteres */. Pueden comprender varias
líneas y estar distribuidos de cualquier forma, pero todo aquello que está
entre el /* (inicio del comentario) y el */ (fin del
comentario) es simplemente ignorado por el compilador. Algunos ejemplos de
formato de comentarios son los siguientes:
En C++ se admite el mismo tipo de comentarios que en
C, pero además se considera que son comentarios todo aquel texto que está desde
dos barras consecutivas (//) hasta el fin de la línea. Las dos barras marcan el
comienzo del comentario y el fin de la línea, el final. Si se desea poner
comentarios de varias líneas, hay que colocar la doble barra al comienzo de
cada línea. Los ejemplos anteriores se podrían escribir del siguiente modo:
La
ventaja de este nuevo método es que no se pueden comentar inadvertidamente
varias líneas de un programa abriendo un indicador de comentario que no se
cierre en el lugar adecuado.
Los
componentes de un Programa:
La
función main():
El único componente que es obligatorio en cada programa en C++ es la
función main(). En su forma más simple la función main() consiste en el nombre
main, seguido por un par de paréntesis vacios (()) y un par de llaves ({}).
Dentro de las llaves se encuentran enunciados que forman el cuerpo principal
del programa. Bajo circunstancias normales de la ejecución del programa
comienza con el primer enunciado main() y termina con el ultimo enunciado de
main().
La
directiva #include:
La directiva #include da instrucciones al compilador C++ para que añada
el contenido de un archivo de inclusión al programa durante la compilación. Un
archivo de inclusión es un archivo de disco separado que contiene información
necesaria para el compilador. Varios de estos archivos (algunas veces llamados
archivos de encabezado) se proporcionan con el compilador. Nunca se necesita
modificar la información de estos archivos y esta es la razón por la cual se
mantienen separados del código fuente.
Se usa la directiva #include para darle instrucciones al compilador que
añada un archivo de inclusión especifico al programa durante la compilación. La
mayoría de los programas en C++ requieren uno o más archivos de inclusión.
Todos los archivos de inclusión deben tener la extensión .h (por ejemplo,
stdio.h).
Definición
de variables:
Una variable es un nombre asignado a una posición de almacenamiento de
datos. El programa utiliza variables para guardar varios tipos de datos durante
la ejecución del programa. La definición de variable la informa al compilador
el nombre de la variable y el tipo de datos que va a guardar.
Estructuras
de Control Selectivas e Iterativas:
En
sección se tratarán con las Estructuras de Control Selectivas e Iterativas, a
continuación se describe brevemente cada una de dichas estructuras.
Estructuras de control Selectivas:
Las
estructuras selectivas se utilizan para tomar decisiones lógicas y existen en
dos “formas”: la sentencia ifthen-else y la sentencia switch. La
primera (if-then-else) se
considera de alternativa doble (si se cumple cierta condición, entonces…, en
caso contrario…), y tuene la siguiente estructura:
Nota: No se
agrega ninguna llave “{” de apertura y cierre “}” cuando sólo es una instrucción.
También
se puede dar el caso en que se tiene más instrucciones, esa opción deberá
llevar una llave de apertura “{” y otra de cierre “}”, por ejemplo:
Nota: También puede darse el caso
de que exista selecciones anidadas como se muestra a continuación.
Existe otra sentencia para la selección múltiple, esta
es la sentencia switch, actúa como una función de bifurcación múltiple
que sustituye con ventaja a if-else-if cuando el número de opciones que
se puede presentar son numerosas. El mandato switch(variable) se utiliza
para bifurcar las diferentes opciones presentadas según el valor ingresado para
la variable en cada caso. Por ejemplo:
Nota: Un ejemplo es donde
evaluamos nota (tipo entero) y se imprime la
calificación correspondiente al valor de nota,
al final si se nota tiene 6 al 0, imprimirá en pantalla Reprobado.
La
sentencia switch se considera de selección múltiple, ya que el flujo de
ejecución puede continuar por una cantidad N de alternativas posibles, según el
valor de la expresión que se evalúa al principio.
Estructuras de control
Interativas:
También
conocidas como estructuras de repetición (bucles o ciclos) se utilizan para
realizar varias veces el mismo conjunto de operaciones. Entre ellas se
encuentran aquellas donde la cantidad de repeticiones se conoce a priori y aquellas en las que las repeticiones se
realizan hasta que se cumple una condición lógica dada. En esta sección se
verán las estructuras iterativas: for,
while, do-while.
El
primero es la estructura for,
permite definir un bucle controlado por un contador, denominado variable de control
o de inducción, la sintaxis es:
Como se puede observar entre el paréntesis lleva “;”, en la primera se inicializa la
variable de control y sólo se ejecuta una vez.
La segunda es la condición lógica que debe
cumplirse, la tercera es la actualización de la variable de control.
La estructura while, por su
parte, evalua la condición lógica antes de comenzar cada iteración. Si esta es
verdadera, entonces se ejecuta el cuerpo de la estructura while, en caso contrario, el bucle termina.
Como se puede observar en el siguiente código, la
variable de control “i” se inicializa antes,
posteriormente es la que se compara en la
condición, por ello se debe actualizar dentro del bucle (i=i+1 puede sustituirse por una forma abreviada
i++;).
Por último, el bucle do-while,
se utiliza cuando se requiere asegurar que el ciclo se ejecuta al menos una
vez, puesto que la evaluación de la condición lógica se hace al final de este.
En este ejemplo se ejecuta primero (sólo una vez) y
posteriormente verifica la condición si es verdadera, en caso contrario se sale
del bucle.
SOFTWARE
Descarga este compilador de C++ para que puedas practicar lo
aprendido anteriormente de este lenguaje.
CompiladorC++ (Software)
No hay comentarios:
Publicar un comentario