1.- Estructura de un Programa en c/c++.
2.- Características básicas de un programa.
3.- Tipos de datos.
4.- Variables y Constantes.
5.- Ámbito de las Variables.
6.- Archivos Cabecera, Palabras Reservadas.
7.- Operadores y Expresiones.
8.- Comentarios y Sangrías.
9.- Sentencias, Sentencias de asignación, Sentencias de Control.
10.- Funciones Básicas de entrada y salida.
1.- ESTRUCTURA DE UN PROGRAMA EN C/C++.
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:
1. 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.
2. Una lista de declaración de argumentos, si se incluyen estos en la cabecera.
3. Una sentencia compuesta, que contiene el resto de la función.
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 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.
2. CARACTERÍSTICAS BÁSICAS DE UN PROGRAMA.
Un buen programa debe ser rápido: Puede tener o no un código optimizado, pero el usuario final debe sentir que para lo que usa el programa el tiempo que tarda en hacer las cosas es normal, un buen ejemplo es el reproductor multimedia Songbird, que puede ser excelente pero por lo que tarda en iniciar para los que solo quieren escuchar una canción lo convierten en una contra que le cava la tumba. Otro buen ejemplo son los visualizadores de imágenes, que deben ser instantáneos al abrir (como Irfanview). Por el otro lado programas profesionales como Autocad, 3Dstudio y demás pueden tardarse otro tiempo en abrir, para ellos tenemos otras pretensiones.
Un buen programa debe ser estable: Una fija es la confiabilidad que debe generar un programa, una buena aplicación no te debe dejar a mitad del camino con todo el trabajo hecho en un procesador de textos, con una cita a punto de concretarse mediante el programa de chat ni con una presentación frustrada delante de decenas de colegas. Y si falla (porque nade es perfecto en esta vida) un buen software debe tener tantas opciones de recuperación como sean posibles (recuperar últimas sesiones, mensajes offline, abrir el último archivo en el lugar donde quedamos, entre otras).
Un buen programa debe ser usable e intuitivo: De nada sirve que programes algo con miles opciones si no las colocas de una manera de que el usuario pueda encontrarlas y utilizarlas. Eso no quiere decir que las miles de opciones estén a la vista como las viejas versiones de Word que mareaban al pobre usuario de oficina. Lo ideal es presentar de una manera accesible los menúes frecuentes y luego juntar todos los demás en un menú avanzado para que, además, los usuarios que se inician con el software no sufran frustraciones tempranas y se vayan adecuando al mismo de una manera paulatina. El botón office fue uno de los primeros ejemplos de ello, que ahora sigue con todos los programas que usan Ribbon, el menú configuración avanzada de NOD es otro. Picasa es un ejemplo genial de usabilidad, tiene de todo, para todo, y se encuentra muy fácil.
3. TIPOS DE DATOS.
a) BÁSICOS
Caracter
Entero
Punto flotante
Doble punto flotante
(Sin valor)
C++
Char
Int
Float
Double
Void
b) MODIFICADORES DE TIPO (EXTENDIDOS).
Signo
Sin signo
Largo
Corto
Signe (redundante)
Unsigne
Long
Short
4. VARIABLES Y CONSTANTES.
Variables o Identificadores.
Hace referencia a un espacio en memoria que guarda un dato y puede cambiar.
Declaración de una variable.
Tipo nombre_var, nombre_var2;
Tipos de Datos.
Int
Float
Doublé
Long
Unsigne
Char
Un solo caracter.
Cadena de caracteres.
Inicialización de variables.
Después de declarar una variable ya se puede utilizar, lo primero es que habrá que inicializarla, dando un valor inicial.
Edad=0;
Calif_final=0;
Se puede asignar un valor a una variable en cualquier parte del programa utilizando el operador de asignación =
Resultado=suma + 30;
Sueldo=700;
Nombre=”Juan Pérez”;
Letra=’$’;
Letra=”a”;
Letra=’a’;
Constantes.
Es un identificador/ variable que no cambia su valor durante la ejecución del programa.
Existen dos formas de declarar variables:
1. En la declaración utilizando el modificador const
Cons int numero=73;
Const float altura=9315.18;
Const float pi=3.1416;
2. En la cabecera del programa utilizando constantes simbólicas, con el siguiente formarto:
#define NOMBRE_CONSTANTE valor
Por ejemplo:
#define MAXIMO 100
#define PI 3.1416
Constante de Caracter de Barra Invertida.
Se utiliza para caracteres que no son imprimibles como retorno de carro, salto de línea, tabulador.
5. ÁMBITO DE LAS VARIABLES.
El lugar donde se declara una variable afecta la manera en que otras partes del programa pueden usarlas.
*Variable Global.
Se utiliza en cualquier parte del programa. Se declara fuera de todas las funciones, en la cabecera del programa.
*Variable Local.
Se declara dentro de una función y solo puede ser utilizada dentro de esta.
*Parámetro Formal.
Se declara en la declaración de los parámetros formales de una función, es decir, reciben los valores que se le pasan a la función.
6. ARCHIVOS CABECERA, PALABRAS RESERVADAS.
Archivos Cabecera.
Comprenden la definición de funciones para realizar ciertas operaciones en c. Contienen información de la biblioteca de C.
Tienen extensión .h y se incluyen en la cabecera del programa utilizando la siguiente declaración:
# Include <librería.h>
Los más comunes en c++ son:
Iostream.h
Dos.h
Conio.h
Stdio.h
Stdlib.h
Math.h
String.h
Time.h
Ctype.h
Signal.h
Limits.h
Float.h
Palabras Reservadas.
Palabras propias de las sintaxis del lenguaje c/c++, y no pueden ser utilizadas para nombrar variables, funciones u otro procedimiento.
Palabras clave de c/c++:
Auto
Continue
Enum
If
Short
Switch
Volatile
Break
Default
Extern
Int
Signed
Typedef
While
Case
Do
Float
Long
Sizeaf
Union
Char
Double
For
Register
Static
Unsigned
Const
Else
Goto
Return
Struct
Void
Para C++:
Asm
Inline
Public
Virtual
Catch
New
Template
Class
Operator
This
Delete
Private
Throw
Friend
Protected
Try
7. OPERADORES Y EXPRESIONES.
Expresiones.
Una expresión es una combinación de operadores y operandos de cuya evaluación se obtiene un valor. Los operandos pueden ser nombres que denoten objetos variables o constantes, funciones, literales de cualquier tipo adecuado de acuerdo con los operadores u otras expresiones más simples.
Las expresiones se evalúan de acuerdo con la precedencia de los operadores. Ante una secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de escritura, de izquierda a derecha. El orden de evaluación puede modificarse usando paréntesis.
Operadores.
Los operadores binarios se usan en formato infijo (<operando_izquierdo> <operador> <operando_derecho>), como en "a + b". Los operadores unarios se usan en formato prefijo (<operador> <operando>), como en "-5".
Operadores lógicos.
Están predefinidos para cualquier tipo, T, que designe un booleano, modular o un array monodimensional de componentes booleanos:
function "and"(Left, Right : T) return T
function "or" (Left, Right : T) return T
function "xor"(Left, Right : T) return T
function "or" (Left, Right : T) return T
function "xor"(Left, Right : T) return T
Operadores relacionales.
Los operadores de igualdad están predefinidos para todos los tipos no limitados. Sea T un tipo con estas características:
function "=" (Left, Right : T) return Boolean
function "/="(Left, Right : T) return Boolean
function "/="(Left, Right : T) return Boolean
Los operadores de ordenación están predefinidos para todos los tipos escalares y los arrays de elementos discretos. Sea T un tipo con estas características:
function "<" (Left, Right : T) return Boolean
function "<="(Left, Right : T) return Boolean
function ">" (Left, Right : T) return Boolean
function ">="(Left, Right : T) return Boolean
function "<="(Left, Right : T) return Boolean
function ">" (Left, Right : T) return Boolean
function ">="(Left, Right : T) return Boolean
Existe también un operador de pertenencia ("in", "not in") que determina si un valor pertenece a un rango o a un subtipo: if i in 1..10 then ...
Todos los operadores relacionales devuelven un resultado de tipo Boolean.
Operadores binarios de adición.
Los operadores de adición predefinidos para cualquier tipo numérico, T, son:
function "+"(Left, Right : T) return T
function "–"(Left, Right : T) return T
function "–"(Left, Right : T) return T
También pertenecen a esta categoría los operadores de concatenación, predefinidos para cualquier tipo de array monodimensional no limitado, T, de elementos de tipo C:
function "&"(Left : T; Right : T) return T
function "&"(Left : T; Right : C) return T
function "&"(Left : C; Right : T) return T
function "&"(Left : C; Right : C) return T
function "&"(Left : T; Right : C) return T
function "&"(Left : C; Right : T) return T
function "&"(Left : C; Right : C) return T
Operadores unarios de adición.
Los operadores unarios de adición predefinidos para cualquier tipo númerico, T, son la identidad y la negación:
function "+"(Right : T) return T
function "–"(Right : T) return T
function "–"(Right : T) return T
Cuando se aplica a un tipo modular, el operador de negación ("-") tiene el efecto de restar el valor del operando, si es distinto de cero, al módulo. Si el valor del operando es cero, el resultado es cero.
Operadores multiplicativos.
Los operadores de multiplicación y división están predefinidos entre diversas combinaciones de enteros y reales:
function "*" (Left, Right : T) return T
function "/" (Left, Right : T) return T
function "*"(Left : T; Right : Integer) return T
function "*"(Left : Integer; Right : T) return T
function "/"(Left : T; Right : Integer) return T
function "*"(Left, Right : root_real) return root_real
function "/"(Left, Right : root_real) return root_real
function "*"(Left : root_real; Right : root_integer) return root_real
function "*"(Left : root_integer; Right : root_real) return root_real
function "/"(Left : root_real; Right : root_integer) return root_real
function "*"(Left, Right : universal_fixed) return universal_fixed
function "/"(Left, Right : universal_fixed) return universal_fixed
function "/" (Left, Right : T) return T
function "*"(Left : T; Right : Integer) return T
function "*"(Left : Integer; Right : T) return T
function "/"(Left : T; Right : Integer) return T
function "*"(Left, Right : root_real) return root_real
function "/"(Left, Right : root_real) return root_real
function "*"(Left : root_real; Right : root_integer) return root_real
function "*"(Left : root_integer; Right : root_real) return root_real
function "/"(Left : root_real; Right : root_integer) return root_real
function "*"(Left, Right : universal_fixed) return universal_fixed
function "/"(Left, Right : universal_fixed) return universal_fixed
Los operadores módulo y resto están definidos para cualquier tipo entero, T:
function "mod"(Left, Right : T) return T
function "rem"(Left, Right : T) return T
function "rem"(Left, Right : T) return T
La relación entre el resto y la división entera viene dada por la expresión: A = (A/B)*B + (A rem B), donde (A rem B) tiene el mismo signo que A, y es menor que B en valor absoluto.
El operador módulo se define de manera que (A mod B) tiene el mismo signo que B, un valor absoluto menor, y existe un número entero, N, tal que: A = B*N + (A mod B).
8. COMENTARIOS Y SANGRIAS
Comentarios
Comentarios son anotaciones en el programa; son para uso exclusivo del programador y eliminados del código fuente en la fase de preprocesado, antes del análisis sintáctico.
Aparte de las consideraciones estrictamente formales que se indican en esta sección, no debemos perder de vista que los comentarios, aunque voluntarios (no es obligatorio escribirlos), representan una ayuda inestimable durante la construcción del programa, siendo imprescindibles para el programador original, o los que le sucedan en las tareas de mantenimiento, cuando es necesario habérselas con el código un tiempo después de que fue escrito. Además de clarificar ideas los comentarios son también un valioso instrumento de depuración, pues permiten eliminar provisionalmente secciones enteras de código.
En C++ coexisten dos formas de comentarios: El de C clásico y el de C++. Ambos son soportados por C++Builder, que tiene además una extensión particular sobre el estándar ANSI, los comentarios anidados (este último tipo solo debe usarse si la compatibilidad no es importante).
También deben tenerse en cuenta las observaciones que siguen sobre el uso de separadores (whitespaces) y delimitadores en los comentarios para evitar otros problemas de compatibilidad.
Los comentarios varían dependiendo del lenguaje de programación que se utilice; ejemplos:
C++ = /comentario ò /* comentario */
Visual Basic = ‘comentario ‘
html = <!--comentario→
Visual Fox Pro = *comentario
Author: (Felipe de Jesús López Aguirre, UNIVA Plantel Querétaro, Lic. en Tecnologías de Información)
A la hora de programar es conveniente añadir comentarios (cuantos más mejor) para poder saber qué función tiene cada parte del código, en caso de que no lo utilicemos durante algún tiempo. Además facilitaremos el trabajo a otros programadores que puedan utilizar nuestro archivo fuente.
Para poner comentarios en un programa escrito en C usamos los símbolos /* y */:
/* Este es un ejemplo de comentario */
/* Un comentario también puede estar escrito en varias líneas */
El símbolo /* se coloca al principio del comentario y el símbolo */ al final.
9. SENTENCIAS, SENTENCIAS DE ASIGNACIÓN, SENTENCIAS DE CONTROL.
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).
Sentencia simple = delimitada por el punto y coma de la
anterior sentencia y el punto y coma final
o Sentencia compuesta = delimitada por la palabra
reservada BEGIN y la palabra reservada END.
Entre ambas pueden existir sentencias simples u otras
sentencias compuestas.
Se tratan como una única sentencia.
Sentencias de Control
Las sentencias o estructuras de control, permiten tomar decisiones y realizar un proceso en repetidas veces. Son las denominadas bifurcaciones y bucles. Estas estructuras son muy importantes puesto que son las encargadas de controlar el flujo de un programa según los requerimientos del mismo. En Visual Basic se dispone de las siguientes:
Las sentencias o estructuras de control, permiten tomar decisiones y realizar un proceso en repetidas veces. Son las denominadas bifurcaciones y bucles. Estas estructuras son muy importantes puesto que son las encargadas de controlar el flujo de un programa según los requerimientos del mismo. En Visual Basic se dispone de las siguientes:
· Sentencia IF....THEN.....ELSE....END IF
Permite ejecutar condicionalmente una o más sentencias. Su representación es así:
If condicón1 Then
Grupo1 de Sentencias (1 a n)
Else If condición2 Then
Grupo2 de Sentencias (1 a n)
Else If condición3 de Then (1 a n)
Grupo3 de Sentencias (1 a n)
Else If condición4 de Then (1 a n)
Grupo4 de Sentencias (1 a n)
Else If condición5 de Then (1 a n)
Grupo5 de Sentencias (1 a n)
Else If condición6 de Then (1 a n)
Grupo6 de Sentencias (1 a n)
End If
En la representación anterior, si se cumple la primera condición, es decir condicion1 = True, entonces el programa continua su ejecución por el Grupo1 de Sentencias, si no se cumple, pasa a evaluar condicion2, y si es cierta se ejecuta el Grupo 2 de Sentencias y si es falsa evalúa condicion3 y así se continúa hasta el encontrar un Else If (puede haber tantos como se precisen) que contenga una condición verdadera para ejecutar su grupo de sentencias. Si ninguna condición de las evaluadas es cierta, se ejecuta el Grupo de Sentencias de la cláusula Else.
En esta sentencia de control las únicas cláusulas obligatorias son If Then pudiéndose prescindir si es necesario de Else, Else If Then y End If.
SENTENCIA DE ASIGNACION
El valor de una variable se puede modificar por medio de una sentencia de asignación. El nombre de la variable se escribe a la izquierda de un símbolo '=' (sin las comillas) y a la derecha el valor que se le va a asignar, que pudiera ser por ejemplo el valor de una expresión. Algunas sentencias de asignaci{on validas son:
total = (cantidad * precio_unitario)
total_neto = total * ( 1 + iva/100)
sobrevalor = total_neto > maximo
En las sentencias anteriores, se asigna un valor numérico a las variables total y total_neto, y un valor booleano a la variable sobrevalor.
Es importante resaltar que el símbolo '=' no especifica una igualdad en el sentido matemático, y por lo tanto, los ejemplos anteriores no son ecuaciones.
El símbolo '=' es conocido como el símbolo de asignación.
total = (cantidad * precio_unitario)
total_neto = total * ( 1 + iva/100)
sobrevalor = total_neto > maximo
En las sentencias anteriores, se asigna un valor numérico a las variables total y total_neto, y un valor booleano a la variable sobrevalor.
Es importante resaltar que el símbolo '=' no especifica una igualdad en el sentido matemático, y por lo tanto, los ejemplos anteriores no son ecuaciones.
El símbolo '=' es conocido como el símbolo de asignación.
10. FUNCIONES BÁSICAS DE ENTRADA Y SALIDA.
Biblioteca de entrada y salida
Las clases basic_ostream y basic_stream, y los objetos cout y cin, proporcionan la entrada y salida estándar de datos (teclado/pantalla). También está disponible cerr, similar a cout, usado para la salida estándar de errores. Estas clases tienen sobrecargados los operadores << y >>, respectivamente, con el objeto de ser útiles en la inserción/extracción de datos a dichos flujos. Son operadores inteligentes, ya que son capaces de adaptarse al tipo de datos que reciben, aunque tendremos que definir el comportamiento de dicha entrada/salida para clases/tipos de datos definidos por el usuario.
Las funciones principales que realizan la entrada y salida sin formato son:getchar(): Lee un carácter del teclado. Espera hasta que se pulsa una tecla y entonces devuelve su valor.
putchar(): Imprime un carácter en la pantalla en la posición actual del cursor.
gets(): Lee una cadena de caracteres introducida por el teclado y la sitúa en una dirección apuntada por su argumento de tipo puntero a carácter.
puts(): Escribe su argumento de tipo cadena en la pantalla seguida de un carácter de salto de línea.
Las funciones principales que realizan la entrada y salida con formato, es decir, se pueden leer y escribir en distintas formas controladas, son:
printf(): Escribe datos en la consola con el fo rmato especificado.
scanf(): Función de entrada por consola con el formato especificado.
Sus prototipos son los siguientes:
int printf (" caracteres de transmisión y escape", lista de argumentos);
int scanf (" caracteres de transmisión y escape", lista de argumentos);
En la función printf() (con scanf() no), entre las comillas se pueden poner rótulos literales mezclados con los caracteres de transmisión.