Unidad 1 Iniciando Con C
Unidad 1 Iniciando Con C
Unidad 1 Iniciando Con C
duracionLlamada 2valorPromedio
salarioPorDepartamento tasa-de-interes
peso_especifico #_de_empleado
Correo_Electronico em@il_principal
telefonoCasa1 Direccion 1
_valorMaximo precioRD$
Literales
Un literal es data en sí misma, es lo que se asignaría a una
variable o lo que podría participar en una expresión
aritmética, lógica o de cadena como un valor fijo
Los literales pueden ser numéricos, caracter, lógicos, de
cadena y especiales
Literales
Tipo Ejemplo 1 Ejemplo 2
Los literales
pueden ser: Numérico entero 39 -11235813
Numérico de punto flotante 3.14159 -2.7218E15
Numéricos
Caracter Carácter ‘a’ ‘=’
De cadena
De cadena (string) “Hola Mundo!” “Su promedio es: “
Lógicos
Especiales Lógico (booleano) true false
Especiales null
Comentarios
Los comentarios ayudan a documentar nuestro programa, esto
es ignorado por el compilador y podemos agregar tantas
líneas de comentario sean necesarias
En C++ existen dos tipos de comentarios:
Comentario de una línea: //
Comentario de múltiples líneas: /* */
Comentarios
Ejemplo de comentario de una línea
// Declaracion de variables
{
sentencia1;
sentencia2;
sentencia3;
}
Contenido
tipo nombre;
Donde:
tipo es el tipo de dato elegido para la variable
nombre es el nombre elegido para la variable, debe cumplir con la regla
de los identificadores
tipo nombre(valor);
tipo nombre = valor;
Donde:
valor es el valor inicial asignado a la variable declarada, este valor puede ser un literal,
constante, variable o expresión que al ser evaluada retorne un valor del mismo tipo de la
variable o que dicho valor pueda ser convertido de forma implícita al tipo de dato
especificado en la sentencia
Nota: Las conversiones implícitas y explícitas de datos serán tratadas mas adelante, a
esto es lo que se conoce como Casting
Ejemplos (declaración e inicialización)
int contador;
int sumatoriaEdad = 0;
double precio(0.0);
bool encontrado = false;
char seguir;
short pesoInicial(1200);
char opcionPorDefecto = ‘N’;
float descuento = 0.0;
long factorial = 0;
unsigned int edad;
short bitRate = 320;
Tipo de dato char
En C++ el tipo de dato char, el cual es de 1 byte de capacidad, es
utilizado para almacenar valores tipo caracter, aunque en realidad
este tipo de dato es de tipo numérico (entero). Si prestamos
atención a la tabla de caracteres ASCII, podemos ver que cada
caracter tiene asociado un valor entero, y precisamente de 1 byte
(0 – 255), es por esto que el tipo de dato char puede manejar
tanto valores enteros como carácter
Alcance de las variables
Dentro de un programa C++, las variables pueden tener distintos
tipos de alcance. Para comprender mejor esto, veamos la estructura
general de un programa C++:
Forma general:
variable = expresión;
Ejemplos:
cs = a + 2;
intensidad = 5.6;
Operadores aritméticos
Operador Descripción Importante: Los operadores de incremento y
decremento aumentan o disminuyen en 1
+ Positivo unario respectivamente, ahora bien, existe una gran
diferencia según la forma en que se utilicen, ya
- Negativo unario sea si colocamos el operador delante de la
variable o después.
+ Suma
Post-incremento / Post-decremento, adiciona o
- Resta reduce en 1 la variable, esta acción tiene efecto
luego de finalizar la sentencia, mientras que el
* Multiplicación Pre-incremento / Pre-decremento tiene efecto en
la misma sentencia adicionando o reduciendo en
/ División 1 la variable.
% Residuo En C++ no existe un operador para la potencia,
sin embargo existe una función en la librería
++ Incremento (Post-Pre) <cmath> para esto: pow(base, exponente)
int d = 0;
int beta = --d; La variable beta es igual a -1 pues se realiza un pre-incremento
Ejemplos:
int acum = 0;
int indice = 0;
int valor = 23;
acum += indice++ - valor; // acum = acum + (indice++ - valor)
long factorial = 1;
int numero = 5;
factorial *= numero; // factorial = factorial * numero
double sumDesc = 0;
double factura = 23500;
double desc = 6;
sumDesc += factura * (desc/100); // sumDesc = sumDesc + (factura * desc / 100)
Operadores de relación
Operador Descripción Ejemplos:
> Mayor que bool resultado;
double sueldo = 35000;
< Menor que resultado = (sueldo > 34500); // true
bool seguir;
>= Mayor o igual que char opcion = ‘N’;
seguir = (opcion == ‘S’); // false
<= Menor o igual que bool continuar;
bool encontrado = false;
continuar = !encontrado; // true
== Igual que
bool intercambiar;
!= Distinto de int a = 4;
int b = 2;
intercambiar = ( (--a * ++b) <= 12 ); // true
bool esMayor;
int num1 = 57;
int num2 = 79;
esMayor = (num1 > num2); // false
bool esDistinto;
char letra1 = ‘Z’;
char let5ra2 = ‘X’;
esDistinto = (letra1 != letra2); // true
Operadores lógicos
Operador Descripción Concepto:
! Negación La conjunción (&&): solo retorna un valor de verdad
verdadero (true) si ambos operándoos o
&& Conjunción (y) condiciones que rodean el operador tienen como
valor de verdad verdadero (true).
|| Disyunción (o)
La disyunción (||): retorna un valor de verdad
verdadero (true) siempre que haya por lo menos un
operando o condición con valor de verdad
P Q P && Q (conjunción) verdadero (true), es decir, solamente es falsa
True True True cuando ambas condiciones lo son.
True False False
False True False
Ejemplos:
False False False
bool resultado;
resultado = true && false; // false
P Q P || Q (disyunción)
bool buscar = true;
True True True bool encontrado = false;
bool resultado = buscar || encontrado; // true
True False True
False True True bool terminar = false;
int capacidad = 34;
False False False terminar = !(capacidad < 100); // false
Operador ()
Los paréntesis nos permiten:
Agrupar expresiones
Aislar expresiones condicionales
Indicar llamadas a funciones y argumentos o parámetros de funciones
Dar prioridad en la ejecución o evaluación dentro de una expresión
Precedencia y asociatividad
Tabla de precedencia de operadores Concepto:
z = x / (y + 2)
x1 = -b + sqrt(pow(b, 2.0) – 4 * a * c) / (2 * a)
x1 = -b - sqrt(pow(b, 2.0) – 4 * a * c) / (2 * a)
float z;
long long long long long float double float x = 5.0;
int y = 5;
float float float float float float double z = x * y;
// y es promovido a
// float
double double double double double double double
long p = 54;
int s = 34;
double n;
n = p - s;
Concepto: // s es promovido
// automaticamente a
La tabla más arriba muestra la conversión automática que se lleva a cabo cuando en una // long antes de la
// resta y el
expresión se ven involucrados tipos de datos distintos. Al final de la evaluación el // resultado es a su
resultado será convertido al tipo de dato de la variable a la cual será asignada dicho // vez convertido a
valor. // double
Conversiones explícitas (type casting)
Podemos optar por realizar conversiones de datos de forma explícita
con el objetivo de modificar el tipo de dato ya sea para subir o bajar
su capacidad
Forma general:
static_cast<tipo>(valor);
Donde:
valor es una variable o literal
tipo es el tipo de datos al que deseamos convertir el valor
proporcionado
Conversiones explícitas (type casting)
Ejemplos:
Ejemplo 1:
Convertimos la variable num de
double a int, y luego se asigna el
valor a la variable resultado.
Almacenará 23
Ejemplo 2:
Convertimos la sumEdades de int
a double, esto es para que al
dividir sumEdades entre cantidad,
el resultado pueda ser un número
real, de lo contrario el resultado
seria truncado, en otras
palabras, sería un valor entero y
deseamos obtener un valor con
cifras decimales.
Almacenará 73.375
Conversiones explícitas (type casting)
C++ ofrece también otras formas para realizar las conversiones
explícitas
Forma general:
(tipo) expresión;
expresión (tipo);
Donde:
expresión es un conjunto de operadores y operándoos que al ser
evaluado retorna un valor; también puede ser una variable o literal
tipo es el tipo de datos al que deseamos convertir el valor resultante
de evaluar la expresión
Conversiones explícitas (type casting)
Ejemplos:
compilador
Importante:
Lo indicado anteriormente implica que ya se cumple con el pre-requisito de saber pasar del problema a
la escritura del algoritmo ya sea utilizando pseudocódigo o flujo gramas.
Cómo abordar un problema
La forma de abordar un problema para buscar su solución es muy
personal, no existe un libro o fórmula que nos indique como
plantear paso-a-paso un algoritmo que resuelva un problema; esto
se pudo experimentar en la asignatura anterior mediante la
confección de algoritmos con diagramas de flujo o pseudocódigos
Sin embargo, para diseñar un algoritmo es imprescidible conocer
primero como solucionar el problema de forma no automatizada, es
decir, sin la intervención de un programa. Es necesario comprender
con plena claridad lo que se busca o necesita lograr y como
hacerlo de forma manual; todo esto implica que debe realizar un
análisis que lo lleve a tener un dominio del problema
Enfoque
Se hace necesario que pueda plantear su diseño desde una
perspectiva de Entrada / Proceso / Salida
Este enfoque le permitirá identificar que necesita producir u obtener
(salida), que elementos necesita para producir dicho resultado
(entrada) y cómo debe hacerlo (proceso)
Esta línea despliega el mensaje “Hola Mundo!!” Piense en una función como una porción de
por pantalla, adicionalmente también despliega programa que puede ser ejecutada para realizar un
un carácter de nueva línea (endl), esto es, después proceso la cual puede o no retornar un valor, en
de mostrar los caracteres entre comillas dobles, nuestro ejemplo, la función main está definida de
agrega a esta acción de “mostrar” una nueva forma que retorna un valor tipo int. Además hay
línea. Para esto utilizamos el objeto cout otros elementos encerrados entre paréntesis, por el
separando cada elemento que deseamos enviar a momento no debemos preocuparnos por su
pantalla por el operador << y al final un punto y significado, más adelante entenderemos para que se
coma para indicar el final de la sentencia. utilizan.
Los caracteres encerrados entre comillas Otra forma de escribir la función main es obviando
comprenden un literal de cadena o literal string. el contenido entre paréntesis: int main()
Mi primer programa
Esta última línea indica el final de la función main.
Como habíamos expresado anteriormente, nuestra
función esta definida para retornar un valor tipo
entero, por esta razón utilizamos la sentencia return
que indique el final de nuestro código, especificando
adicionalmente un valor entero (cero en nuestro
ejemplo, usualmente este es el valor utilizado).
varLocal
** ERROR **
// Variable con alcance de funcion
// es visible dentro de la funcion completa
// y todos los bloques de codigo dentro de
Esta línea de código genera un error
// la funcion pueden accederla de compilación debido a la que la
variable varLocalA solo es accesible
dentro del bloque de código donde
// Variable con alcance de bloque
// solo es visible dentro de este bloque
la misma fue definida.
** OK **
// Variable con alcance de funcion
// es visible dentro de la funcion completa
// y todos los bloques de codigo dentro de La variable varGlobal es perfectamente
// la funcion pueden accederla
visible desde cualquier punto del archivo
fuente, por lo que puede ser referida en
// Variable con alcance de bloque cualquier línea del programa.
// solo es visible dentro de este bloque
** OK **
// Variable con alcance de bloque La variable varLocal puede ser accedida
// solo es visible dentro de este bloque
sin problemas desde cualquier punto de
la función main pues fue declarada
dentro de las llaves que encierran el
cuerpo de dicha función.
Alcance de las variables (ejemplo)
** ERROR **
// Variable con alcance global
// es visible dentro del archivo completo
// todas las funciones y bloques pueden
A pesar de que la referencia que se hace
// accederla la variable varLocal se encuentra dentro
de las llaves de la función main, este
referimiento se hace antes de que la
variable sea declarada, por lo que se
considera un error de ‘out of scope’ o que
// Variable con alcance de funcion la variable está fuera de alcance.
// es visible dentro de la funcion completa
// y todos los bloques de codigo dentro de
// la funcion pueden accederla
#0 stdin
Teclado 1011010 1011010
#1 stdout
Pantalla 1011010 1011010
Variables, literales,
expresión
Variables, literales,
expresión
cin.getline(chr, size);
Donde:
chr es una variable tipo arreglo de char
ejemplo: char nombre[15];
size es una variable o literal que especifica el tamano de chr; cin
leerá caracteres hasta la cantidad expresada en size
Uso de cin.getline
Veamos que pasa si utilizamos cin para leer una variable char que
incluya caracteres de espacio en blanco:
Y el programa continúa su
ejecución
Combinando cin >> y cin.getline / cin.get
Debemos tener cuidado al combinar cin >> con cin.getline o con
cin.get. Si utilizamos primero cin, cin.getline o cin.get no
leerá ningún valor, esto es por que cuando cin detiene la lectura por
que ya encontró el caracter de newline, este caracter permanece en el
buffer del teclado y le proporciona a cin.getline y a cin.get un valor
para procesar, en resumen, el programa no se dentendrá a esperar
que introduzcamos un valor, veamos un ejemplo para ilustrar mejor este
caso
Combinando cin >> y cin.getline / cin.get
Donde:
cin es el recurso para leer desde el flujo estándar de entrada (el
teclado)
str es una variable tipo string
delimitador es un caracter ASCII cualquiera usado para indicarle a
cin hasta donde debe leer el flujo de entrada estándar; si se omite el
delimitador por defecto es el caracter de nueva línea o newline (‘\n’); el
delimitador no es almacenado en la variable
Uso de getline
Las variables tipo string nos permiten manipular cadenas de
caracteres de una forma más cómoda además de proveer un
conjunto de recursos asociados a este tipo de datos que le dan una
gran versatilidad (más adelante veremos en detalle los strings)
Lo explicado con cin.ignore aplica también para getline en los strings
Ejemplo con getline
Resumen
En esta primera unidad hemos aprendido:
Los elementos básicos del lenguaje, como los literales, palabras reservadas,
comentarios, sentencias, bloques de código
Aprendimos sobre las variables y su alcance dentro de un programa, tipos
de datos y rango de valores, el tipo de dato char para manipular
caracteres
Los principales operadores, de asignación, aritméticos, de relación y lógicos
así como sobre la precedencia de operadores y su asociatividad en cuanto
a su evaluación, lo que sucede al operar tipos de datos distintos y
trabajamos con la conversión explícita de datos o type casting
Fue explicado el entorno de trabajo que utilizaremos en el curso y
aprendimos que existen otros compiladores y editores de C++, nos
familiarizamos con terminos como IDE y SDK. Vimos los pasos para la
compilación de un programa
Resumen
En esta primera unidad hemos aprendido:
No existe un libro o manual mágico para construir algoritmos pero sí es
necesario conocer como resolver el problema de forma no automatizada o
manual. La estrategia consiste en un enfoque de Entrada-Proceso-Salida
para entender mejor como debemos resolver o diseñar los algoritmos.
Vimos los pasos para construir una aplicación C++
Escribimos nuestro primer programa C++ y conocimos en mas detalle sobre
el alcance de las variables asi como tambien el concepto de nombre de
espacio
Finalmente vimos ampliamente las operaciones de entrada y salida (cin,
cout), ejemplos con programas, el uso de cin.getline, cin.get para variables
tipo char y getline para variables tipo string y que sucede al combinar cin
con getline o cin.getline
Bibliografía
Addison Wesley, Tony Gaddis. (2009). Starting Out with C++
Brief: From Control Structures through Objects. San Francisco,
California. 6th Edition.
Aprende a programar en C++. (2010). Página dedicada a la
enseñanza de C++ con libro de libre descarga, recuperado el
3 Junio 2013 de: http://c.conclase.net/curso/index.php
Página dedicada al lenguaje de programación C++ (2000 –
2014). Tutoriales y recursos de libre descarga, recuperado
Enero 2014 en: http://www.cplusplus.com All rights reserved -
v3.1
Paul Deitel, Harvey Deitel (2011). C++ How to Program, New
York, 8th Edition, Prentice Hall.
Unidad 1: Iniciando con C++
Por Félix Ferreiras y Zobiesky Ovalle