Manual CPP
Manual CPP
El lenguaje C fue creado entre los años 1970 y 1972 por Brian Kernighan y Dennos Ritchie para escribir el código del sistema operativo UNIX. Fue
uno de los lenguajes de programación más aceptados por los programadores, porque hace una conjugación en lenguaje de alto nivel y lenguaje
máquina. El lenguaje C es el resultado de un proceso de desarrollo que inició con un lenguaje denominado BCPL. Este influenció a otro llamado B
(inventado por Ken Thompson). En los años 70; éste lenguaje llevó a la aparición del 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
3
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
C++ nació como una extensión del lenguaje C, para conseguir aunar la eficiencia del lenguaje C con las ventajas del modelo orientado a objetos.
El primer paso hacia C++ se produjo en 1980, cuando se presentó un primer lenguaje llamado C with classes, descrito por Bjarne Stroustrup. En
1983/84 se rediseñó este lenguaje, pasando a llamarse C++ (el nombre proviene del operador incremento de C, ++, para indicar que es una
evolución). Tras pequeños refinamientos, en 1985 se puso a disposición de todo el mundo y se documentó en el libro de Bjarne Stroustrup, “The C++
Programming Language”.
Todo programa en C++, desde el más pequeño hasta el más complejo, tiene una función principal que es con la que se inicia la ejecución del
programa y esta es la función main(). Rutina, subrutina, método, procedimiento, macro
3. ntroducción al lenguaje:
Lenguaje de programación: Cualquier lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para que sean
procesadas o ejecutadas por una computadora.
a. Identificadores (variables): Un identificador (o variable) es un nombre con el que se hace referencia a una función o al
contenido de una localidad de la memoria donde estará guardado el valor que toma y que puede cambiar durante la ejecución.
Las reglas para formar el nombre de un identificador son:
i) Un identificador se forma con una secuencia de letras (minúsculas o mayúsculas), dígitos y el guión bajo.
ii) Debe iniciar con una letra o guión bajo y puede ser seguido de letra, dígito o guión bajo.
iii) No puede contener espacios u otros caracteres.
iv) El lenguaje distingue entre letras mayúsculas y minúsculas. Así BETA3≠BeTa3≠bEta3≠beta3.
v) No son válidos los nombres de palabras reservadas como int, float, if, else, while, return entre otras dado que tienen un
significado especial para el lenguaje.
vi) El nombre puede tener cualquier número de caracteres.
Es recomendable que una variable tenga un nombre relacionado con su uso en el programa.
b. Palabras reservadas: Son nombres predefinidos que tienen un significado especial para el lenguaje. char, int, float, double, void, for,
while, switch, if, entre otras
c. Constantes: Son cadenas o valores que no cambian durante toda la ejecución de un programa por ejemplo, constantes numéricas 5,
3.1416, 1958, constante de cadena “hola”, constante tipo char ‘a’.
d. Comentarios: Son explicaciones del funcionamiento del programa, lo que hacen ciertas instrucciones, el uso de algunas variables,
fecha de elaboración, nombre del programador, etc.
Comentario de varias líneas: inicia con /* y termina con */
Comentario de una línea: inicia con // y puede estar precedido de una sentencia o instrucción .
e. Tipos de datos: Un tipo de dato se define como un conjunto o rango de valores que puede tomar una variable, junto con ciertas operaciones válidas
sobre estos valores.
MEMORI
TIPO DE DATOS SE ESCRIBE RANGO
A
Entero int 2 bytes - 32768 a 32767
Entero largo long int 4 bytes - 2147483648 a 2147483647
Decimal simple float 4 bytes - 3.4*1038 a 3.4*1038
Decimal doble double 8 bytes - 1.79*10308 a 1.79*10308
Decimal doble
long double 12 bytes 3.4E-4932 a 1.1E+4932
largo
Carácter char 1 bytes 0 a 255
cadena string Sin limite
booleano bool 1 byte True, false
3
Una constante de cadena es una secuencia de caracteres tales como letras, números y signos de puntuación encerradas entre comillas
dobles. Para utilizar el tipo string se debe incluir #include <string>.
f. Declaración de variables: En C++ toda variable debe estar declarada antes de ser utilizada en el programa.
Sintaxis:
TipoDeDato listaDeVariables; //toda instrucción debe estar terminada con “;”
Ejemplo:
int contador; // contador es una variable de tipo entero
contador=0; // inicialización
int suma, limite, valorInicial;
C++ permite que en la declaración se asocien o asignen valores iniciales a las variables.
int contador=0;
g. La declaración CONST: C++ permite darle nombre a una constante que a diferencia de las variables estas no pueden cambiar de valor en el
programa.
const tipoDeDato nombre = constante;
Ejemplo: const float e=2.71828;
4. ntrada/Salida
Todos los programas tienen una estructura general que es recibir una entrada realizar un proceso y dar una salida.
a. Entrada desde teclado: cin >>variable >>variable >> ...; leer a,b,c cin>>a>>b>>c;
b. Salida a Pantalla: cout <<expresion<<expresion<< ...; // expresión también puede ser una cadena
Ejemplos:
cout << ”El valor de i es” << i << “\n”; // endl o “\n” para cambio de renglón
cin >> c >> b >> a; // se asocian valores a las variables c, b y a desde el teclado
6. entencia de asignación: El operador ”=” permite asociar a una variable el resultado de una expresión, el valor de una variable o una
constante y tiene la sintaxis siguiente.
variable = expresión;
Ejemplo: x = a + 5*y +3; // evalúa el lado derecho del operador “=” y se lo asigna a x.
Otros operadores de asignación:
En C++, el operador incremento (++) y el operador decremento (--) actúan siempre sobre un solo operando, una variable. Por tanto, son operadores
unarios, y sirven para incrementar o decrementar en una unidad el valor de dicho operando.
3
Unos=unos +1; unos++;
operació equivalente también
n
suma++; suma=suma+1; suma+=1;
suma--; suma=suma-1; suma-=1;
7. entencia de decisión: La ejecución de las instrucciones en un programa se realiza en forma secuencial, es decir una después de la otra
hasta llegar al final. En la gran mayoría de los programas será necesario tomar decisiones sobre qué sentencias ejecutar, esto es permitir la
modificación de la secuencia de ejecución de las sentencias en el programa.
La sentencia de decisión o estructura condicional permite modificar el flujo del programa. Su sintaxis es:
if (condición) {
bloque de sentencias que se ejecutan si la condición es verdadera;
}
else {
bloque de sentencias que se ejecutan si la condición es falsa;
}
Si la condición es verdadera se ejecuta el primer bloque de sentencias y el segundo no, si es falsa se ejecuta el segundo bloque y el primero no.
El bloque del else es opcional. Si no se encuentra, sólo se realizará la acción correspondiente al primer bloque y tendrá la forma:
if (condición) {
bloque de sentencias que se ejecutan si la condición es verdadera;
}
Cuando un bloque de instrucciones sólo contiene una instrucción, las llaves { y } son opcionales. Un bloque es un conjunto de sentencias encerradas
entre llaves { y }.
La condición está formada por operando operadorRelacional operando. Los operadores relacionales nos permiten comparar expresiones de tipos
compatibles, devolviendo un resultado de tipo lógico esto es, el resultado de la comparación es VERDADERO O FALSO, o bien un SI o un NO.
a. Operadores relacionales (de relación o de comparación )
operador significado Operador significado
< Menor que >= Mayor o igual que
<= Menor o igual que == Igual que
> Mayor que != No igual o diferente que
Ejemplo:
if (b > a)
cout << “El mayor valor es b”<<endl; //endl = cambio de línea o de renglón
else
cout << “El menor valor es b”<<”\n”;
En C++ se toma como falso el valor 0, y como verdadero cualquier otro valor, una práctica común es expresar condiciones sin utilizar
ningún operador.
if (divisor) {
resultado = dividendo / divisor;
cout << resultado<<”\n”;
} else
cout << “No se puede dividir por cero”<<”\n”;
b. If corto.
variable = (condición) ? expresion1 : expresion2; // si condición es verdadera se asigna expresion1 si no expresión2
Que es equivalente a la siguiente expresión:
if (condicion) expresion1 else expresion2;
Por ejemplo, para asignar el máximo de a y b a la variable x, usando ?, tendríamos:
x = (a>b) ? a : b;
que es lo mismo que:
if (a > b) x = a; else x = b;
Otro ejemplo: Encontrar el menor de tres valores
a = (x<y) ? ((y<z) ? z : y) : ((x<z) ? z : x);//se puede anidar
c. Operadores lógicos: Los operadores lógicos permiten introducir nexos entre condiciones como “y se cumple también que” ó “o se
cumple que”. Su sintaxis es operando operadorLógico operando sus operandos son de tipo booleano y el resultado también es
booleano, esto es “VERDADERO” o “FALSO”.
3
|| O “or” Se cumple una u otra condición
Ejemplo: Si las variables a, b y c tienen los valores 5, 7 y 2 respectivamente se evalúan las siguientes expresiones
(a == 5) && (a < c) ¿Es a igual a 5 y a menor que c? 0 (falso) cout << “Pregunta (a== b) && (a < c) vale "<< (a == b) && (a < c);
(a == 5) || (a > 7) ¿Es a igual a 5 ó es a mayor que 7? 1 (verdadero) cout << "Pregunta (a == 5) || (a > 7) vale "<< (a == 5) || (a > 7));
8. entencia de selección
La instrucción switch (alternativa múltiple) permite seleccionar, por medio de una expresión, el siguiente bloque de instrucciones a ejecutar de
entre varios posibles. En lenguaje C++, para escribir una instrucción de alternativa múltiple (switch) se utiliza la sintaxis:
switch ( selector )
{
case etiqueta_1 : conjunto_de_instrucciones_1 break;
case etiqueta _2 : conjunto_de_instrucciones_2 break;
...
case etiqueta _n : conjunto_de_instrucciones_n break;
default : bloque_de_instrucciones_n+1
}
Selector: puede ser una variable o una expresión de tipo int o char.
Etiqueta_1, etiqueta_2….: Es del mismo tipo del selector y cada una debe ser única.
Dependiendo del valor obtenido al evaluar el selector se ejecutará uno y solo un conjunto de instrucciones que sea igual al valor de etiqueta_1 o
etiqueta_2….
Opcionalmente, se puede escribir un bloque_de_instrucciones_n+1 después de default: Este bloque de instrucciones se ejecutará en el caso de
que el valor obtenido al evaluar la expresión del selector, no se encuentre en ninguna de las etiquetas después de cada case.
Al final del conjunto de instrucciones que corresponda a cada etiqueta debe estar la palabra reservada break que de otra manera se ejecutarían en
secuencia.
En cualquier caso que se ejecute la instrucción 1, 2, 3, … , n o default : la ejecución continuará con la instrucción que se encuentre después de la
llave } que cierra toda la estructura del switch.
#include <iostream>
using namespace std;
/* Programa para calcular los dias del mes incluyendo los años bisiestos.
Elaborado por: Ing. Mario Rojas
Un año es bisiesto si es múltiplo de 4, pero no es múltiplo de 100, pero si lo es si es múltiplo de 400 */
int main(int argc, char** argv) {
int mes=0, anio=0;
cout<<"teclea el numero del mes " ; // entrada de datos
cin>>mes;
cout<<"Teclea el anio ";
cin>>anio;
switch(mes) {
case 10: case 3: case 5: case 7: case 8:
case 1:
case 12: cout<< "\n"<<"El mes "<<mes<<" del anio "<<anio<<" tiene 31 dias"<<endl; break;
case 4:
case 6:
case 9:
case 11: cout<<"\n"<<"El mes "<<mes<<" del anio "<<anio<<" tiene 30 dias"; break;
case 2: if(((anio%4==0)&&!(anio%100==0)) || (anio%400==0))
cout<< "\n"<<"El mes "<<mes<<" del anio "<<anio<<" tiene 29 dias";
else
cout<< "\n"<<"El mes "<<mes<<" del anio "<<anio<<" tiene 28 dias"; break;
default: cout<<"Ese mes no existe";
3
}// fin del switch
return 0;
}// fin del main
9. entencias de repetición
En la solución de muchos problemas es necesario ejecutar repetidas veces una instrucción o un conjunto de instrucciones, en algunos casos el
número de veces que se repiten dicha instrucciones se conoce con anterioridad, mientras que en otras ocasiones el número de repeticiones
depende del cálculo o estado de variables, que están dentro del problema.
Las instrucciones se repiten dependiendo del resultado de la validación de una condición.
a. Sentencia for
Cuando se desea ejecutar una sentencia simple o bloque, repetidamente un número de veces conocido, la construcción adecuada es la
sentencia for. La sintaxis es la siguiente:
Inicializador: representa la variable o las variables que serán inicializadas a un valor determinado.
Condición: es una expresión booleana (operandos unidos por operadores relacionales y/o lógicos). Si se omite, se supone siempre que es
verdadera.
Incremento: es una expresión cuyo valor evoluciona en el sentido de que se dé la condición para finalizar la ejecución de la sentencia for.
Sentencia: es una sentencia simple o compuesta. Una sentencias compuesta o bloque es un grupo de sentencias agrupadas entre llaves {y}.
Si es una sentencia simple las llaves son opcionales.
#include <iostream>
using namespace std;
/* Programa que solicita el ingreso de un número entero y muestra la tabla de multiplicar del mismo.
Programa elaborado por: Ing. Mario Rojas */
return 0;
}// fin del main
b. Sentencia while
Ejecuta una sentencia, simple o compuesta, cero o más veces, dependiendo del valor de una expresión.
while (expresión)
sentencia;
i) Se evalúa la expresión.
ii) Si el resultado de la expresión es cero (falso), la sentencia no se ejecuta y se pasa a ejecutar la siguiente sentencia en el programa.
iii) Si el resultado de la expresión es distinto de cero (verdadero), se ejecuta la sentencia y el proceso se repite comenzando en el
punto 1.
c. Sentencia do-while
3
Ejecuta una sentencia, simple o compuesta, una o más veces, dependiendo del valor de una expresión.
do {
sentencia;
}while (expresión);
int mes;
do{
cout<<"Teclea un numero de mes ";
cin>>mes;
} while (!(mes>=1&&mes<=12)); //uso de operadores relacionales y lógicos en la condición
cout<<endl<<" mes valido";
Ejemplo 1:
#include <iostream>
using namespace std;
/* Programa para ejemplificar el uso de los tres tipos de repeticiones que tiene el lenguaje.
Calculo del factorial de un numero.
Programa elaborado por: Ing. Mario Rojas*/
Ejemplo 2:
#include <iostream>
using namespace std;
int main(){
int selector1, selector2;
3
cout<<"ingrese un numero para convertirlo a letras "<<endl;
cin>>selector1;
//el primer switch evalua la variable del selector y la convierte a un numero
switch(selector1){
case 1: cout<<"UNO"; break;
case 2: cout<<"DOS"; break;
case 3: cout<<"TRES"; break;
case 4: cout<<"CUATRO"; break;
case 5: cout<<"CINCO"; break;
default: cout<<"fuera de rango numerico";//si selecciona numero distinto de 1 a 5
}//fin del switch
cout<<"ingrese el numero de posicion de una vocal "<<endl;
cin>>selector2;
//El switch 2 se usa para convertir el numero a su correspondiente vocal
switch(selector2){
case 1: cout<<" A"; break;
case 2: cout<<" E"; break;
case 3: cout<<" I"; break;
case 4: cout<<" O"; break;
case 5: cout<<" U"; break;
default: cout<<" No hay vocal";
}
system("pause");
}