Fundamentos de la programación 
2 
Grado en Ingeniería Informática 
Grado en Ingeniería del Software 
Grado en Ingeniería ...
Luis Hernández Yáñez 
Un ejemplo de programación 3 
El primer programa en C++ 18 
Las líneas de código del programa 35 
Cá...
Luis Hernández Yáñez 
Programar 
Actividad de escribir y probar programas. 
Programa 
Código que indica a la computadora e...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 3
Luis Hernández Yáñez 
Una computadora de un coche 
Coche que acepta programas que le indiquen cómo llegar. 
Instrucciones ...
Luis Hernández Yáñez 
Sintaxis del lenguaje de programación 
instrucción 
Start 
Stop ; 
avanzar 
avanzar Go dirección num...
Luis Hernández Yáñez 
El problema a resolver 
Estando el coche en la posición A, 
conseguir llegar al Cine Tívoli (B). 
¿C...
Luis Hernández Yáñez 
El algoritmo 
Secuencia de pasos que hay que 
seguir para resolver el problema. 
1.- Arrancar 
Funda...
Luis Hernández Yáñez 
El programa 
Para cada paso, una instrucción. 
Escrita en el lenguaje 
de programación. 
Start; 
Go ...
Luis Hernández Yáñez 
El programa 
Escribimos el código del programa 
en un editor y lo guardamos 
en un documento program...
Luis Hernández Yáñez 
La compilación 
Introducimos la llave USB en el coche y pulsamos el botón 
de ejecutar el programa e...
Luis Hernández Yáñez 
Depuración 
Editamos el código para arreglar los errores de sintaxis. 
Stat; 
Go North 1 Blocks 
Go ...
Luis Hernández Yáñez 
La ejecución 
Se realiza lo que pide 
cada instrucción. 
B 
¡No se puede seguir 
ejecutando el progr...
Luis Hernández Yáñez 
Depuración 
Editamos el código para arreglar el error de ejecución. 
Start; 
Go North 1 Blocks; 
Go ...
Luis Hernández Yáñez 
La ejecución 
Se realiza lo que pide 
cada instrucción. 
B 
Go North 5 Blocks; 
Go West 2 Blocks; 
S...
Luis Hernández Yáñez 
Depuración 
Editamos el código para arreglar el error lógico. 
Start; 
Go North 1 Blocks; 
Go East 2...
Luis Hernández Yáñez 
La ejecución 
Se realiza lo que pide 
cada instrucción. 
Fundamentos de la programación: Primeros pa...
Luis Hernández Yáñez 
Muchas instrucciones 
Instrucciones para... 
 Mostrar textos en la pantalla 
 Leer datos del usuar...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 18
Luis Hernández Yáñez 
Hola Mundo! 
De vuelta en el programa que muestra un saludo en la pantalla: 
#include <iostream> 
us...
Luis Hernández Yáñez 
Hola Mundo! 
La única instrucción que produce algo tangible: 
#include <iostream> 
using namespace s...
Luis Hernández Yáñez 
cout 
Visualización en la pantalla: 
character output stream 
cout << "Hola Mundo!" << endl; 
cout 
...
Luis Hernández Yáñez 
Pantalla en modo texto 
En este primer curso, toda la salida se va a realizar en pantallas 
en modo ...
Luis Hernández Yáñez 
Ventanas de consola o terminal 
Sistema operativo: con interfaz gráfica de usuario (GUI). 
Las aplic...
Luis Hernández Yáñez 
El insertor << 
<< Envía info a un dispositivo de salida. 
cout << ...; 
Inserta textos en la pantal...
Luis Hernández Yáñez 
El insertor << 
¿Qué podemos mostrar? 
 Cadenas de caracteres literales. 
Textos encerrados entre c...
Luis Hernández Yáñez 
El programa principal 
La función main(): 
#include <iostream> 
using namespace std; 
int main() // ...
Luis Hernández Yáñez 
El programa principal 
La función main(): 
Tipo de la función (int = entero): Tipo de valor que devu...
Luis Hernández Yáñez 
Documentando el código 
Los comentarios (se ignoran durante la compilación): 
#include <iostream> 
u...
Luis Hernández Yáñez 
La infraestructura 
C++ nos proporciona mucho código para reutilizar: 
#include <iostream> 
using na...
Luis Hernández Yáñez 
Bibliotecas 
Se incluyen con la directiva #include: 
#include <biblioteca> 
#include <iostream> 
Bib...
Luis Hernández Yáñez 
Espacios de nombres 
Si hay espacios de nombres en la biblioteca hay que elegir uno: 
#include <iost...
Luis Hernández Yáñez 
Compilación y enlace 
Página 32 
hola.cpp 
(código fuente) 
Compilador hola.obj 
(código objeto) 
En...
Luis Hernández Yáñez 
Elementos del programa 
#include <iostream> 
using namespace std; 
int main() 
{ 
Cabecera de la fun...
Luis Hernández Yáñez 
Uso de espacio en blanco 
Los elementos del lenguaje se pueden separar por uno o más espacios en bla...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 35
Luis Hernández Yáñez 
Programa con E/S por consola 
Una plantilla para empezar: 
#include <iostream> 
using namespace std;...
Luis Hernández Yáñez 
... recitado en la consola 
Mostrar los textos con cout <<: 
#include <iostream> 
using namespace st...
Luis Hernández Yáñez 
Introducción del código del programa 
Terminamos cada línea de código con un salto de línea (↲): 
#i...
Luis Hernández Yáñez 
Introducción del código del programa 
No hay que partir una cadena literal entre dos líneas: 
cout <...
Luis Hernández Yáñez 
Notepad++ y G++ 
D:FPTema2quijote.cpp 
Fundamentos de la programación: Primeros pasos Página 40
Luis Hernández Yáñez 
Mantenimiento y reusabilidad 
El código debe ser lo más legible posible. 
 Usar espacio en blanco p...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 42
Luis Hernández Yáñez 
Operadores aritméticos 
En los programas podemos realizar operaciones aritméticas. 
Para cada operac...
Luis Hernández Yáñez 
Cómo escribir operandos numéricos 
Las cantidades pueden ser: 
Valores literales 
 Enteras: sin par...
Luis Hernández Yáñez 
Ejemplo 
#include <iostream> 
using namespace std; 
int main() 
{ 
calculos.cpp 
cout << "133 + 1234...
Luis Hernández Yáñez 
#include <iostream> 
using namespace std; 
int main() 
{ 
cout << "133 + 1234 = " << 133 + 1234 << e...
Luis Hernández Yáñez 
¿División entera o división real? 
El operador división (/) hace una división entera 
(despreciando ...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 48
Luis Hernández Yáñez 
Datos que se mantienen en memoria 
Una variable es un dato que se accede por medio de un nombre. 
Un...
Luis Hernández Yáñez 
Declaración 
Al declarar una variable establecemos el tipo de dato que puede 
contener y el nombre q...
Luis Hernández Yáñez 
Declaración 
#include <iostream> 
using namespace std; 
int main() 
{ 
int cantidad; 
double precio,...
Luis Hernández Yáñez 
Capacidad de las variables 
¿Qué valores podemos guardar en una variable int? 
Cualquier entero entr...
Luis Hernández Yáñez 
Asignación de valores a las variables (operador =) 
Instrucciones de asignación: 
variable = expresi...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 54
Luis Hernández Yáñez 
Expresiones 
Secuencias de operandos y operadores: 
operando operador operando operador operando ......
Luis Hernández Yáñez 
Precedencia de los operadores 
cantidad1 = 10; 
cantidad2 = 2; 
precio = 40.0; 
* y / tienen mayor p...
Luis Hernández Yáñez 
Ejemplo de uso de variables y expresiones 
#include <iostream> 
using namespace std; 
int main() 
{ ...
Luis Hernández Yáñez 
Ejemplo de uso de variables 
#include <iostream> 
using namespace std; 
int main() 
{ 
int cantidad;...
Luis Hernández Yáñez 
Ejemplo de uso de variables 
#include <iostream> 
using namespace std; 
int main() 
{ 
int cantidad;...
Luis Hernández Yáñez 
Ejemplo de uso de variables 
#include <iostream> 
using namespace std; 
int main() 
{ 
int cantidad;...
Luis Hernández Yáñez 
Ejemplo de uso de variables 
#include <iostream> 
using namespace std; 
int main() 
{ 
int cantidad;...
Luis Hernández Yáñez 
Ejemplo de uso de variables 
#include <iostream> 
using namespace std; 
int main() 
{ 
cantidad 12 
...
Luis Hernández Yáñez 
Ejemplo de uso de variables 
#include <iostream> 
using namespace std; 
int main() 
{ 
int cantidad;...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 64
Luis Hernández Yáñez 
cin 
Lectura de valores para las variables: 
character input stream 
cin >> cantidad; 
cin 
>> canti...
Luis Hernández Yáñez 
El extractor >> 
>> Lee datos de un dispositivo de entrada. 
cin >> var; 
Transforma los caracteres ...
Luis Hernández Yáñez 
El extractor >> 
¿Cómo se leen los distintos tipos de datos? 
 Valores enteros (int): 
Se leen dígi...
Luis Hernández Yáñez 
El extractor >> 
¿Cómo se leen los distintos tipos de datos? 
 Valores reales (double): 
Se leen dí...
Luis Hernández Yáñez 
El extractor >> 
¿Qué pasa si el usuario se equivoca? 
La lectura no será correcta... y eso puede ha...
Luis Hernández Yáñez 
El extractor >> 
¿Qué pasa si el usuario se equivoca? 
int cantidad; 
double precio, total; 
cout <<...
Luis Hernández Yáñez 
El extractor >> 
¿Qué pasa si el usuario se equivoca? 
int cantidad; 
double precio, total; 
cout <<...
Luis Hernández Yáñez 
El extractor >> 
¿Qué pasa si el usuario se equivoca? 
int cantidad; 
double precio, total; 
cout <<...
Luis Hernández Yáñez 
El extractor >> 
¿Qué pasa si el usuario se equivoca? 
int cantidad; 
double precio, total; 
cout <<...
Luis Hernández Yáñez 
División de dos números: 
Pedir al usuario dos números y mostrarle el resultado de dividir el primer...
Luis Hernández Yáñez 
Entrada-Proceso-Salida 
Muchos programas se ajustan a un sencillo esquema: 
Declaraciones Entrada Pr...
Luis Hernández Yáñez 
División de dos números 
Pedir al usuario dos números y mostrarle el resultado de dividir el primero...
Luis Hernández Yáñez 
division.cpp 
División de dos números 
Pedir al usuario dos números y mostrarle el resultado de divi...
Luis Hernández Yáñez 
División de dos números 
Pedir al usuario dos números y mostrarle el resultado de dividir el primero...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 79
Luis Hernández Yáñez 
Problema 
Dadas la base y la altura de un triángulo, calcular el área del triángulo. 
El comportamie...
Luis Hernández Yáñez 
Datos que maneja el programa 
Mostrar en la pantalla un texto que pida la base del triángulo. El usu...
Luis Hernández Yáñez 
Datos que maneja el programa: tipos 
Cada dato es de un determinado tipo, puede ser constante o vari...
Luis Hernández Yáñez 
Operaciones (acciones) 
Mostrar en la pantalla un texto que pida la base del triángulo. El usuario 
...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 84
Luis Hernández Yáñez 
Algoritmo 
Secuencia de acciones que ha de realizar el programa 
para conseguir resolver el problema...
Luis Hernández Yáñez 
El programa como transformador de entrada en salida 
Programa 
Datos 
de entrada 
Datos 
de salida 
...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 87
Luis Hernández Yáñez 
El programa 
... 
int main() 
{ 
Declaraciones 
Algoritmo 
traducido 
a código 
en C++ 
return 0; 
}...
Luis Hernández Yáñez 
El programa: implementación 
#include <iostream> 
using namespace std; 
int main() 
{ 
triangulo.cpp...
Luis Hernández Yáñez 
Ejecución 
#include <iostream> 
using namespace std; 
int main() 
{ 
¿¿¿triβngulo??? 
Problemas con ...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 91
Luis Hernández Yáñez 
Variabilidad de los datos 
Datos 
Constantes 
"Introduzca la base del triángulo: " 
3.141592653589 
...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 93
Luis Hernández Yáñez 
Identificadores Distintos de las palabras reservadas del lenguaje 
Las variables y las constantes co...
Luis Hernández Yáñez 
Palabras reservadas del lenguaje C++ 
asm auto bool break case catch char class const 
const_cast co...
Luis Hernández Yáñez 
¿Qué identificadores son válidos y cuáles no? 
 
balance interesAnual 
 
_base_imponible años 
 
...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 97
Luis Hernández Yáñez 
Tipos 
Cada dato del programa es de un tipo concreto. 
Cada tipo establece: 
— El conjunto (interval...
Luis Hernández Yáñez 
Tipos de datos básicos 
— int: para números enteros (sin parte decimal). 
1363, -12, 49 
 
— float:...
Luis Hernández Yáñez 
char Caracteres 
Intervalo de valores: Juego de caracteres (ASCII) 
Literales: 
'a', '%', 't' 
Const...
Luis Hernández Yáñez 
bool Valores lógicos 
Sólo dos valores posibles: 
— Verdadero (true) 
— Falso (false) 
Literales: 
t...
Luis Hernández Yáñez 
string Cadenas de caracteres 
"Hola", "Introduce el numerador: ", "X142FG5TX?%A" 
" char " 
Son secu...
Luis Hernández Yáñez 
Recuerda: C++ distingue entre mayúsculas y minúsculas 
int es la palabra reservada de C++ que permit...
Luis Hernández Yáñez 
Ejemplo de tipos de datos 
tipos.cpp 
#include <iostream> 
#include <string> 
using namespace std; /...
Luis Hernández Yáñez 
Modificadores de tipos 
Permiten modificar el significado de los tipos base. 
— signed / unsigned : ...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 106
Luis Hernández Yáñez 
Declaración de variables 
[modificadores] tipo lista_de_variables; 
[ … ] indica que eso es opcional...
Luis Hernández Yáñez 
Datos y memoria 
Cuando se declara una variable se le reserva suficiente memoria. 
int inicio; 
shor...
Luis Hernández Yáñez 
Inicialización de variables 
¡En C++ las variables no toman automáticamente un valor inicial! 
Al de...
Luis Hernández Yáñez 
Uso de las variables 
Obtención del valor de la variable: 
 Aparición del nombre de la variable en ...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 111
Luis Hernández Yáñez 
Declaración de constantes Modificador de acceso const 
Declaramos variables inicializadas a las que ...
Luis Hernández Yáñez 
¿Por qué utilizar constantes con nombre? 
 Aumentan la legibilidad del código: 
cambioPoblacion = (...
Luis Hernández Yáñez 
Ejemplo de uso de constantes 
constantes.cpp 
#include <iostream> 
using namespace std; 
int main() ...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 115
Luis Hernández Yáñez 
Operaciones sobre valores de los tipos 
Las operaciones que se pueden realizar sobre valores de 
un ...
Luis Hernández Yáñez 
Operadores para tipos de datos numéricos 
Operador Operandos Posición int float / double 
- 1 (monar...
Luis Hernández Yáñez 
Operadores monarios y operadores binarios 
Operadores monarios (o unarios) 
— El cambio de signo se ...
Luis Hernández Yáñez 
¿División entera o división real? 
Si ambos operandos son enteros, / hace un división entera: 
int i...
Luis Hernández Yáñez 
Módulo (resto de la división entera) 
Ambos operandos han de ser enteros: 
int i = 23, j = 2; 
cout ...
Luis Hernández Yáñez 
Operadores de incremento y decremento 
Se incrementa/decrementa el operando numérico en una unidad. ...
Luis Hernández Yáñez 
Ejemplo de uso de operadores 
operadores.cpp 
#include <iostream> 
using namespace std; 
int main() ...
Luis Hernández Yáñez 
Ejemplo de uso de operadores 
cout << "Num = " << real1 << endl; 
real1 = -real1; 
cout << "Cambia d...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 124
Luis Hernández Yáñez 
Evaluación de expresiones 
¿Cómo evaluamos una expresión como 3 + 5 * 2 / 2 – 1 ? 
¿En qué orden se ...
Luis Hernández Yáñez 
Precedencia y asociatividad de los operadores 
Precedencia Operadores Asociatividad 
Mayor prioridad...
Luis Hernández Yáñez 
Evaluación de expresiones 
Suponiendo que la variable entera a 
contiene en este momento el valor 3…...
Luis Hernández Yáñez 
Una fórmula 
#include <iostream> 
using namespace std; 
int main() 
{ 
double x, f; 
cout << "Introd...
Luis Hernández Yáñez 
Abreviaturas aritméticas 
Cuando una expresión tiene la forma: 
variable = variable operador op_dere...
Luis Hernández Yáñez 
Desbordamiento 
Si una expresión produce un valor mayor del máximo permitido por el 
tipo correspond...
Luis Hernández Yáñez 
Espaciado y paréntesis 
 Se deben usar espacios en el código para facilitar la legibilidad. 
f = 3*...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 132
Luis Hernández Yáñez 
El operador = 
Operador para asignaciones: 
Variable Expresión 
Operadores (prioridad) Asociatividad...
Luis Hernández Yáñez 
El operador = 
El operando izquierdo ha de ser siempre una variable. 
Posibles errores: 
int a, b, c...
Luis Hernández Yáñez 
Variables, asignación y memoria 
int i, j = 2; i = 23 + j * 5; 
Memoria 
01 
02 
03 
04 
05 
? 
j 06...
Luis Hernández Yáñez 
Ejemplo: Intercambio de valores 
Se necesita una variable auxiliar. 
double a = 3.45, b = 127.5, aux...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 137
Luis Hernández Yáñez 
Funciones matemáticas 
La biblioteca cmath contiene muchas funciones matemáticas 
que podemos utiliz...
Luis Hernández Yáñez 
Algunas funciones matemáticas de cmath 
abs(x) Valor absoluto de x 
pow(x, y) x elevado a y 
sqrt(x)...
Luis Hernández Yáñez 
Un ejemplo 
#include <iostream> 
using namespace std; 
#include <cmath> 
int main() 
{ 
3 
2 
x 
y 
...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 141
Luis Hernández Yáñez 
Operadores para caracteres 
Los únicos operadores definidos para el tipo char son 
la asignación, in...
Luis Hernández Yáñez 
Un ejemplo 
#include <iostream> 
using namespace std; 
int main() 
{ 
caracteres.cpp 
char caracter1...
Luis Hernández Yáñez 
Un ejemplo 
cout << "Caracter 2 (1).-" << endl; 
cout << "Alfabetico? " << isalpha(caracter2) << end...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 145
Luis Hernández Yáñez 
Operadores relacionales 
Permiten hacer comparaciones (condiciones): 
Condición ::= Expresión Operad...
Luis Hernández Yáñez 
Operadores relacionales 
bool resultado; 
int a = 2, b = 3, c = 4; 
resultado = a < 5; // 2 < 5  tr...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 148
Luis Hernández Yáñez 
Selección 
Si la condición es cierta, hacer esto... ; si no, hacer esto otro... 
Bifurcación condici...
Luis Hernández Yáñez 
Selección 
#include <iostream> 
using namespace std; 
int main() 
{ 
int op1 = 13, op2 = 4; 
int opc...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 151
Luis Hernández Yáñez 
¿Hay que hacer más de un cosa? 
Si en alguna de las dos ramas del if es necesario poner varias 
inst...
Luis Hernández Yáñez 
Posición de las llaves: cuestión de estilo 
if (num > 0) if (num > 0) { 
{ cout << "Positivo"; 
cout...
Luis Hernández Yáñez 
Ejemplo 
#include <iostream> 
using namespace std; 
int main() 
{ 
int op1 = 13, op2 = 4, resultado;...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 155
Luis Hernández Yáñez 
Iteración 
Mientras que la condición sea cierta, repetir esto... 
while ( condición ) cuerpo 
Repeti...
Luis Hernández Yáñez 
Iteración 
#include <iostream> 
using namespace std; 
int main() 
{ 
int i = 1, n = 0, suma = 0; 
wh...
Luis Hernández Yáñez 
false 
Iteración 
while (i <= n) { 
suma += i; 
i++; 
true 
5 
10 
Fundamentos de la programación: P...
Luis Hernández Yáñez 
Fundamentos de la programación: Primeros pasos Página 159
Luis Hernández Yáñez 
Flujos de texto 
C++ no tiene facilidades de E/S en el propio lenguaje. 
La E/S se realiza a través ...
Luis Hernández Yáñez 
Flujos 
cin y cout son objetos de datos definidos en la biblioteca iostream. 
La E/S se realiza por ...
Luis Hernández Yáñez 
Expresiones de entrada 
Variable 
cin >> 
— char: Se saltan los espacios en blanco* y se asigna el c...
Luis Hernández Yáñez 
Flujos de entrada 
int i; 
char c; 
double d; 
cin >> c >> d >> i; 
Programa z 1 2 3 . 4 5 6 5  
ci...
Luis Hernández Yáñez 
Facilitar la entrada 
Programas amigables con el usuario 
Indicar al usuario para cada dato qué se e...
Luis Hernández Yáñez 
Ejecución de funciones con el operador punto (.) 
Las variables de algunos tipos (como istream u ost...
Luis Hernández Yáñez 
Lectura de cadenas de caracteres (string) 
La lectura de cadenas de tipo string con cin >> termina 
...
Luis Hernández Yáñez 
Lectura de cadenas de caracteres (string) 
string.cpp 
Para leer incluyendo espacios en blanco se us...
Luis Hernández Yáñez 
Expresiones de salida 
Expresión 
cout << 
Se calcula el resultado de la expresión. Se convierte (si...
Luis Hernández Yáñez 
Flujos de salida 
T o t a l : 1 2 3 . 4 5  M e s e s : 7 Programa 
cout 
int meses = 7; 
cout << "T...
Luis Hernández Yáñez 
Datos y flujos de texto 
No es lo mismo el valor double 123.45 que su representación textual, 
que e...
Luis Hernández Yáñez 
Formato de la salida 
Las bibliotecas iostream e iomanip tienen definidas constantes 
que permiten, ...
Luis Hernández Yáñez 
Formato de la salida (ejemplo) 
bool fin = false; 
cout << fin << "->" << boolalpha << fin << endl; ...
Luis Hernández Yáñez 
 Programming. Principles and Practice Using C++ 
B. Stroustrup. Pearson Education, 2009 
 C++: An ...
Luis Hernández Yáñez 
Licencia CC (Creative Commons) 
Este tipo de licencias ofrecen algunos derechos a terceras personas ...
Próxima SlideShare
Cargando en…5
×

Lenguaje C

448 visualizaciones

Publicado el

Lenguaje C

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
448
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
9
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Lenguaje C

  1. 1. Fundamentos de la programación 2 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad Complutense
  2. 2. Luis Hernández Yáñez Un ejemplo de programación 3 El primer programa en C++ 18 Las líneas de código del programa 35 Cálculos en los programas 42 Variables 48 Expresiones 54 Lectura de datos desde el teclado 64 Resolución de problemas 79 Algoritmo 84 Programación 87 Los datos de los programas 91 Identificadores 93 Tipos de datos 97 Declaración de variables 106 Constantes 111 Operadores 115 Más sobre expresiones 124 Fundamentos de la programación: Primeros pasos Instrucciones de asignación 132 La biblioteca cmath 137 Operaciones con caracteres 141 Operadores relacionales 145 Toma de decisiones (if) 148 Bloques de código 151 Bucles (while) 155 Entrada/salida por consola 159
  3. 3. Luis Hernández Yáñez Programar Actividad de escribir y probar programas. Programa Código que indica a la computadora exactamente lo que tiene que hacer: secuencia de instrucciones. La computadora sólo entiende un conjunto de instrucciones. Lenguaje de programación Describe cómo es el conjunto de instrucciones que se pueden usar en los programas. Reglas sintácticas que el código debe respetar. Fundamentos de la programación: Primeros pasos Página 2
  4. 4. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 3
  5. 5. Luis Hernández Yáñez Una computadora de un coche Coche que acepta programas que le indiquen cómo llegar. Instrucciones que entiende: <instrucción> ::= <inst> ; <inst> ::= Start | Stop | <avanzar> <avanzar> ::= Go <dirección> <num> Blocks <dirección> ::= North | East | South | West <num> ::= 1 | 2 | 3 | 4 | 5 Ejemplos: Start; Go North 3 Blocks; Stop; Fundamentos de la programación: Primeros pasos Página 4
  6. 6. Luis Hernández Yáñez Sintaxis del lenguaje de programación instrucción Start Stop ; avanzar avanzar Go dirección num Blocks dirección North num = Literales East South West 1 2 3 4 5 Fundamentos de la programación: Primeros pasos Página 5
  7. 7. Luis Hernández Yáñez El problema a resolver Estando el coche en la posición A, conseguir llegar al Cine Tívoli (B). ¿Cuáles son los pasos que hay que seguir para llegar al destino? Arrancar Ir un bloque al Norte Ir dos bloques al Este Ir cinco bloques al Norte Ir dos bloques al Este Parar B A Fundamentos de la programación: Primeros pasos Página 6 N Bloque:
  8. 8. Luis Hernández Yáñez El algoritmo Secuencia de pasos que hay que seguir para resolver el problema. 1.- Arrancar Fundamentos de la programación: Primeros pasos Página 7 N 2.- Ir un bloque al Norte 3.- Ir dos bloques al Este 4.- Ir cinco bloques al Norte 5.- Ir dos bloques al Este 6.- Parar Esos pasos sirven tanto para una persona como para una computadora. 
  9. 9. Luis Hernández Yáñez El programa Para cada paso, una instrucción. Escrita en el lenguaje de programación. Start; Go North 1 Blocks; Go East 2 Blocks; Go North 5 Blocks; Go East 2 Blocks; Stop; B A Fundamentos de la programación: Primeros pasos Página 8 N
  10. 10. Luis Hernández Yáñez El programa Escribimos el código del programa en un editor y lo guardamos en un documento programa.prg. Stat; Go North 1 Blocks Go East Blocks; Go Noth 5 Blocks; Go West 2 Blocks; Stop; Copiamos el archivo en una llave USB y lo llevamos al coche. Fundamentos de la programación: Primeros pasos Página 9
  11. 11. Luis Hernández Yáñez La compilación Introducimos la llave USB en el coche y pulsamos el botón de ejecutar el programa en programa.prg. Se compila el programa (comprobación sintáctica): Stat; ----^ Unknown word. Go North 1 Blocks -----------------^ ; missing. Go East Blocks; --------^ Number missing. Go Noth 5 Blocks; -------^ Unknown word. Go West 2 Blocks; Stop; There are errors. Impossible to run the program. Errores de sintaxis Fundamentos de la programación: Primeros pasos Página 10
  12. 12. Luis Hernández Yáñez Depuración Editamos el código para arreglar los errores de sintaxis. Stat; Go North 1 Blocks Go East Blocks; Go Noth 5 Blocks; Go West 2 Blocks; Stop; Start; Go North 1 Blocks; Go East 3 Blocks; Go North 5 Blocks; Go West 2 Blocks; Stop; Fundamentos de la programación: Primeros pasos Página 11
  13. 13. Luis Hernández Yáñez La ejecución Se realiza lo que pide cada instrucción. B ¡No se puede seguir ejecutando el programa! Fundamentos de la programación: Primeros pasos Página 12 N Start; Go North 1 Blocks; Go East 3 Blocks; ! Error de ejecución: ¡Una instrucción no se puede ejecutar!
  14. 14. Luis Hernández Yáñez Depuración Editamos el código para arreglar el error de ejecución. Start; Go North 1 Blocks; Go East 3 Blocks; Go North 5 Blocks; Go West 2 Blocks; Stop; Start; Go North 1 Blocks; Go East 2 Blocks; Go North 5 Blocks; Go West 2 Blocks; Stop; Fundamentos de la programación: Primeros pasos Página 13
  15. 15. Luis Hernández Yáñez La ejecución Se realiza lo que pide cada instrucción. B Go North 5 Blocks; Go West 2 Blocks; Stop; ? Fundamentos de la programación: Primeros pasos Página 14 N Start; Go North 1 Blocks; Go East 2 Blocks; Errores lógicos: El programa se ejecuta, pero no obtiene el resultado deseado.
  16. 16. Luis Hernández Yáñez Depuración Editamos el código para arreglar el error lógico. Start; Go North 1 Blocks; Go East 2 Blocks; Go North 5 Blocks; Go West 2 Blocks; Stop; Start; Go North 1 Blocks; Go East 2 Blocks; Go North 5 Blocks; Go East 2 Blocks; Stop; Fundamentos de la programación: Primeros pasos Página 15
  17. 17. Luis Hernández Yáñez La ejecución Se realiza lo que pide cada instrucción. Fundamentos de la programación: Primeros pasos Página 16 N Start; Go North 1 Blocks; Go East 2 Blocks; Go North 5 Blocks; Go East 2 Blocks; Stop;  ¡Conseguido!
  18. 18. Luis Hernández Yáñez Muchas instrucciones Instrucciones para...  Mostrar textos en la pantalla  Leer datos del usuario  Realizar cálculos  Tomar decisiones  Repetir operaciones  Etcétera... Fundamentos de la programación: Primeros pasos Página 17
  19. 19. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 18
  20. 20. Luis Hernández Yáñez Hola Mundo! De vuelta en el programa que muestra un saludo en la pantalla: #include <iostream> using namespace std; int main() // main() es donde empieza la ejecución { cout << "Hola Mundo!" << endl; return 0; } Fundamentos de la programación: Primeros pasos Página 19
  21. 21. Luis Hernández Yáñez Hola Mundo! La única instrucción que produce algo tangible: #include <iostream> using namespace std; int main() // main() es donde empieza la ejecución { cout << "Hola Mundo!" << endl; return 0; } Fundamentos de la programación: Primeros pasos Página 20
  22. 22. Luis Hernández Yáñez cout Visualización en la pantalla: character output stream cout << "Hola Mundo!" << endl; cout << "Hola Mundo!" << endl; Hola Mundo! _ _ endl  end line Fundamentos de la programación: Primeros pasos Página 21
  23. 23. Luis Hernández Yáñez Pantalla en modo texto En este primer curso, toda la salida se va a realizar en pantallas en modo texto. Las interfaces gráficas se verán en 2º curso.  Líneas de 80 caracteres. Se pueden mostrar textos en ellas. Aplicación con interfaz gráfica Aplicación en modo texto 80 caracteres Fundamentos de la programación: Primeros pasos Página 22
  24. 24. Luis Hernández Yáñez Ventanas de consola o terminal Sistema operativo: con interfaz gráfica de usuario (GUI). Las aplicaciones en modo texto se ejecutan dentro de ventanas:  Windows: ventanas de consola (Símbolo del sistema).  Linux: ventanas de terminal. H o l a M u n d o ! ... Cursor parpadeante: Donde se colocará el siguiente carácter. ... Fundamentos de la programación: Primeros pasos Página 23
  25. 25. Luis Hernández Yáñez El insertor << << Envía info a un dispositivo de salida. cout << ...; Inserta textos en la pantalla de modo texto La representación textual de los datos enviados aparecerá en el dispositivo de salida, a partir de la posición del cursor. Si se llega al final de una línea se sigue al principio de la siguiente. cout representa la ventana de consola/terminal. Las operaciones de inserción se pueden encadenar: cout << ... << ... << ...; Se mostrarán todos los datos que haya a continuación de <<. Las instrucciones terminan en ;. Fundamentos de la programación: Primeros pasos Página 24
  26. 26. Luis Hernández Yáñez El insertor << ¿Qué podemos mostrar?  Cadenas de caracteres literales. Textos encerrados entre comillas dobles: "..." cout << "Hola Mundo!"; Se muestran los caracteres dentro de las comillas.  Números literales. Con o sin decimales, con signo o no: 123, -37, 3.1416, ... cout << "Pi = " << 3.1416; Se muestran los caracteres que representan el número.  endl El cursor pasa al principio de la siguiente línea. Fundamentos de la programación: Primeros pasos Página 25
  27. 27. Luis Hernández Yáñez El programa principal La función main(): #include <iostream> using namespace std; int main() // main() es donde empieza la ejecución { cout << "Hola Mundo!" << endl; return 0; } Las instrucciones están dentro de funciones. main() es donde comienza la ejecución. Fundamentos de la programación: Primeros pasos Página 26
  28. 28. Luis Hernández Yáñez El programa principal La función main(): Tipo de la función (int = entero): Tipo de valor que devuelve. int main() { Nombre de la función. return 0; } Cuerpo de la función (bloque de código). ¡Es una función! return 0; Devuelve el resultado (0) de la función. Fundamentos de la programación: Primeros pasos Página 27
  29. 29. Luis Hernández Yáñez Documentando el código Los comentarios (se ignoran durante la compilación): #include <iostream> using namespace std; int main() // main() es donde empieza la ejecución { cout << "Hola Mundo!" << endl; return 0; } Hasta el final de la línea: // ... De varias líneas: /* ... ... */ Fundamentos de la programación: Primeros pasos Página 28
  30. 30. Luis Hernández Yáñez La infraestructura C++ nos proporciona mucho código para reutilizar: #include <iostream> using namespace std; Es una directiva: empieza por # int main() // main() es donde empieza la ejecución { cout << "Hola Mundo!" << endl; return 0; } Bibliotecas de funciones a nuestra disposición. Al incluirlas podemos usar lo que contienen. Fundamentos de la programación: Primeros pasos Página 29
  31. 31. Luis Hernández Yáñez Bibliotecas Se incluyen con la directiva #include: #include <biblioteca> #include <iostream> Biblioteca iostream: utilidades de entrada/salida por consola. Donde, por ejemplo, está declarado cout o se encuentra el código del insertor. Cualquier programa que quiera mostrar en la pantalla (consola) o leer datos del usuario, debe incluir la biblioteca iostream. Fundamentos de la programación: Primeros pasos Página 30
  32. 32. Luis Hernández Yáñez Espacios de nombres Si hay espacios de nombres en la biblioteca hay que elegir uno: #include <iostream> using namespace std; Es una instrucción: termina en ; int main() // main() es donde empieza la ejecución { cout << "Hola Mundo!" << endl; return 0; } Siempre vamos a usar el espacio de nombres estándar (std). Muchas bibliotecas no crean espacios de nombres. Fundamentos de la programación: Primeros pasos Página 31
  33. 33. Luis Hernández Yáñez Compilación y enlace Página 32 hola.cpp (código fuente) Compilador hola.obj (código objeto) Enlazador hola.exe (ejecutable) Código objeto de la biblioteca iostream Hola Mundo! Cargador A menudo el compilador y el enlazador están integrados. Fundamentos de la programación: Primeros pasos
  34. 34. Luis Hernández Yáñez Elementos del programa #include <iostream> using namespace std; int main() { Cabecera de la función Variable cout << "Hola Mundo!" << endl; return 0; } Página 33 Las instrucciones terminan en ; Directiva Instrucción Declaración Instrucción Instrucción Fundamentos de la programación: Primeros pasos Biblioteca Espacio de nombres Tipo Palabras reservadas Datos literales Cuerpo de la función Bloque de código Cadena de caracteres Constante Operador Operador Número Coloreado sintáctico: Directivas Tipos Palabras reservadas generales Datos literales Comentarios
  35. 35. Luis Hernández Yáñez Uso de espacio en blanco Los elementos del lenguaje se pueden separar por uno o más espacios en blanco (espacios, tabuladores y saltos de línea). El compilador los ignora. Deben usarse para mejorar la legibilidad. También deben usarse comentarios para aclarar aspectos del código. Página 34 #include <iostream> using namespace std; int main() { cout << "Hola Mundo!" << endl; return 0; } #include <iostream> using namespace std; int main(){cout<<"Hola Mundo!"<<endl; return 0;} ¿Cuál se lee mejor? Fundamentos de la programación: Primeros pasos
  36. 36. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 35
  37. 37. Luis Hernández Yáñez Programa con E/S por consola Una plantilla para empezar: #include <iostream> using namespace std; int main() { return 0; } ¡Tu código aquí! Fundamentos de la programación: Primeros pasos Página 36
  38. 38. Luis Hernández Yáñez ... recitado en la consola Mostrar los textos con cout <<: #include <iostream> using namespace std; int main() { cout << "En un lugar de la Mancha," << endl; cout << "de cuyo nombre no quiero acordarme," << endl; cout << "no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, ..." << endl; return 0; } Fundamentos de la programación: Primeros pasos Página 37
  39. 39. Luis Hernández Yáñez Introducción del código del programa Terminamos cada línea de código con un salto de línea (↲): #include <iostream> ↲ using namespace std; ↲ ↲ int main() ↲ {↲ cout << "En un lugar de la Mancha," << endl; ↲ cout << "de cuyo nombre no quiero acordarme," << endl; ↲ cout << "no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, ..." << endl; ↲ return 0; ↲ } ↲ Fundamentos de la programación: Primeros pasos Página 38
  40. 40. Luis Hernández Yáñez Introducción del código del programa No hay que partir una cadena literal entre dos líneas: cout << "no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, ..." << endl; ↲ Si se llega al final de la línea en el editor, se deja que continúe en la siguiente. Sólo se pulsa Intro (↲) al terminar cada instrucción. cout << "no ha mucho tiempo que vivía un hidalgo de los ↲ de lanza en astillero, ..." << endl; ↲ Errores: La cadena no termina (1ª línea); no se entiende de (2ª línea). Fundamentos de la programación: Primeros pasos Página 39
  41. 41. Luis Hernández Yáñez Notepad++ y G++ D:FPTema2quijote.cpp Fundamentos de la programación: Primeros pasos Página 40
  42. 42. Luis Hernández Yáñez Mantenimiento y reusabilidad El código debe ser lo más legible posible.  Usar espacio en blanco para separar elementos del código: cout << "En un lugar de la Mancha," << endl; mejor que cout<<"En un lugar de la Mancha,"<<endl;  Usar sangría (indentación) para el código de un bloque: { cout << "En un lugar de la Mancha," << endl; ... return 0; } Tab / 2 ó 3 espacios Cuanto más legible, más fácil de mantener y reutilizar. ¡El estilo importa! Fundamentos de la programación: Primeros pasos Página 41
  43. 43. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 42
  44. 44. Luis Hernández Yáñez Operadores aritméticos En los programas podemos realizar operaciones aritméticas. Para cada operación utilizamos un símbolo concreto: + Suma - Resta * Multiplicación / División Los cuatro son operadores binarios: operando_izquierdo operador operando_derecho Por ejemplo: 3 + 4 Resultado: 7 2.56 – 3 Resultado: -0.44 143 * 2 Resultado: 286 45.45 / 3 Resultado: 15.15 Fundamentos de la programación: Primeros pasos Página 43
  45. 45. Luis Hernández Yáñez Cómo escribir operandos numéricos Las cantidades pueden ser: Valores literales  Enteras: sin parte decimal  Reales: con parte decimal Cantidades enteras (sin decimales): Signo negativo (opcional) seguido de una secuencia de dígitos. 3 143 -12 67321 -1234 No se usan puntos de millares Cantidades reales (con decimales): Signo negativo (opcional) seguido de una secuencia de dígitos, un punto decimal y otra secuencia de dígitos. 3.1416 357.5 -1.333 2345.6789 -404.1 Punto decimal (3.1415), NO coma decimal (3,1415) Fundamentos de la programación: Primeros pasos Página 44
  46. 46. Luis Hernández Yáñez Ejemplo #include <iostream> using namespace std; int main() { calculos.cpp cout << "133 + 1234 = " << 133 + 1234 << endl; cout << "1234 - 111.5 = " << 1234 - 111.5 << endl; cout << "34 * 59 = " << 34 * 59 << endl; cout << "3.4 * 5.93 = " << 3.4 * 5.93 << endl; cout << "500 / 3 = " << 500 / 3 << endl; // División entera cout << "500.0 / 3 = " << 500.0 / 3 << endl; // División real return 0; } Fundamentos de la programación: Primeros pasos Página 45
  47. 47. Luis Hernández Yáñez #include <iostream> using namespace std; int main() { cout << "133 + 1234 = " << 133 + 1234 << endl; cout << "1234 - 111.5 = " << 1234 - 111.5 << endl; cout << "34 * 59 = " << 34 * 59 << endl; cout << "3.4 * 5.93 = " << 3.4 * 5.93 << endl; cout << "500 / 3 = " << 500 / 3 << endl; // División entera cout << "500.0 / 3 = " << 500.0 / 3 << endl; // División real return 0; } División entera/real Fundamentos de la programación: Primeros pasos Página 46
  48. 48. Luis Hernández Yáñez ¿División entera o división real? El operador división (/) hace una división entera (despreciando los decimales) si ambos operandos son enteros y hace una división real (con decimales) si alguno es real. 500 / 3 Resultado: 166 500.0 / 3 Resultado: 166.667 500 / 3.0 Resultado: 166.667 500.0 / 3.0 Resultado: 166.667 Hay que usar algún operando real siempre que se quiera que la división sea una división real. Comprueba siempre si la división que se va a realizar es la que quieres. Fundamentos de la programación: Primeros pasos Página 47
  49. 49. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 48
  50. 50. Luis Hernández Yáñez Datos que se mantienen en memoria Una variable es un dato que se accede por medio de un nombre. Un valor literal es un valor concreto que se escribe tal cual. Una variable puede cambiar de valor siempre que se quiera. edad = 19; // edad es una variable y 19 es un literal Las variables deben ser declaradas antes de poder utilizarlas. Cuando se declaran se reserva espacio suficiente en memoria para el dato que se quiere almacenar. ¿Qué tipo de dato queremos mantener?  Un valor numérico sin decimales (entero): int  Un valor numérico con decimales (real): double Declaración: tipo nombre; Fundamentos de la programación: Primeros pasos Página 49
  51. 51. Luis Hernández Yáñez Declaración Al declarar una variable establecemos el tipo de dato que puede contener y el nombre que usaremos para acceder a ese dato. int cantidad; double precio; Para cada variable se reserva espacio suficiente en memoria para el tipo de valor. Unos tipos de datos requieren más bytes que otros. LAS VARIABLES NO SE INICIALIZAN No se deben usar hasta que se les haya dado algún valor. ¿Dónde colocamos las declaraciones? Siempre, antes del primer uso. Normalmente, al principio de la función. Memoria cantidad ? precio ? Fundamentos de la programación: Primeros pasos Página 50 ...
  52. 52. Luis Hernández Yáñez Declaración #include <iostream> using namespace std; int main() { int cantidad; double precio, total; return 0; } Memoria cantidad ? precio ? total ? Fundamentos de la programación: Primeros pasos Página 51 ... Podemos declarar varias del mismo tipo separando los nombres con comas.
  53. 53. Luis Hernández Yáñez Capacidad de las variables ¿Qué valores podemos guardar en una variable int? Cualquier entero entre -2.147.483.648 y 2.147.483.647. Intervalo de valores del tipo int: -2147483648 .. 2147483647 ¿Y en una variable double? Números reales entre 2,23 x 10-308 y 1,79 x 10+308 y sus negativos -2,23 x 10-308 y -1,79 x 10+308 Intervalo de valores del tipo double: +/- 2.23e-308 .. 1.79e+308 Con los números reales podemos experimentar problemas de precisión. Notación científica en C++ Fundamentos de la programación: Primeros pasos Página 52
  54. 54. Luis Hernández Yáñez Asignación de valores a las variables (operador =) Instrucciones de asignación: variable = expresión; Instrucción: termina en ; Se evalúa la expresión y se asigna el resultado a la variable: cantidad = 12; precio = 39.95; total = cantidad * precio; // Toma el valor 479.4 Piensa en el = como en : cantidad  12 La variable recibe el valor 12. Ese valor se guarda en la memoria de la variable. ¡¡¡A la izquierda del = debe ir siempre una variable!!! Fundamentos de la programación: Primeros pasos Página 53
  55. 55. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 54
  56. 56. Luis Hernández Yáñez Expresiones Secuencias de operandos y operadores: operando operador operando operador operando ... Las expresiones se evalúan de izquierda a derecha. Podemos usar paréntesis para forzar que se realicen unas operaciones antes que otras: total = cantidad * precio * 1.18; // +18% de IVA total = (cantidad1 + cantidad2) * precio; (Suponiendo que se han declarado las variables cantidad1 y cantidad2.) Con el nombre de una variable accedemos a su valor. Unos operadores se evalúan antes que otros. Fundamentos de la programación: Primeros pasos Página 55
  57. 57. Luis Hernández Yáñez Precedencia de los operadores cantidad1 = 10; cantidad2 = 2; precio = 40.0; * y / tienen mayor precedencia que + y - (se evalúan antes). total = cantidad1 + cantidad2 * precio; Se evalúa antes * que +  10 + 2 * 40,0  10 + 80,0  90,0 Los paréntesis fuerzan a que se evalúe su contenido primero: total = (cantidad1 + cantidad2) * precio; Se evalúa antes + que *  (10 + 2) * 40,0  12 * 40,0  480,0 Hay que tener cuidado al escribir las expresiones, de forma que el cálculo sea exactamente el que se requiere. Fundamentos de la programación: Primeros pasos Página 56
  58. 58. Luis Hernández Yáñez Ejemplo de uso de variables y expresiones #include <iostream> using namespace std; int main() { int cantidad; double precio, total; cantidad = 12; precio = 39.95; total = cantidad * precio; cout << cantidad << " x " << precio << " = " << total << endl; return 0; } variables.cpp Fundamentos de la programación: Primeros pasos Página 57
  59. 59. Luis Hernández Yáñez Ejemplo de uso de variables #include <iostream> using namespace std; int main() { int cantidad; double precio, total; Memoria cantidad ? precio ? total ? Fundamentos de la programación: Primeros pasos Página 58 ...
  60. 60. Luis Hernández Yáñez Ejemplo de uso de variables #include <iostream> using namespace std; int main() { int cantidad; double precio, total; cantidad = 12; Memoria cantidad 12 precio ? total ? Fundamentos de la programación: Primeros pasos Página 59 ...
  61. 61. Luis Hernández Yáñez Ejemplo de uso de variables #include <iostream> using namespace std; int main() { int cantidad; double precio, total; cantidad = 12; precio = 39.95; Memoria cantidad 12 precio 39.95 total ? Fundamentos de la programación: Primeros pasos Página 60 ...
  62. 62. Luis Hernández Yáñez Ejemplo de uso de variables #include <iostream> using namespace std; int main() { int cantidad; double precio, total; cantidad = 12; precio = 39.95; total = cantidad * precio; Memoria cantidad 12 precio 39.95 total 479.4 Fundamentos de la programación: Primeros pasos Página 61 ...
  63. 63. Luis Hernández Yáñez Ejemplo de uso de variables #include <iostream> using namespace std; int main() { cantidad 12 precio 39.95 total 479.4 int cantidad; double precio, total; cantidad = 12; precio = 39.95; total = cantidad * precio; cout << cantidad << " x " << precio << " = " << total << endl; Memoria Fundamentos de la programación: Primeros pasos Página 62 ...
  64. 64. Luis Hernández Yáñez Ejemplo de uso de variables #include <iostream> using namespace std; int main() { int cantidad; double precio, total; cantidad = 12; precio = 39.95; total = cantidad * precio; cout << cantidad << " x " << precio << " = " << total << endl; return 0; } Fundamentos de la programación: Primeros pasos Página 63
  65. 65. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 64
  66. 66. Luis Hernández Yáñez cin Lectura de valores para las variables: character input stream cin >> cantidad; cin >> cantidad; _ Memoria cantidad ? Fundamentos de la programación: Primeros pasos Página 65 ... _ 12 1 2 ↲ 1 2_ _
  67. 67. Luis Hernández Yáñez El extractor >> >> Lee datos de un dispositivo de entrada. cin >> var; Transforma los caracteres introducidos por el usuario en datos A medida que el usuario pulsa teclas, se muestra su carácter correspondiente en la pantalla, en la posición del cursor, avanzando éste a la siguiente posición. La entrada termina con la tecla Intro (el cursor para a la siguiente línea). El operando derecho del extractor debe ser SIEMPRE una variable. cin representa el teclado (declarada en la biblioteca iostream). Las operaciones de extracción se pueden encadenar: cin >> var1 >> var2 >> var3; Se leerán los datos de todas esas variables. Fundamentos de la programación: Primeros pasos Página 66
  68. 68. Luis Hernández Yáñez El extractor >> ¿Cómo se leen los distintos tipos de datos?  Valores enteros (int): Se leen dígitos hasta encontrar un carácter que no lo sea. cin >> cantidad; Si se teclean los siguientes caracteres: 12abc↲ Se leen sólo los dos primeros caracteres, asignando el valor 12 a la variable cantidad, y el resto de los caracteres quedan pendientes para la siguiente operación de extracción. Es recomendable leer cada dato en una línea: 12↲ La tecla Intro termina la entrada. Fundamentos de la programación: Primeros pasos Página 67
  69. 69. Luis Hernández Yáñez El extractor >> ¿Cómo se leen los distintos tipos de datos?  Valores reales (double): Se leen dígitos/punto hasta encontrar un carácter que no lo sea o no se pueda interpretar lo leído como un número real. cin >> precio; Si se teclean los siguientes caracteres: 39.95.5abc↲ Se leen sólo los cinco primeros caracteres, asignando el valor 39,95 a la variable precio, y el resto de los caracteres quedan pendientes para la siguiente operación de extracción. Es recomendable leer cada dato en una línea: 39.95↲ Fundamentos de la programación: Primeros pasos Página 68
  70. 70. Luis Hernández Yáñez El extractor >> ¿Qué pasa si el usuario se equivoca? La lectura no será correcta... y eso puede hacer que el programa no funcione como debe. Una aplicación profesional dispondría de código de comprobación de las entradas por teclado, ayudando al usuario a corregir sus errores de tecleo. En esta asignatura supondremos que los usuarios no se equivocan al teclear. En ocasiones añadiremos código de comprobación sencillo. Para evitar errores, lee cada dato en una instrucción aparte. Fundamentos de la programación: Primeros pasos Página 69
  71. 71. Luis Hernández Yáñez El extractor >> ¿Qué pasa si el usuario se equivoca? int cantidad; double precio, total; cout << "Introduce la cantidad: "; cin >> cantidad; cout << "Introduce el precio: "; cin >> precio; cout << "Cantidad: " << cantidad << endl; cout << "Precio: " << precio << endl; Indica al usuario qué es lo que se le pide que introduzca cada vez. No se puede leer un entero  0 para cantidad y Error La lectura del precio falla: precio no toma valor (basura) La ejecución del programa sigue de forma anómala. Fundamentos de la programación: Primeros pasos Página 70
  72. 72. Luis Hernández Yáñez El extractor >> ¿Qué pasa si el usuario se equivoca? int cantidad; double precio, total; cout << "Introduce la cantidad: "; cin >> cantidad; cout << "Introduce el precio: "; cin >> precio; cout << "Cantidad: " << cantidad << endl; cout << "Precio: " << precio << endl; Se leen dos dígitos  12 para cantidad No se puede leer un real  0 para precio y Error La ejecución del programa sigue de forma anómala. Fundamentos de la programación: Primeros pasos Página 71
  73. 73. Luis Hernández Yáñez El extractor >> ¿Qué pasa si el usuario se equivoca? int cantidad; double precio, total; cout << "Introduce la cantidad: "; cin >> cantidad; cout << "Introduce el precio: "; cin >> precio; cout << "Cantidad: " << cantidad << endl; cout << "Precio: " << precio << endl; Se leen dos dígitos  12 para cantidad Se lee .5  0,5 para precio y lo demás queda pendiente Fundamentos de la programación: Primeros pasos Página 72
  74. 74. Luis Hernández Yáñez El extractor >> ¿Qué pasa si el usuario se equivoca? int cantidad; double precio, total; cout << "Introduce la cantidad: "; cin >> cantidad; cout << "Introduce el precio: "; cin >> precio; cout << "Cantidad: " << cantidad << endl; cout << "Precio: " << precio << endl; ¡¡¡Lectura correcta!!! Fundamentos de la programación: Primeros pasos Página 73
  75. 75. Luis Hernández Yáñez División de dos números: Pedir al usuario dos números y mostrarle el resultado de dividir el primero entre el segundo. Análisis del problema y solución propuesta.- 1. Pedir el numerador 2. Pedir el denominador 3. Realizar la división, guardando el resultado 4. Mostrar el resultado Datos / cálculos Variable numerador (double) Variable denominador (double) Variable resultado (double) resultado = numerador / denominador Fundamentos de la programación: Primeros pasos Página 74
  76. 76. Luis Hernández Yáñez Entrada-Proceso-Salida Muchos programas se ajustan a un sencillo esquema: Declaraciones Entrada Procesamiento Salida 1. Leer numerador 2. Leer denominador 3. Calcular división en resultado 4. Mostrar resultado Fundamentos de la programación: Primeros pasos Página 75
  77. 77. Luis Hernández Yáñez División de dos números Pedir al usuario dos números y mostrarle el resultado de dividir el primero entre el segundo. 1. Leer numerador 2. Leer denominador cin >> numerador; cin >> denominador; 3. Calcular división en resultado 4. Mostrar resultado resultado = numerador / denominador; cout << resultado; Fundamentos de la programación: Primeros pasos Página 76
  78. 78. Luis Hernández Yáñez division.cpp División de dos números Pedir al usuario dos números y mostrarle el resultado de dividir el primero entre el segundo. Declaraciones Entrada Procesamiento Salida #include <iostream> using namespace std; int main() { double numerador, denominador, resultado; cout << "Numerador: "; cin >> numerador; cout << "Denominador: "; cin >> denominador; resultado = numerador / denominador; cout << "Resultado: " << resultado << endl; return 0; } Fundamentos de la programación: Primeros pasos Página 77 Se pueden declarar varias variables de un mismo tipo separándolas con comas.
  79. 79. Luis Hernández Yáñez División de dos números Pedir al usuario dos números y mostrarle el resultado de dividir el primero entre el segundo. #include <iostream> using namespace std; int main() { double numerador, denominador, resultado; cout << "Numerador: "; cin >> numerador; cout << "Denominador: "; cin >> denominador; resultado = numerador / denominador; cout << "Resultado: " << resultado << endl; return 0; } Numerador: _129 _ Denominador: 2 _Resultado: 64.5 _ Fundamentos de la programación: Primeros pasos Página 78
  80. 80. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 79
  81. 81. Luis Hernández Yáñez Problema Dadas la base y la altura de un triángulo, calcular el área del triángulo. El comportamiento deseado Explicación detallada de lo que queremos que haga el programa: Mostrar en la pantalla un texto que pida la base del triángulo. El usuario introducirá el valor con el teclado. Mostrar en la pantalla un texto que pida la altura del triángulo. El usuario introducirá el valor con el teclado. Se calculará el área del triángulo y se mostrará en la pantalla. Comenzaremos identificando los objetos que maneja el programa, fijándonos en los sustantivos; nos indicarán los datos a manejar. Luego nos fijaremos en las acciones (verbos); nos indicarán las operaciones a realizar. Fundamentos de la programación: Primeros pasos Página 80
  82. 82. Luis Hernández Yáñez Datos que maneja el programa Mostrar en la pantalla un texto que pida la base del triángulo. El usuario introducirá la base con el teclado. Mostrar en la pantalla un texto que pida la altura del triángulo. El usuario introducirá la altura con el teclado. Se calculará el área del triángulo y se mostrará en la pantalla. El usuario no es un dato que maneje el programa: es quien maneja el programa. Por eso no lo tenemos en cuenta. — pantalla: ya sabemos que se corresponde con cout. — texto que pida la base del triángulo: una cadena de caracteres literal como "Introduzca la base del triángulo: ". — base: un número variable que debe recoger el valor introducido por el usuario. Ha de indicarse cuál es su tipo: por ejemplo, double. — teclado: ya sabemos que se corresponde con cin. . . . — área del triángulo: otro número variable que debe recoger el resultado. Ha de indicarse cuál es su tipo: por ejemplo, double. Fundamentos de la programación: Primeros pasos Página 81
  83. 83. Luis Hernández Yáñez Datos que maneja el programa: tipos Cada dato es de un determinado tipo, puede ser constante o variar, y si varía ha de tener un nombre (estándar o elegido por nosotros): Objeto Tipo ¿Varía? Nombre Pantalla Variable cout "Introduzca la base del triángulo: " Constante ninguno Base del triángulo double Variable base Teclado Variable cin "Introduzca la altura del triángulo: " Constante ninguno Altura del triángulo double Variable altura Área del triángulo double Variable area Se han obviado los tipos de los objetos del sistema y los literales. Los valores literales son constantes, no se pueden cambiar. Para que un dato pueda variar se necesita una variable con nombre. Fundamentos de la programación: Primeros pasos Página 82
  84. 84. Luis Hernández Yáñez Operaciones (acciones) Mostrar en la pantalla un texto que pida la base del triángulo. El usuario introducirá la base con el teclado. Mostrar en la pantalla un texto que pida la altura del triángulo. El usuario introducirá la altura con el teclado. Se calculará el área del triángulo y se mostrará en la pantalla. Las operaciones se realizan por medio de operadores: — mostrar en la pantalla: se envía algo a la pantalla con el insertor <<. cout << … — introducir por el teclado: se lee algo del teclado con el extractor >>. cin >> … — calcular el área del triángulo: área = base por altura entre dos area = base * altura / 2 Fundamentos de la programación: Primeros pasos Página 83
  85. 85. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 84
  86. 86. Luis Hernández Yáñez Algoritmo Secuencia de acciones que ha de realizar el programa para conseguir resolver el problema: 1. Mostrar en la pantalla el texto que pida la base del triángulo. 2. Leer del teclado el valor para la base del triángulo. 3. Mostrar en la pantalla el texto que pida la altura del triángulo. 4. Leer del teclado el valor para la altura del triángulo. 5. Calcular el área del triángulo. 6. Mostrar el área del triángulo. Fundamentos de la programación: Primeros pasos Página 85
  87. 87. Luis Hernández Yáñez El programa como transformador de entrada en salida Programa Datos de entrada Datos de salida El estado inicial viene dado por los datos de entrada y el estado final por los datos de salida: Algoritmo Estado inicial Estado final Fundamentos de la programación: Primeros pasos Página 86
  88. 88. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 87
  89. 89. Luis Hernández Yáñez El programa ... int main() { Declaraciones Algoritmo traducido a código en C++ return 0; } 1. Mostrar en la pantalla el texto que pida la base del triángulo. 2. Leer del teclado el valor para la base del triángulo. 3. Mostrar en la pantalla el texto que pida la altura del triángulo. 4. Leer del teclado el valor para la altura del triángulo. 5. Calcular el área del triángulo. 6. Mostrar el área del triángulo. Fundamentos de la programación: Primeros pasos Página 88
  90. 90. Luis Hernández Yáñez El programa: implementación #include <iostream> using namespace std; int main() { triangulo.cpp Las instrucciones terminan en ; double base, altura, area; // 1. Declarar... cout << "Introduzca la base del triángulo: "; // 2. Mostrar ... cin >> base; // 3. Leer del... cout << "Introduzca la altura del triángulo: "; // 4. Mostrar ... cin >> altura; // 5. Leer del... area = base * altura / 2; // 6. Calcular... cout << "El área de un triángulo de base " << base << " y altura " << altura << " es: " << area << endl; // 7. Mostrar... return 0; } Fundamentos de la programación: Primeros pasos Página 89
  91. 91. Luis Hernández Yáñez Ejecución #include <iostream> using namespace std; int main() { ¿¿¿triβngulo??? Problemas con los juegos de double base, altura, area; cout << "Introduzca la base del triángulo: "; cin >> base; cout << "Introduzca la altura del triángulo: "; cin >> altura; area = base * altura / 2; cout << "El área de un triángulo de base " << base << " y altura " << altura << " es: " << area << endl; return 0; } caracteres Fundamentos de la programación: Primeros pasos Página 90
  92. 92. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 91
  93. 93. Luis Hernández Yáñez Variabilidad de los datos Datos Constantes "Introduzca la base del triángulo: " 3.141592653589 Literales Con nombre Variables base, altura, area Pi = 3.141592653589 Identificadores Fundamentos de la programación: Primeros pasos Página 92
  94. 94. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 93
  95. 95. Luis Hernández Yáñez Identificadores Distintos de las palabras reservadas del lenguaje Las variables y las constantes con nombre tienen un identificador asociado que se usa para obtener su valor (o para modificar su valor, en el caso de las variables). — Un identificador es el nombre de un dato concreto. — Se debe usar nombres descriptivos (autoexplicativos). Sintaxis de los identificadores: Al menos 32 caracteres significativos (longitud mínima para diferenciar dos nombres). 0..9, a..z, A..Z, _ a..z, A..Z, _ ¡No se admiten ni eñes ni vocales acentuadas! No pueden repetirse identificadores en un mismo ámbito (bloque). Fundamentos de la programación: Primeros pasos Página 94
  96. 96. Luis Hernández Yáñez Palabras reservadas del lenguaje C++ asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile while Fundamentos de la programación: Primeros pasos Página 95
  97. 97. Luis Hernández Yáñez ¿Qué identificadores son válidos y cuáles no?  balance interesAnual  _base_imponible años    EDAD12 salario_1_mes __edad cálculoNómina  valor%100 AlgunValor   100caracteres valor?   _12_meses ____valor     Fundamentos de la programación: Primeros pasos Página 96
  98. 98. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 97
  99. 99. Luis Hernández Yáñez Tipos Cada dato del programa es de un tipo concreto. Cada tipo establece: — El conjunto (intervalo) de valores válidos. true 3.14159 "Hola" Las variables del tipo tomarán uno de esos valores cada vez. 125 'a' — El conjunto de operaciones que se pueden realizar sobre los valores del tipo. Los operadores que se pueden aplicar en las expresiones. En las expresiones con datos de distintos tipos compatibles se llevan a cabo transformaciones automáticas de tipos (promoción de tipo). Para consultar los detalles técnicos de los tipos de datos, accede al Anexo de este Tema 2 que también se ha publicado. Fundamentos de la programación: Primeros pasos Página 98
  100. 100. Luis Hernández Yáñez Tipos de datos básicos — int: para números enteros (sin parte decimal). 1363, -12, 49  — float: para números reales (con parte –punto– decimal). 12.45, -3.1932, 1.16E+02 — double: para números reales; mayores intervalo y precisión. (Usaremos habitualmente el tipo double para los números reales.) — char: para caracteres. 'a' , '{', 't' — bool: para valores lógicos (verdadero/falso, sí/no). true, false — string: para cadenas de caracteres. "Hola Mundo!" (Requiere incluir la biblioteca string con espacio de nombres std.) — void: nada, ausencia de tipo, ausencia de dato (funciones).  Fundamentos de la programación: Primeros pasos Página 99
  101. 101. Luis Hernández Yáñez char Caracteres Intervalo de valores: Juego de caracteres (ASCII) Literales: 'a', '%', 't' Constantes de barra invertida (o secuencias de escape): Caracteres de control. 't' = tabulador, 'n' = salto de línea, … Juego de caracteres: ASCII (códigos 32..127) ISO-8859-1 1 byte (ASCII extendido: códigos 128..255) Fundamentos de la programación: Primeros pasos Página 100
  102. 102. Luis Hernández Yáñez bool Valores lógicos Sólo dos valores posibles: — Verdadero (true) — Falso (false) Literales: true, false En realidad, cualquier número distinto de 0 es equivalente a true y el número 0 es equivalente a false. Fundamentos de la programación: Primeros pasos Página 101
  103. 103. Luis Hernández Yáñez string Cadenas de caracteres "Hola", "Introduce el numerador: ", "X142FG5TX?%A" " char " Son secuencias de caracteres. Se asigna la memoria que se necesita para la secuencia concreta. Requieren incluir la biblioteca string con el espacio de nombres std: #include <string> using namespace std; ¡Ojo! Las comillas tipográficas (apertura/cierre) “…” te darán problemas al compilar. Asegúrate de utilizar comillas rectas: "…" Fundamentos de la programación: Primeros pasos Página 102
  104. 104. Luis Hernández Yáñez Recuerda: C++ distingue entre mayúsculas y minúsculas int es la palabra reservada de C++ que permite declarar datos enteros. Int, INT o inT no son palabras reservadas de C++. true es la palabra reservada de C++ que representa el valor lógico verdadero. True o TRUE no son palabras reservadas de C++. Fundamentos de la programación: Primeros pasos Página 103
  105. 105. Luis Hernández Yáñez Ejemplo de tipos de datos tipos.cpp #include <iostream> #include <string> using namespace std; // Un solo using... para las dos bibliotecas int main() { int entero = 3; // Podemos asignar (inicializar) al declarar double real = 2.153; char caracter = 'a'; bool cierto = true; string cadena = "Hola"; cout << "Entero: " << entero << endl; cout << "Real: " << real << endl; cout << "Caracter: " << caracter << endl; cout << "Booleano: " << cierto << endl; cout << "Cadena: " << cadena << endl; return 0; Fundamentos de la programación: Primeros pasos Página 104 } ¿Cuántos números hay en total en el programa? ¿Y caracteres? ¿Y cadenas? ¿Y booleanos?
  106. 106. Luis Hernández Yáñez Modificadores de tipos Permiten modificar el significado de los tipos base. — signed / unsigned : con signo (por defecto) / sin signo. — short / long : reduce/amplía el intervalo de valores posibles. Tipo Intervalo int -2147483648 .. 2147483647 unsigned int 0 .. 4294967295 short int -32768 .. 32768 unsigned short int 0 .. 65535 long int -2147483648 .. 2147483647 unsigned long int 0 .. 4294967295 double +/- 2.23e-308 .. 1.79e+308 long double +/- 3.37E-4932 .. 1.18E+4932 Fundamentos de la programación: Primeros pasos Página 105
  107. 107. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 106
  108. 108. Luis Hernández Yáñez Declaración de variables [modificadores] tipo lista_de_variables; [ … ] indica que eso es opcional. lista_de_variables Identificador int i, j, l; short int unidades; unsigned short int monedas; double balance, beneficio, perdida; Termina en ; , Programación con buen estilo: Utiliza identificadores descriptivos. Un espacio tras cada coma. Los nombres de las variables, en minúsculas. Si se compone de varias palabras, capitaliza cada inicial de las sucesivas palabras (balanceAnual, interesPorMes). Fundamentos de la programación: Primeros pasos Página 107
  109. 109. Luis Hernández Yáñez Datos y memoria Cuando se declara una variable se le reserva suficiente memoria. int inicio; short int unidades; double balance; Al explicar la ejecución de los programas no distinguiremos entre los tamaños de las distintas variables. Memoria 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 . . . inicio unidades balance Fundamentos de la programación: Primeros pasos Página 108
  110. 110. Luis Hernández Yáñez Inicialización de variables ¡En C++ las variables no toman automáticamente un valor inicial! Al declarar una variable, ésta toma un valor desconocido que no es válido y no debe ser utilizado. ¡Toda variable debe ser inicializada antes de ser accedida por primera vez! ¿Cómo se inicializa una variable? Error común de programación: Acceder a variables no inicializadas. — Al declararla — Al leer su valor (cin >>) — Al asignarle un valor (instrucción de asignación) Inicialización en la propia declaración, a continuación del identificador: El resultado de la expresión debe ser un valor compatible. … Identificador = Expresión En particular, una expresión puede ser un literal int i = 0, j, l = 26; short int unidades = 100; Fundamentos de la programación: Primeros pasos Página 109
  111. 111. Luis Hernández Yáñez Uso de las variables Obtención del valor de la variable:  Aparición del nombre de la variable en una expresión. cout << balance; cout << interesPorMes * meses / 100; Modificación del valor de la variable:  Aparición del nombre de la variable a la izquierda del operador de asignación (=). balance = 1214; porcentaje = valor / 30; Toda variable ha de haber sido previamente declarada en el ámbito del código (función) en el que se utiliza. Fundamentos de la programación: Primeros pasos Página 110
  112. 112. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 111
  113. 113. Luis Hernández Yáñez Declaración de constantes Modificador de acceso const Declaramos variables inicializadas a las que no dejamos variar: Declaración de variable con inicializador Un nombre de constante no puede aparecer a la izquierda del = en una asignación, más allá de en su declaración. const const short int Meses = 12; const double Pi = 3.141592, RATIO = 2.179 * Pi; Programación con buen estilo: Pon en mayúscula la primera letra de una constante o todo su nombre. Fundamentos de la programación: Primeros pasos Página 112
  114. 114. Luis Hernández Yáñez ¿Por qué utilizar constantes con nombre?  Aumentan la legibilidad del código: cambioPoblacion = (0.1758 - 0.1257) * poblacion; versus cambioPoblacion = (RatioNacimientos – RatioMuertes) * poblacion;  Facilitan la modificación del código: ... double compra1 = bruto1 * 16 / 100; double compra2 = bruto2 * 16 / 100; double total = compra1 + compra2; cout << total << " (IVA: " << 16 << "%)" << endl; 3 cambios ¿Cambio del IVA al 18%? ... const int IVA = 16; double compra1 = bruto1 * IVA / 100; double compra2 = bruto2 * IVA / 100; double total = compra1 + compra2; cout << total << " (IVA: " << IVA << "%)" << endl; 1 cambio Fundamentos de la programación: Primeros pasos Página 113
  115. 115. Luis Hernández Yáñez Ejemplo de uso de constantes constantes.cpp #include <iostream> using namespace std; int main() { const double Pi = 3.141592; double radio = 12.2, circunferencia; circunferencia = 2 * Pi * radio; cout << "Circunferencia de un circulo de radio " << radio << ": " << circunferencia << endl; const double Euler = 2.718281828459; // Número e cout << "Numero e al cuadrado: " << Euler * Euler << endl; const int IVA = 18; int cantidad = 12; double precio = 39.95, neto, porIVA, total; neto = cantidad * precio; porIVA = neto * IVA / 100; total = neto + porIVA; cout << "Total compra: " << total << endl; return 0; Fundamentos de la programación: Primeros pasos Página 114 }
  116. 116. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 115
  117. 117. Luis Hernández Yáñez Operaciones sobre valores de los tipos Las operaciones que se pueden realizar sobre valores de un determinado tipo vienen dadas por los operadores definidos para ese tipo de datos. Tipos de datos numéricos (int, float y double, con sus variantes): — Asignación — Operadores aritméticos — Operadores relacionales Tipo de datos bool: — Asignación — Operadores lógicos Tipo de datos char: — Asignación, ++/-- — Operadores relacionales Fundamentos de la programación: Primeros pasos Página 116
  118. 118. Luis Hernández Yáñez Operadores para tipos de datos numéricos Operador Operandos Posición int float / double - 1 (monario) Prefijo Cambio de signo + 2 (binario) Infijo Suma - 2 (binario) Infijo Resta * 2 (binario) Infijo Producto / 2 (binario) Infijo División entera División real % 2 (binario) Infijo Módulo No aplicable ++ 1 (monario) Prefijo / postfijo Incremento -- 1 (monario) Prefijo / postfijo Decremento Operadores binarios: Operando_izquierdo Operador Operando_derecho Operadores monarios: Prefijo: Operador Operando Postfijo: Operando Operador a + b -a --a ++a a-- a++ Fundamentos de la programación: Primeros pasos Página 117
  119. 119. Luis Hernández Yáñez Operadores monarios y operadores binarios Operadores monarios (o unarios) — El cambio de signo se puede aplicar a una variable, una constante o una expresión entre paréntesis (en seguida hablamos de expresiones): -saldo -RATIO -(3 * a – b) — Los operadores de incremento y decremento sólo se aplican a variables: ++interes --meses j++ Operadores binarios — Un operador binario se aplica entre un operando izquierdo y un operando derecho. Los operandos pueden ser literales, constantes, variables o expresiones: 2 + 3 a * RATIO -a + b 3 * a++ (a % b) * (c / d) Fundamentos de la programación: Primeros pasos Página 118
  120. 120. Luis Hernández Yáñez ¿División entera o división real? Si ambos operandos son enteros, / hace un división entera: int i = 23, j = 2; cout << i / j; // Muestra 11 Si alguno de los operandos es real, / hace una división real: int i = 23; double j = 2; cout << i / j; // Muestra 11.5 Fundamentos de la programación: Primeros pasos Página 119 /
  121. 121. Luis Hernández Yáñez Módulo (resto de la división entera) Ambos operandos han de ser enteros: int i = 23, j = 2; cout << i % j; // Muestra 1 División entera: No se obtienen decimales  Queda un resto Fundamentos de la programación: Primeros pasos Página 120 % 123 5 3 24 123 % 5
  122. 122. Luis Hernández Yáñez Operadores de incremento y decremento Se incrementa/decrementa el operando numérico en una unidad. Forma prefija: Se incrementa/decrementa antes de acceder. int i = 10, j; j = ++i; // Se incrementa antes de copiar el valor de i en j cout << i << " - " << j; // Muestra 11 - 11 Forma postfija: Se incrementa/decrementa después de acceder. int i = 10, j; j = i++; // Se incrementa después de copiar el valor de i en j cout << i << " - " << j; // Muestra 11 – 10 Sólo se pueden aplicar sobre variables (modifican el operando). Fundamentos de la programación: Primeros pasos Página 121 ++/-- i=i+1; j=i; j=i; i=i+1; Programación con buen estilo: Es preferible NO utilizar los operadores ++ y – en expresiones con otros operandos/operadores.
  123. 123. Luis Hernández Yáñez Ejemplo de uso de operadores operadores.cpp #include <iostream> using namespace std; int main() { int entero1 = 15, entero2 = 4; double real1 = 15.0, real2 = 4.0; cout << "Operaciones entre los numeros 15 y 4:" << endl; cout << "Division entera (/): " << entero1 / entero2 << endl; cout << "Resto de la division (%): " << entero1 % entero2 << endl; cout << "Division real (/): " << real1 / real2 << endl; (sigue) Fundamentos de la programación: Primeros pasos Página 122
  124. 124. Luis Hernández Yáñez Ejemplo de uso de operadores cout << "Num = " << real1 << endl; real1 = -real1; cout << "Cambia de signo (-): " << real1 << endl; real1 = -real1; cout << "Vuelve a cambiar (-): " << real1 << endl; cout << "Se incrementa antes (++ prefijo): " << ++real1 << endl; cout << "Se muestra antes de incrementar (posfijo ++): " << real1++ << endl; cout << "Ya incrementado: " << real1 << endl; return 0; Fundamentos de la programación: Primeros pasos Página 123 }
  125. 125. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 124
  126. 126. Luis Hernández Yáñez Evaluación de expresiones ¿Cómo evaluamos una expresión como 3 + 5 * 2 / 2 – 1 ? ¿En qué orden se aplican los distintos operadores? ¿De izquierda a derecha? ¿De derecha a izquierda? ¿Unos operadores antes que otros? Resolución de ambigüedades: — Precedencia de los operadores (prioridad): Unos operadores se han de evaluar antes que otros (mayor precedencia). — Asociatividad de los operadores (orden a igual prioridad): Los operadores de igual prioridad se evalúan de izquierda a derecha o de derecha a izquierda de acuerdo con su asociatividad. Paréntesis: rompen la precedencia y asociatividad Siempre se evalúan en primer lugar las subexpresiones parentizadas. Fundamentos de la programación: Primeros pasos Página 125
  127. 127. Luis Hernández Yáñez Precedencia y asociatividad de los operadores Precedencia Operadores Asociatividad Mayor prioridad ++ -- (postfijos) Izquierda a derecha ++ -- (prefijos) Derecha a izquierda - (cambio de signo) * / % Izquierda a derecha Menor prioridad + - Izquierda a derecha 3 + 5 * 2 / 2 – 1 Misma precedencia: Izquierda antes.  3 + 10 / 2 – 1  3 + 5 – 1  8 – 1  7 Misma precedencia: Izquierda antes. Mayor precedencia Fundamentos de la programación: Primeros pasos Página 126
  128. 128. Luis Hernández Yáñez Evaluación de expresiones Suponiendo que la variable entera a contiene en este momento el valor 3… (3 + 5) * a++ + 12 / a++ – (a * 2) Primero, los paréntesis... Ahora, los ++ (mayor prioridad) 8 * 3 + 12 / 3 – 6 a pasa a valer 5 Programación con buen estilo: Evita usar los operadores ++ y -- en expresiones compuestas. 8 * a++ + 12 / a++ – (3 * 2) 8 * a++ + 12 / a++ – 6 24 + 4 – 6 28 – 6 22 Fundamentos de la programación: Primeros pasos Página 127
  129. 129. Luis Hernández Yáñez Una fórmula #include <iostream> using namespace std; int main() { double x, f; cout << "Introduce el valor de X: "; cin >> x; f = 3 * x * x / 5 + 6 * x / 7 - 3; cout << "f(x) = " << f << endl; return 0; } x 6 x 3 Fundamentos de la programación: Primeros pasos Página 128 3 7 5 ( ) 2    f x formula.cpp
  130. 130. Luis Hernández Yáñez Abreviaturas aritméticas Cuando una expresión tiene la forma: variable = variable operador op_derecho; La misma Se puede abreviar como: variable operador= op_derecho; Ejemplos: a = a + 12; a += 12; a = a * 3; a *= 3; a = a - 5; a -= 5; a = a / 37; a /= 37; a = a % b; a %= b; Operadores (prioridad) Asociatividad ++ -- (postfijos) Izda. a dcha. Llamadas a funciones ++ -- (prefijos) Dcha. a izda. - (cambio de signo) * / % Izda. a dcha. + - Izda. a dcha. = += -= *= /= %= Dcha. a izda.  Igual precedencia que la asignación. Fundamentos de la programación: Primeros pasos Página 129
  131. 131. Luis Hernández Yáñez Desbordamiento Si una expresión produce un valor mayor del máximo permitido por el tipo correspondiente (o menor del mínimo), habrá desbordamiento. ¡El resultado no será válido! short int i = 32767; // Valor máximo para short int cout << ++i; // Muestra -32768 Los valores short int se codifican en memoria (2 bytes) en Complemento a 2 (FC); al incrementar se pasa al valor mínimo. Bit de signo 0 = positivo 1 = negativo 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32767 + 1 -32768 Debemos asegurarnos de utilizar tipos que contengan todo el conjunto de valores posibles para nuestros datos. Fundamentos de la programación: Primeros pasos Página 130
  132. 132. Luis Hernández Yáñez Espaciado y paréntesis  Se deben usar espacios en el código para facilitar la legibilidad. f = 3*x*x/5+6*x/7-3; f = 3 * x * x / 5 + 6 * x / 7 - 3; Un espacio antes y después de cada operador binario.  Se pueden usar paréntesis, aunque resulten redundantes, para dejar patentes las prioridades de las operaciones. f = (3 * x * x) / 5 + (6 * x) / 7 - 3; O si no se está seguro de la precedencia. Los paréntesis no afectan a la velocidad del programa. Fundamentos de la programación: Primeros pasos Página 131
  133. 133. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 132
  134. 134. Luis Hernández Yáñez El operador = Operador para asignaciones: Variable Expresión Operadores (prioridad) Asociatividad ++ -- (postfijos) Izda. a dcha. ++ -- (prefijos) Dcha. a izda. - (cambio de signo) * / % Izda. a dcha. + - Izda. a dcha. = Dcha. a izda. = ; El operando izquierdo debe ser siempre una variable, que recibe el valor resultante de evaluar la expresión. int i, j = 2; i = 23 + j * 5; // i toma el valor 33 Mínima precedencia Se evalúa de derecha a izquierda (asociatividad): int a, b, c; a = b = c = 5; // Las tres variables reciben el valor 5 Las instrucciones de asignación terminan en ; Fundamentos de la programación: Primeros pasos Página 133
  135. 135. Luis Hernández Yáñez El operador = El operando izquierdo ha de ser siempre una variable. Posibles errores: int a, b, c; const int cte = 1; 5 = a; // ERROR: un literal no puede recibir un valor cte = 5; // ERROR: una constante no puede cambiar de valor a + 23 = 5; // ERROR: no puede haber una expresión a la izda. b = "abc"; // ERROR: un entero no puede guardar una cadena c = 23 5; // ERROR: expresión no válida (falta operador) Fundamentos de la programación: Primeros pasos Página 134
  136. 136. Luis Hernández Yáñez Variables, asignación y memoria int i, j = 2; i = 23 + j * 5; Memoria 01 02 03 04 05 ? j 06 2 07 08 09 10 . . . i Memoria 01 02 23 + 2 * 5 33 03 04 05 j 06 2 07 08 09 10 . . . i Fundamentos de la programación: Primeros pasos Página 135
  137. 137. Luis Hernández Yáñez Ejemplo: Intercambio de valores Se necesita una variable auxiliar. double a = 3.45, b = 127.5, aux; a 3.45 b 127.5 aux ? a 3.45 b 127.5 aux 3.45 a 127.5 b 127.5 aux 3.45 a 127.5 b 3.45 aux 3.45 aux = a; a = b; b = aux; Fundamentos de la programación: Primeros pasos Página 136
  138. 138. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 137
  139. 139. Luis Hernández Yáñez Funciones matemáticas La biblioteca cmath contiene muchas funciones matemáticas que podemos utilizar en nuestras expresiones. Para poder utilizarlas hay que incluir la biblioteca: #include <cmath> Una llamada (erróneamente llamada a menudo invocación) de una función tiene esta forma: nombre(argumentos) Los argumentos irán separados por comas. Por ejemplo, abs(a)  Valor absoluto de a. Una llamada a función de biblioteca será un término más de una expresión. f = 3 * pow(x, 2) / 5 + 2 * sqrt(x); Fundamentos de la programación: Primeros pasos Página 138
  140. 140. Luis Hernández Yáñez Algunas funciones matemáticas de cmath abs(x) Valor absoluto de x pow(x, y) x elevado a y sqrt(x) Raíz cuadrada de x ceil(x) Menor entero que es mayor o igual que x floor(x) Mayor entero que es menor o igual que x exp(x) ex log(x) Ln x (logaritmo natural de x) log10(x) Logaritmo en base 10 de x sin(x) Seno de x cos(x) Coseno de x tan(x) Tangente de x round(x) Redondeo al entero más próximo trunc(x) Pérdida de la parte decimal (entero) Las llamadas a funciones tienen la mayor prioridad. Fundamentos de la programación: Primeros pasos Página 139
  141. 141. Luis Hernández Yáñez Un ejemplo #include <iostream> using namespace std; #include <cmath> int main() { 3 2 x y 5 y f x y x  ( , ) 2 cos( ) x  y   funciones.cpp double x, y, f; cout << "Introduzca el valor de X: "; cin >> x; cout << "Introduzca el valor de Y: "; cin >> y; f = 2 * pow(x, 5) + sqrt(pow(x, 3) / pow(y, 2)) / abs(x * y) – cos(y); cout << "f(x, y) = " << f << endl; return 0; } Programación con buen estilo: Pon un espacio detrás de cada coma en las listas de argumentos. Fundamentos de la programación: Primeros pasos Página 140
  142. 142. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 141
  143. 143. Luis Hernández Yáñez Operadores para caracteres Los únicos operadores definidos para el tipo char son la asignación, incremento/decremento (código siguiente/anterior) y los operadores relacionales (). Funciones para caracteres (biblioteca cctype) — isalnum(c) true si c es una letra o un dígito; si no, false. — isalpha(c) true si c es una letra; si no, false. — isdigit(c) true si c es un dígito; si no, false. — islower(c) true si c es una letra minúscula; si no, false. — isupper(c) true si c es una letra mayúscula; si no, false. — toupper(c) devuelve la mayúscula de c. — tolower(c) devuelve la minúscula de c. … Fundamentos de la programación: Primeros pasos Página 142
  144. 144. Luis Hernández Yáñez Un ejemplo #include <iostream> using namespace std; int main() { caracteres.cpp char caracter1 = 'A', caracter2 = '1', caracter3 = '&'; cout << "Caracter 1 (A).-" << endl; cout << "Alfanumerico? " << isalnum(caracter1) << endl; cout << "Alfabetico? " << isalpha(caracter1) << endl; cout << "Digito? " << isdigit(caracter1) << endl; cout << "Mayuscula? " << isupper(caracter1) << endl; caracter1 = tolower(caracter1); cout << "En minuscula: " << caracter1 << endl; 1  true / 0  false (sigue) Fundamentos de la programación: Primeros pasos Página 143
  145. 145. Luis Hernández Yáñez Un ejemplo cout << "Caracter 2 (1).-" << endl; cout << "Alfabetico? " << isalpha(caracter2) << endl; cout << "Digito? " << isdigit(caracter2) << endl; cout << "Caracter 3 (&).-" << endl; cout << "Alfanumerico? " << isalnum(caracter3) << endl; cout << "Alfabetico? " << isalpha(caracter3) << endl; cout << "Digito? " << isdigit(caracter3) << endl; return 0; } 1  true / 0  false Fundamentos de la programación: Primeros pasos Página 144
  146. 146. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 145
  147. 147. Luis Hernández Yáñez Operadores relacionales Permiten hacer comparaciones (condiciones): Condición ::= Expresión Operador_relacional Expresión Las expresiones deben arrojar resultados del mismo tipo (comparables). El resultado es de tipo bool (true o false). < menor que <= menor o igual que > mayor que >= mayor o igual que == igual que != distinto de Operadores (prioridad) Asociatividad ++ -- (postfijos) Izda. a dcha. Llamadas a funciones ++ -- (prefijos) Dcha. a izda. - (cambio de signo) * / % Izda. a dcha. + - Izda. a dcha. < <= > >= Izda. a dcha. == != Izda. a dcha. = += -= *= /= %= Dcha. a izda. Fundamentos de la programación: Primeros pasos Página 146
  148. 148. Luis Hernández Yáñez Operadores relacionales bool resultado; int a = 2, b = 3, c = 4; resultado = a < 5; // 2 < 5  true resultado = a * b + c >= 12; // 10 >= 12  false resultado = a * (b + c) >= 12; // 14 >= 12  true resultado = a != b; // 2 != 3  true resultado = a * b > c + 5; // 6 > 9  false resultado = a + b == c + 1; // 5 == 5  true Los operadores aditivos y multiplicativos tienen mayor prioridad. Error común de programación: Confundir el operador de igualdad (==) con el operador de asignación (=). Fundamentos de la programación: Primeros pasos Página 147
  149. 149. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 148
  150. 150. Luis Hernández Yáñez Selección Si la condición es cierta, hacer esto... ; si no, hacer esto otro... Bifurcación condicional: true InstrucciónT false InstrucciónF if (condición) instrucciónT else instrucciónF Condición Fundamentos de la programación: Primeros pasos Página 149
  151. 151. Luis Hernández Yáñez Selección #include <iostream> using namespace std; int main() { int op1 = 13, op2 = 4; int opcion; cout << "1 - Sumar" << endl; cout << "2 - Restar" << endl; cout << "Opcion: "; cin >> opcion; if (opcion == 1) cout << op1 + op2 << endl; else cout << op1 - op2 << endl; return 0; Fundamentos de la programación: Primeros pasos Página 150 } seleccion.cpp
  152. 152. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 151
  153. 153. Luis Hernández Yáñez ¿Hay que hacer más de un cosa? Si en alguna de las dos ramas del if es necesario poner varias instrucciones, se necesita crear un bloque de código: { intrucción1 intrucción2 ... intrucciónN } Por ejemplo: Fundamentos de la programación: Primeros pasos Página 152 Tab o 2 ó 3 esp. { instrucción } Cada instrucción simple irá terminada en ; int num, total = 0; cin >> num; if (num > 0) { cout << "Positivo"; total += num; } cout << endl; Cada bloque crea un nuevo ámbito en el que las declaraciones son locales.
  154. 154. Luis Hernández Yáñez Posición de las llaves: cuestión de estilo if (num > 0) if (num > 0) { { cout << "Positivo"; cout << "Positivo"; total += num; total += num; } } cout << endl; cout << endl; No te dejes engañar if (num > 0) if (num > 0)  cout << "Positivo"; cout << "Positivo"; total += num; total += num; Aunque la sangría pueda dar a entender, a simple vista, que las dos instrucciones se ejecutan como destino del if, la segunda instrucción se ejecuta sea num mayor que cero o no: ¡en cualquier caso! Fundamentos de la programación: Primeros pasos Página 153
  155. 155. Luis Hernández Yáñez Ejemplo #include <iostream> using namespace std; int main() { int op1 = 13, op2 = 4, resultado; int opcion; char operador; cout << "1 - Sumar" << endl; cout << "2 - Restar" << endl; cout << "Opcion: "; cin >> opcion; if (opcion == 1) { operador = '+'; resultado = op1 + op2; } else { operador = '-'; resultado = op1 - op2; } cout << op1 << operador << op2 << " = " << resultado << endl; return 0; Fundamentos de la programación: Primeros pasos Página 154 } bloques.cpp
  156. 156. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 155
  157. 157. Luis Hernández Yáñez Iteración Mientras que la condición sea cierta, repetir esto... while ( condición ) cuerpo Repetición condicional: while (condición) cuerpo true false Condición Cuerpo Mientras la condición sea true se ejecuta el cuerpo. Si la condición es false al empezar, no se ejecuta el cuerpo ninguna vez. El cuerpo del bucle es una instrucción (simple o compuesta –bloque –). Fundamentos de la programación: Primeros pasos Página 156
  158. 158. Luis Hernández Yáñez Iteración #include <iostream> using namespace std; int main() { int i = 1, n = 0, suma = 0; while (n <= 0) { // Sólo n positivo cout << "Cuantos numeros quieres sumar? "; cin >> n; } while (i <= n) { suma += i; i++; n } cout << "Sumatorio de i (1 a " << n << ") = " << suma << endl; return 0; Fundamentos de la programación: Primeros pasos Página 157 } serie.cpp  i  i 1
  159. 159. Luis Hernández Yáñez false Iteración while (i <= n) { suma += i; i++; true 5 10 Fundamentos de la programación: Primeros pasos Página 158 } serie.cpp n  i  i 1 n 5 i 1 suma 0 suma += i; i++; 4 2 6 3 1 6 3 i <= n 15
  160. 160. Luis Hernández Yáñez Fundamentos de la programación: Primeros pasos Página 159
  161. 161. Luis Hernández Yáñez Flujos de texto C++ no tiene facilidades de E/S en el propio lenguaje. La E/S se realiza a través de flujos (streams). Los flujos conectan la ejecución del programa con los dispositivos de entrada/salida. Los flujos de texto son secuencias de caracteres. Entrada por teclado: Se colocan los caracteres en el flujo de entrada cin (de tipo istream). Salida por pantalla: Se colocan los caracteres en el flujo de salida cout (de tipo ostream). cin cout Programa 7 3 5 . 3 5 1 1 6 = l a t o T Fundamentos de la programación: Primeros pasos Página 160
  162. 162. Luis Hernández Yáñez Flujos cin y cout son objetos de datos definidos en la biblioteca iostream. La E/S se realiza por medio de sus operadores. Operadores de entrada/salida: >> Extractor: Operador binario para expresiones de entrada de datos. El operando izquierdo es un flujo de entrada (cin) y el operando derecho una variable. El resultado de la operación es el propio flujo de entrada. Flujo de entrada Variable >> << Insertor: Operador binario para expresiones de salida de datos. El operando izquierdo es un flujo de salida (cout) y el operando derecho una expresión. El resultado de la operación es el propio flujo de salida. Flujo de salida << Expresión La asociatividad de ambos operadores es de izquierda a derecha. Fundamentos de la programación: Primeros pasos Página 161
  163. 163. Luis Hernández Yáñez Expresiones de entrada Variable cin >> — char: Se saltan los espacios en blanco* y se asigna el carácter a la variable. — int: Se saltan los espacios en blanco* que haya. Se leen los dígitos seguidos que haya y se transforma la secuencia de dígitos en un valor que se asigna. — float/double: Se saltan los espacios en blanco* que haya. Se leen los dígitos seguidos que haya; si hay un punto se leen los dígitos que le sigan; se transforma la secuencia en un valor que se asigna. — bool: Si lo leído es 1, la variable toma el valor true; con cualquier otra entrada toma el valor false. No se suelen leer este tipo de variables. int i; char c; double d; cin >> c >> d >> i; cout << c << "|" << d << "|" << i; * Espacios en blanco: espacios, tabuladores o saltos de línea. Fundamentos de la programación: Primeros pasos Página 162
  164. 164. Luis Hernández Yáñez Flujos de entrada int i; char c; double d; cin >> c >> d >> i; Programa z 1 2 3 . 4 5 6 5  cin Se lee el carácter 'z' y se asigna a la variable c; resultado: cin Se leen los caracteres 123.45, se convierten al valor 123.45 (válido para double) y se asigna a la variable d; resultado: cin Se ignoran los espacios, se leen los caracteres 65, se convierten al valor 65 (válido para int) y se asigna a la variable i cin >> d >> i; cin >> i; C++ siempre intentará leer los datos sin provocar errores de ejecución, pero si las secuencias de caracteres de la entrada no son correctas, los valores asignados a las variables serán impredecibles. Fundamentos de la programación: Primeros pasos Página 163
  165. 165. Luis Hernández Yáñez Facilitar la entrada Programas amigables con el usuario Indicar al usuario para cada dato qué se espera que introduzca: int edad; char letra; double saldo; cout << "Introduce una letra: "; cin >> letra; cout << "Introduce el saldo: "; cin >> saldo; cout << "Introduce tu edad: "; cin >> edad; cout << letra << "|" << saldo << "|" << edad; Tras escribir cada dato el usuario pulsará la tecla Intro. Buenos hábitos de programación: Ser amigable con el usuario Fundamentos de la programación: Primeros pasos Página 164
  166. 166. Luis Hernández Yáñez Ejecución de funciones con el operador punto (.) Las variables de algunos tipos (como istream u ostream) admiten que se llamen sobre ellas sus funciones con la notación del operador punto: variable.función(argumentos) Por ejemplo: char c; cin.get(c); // Llama a la función get() sobre la variable cin La función get() lee el siguiente carácter sin saltar espacios en blanco. Los caracteres de espacio en blanco también se asignan a la variable. Fundamentos de la programación: Primeros pasos Página 165
  167. 167. Luis Hernández Yáñez Lectura de cadenas de caracteres (string) La lectura de cadenas de tipo string con cin >> termina cuando encuentra el primer espacio en blanco. El resto de los caracteres tecleados quedan pendientes para la siguiente lectura. Si queremos descartarlos usamos cin.sync(). string nombre, apellidos; cout << "Nombre: "; cin >> nombre; cin.sync(); cout << "Apellidos: "; cin >> apellidos; cout << "Nombre completo: " << nombre << " " << apellidos << endl; ¿Cómo leer varias palabras? string nombre, apellidos; cout << "Nombre: "; cin >> nombre; cout << "Apellidos: "; cin >> apellidos; cout << "Nombre completo: " << nombre << " " << apellidos << endl; apellidos toma la cadena "Antonio" Fundamentos de la programación: Primeros pasos Página 166
  168. 168. Luis Hernández Yáñez Lectura de cadenas de caracteres (string) string.cpp Para leer incluyendo espacios en blanco se usa la función getline(): getline(cin, cadena) Se guardan en la cadena todos los caracteres leídos hasta el final de la línea (Intro). ¡Se leen bien los caracteres castellanos! string nombre, apellidos; cout << "Nombre: "; getline(cin, nombre); cout << "Apellidos: "; getline(cin, apellidos); cout << "Nombre completo: " << nombre << " " << apellidos << endl; Fundamentos de la programación: Primeros pasos Página 167
  169. 169. Luis Hernández Yáñez Expresiones de salida Expresión cout << Se calcula el resultado de la expresión. Se convierte (si es necesario) a su representación en caracteres y se envían los caracteres al flujo de salida (pantalla). int meses = 7; cout << "Total: " << 123.45 << endl << " Meses: " << meses; Total: 123.45 Meses: 7 La biblioteca iostream define la constante endl como un salto de línea. Fundamentos de la programación: Primeros pasos Página 168
  170. 170. Luis Hernández Yáñez Flujos de salida T o t a l : 1 2 3 . 4 5  M e s e s : 7 Programa cout int meses = 7; cout << "Total: " << 123.45 << endl << " Meses: " << meses; cout << 123.45 << endl << " Meses: " << meses; cout << endl << " Meses: " << meses; cout << " Meses: " << meses; cout << meses; Total: 123.45 Meses: 7 Fundamentos de la programación: Primeros pasos Página 169
  171. 171. Luis Hernández Yáñez Datos y flujos de texto No es lo mismo el valor double 123.45 que su representación textual, que es la secuencia de caracteres: '1' '2' '3' '.' '4' '5' double d = 123.45; d 123.45 cout << d; ¡Un número real! 5 4 . 3 2 1 ¡Un texto! (secuencia de caracteres) Fundamentos de la programación: Primeros pasos Página 170
  172. 172. Luis Hernández Yáñez Formato de la salida Las bibliotecas iostream e iomanip tienen definidas constantes que permiten, cuando se envían a cout, establecer opciones de formato que afecten a la salida que se realice a continuación. Biblioteca Identificador Propósito iostream showpoint / noshowpoint Mostrar o no el punto decimal para reales sin parte decimal (añadiendo 0 a la derecha). fixed / scientific Notación de punto fijo / científica (reales). boolalpha Valores bool como true / false. left / right Ajustar a la izquierda/derecha. iomanip setw(anchura)* Nº de caracteres (anchura) para el valor. setprecision(p) Precisión: Nº de dígitos (antes y después del .). Con fixed o scientific, nº de decimales. *setw() sólo afecta al siguiente dato que se escriba, mientras que los otros afectan a todos. (Subrayadas las opciones predeterminadas.) Fundamentos de la programación: Primeros pasos Página 171
  173. 173. Luis Hernández Yáñez Formato de la salida (ejemplo) bool fin = false; cout << fin << "->" << boolalpha << fin << endl; double d = 123.45; char c = 'x'; int i = 62; cout << d << c << i << endl; cout << "|" << setw(8) << d << "|" << endl; cout << "|" << left << setw(8) << d << "|" << endl; cout << "|" << setw(4) << c << "|" << endl; cout << "|" << right << setw(5) << i << "|" << endl; double e = 96; cout << e << " - " << showpoint << e << endl; cout << scientific << d << fixed << endl; cout << setprecision(8) << d << endl; 0->false 123.45x62 | 123.45| |123.45 | |x | | 62| 96 - 96.0000 1.234500e+002 123.45000000 Fundamentos de la programación: Primeros pasos Página 172 Se han añadido saltos de línea adicionales.
  174. 174. Luis Hernández Yáñez  Programming. Principles and Practice Using C++ B. Stroustrup. Pearson Education, 2009  C++: An Introduction to Computing (2ª edición) J. Adams, S. Leestma, L. Nyhoff. Prentice Hall, 1998  El lenguaje de programación C++ (Edición especial) B. Stroustrup. Addison-Wesley, 2002 Fundamentos de la programación: Primeros pasos Página 173
  175. 175. Luis Hernández Yáñez Licencia CC (Creative Commons) Este tipo de licencias ofrecen algunos derechos a terceras personas bajo ciertas condiciones. Este documento tiene establecidas las siguientes: Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licencia hará falta reconocer la autoría. No comercial (Non commercial): La explotación de la obra queda limitada a usos no comerciales. Compartir igual (Share alike): La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas. Pulsa en la imagen de arriba a la derecha para saber más. Fundamentos de la programación: Primeros pasos Página 174

×