Lenguaje C

175
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 Fundamentos de la programación

description

Lenguaje C

Transcript of Lenguaje C

Page 1: Lenguaje C

2

Grado en Ingeniería InformáticaGrado en Ingeniería del Software

Grado en Ingeniería de Computadores

Luis Hernández Yáñez

Facultad de InformáticaUniversidad Complutense

Fundamentos de la programación

Page 2: Lenguaje C

Luis

Her

nán

dez

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 64Resolución de problemas 79Algoritmo 84Programación 87Los datos de los programas 91Identificadores 93Tipos de datos 97Declaración de variables 106Constantes 111Operadores 115Más sobre expresiones 124

Fundamentos de la programación: Primeros pasos

Instrucciones de asignación 132La biblioteca cmath 137Operaciones con caracteres 141Operadores relacionales 145Toma de decisiones (if) 148Bloques de código 151Bucles (while) 155Entrada/salida por consola 159

Page 3: Lenguaje C

Luis

Her

nán

dez

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.

Página 2Fundamentos de la programación: Primeros pasos

Page 4: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 3Fundamentos de la programación: Primeros pasos

Page 5: Lenguaje C

Luis

Her

nán

dez

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;

Página 4Fundamentos de la programación: Primeros pasos

Page 6: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Sintaxis del lenguaje de programación

Página 5Fundamentos de la programación: Primeros pasos

instrucción

Start

avanzar

avanzar direcciónGo Blocksnum

dirección

North

num

= Literales

East

South

West

Stop ;

1

2

3

4

5

Page 7: Lenguaje C

Luis

Her

nán

dez

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

Página 6Fundamentos de la programación: Primeros pasos

B

A

N

Bloque:

Page 8: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El algoritmo

Secuencia de pasos que hay que seguir para resolver el problema.

Página 7Fundamentos de la programación: Primeros pasos

1.- Arrancar

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.

Page 9: Lenguaje C

Luis

Her

nán

dez

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;

Página 8Fundamentos de la programación: Primeros pasos

B

A

N

Page 10: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El programa

Escribimos el código del programaen un editor y lo guardamosen un documento programa.prg.

Página 9Fundamentos de la programación: Primeros pasos

Stat;

Go North 1 Blocks

Go East Blocks;

Go Noth 5 Blocks;

Go West 2 Blocks;

Stop;

Copiamos el archivoen una llave USB y lo llevamos al coche.

Page 11: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

La compilación

Introducimos la llave USB en el coche y pulsamos el botónde ejecutar el programa en programa.prg.

Se compila el programa (comprobación sintáctica):

Página 10Fundamentos de la programación: Primeros pasos

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.

Erroresde sintaxis

Page 12: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Depuración

Editamos el código para arreglar los errores de sintaxis.

Página 11Fundamentos de la programación: Primeros pasos

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;

Page 13: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

La ejecución

Se realiza lo que pidecada instrucción.

Página 12Fundamentos de la programación: Primeros pasos

B

N

Start;

Go North 1 Blocks;

Go East 3 Blocks;

!

Error de ejecución:

¡Una instrucción no se puede ejecutar!

¡No se puede seguir ejecutando el programa!

Page 14: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Depuración

Editamos el código para arreglar el error de ejecución.

Página 13Fundamentos de la programación: Primeros pasos

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;

Page 15: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

La ejecución

Se realiza lo que pidecada instrucción.

Página 14Fundamentos de la programación: Primeros pasos

B

N

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Errores lógicos:

El programa se ejecuta, pero no obtiene el resultado deseado.

Go North 5 Blocks;

Go West 2 Blocks;

Stop;

?

Page 16: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Depuración

Editamos el código para arreglar el error lógico.

Página 15Fundamentos de la programación: Primeros pasos

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;

Page 17: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

La ejecución

Se realiza lo que pidecada instrucción.

Página 16Fundamentos de la programación: Primeros pasos

N

Start;

Go North 1 Blocks;

Go East 2 Blocks;

Go North 5 Blocks;

Go East 2 Blocks;

Stop;

¡Conseguido!

Page 18: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Muchas instrucciones

Instrucciones para...

Mostrar textos en la pantalla

Leer datos del usuario

Realizar cálculos

Tomar decisiones

Repetir operaciones

Etcétera...

Página 17Fundamentos de la programación: Primeros pasos

Page 19: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 18Fundamentos de la programación: Primeros pasos

Page 20: Lenguaje C

Luis

Her

nán

dez

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;

}

Página 19Fundamentos de la programación: Primeros pasos

Page 21: Lenguaje C

Luis

Her

nán

dez

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;

}

Página 20Fundamentos de la programación: Primeros pasos

Page 22: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

cout

Visualización en la pantalla:

Página 21Fundamentos de la programación: Primeros pasos

cout << "Hola Mundo!" << endl;

cout

_Hola Mundo!_

<< "Hola Mundo!" << endl;

_

endl end line

character output stream

Page 23: Lenguaje C

Luis

Her

nán

dez

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.

Página 22Fundamentos de la programación: Primeros pasos

Aplicación con interfaz gráfica

Aplicación en modo texto

80 caracteres

Page 24: Lenguaje C

Luis

Her

nán

dez

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.

Página 23Fundamentos de la programación: Primeros pasos

H o l a M u n d o !

Cursor parpadeante: Donde se colocará el siguiente carácter.

......

Page 25: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El insertor <<

<< Envía info a un dispositivo de salida.

Inserta textos en la pantalla de modo texto

La representación textual de los datos enviadosaparecerá 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 ;.

Página 24Fundamentos de la programación: Primeros pasos

cout << ...;

Page 26: Lenguaje C

Luis

Her

nán

dez

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.

Página 25Fundamentos de la programación: Primeros pasos

Page 27: Lenguaje C

Luis

Her

nán

dez

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.

Página 26Fundamentos de la programación: Primeros pasos

Page 28: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El programa principal

La función main():

int main()

{

return 0;

}

Página 27Fundamentos de la programación: Primeros pasos

Tipo de la función (int = entero): Tipo de valor que devuelve.

Nombre de la función.

Cuerpo de la función (bloque de código).

return 0; Devuelve el resultado (0) de la función.

¡Es una función!

Page 29: Lenguaje C

Luis

Her

nán

dez

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: /* ...... */

Página 28Fundamentos de la programación: Primeros pasos

Page 30: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

La infraestructura

C++ nos proporciona mucho código para reutilizar:

#include <iostream>

using namespace std;

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.

Página 29Fundamentos de la programación: Primeros pasos

Es una directiva: empieza por #

Page 31: Lenguaje C

Luis

Her

nán

dez

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.

Página 30Fundamentos de la programación: Primeros pasos

Page 32: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Espacios de nombres

Si hay espacios de nombres en la biblioteca hay que elegir uno:

#include <iostream>

using namespace std;

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.

Página 31Fundamentos de la programación: Primeros pasos

Es una instrucción: termina en ;

Page 33: Lenguaje C

Luis

Her

nán

dez

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 dela biblioteca iostream

A menudo el compilador y el enlazador están integrados.

Fundamentos de la programación: Primeros pasos

Hola Mundo!

Cargador

Page 34: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Elementos del programa

#include <iostream>

using namespace std;

int main()

{

cout << "Hola Mundo!" << endl;

return 0;

}

Página 33

Las instrucciones terminan en ;

Fundamentos de la programación: Primeros pasos

Directiva

Instrucción

Declaración

Instrucción

Instrucción

Biblioteca

Espacio de nombres

Palabras reservadasTipo

Datos literales

Cuerpo de la función

Cabecera de la función

Blo

qu

e d

e có

dig

o Cadena de caracteres Constante

OperadorOperador

Variable

Número

Coloreado sintáctico:Directivas TiposPalabras reservadas generalesDatos literales Comentarios

Page 35: Lenguaje C

Luis

Her

nán

dez

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

Page 36: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 35Fundamentos de la programación: Primeros pasos

Page 37: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Programa con E/S por consola

Una plantilla para empezar:

#include <iostream>

using namespace std;

int main()

{

return 0;

}

Página 36Fundamentos de la programación: Primeros pasos

¡Tu código aquí!

Page 38: Lenguaje C

Luis

Her

nán

dez

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;

}

Página 37Fundamentos de la programación: Primeros pasos

Page 39: Lenguaje C

Luis

Her

nán

dez

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; ↲

} ↲

Página 38Fundamentos de la programación: Primeros pasos

Page 40: Lenguaje C

Luis

Her

nán

dez

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).

Página 39Fundamentos de la programación: Primeros pasos

Page 41: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Notepad++ y G++

Página 40Fundamentos de la programación: Primeros pasos

D:\FP\Tema2\quijote.cpp

Page 42: Lenguaje C

Luis

Her

nán

dez

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;

}

Cuanto más legible, más fácil de mantener y reutilizar.

¡El estilo importa!Página 41Fundamentos de la programación: Primeros pasos

Tab / 2 ó 3espacios

Page 43: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 42Fundamentos de la programación: Primeros pasos

Page 44: Lenguaje C

Luis

Her

nán

dez

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: 72.56 – 3 Resultado: -0.44143 * 2 Resultado: 28645.45 / 3 Resultado: 15.15

Página 43Fundamentos de la programación: Primeros pasos

Page 45: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Cómo escribir operandos numéricos

Las cantidades pueden ser:

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

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

Página 44Fundamentos de la programación: Primeros pasos

Punto decimal (3.1415), NO coma decimal (3,1415)

Valores literales

No se usan puntos de millares

Page 46: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo#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;

}

Página 45Fundamentos de la programación: Primeros pasos

calculos.cpp

Page 47: Lenguaje C

Luis

Her

nán

dez

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 enteracout << "500.0 / 3 = " << 500.0 / 3 << endl; // División real

return 0;}

Página 46Fundamentos de la programación: Primeros pasos

División entera/real

Page 48: Lenguaje C

Luis

Her

nán

dez

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: 166500.0 / 3 Resultado: 166.667500 / 3.0 Resultado: 166.667500.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.

Página 47Fundamentos de la programación: Primeros pasos

Comprueba siempre si la división que se va a realizar es la que quieres.

Page 49: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 48Fundamentos de la programación: Primeros pasos

Page 50: Lenguaje C

Luis

Her

nán

dez

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 memoriapara 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;

Página 49Fundamentos de la programación: Primeros pasos

Page 51: Lenguaje C

Luis

Her

nán

dez

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 espaciosuficiente en memoria para el tipo de valor.

Unos tipos de datos requieren más bytes que otros.

LAS VARIABLES NO SE INICIALIZANNo 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.

Página 50Fundamentos de la programación: Primeros pasos

Memoria

cantidad ?

precio ?

...

Page 52: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Declaración#include <iostream>

using namespace std;

int main()

{

int cantidad;

double precio, total;

return 0;

}

Página 51Fundamentos de la programación: Primeros pasos

Memoria

cantidad ?

precio ?

total ?

...

Podemos declarar varias del mismo tiposeparando los nombres con comas.

Page 53: Lenguaje C

Luis

Her

nán

dez

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.

Página 52Fundamentos de la programación: Primeros pasos

Notación científica en C++

Page 54: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Asignación de valores a las variables (operador =)

Instrucciones de asignación:

variable = expresión;

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!!!

Página 53Fundamentos de la programación: Primeros pasos

Instrucción: termina en ;

Page 55: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 54Fundamentos de la programación: Primeros pasos

Page 56: Lenguaje C

Luis

Her

nán

dez

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.

Página 55Fundamentos de la programación: Primeros pasos

Page 57: Lenguaje C

Luis

Her

nán

dez

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.

Página 56Fundamentos de la programación: Primeros pasos

Page 58: Lenguaje C

Luis

Her

nán

dez

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;

}

Página 57Fundamentos de la programación: Primeros pasos

variables.cpp

Page 59: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de uso de variables#include <iostream>

using namespace std;

int main()

{

int cantidad;

double precio, total;

Página 58Fundamentos de la programación: Primeros pasos

Memoria

cantidad ?

precio ?

total ?

...

Page 60: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de uso de variables#include <iostream>

using namespace std;

int main()

{

int cantidad;

double precio, total;

cantidad = 12;

Página 59Fundamentos de la programación: Primeros pasos

Memoria

cantidad 12

precio ?

total ?

...

Page 61: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de uso de variables#include <iostream>

using namespace std;

int main()

{

int cantidad;

double precio, total;

cantidad = 12;

precio = 39.95;

Página 60Fundamentos de la programación: Primeros pasos

Memoria

cantidad 12

precio 39.95

total ?

...

Page 62: Lenguaje C

Luis

Her

nán

dez

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;

Página 61Fundamentos de la programación: Primeros pasos

Memoria

cantidad 12

precio 39.95

total 479.4

...

Page 63: Lenguaje C

Luis

Her

nán

dez

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;

Página 62Fundamentos de la programación: Primeros pasos

Memoria

cantidad 12

precio 39.95

total 479.4

...

Page 64: Lenguaje C

Luis

Her

nán

dez

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;

}

Página 63Fundamentos de la programación: Primeros pasos

Page 65: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 64Fundamentos de la programación: Primeros pasos

Page 66: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

cin

Lectura de valores para las variables:

Página 65Fundamentos de la programación: Primeros pasos

cin >> cantidad;

cin

_

>> cantidad;

character input stream

Memoria

cantidad ?

...

_

12

1 2 ↲_1 _2

Page 67: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El extractor >>

>> Lee datos de un dispositivo de entrada.

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.

Página 66Fundamentos de la programación: Primeros pasos

cin >> var;

Page 68: Lenguaje C

Luis

Her

nán

dez

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.

Página 67Fundamentos de la programación: Primeros pasos

Page 69: Lenguaje C

Luis

Her

nán

dez

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↲

Página 68Fundamentos de la programación: Primeros pasos

Page 70: Lenguaje C

Luis

Her

nán

dez

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.

Página 69Fundamentos de la programación: Primeros pasos

Para evitar errores, lee cada dato en una instrucción aparte.

Page 71: Lenguaje C

Luis

Her

nán

dez

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;

Página 70Fundamentos de la programación: Primeros pasos

No se puede leer un entero 0 para cantidad y ErrorLa lectura del precio falla: precio no toma valor (basura)

La ejecución del programa sigue de forma anómala.

Indica al usuario qué es lo quese le pide que introduzca cada vez.

Page 72: Lenguaje C

Luis

Her

nán

dez

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;

Página 71Fundamentos de la programación: Primeros pasos

Se leen dos dígitos 12 para cantidadNo se puede leer un real 0 para precio y Error

La ejecución del programa sigue de forma anómala.

Page 73: Lenguaje C

Luis

Her

nán

dez

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;

Página 72Fundamentos de la programación: Primeros pasos

Se leen dos dígitos 12 para cantidadSe lee .5 0,5 para precio y lo demás queda pendiente

Page 74: Lenguaje C

Luis

Her

nán

dez

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;

Página 73Fundamentos de la programación: Primeros pasos

¡¡¡Lectura correcta!!!

Page 75: Lenguaje C

Luis

Her

nán

dez

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

Página 74Fundamentos de la programación: Primeros pasos

Datos / cálculos

Variable denominador (double)

Variable resultado (double)

resultado = numerador / denominador

Variable numerador (double)

Page 76: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

ProcesamientoEntrada SalidaDeclaraciones

Entrada-Proceso-Salida

Muchos programas se ajustan a un sencillo esquema:

Página 75Fundamentos de la programación: Primeros pasos

1. Leer numerador

2. Leer denominador

3. Calcular división en resultado

4. Mostrar resultado

Page 77: Lenguaje C

Luis

Her

nán

dez

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

3. Calcular división en resultado

4. Mostrar resultado

Página 76Fundamentos de la programación: Primeros pasos

cin >> numerador;

cin >> denominador;

resultado = numerador / denominador;

cout << resultado;

Page 78: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Salida

Procesamiento

Entrada

Declaraciones

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;

}

Página 77Fundamentos de la programación: Primeros pasos

Se puedendeclarar variasvariables de un mismo tiposeparándolascon comas.

division.cpp

Page 79: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

División de dos númerosPedir 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;

}

Página 78Fundamentos de la programación: Primeros pasos

_Numerador: _129

_

Denominador: _2

_Resultado: _64.5

Page 80: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 79Fundamentos de la programación: Primeros pasos

Page 81: Lenguaje C

Luis

Her

nán

dez

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.

Página 80Fundamentos de la programación: Primeros pasos

Page 82: Lenguaje C

Luis

Her

nán

dez

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.

Página 81Fundamentos de la programación: Primeros pasos

Page 83: Lenguaje C

Luis

Her

nán

dez

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):

Página 82Fundamentos de la programación: Primeros pasos

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.

Page 84: Lenguaje C

Luis

Her

nán

dez

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 dosarea = base * altura / 2

Página 83Fundamentos de la programación: Primeros pasos

Page 85: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 84Fundamentos de la programación: Primeros pasos

Page 86: Lenguaje C

Luis

Her

nán

dez

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.

Página 85Fundamentos de la programación: Primeros pasos

Page 87: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El programa como transformador de entrada en salida

El estado inicial viene dado por los datos de entrada y el estado final por los datos de salida:

Página 86Fundamentos de la programación: Primeros pasos

ProgramaDatos

de entradaDatos

de salida

AlgoritmoEstadoinicial

Estadofinal

Page 88: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 87Fundamentos de la programación: Primeros pasos

Page 89: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El programa

...

int main()

{

return 0;

}

Página 88Fundamentos de la programación: Primeros pasos

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.

Algoritmotraducidoa códigoen C++

Declaraciones

Page 90: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El programa: implementación

#include <iostream>

using namespace std;

int main()

{

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;

}

Página 89Fundamentos de la programación: Primeros pasos

Las instrucciones terminan en ;

triangulo.cpp

Page 91: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejecución

#include <iostream>

using namespace std;

int main()

{

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;

}

Página 90Fundamentos de la programación: Primeros pasos

¿¿¿triβngulo???

Problemas conlos juegos de

caracteres

Page 92: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 91Fundamentos de la programación: Primeros pasos

Page 93: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Variabilidad de los datos

Página 92Fundamentos de la programación: Primeros pasos

Datos

Constantes

Literales

Con nombre

Variables

"Introduzca la base del triángulo: "3.141592653589

base, altura, area

Pi = 3.141592653589

Identificadores

Page 94: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 93Fundamentos de la programación: Primeros pasos

Page 95: Lenguaje C

Luis

Her

nán

dez

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:

Página 94Fundamentos de la programación: Primeros pasos

Al menos32 caracteressignificativos(longitud mínimapara diferenciardos nombres).

¡No se admiten ni eñes ni vocales acentuadas!

0..9, a..z, A..Z, _

No pueden repetirse identificadores en un mismo ámbito (bloque).

a..z, A..Z, _

Page 96: Lenguaje C

Luis

Her

nán

dez

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

Página 95Fundamentos de la programación: Primeros pasos

Page 97: Lenguaje C

Luis

Her

nán

dez

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

Página 96Fundamentos de la programación: Primeros pasos

Page 98: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 97Fundamentos de la programación: Primeros pasos

Page 99: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Tipos

Cada dato del programa es de un tipo concreto.

Cada tipo establece:

— El conjunto (intervalo) de valores válidos.Las variables del tipo tomarán uno de esos valores cada vez.

— 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 compatiblesse 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.

Página 98Fundamentos de la programación: Primeros pasos

125'a'

true3.14159

"Hola"

Page 100: Lenguaje C

Luis

Her

nán

dez

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).

Página 99Fundamentos de la programación: Primeros pasos

Page 101: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

char CaracteresIntervalo 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:

Página 100Fundamentos de la programación: Primeros pasos

ASCII (códigos 32..127)

ISO-8859-1(ASCII extendido: códigos 128..255)

1 byte

Page 102: Lenguaje C

Luis

Her

nán

dez

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 truey el número 0 es equivalente a false.

Página 101Fundamentos de la programación: Primeros pasos

Page 103: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

string Cadenas de caracteres

"Hola", "Introduce el numerador: ", "X142FG5TX?%A"

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;

Página 102Fundamentos de la programación: Primeros pasos

char" "

¡Ojo!Las comillas tipográficas (apertura/cierre) “…” te darán problemasal compilar. Asegúrate de utilizar comillas rectas: "…"

Page 104: Lenguaje C

Luis

Her

nán

dez

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++.

Página 103Fundamentos de la programación: Primeros pasos

Page 105: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de tipos de datos

Página 104Fundamentos de la programación: Primeros pasos

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 declarardouble 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;}

¿Cuántos números hay en total en el programa?¿Y caracteres? ¿Y cadenas? ¿Y booleanos?

Page 106: Lenguaje C

Luis

Her

nán

dez

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.

Página 105Fundamentos de la programación: Primeros pasos

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

Page 107: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 106Fundamentos de la programación: Primeros pasos

Page 108: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Declaración de variables

[modificadores] tipo lista_de_variables;

[ … ] indica que eso es opcional.

lista_de_variables

int i, j, l;

short int unidades;

unsigned short int monedas;

double balance, beneficio, perdida;

Página 107Fundamentos de la programación: Primeros pasos

Identificador

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).

Termina en ;

,

Page 109: Lenguaje C

Luis

Her

nán

dez

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ónde los programasno distinguiremosentre los tamaños delas distintas variables.

Página 108Fundamentos de la programación: Primeros pasos

Memoria

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

. . .

inicio

unidades

balance

Page 110: Lenguaje C

Luis

Her

nán

dez

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 desconocidoque 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?— 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:

Página 109Fundamentos de la programación: Primeros pasos

El resultado de la expresióndebe ser un valor compatible.

Error común de programación:Acceder a variables no inicializadas.

Identificador Expresión… =

En particular, una expresión puede ser un literal

int i = 0, j, l = 26;

short int unidades = 100;

Page 111: Lenguaje C

Luis

Her

nán

dez

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.

Página 110Fundamentos de la programación: Primeros pasos

Page 112: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 111Fundamentos de la programación: Primeros pasos

Page 113: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Declaración de constantes Modificador de acceso const

Declaramos variables inicializadas a las que no dejamos variar:

Página 112Fundamentos de la programación: Primeros pasos

Declaración de variable con inicializador

Programación con buen estilo:Pon en mayúscula la primera letra de una constante o todo su nombre.

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;

Page 114: Lenguaje C

Luis

Her

nán

dez

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;

...const int IVA = 16;double compra1 = bruto1 * IVA / 100;double compra2 = bruto2 * IVA / 100;double total = compra1 + compra2;cout << total << " (IVA: " << IVA << "%)" << endl;

Página 113Fundamentos de la programación: Primeros pasos

¿Cambio del IVA al 18%?

3 cambios

1 cambio

Page 115: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de uso de constantes

Página 114Fundamentos de la programación: Primeros pasos

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 ecout << "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;}

Page 116: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 115Fundamentos de la programación: Primeros pasos

Page 117: Lenguaje C

Luis

Her

nán

dez

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

Página 116Fundamentos de la programación: Primeros pasos

Page 118: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Operadores para tipos de datos numéricos

Página 117Fundamentos de la programación: Primeros pasos

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_derechoOperadores monarios:

Prefijo: Operador OperandoPostfijo: Operando Operador

a + b-a --a ++a

a-- a++

Page 119: Lenguaje C

Luis

Her

nán

dez

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)

Página 118Fundamentos de la programación: Primeros pasos

Page 120: Lenguaje C

Luis

Her

nán

dez

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

Página 119Fundamentos de la programación: Primeros pasos

/

Page 121: Lenguaje C

Luis

Her

nán

dez

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

Página 120Fundamentos de la programación: Primeros pasos

%

123 5

243

123 % 5

Page 122: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Operadores de incremento y decrementoSe 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).

Página 121Fundamentos de la programación: Primeros pasos

++/--

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.

Page 123: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de uso de operadores

Página 122Fundamentos de la programación: Primeros pasos

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)

Page 124: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo de uso de operadores

Página 123Fundamentos de la programación: Primeros pasos

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;}

Page 125: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 124Fundamentos de la programación: Primeros pasos

Page 126: Lenguaje C

Luis

Her

nán

dez

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 derechao 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.

Página 125Fundamentos de la programación: Primeros pasos

Page 127: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Precedencia y asociatividad de los operadores

Página 126Fundamentos de la programación: Primeros pasos

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.

Misma precedencia:Izquierda antes.

Mayorprecedencia

3 + 10 / 2 – 1 3 + 5 – 1 8 – 1 7

Page 128: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Evaluación de expresionesSuponiendo que la variable entera acontiene en este momento el valor 3…

(3 + 5) * a++ + 12 / a++ – (a * 2)

Página 127Fundamentos de la programación: Primeros pasos

Programación con buen estilo:Evita usar los operadores ++ y -- en expresiones compuestas.

8 * a++ + 12 / a++ – (3 * 2)

8 * a++ + 12 / a++ – 6

8 * 3 + 12 / 3 – 6 a pasa a valer 5

24 + 4 – 6

28 – 6

22

Primero, los paréntesis...

Ahora, los ++ (mayor prioridad)

Page 129: Lenguaje C

Luis

Her

nán

dez

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;

}

Página 128Fundamentos de la programación: Primeros pasos

37

6

5

3)(

2

xx

xf

formula.cpp

Page 130: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Abreviaturas aritméticas

Cuando una expresión tiene la forma:

variable = variable operador op_derecho;

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;

Página 129Fundamentos de la programación: Primeros pasos

Operadores (prioridad) Asociatividad

++ -- (postfijos)Llamadas a funciones

Izda. a dcha.

++ -- (prefijos) Dcha. a izda.

- (cambio de signo)

* / % Izda. a dcha.

+ - Izda. a dcha.

= += -= *= /= %= Dcha. a izda.

Igual precedencia que la asignación.

La misma

Page 131: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Bit de signo0 = positivo1 = negativo

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.

Página 130Fundamentos de la programación: Primeros pasos

0 1 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

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1+

32767

-32768

+ 1

Debemos asegurarnos de utilizar tipos que contengan todo el conjunto de valores posibles para nuestros datos.

Page 132: Lenguaje C

Luis

Her

nán

dez

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.

Página 131Fundamentos de la programación: Primeros pasos

Page 133: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 132Fundamentos de la programación: Primeros pasos

Page 134: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El operador =

Operador para asignaciones:

El operando izquierdo debe sersiempre 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

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 ;

Página 133Fundamentos de la programación: Primeros pasos

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.

Mínima precedencia

;=

Page 135: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

El operador =

El operando izquierdo ha de ser siempre una variable.

Posibles errores:

int a, b, c;

const int cte = 1;

Página 134Fundamentos de la programación: Primeros pasos

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)

Page 136: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Variables, asignación y memoria

int i, j = 2; i = 23 + j * 5;

Página 135Fundamentos de la programación: Primeros pasos

Memoria

01

02

03

04

05

06

07

08

09

10

. . .

i

j2

?

Memoria

01

02

03

04

05

06

07

08

09

10

. . .

i

j2

3323 + 2 * 5

Page 137: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Ejemplo: Intercambio de valores

Se necesita una variable auxiliar.

double a = 3.45, b = 127.5, aux;

Página 136Fundamentos de la programación: Primeros pasos

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;

Page 138: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 137Fundamentos de la programación: Primeros pasos

Page 139: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Funciones matemáticas

La biblioteca cmath contiene muchas funciones matemáticasque 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);

Página 138Fundamentos de la programación: Primeros pasos

Page 140: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Algunas funciones matemáticas de cmath

Página 139Fundamentos de la programación: Primeros pasos

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 funcionestienen la mayor prioridad.

Page 141: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Un ejemplo

#include <iostream>using namespace std;#include <cmath>

int main()

{

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;

}

Página 140Fundamentos de la programación: Primeros pasos

)cos(2),(2

3

5 yyx

y

x

xyxf

Programación con buen estilo:Pon un espacio detrás de cada coma en las listas de argumentos.

funciones.cpp

Page 142: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 141Fundamentos de la programación: Primeros pasos

Page 143: Lenguaje C

Luis

Her

nán

dez

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.

Página 142Fundamentos de la programación: Primeros pasos

Page 144: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Un ejemplo

#include <iostream>using namespace std;

int main(){

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;

Página 143Fundamentos de la programación: Primeros pasos

caracteres.cpp

1 true / 0 false

(sigue)

Page 145: Lenguaje C

Luis

Her

nán

dez

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;}

Página 144Fundamentos de la programación: Primeros pasos

1 true / 0 false

Page 146: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 145Fundamentos de la programación: Primeros pasos

Page 147: Lenguaje C

Luis

Her

nán

dez

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).

Página 146Fundamentos de la programación: Primeros pasos

< menor que

<= menor o igual que

> mayor que

>= mayor o igual que

== igual que

!= distinto de

Operadores (prioridad) Asociatividad

++ -- (postfijos)Llamadas a funciones

Izda. a dcha.

++ -- (prefijos) Dcha. a izda.

- (cambio de signo)

* / % Izda. a dcha.

+ - Izda. a dcha.

< <= > >= Izda. a dcha.

== != Izda. a dcha.

= += -= *= /= %= Dcha. a izda.

Page 148: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Operadores relacionalesbool 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.

Página 147Fundamentos de la programación: Primeros pasos

Error común de programación:Confundir el operador de igualdad (==) con el operador de asignación (=).

Page 149: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 148Fundamentos de la programación: Primeros pasos

Page 150: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 149Fundamentos de la programación: Primeros pasos

Selección

Si la condición es cierta, hacer esto... ; si no, hacer esto otro...

Bifurcación condicional:

InstrucciónT

true

InstrucciónF

false

if (condición)instrucciónT

elseinstrucciónF

Condición

Page 151: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Selección

Página 150Fundamentos de la programación: Primeros pasos

#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;}

seleccion.cpp

Page 152: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 151Fundamentos de la programación: Primeros pasos

Page 153: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 152Fundamentos de la programación: Primeros pasos

¿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ón1intrucción2...intrucciónN

}

Por ejemplo:

Tab o

2 ó 3esp.

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 creaun nuevo ámbitoen el que las declaracionesson locales.

Page 154: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 153Fundamentos de la programación: Primeros pasos

Posición de las llaves: cuestión de estiloif (num > 0) if (num > 0) {{ cout << "Positivo";

cout << "Positivo"; total += num;total += num; }

} cout << endl;cout << endl;

No te dejes engañarif (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!

Page 155: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 154Fundamentos de la programación: Primeros pasos

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;}

bloques.cpp

Page 156: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 155Fundamentos de la programación: Primeros pasos

Page 157: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 156Fundamentos de la programación: Primeros pasos

Iteración

Mientras que la condición sea cierta, repetir esto...

Repetición condicional:

while (condición)cuerpo

Condición

Cuerpo

true false

condición cuerpowhile ( )

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 –).

Page 158: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Iteración

Página 157Fundamentos de la programación: Primeros pasos

#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++;

}cout << "Sumatorio de i (1 a " << n << ") = " << suma << endl;

return 0;}

serie.cpp

n

i

i1

Page 159: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

false

Iteración

Página 158Fundamentos de la programación: Primeros pasos

while (i <= n) {suma += i;i++;

}

serie.cpp

n

i

i1

n 5

i 1

suma 0

suma += i;i++;

true

5

2

1

5

3

3

5

4

6

5

5

10

5

6

15i <= n

Page 160: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Página 159Fundamentos de la programación: Primeros pasos

Page 161: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

1 6 = l a t o T7 3 5 . 3 5 1

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 programacon 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).

Página 160Fundamentos de la programación: Primeros pasos

Programa

cin cout

Page 162: Lenguaje C

Luis

Her

nán

dez

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.

<< 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.

La asociatividad de ambos operadores es de izquierda a derecha.

Página 161Fundamentos de la programación: Primeros pasos

Flujo de entrada Variable

Flujo de salida Expresión<<

>>

Page 163: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Expresiones de entrada

— 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;

Página 162Fundamentos de la programación: Primeros pasos

Variable

* Espacios en blanco: espacios, tabuladores o saltos de línea.

cin >>

Page 164: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Flujos de entrada

int i;char c;double d;cin >> c >> d >> i;

Página 163Fundamentos de la programación: Primeros pasos

z 1 2 3 . 4 5 6 5 Programa

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

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.

cin >> d >> i;

cin >> i;

Page 165: Lenguaje C

Luis

Her

nán

dez

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.

Página 164Fundamentos de la programación: Primeros pasos

Buenos hábitos de programación:Ser amigable con el usuario

Page 166: Lenguaje C

Luis

Her

nán

dez

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.

Página 165Fundamentos de la programación: Primeros pasos

Page 167: Lenguaje C

Luis

Her

nán

dez

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().

Página 166Fundamentos de la programación: Primeros pasos

¿Cómo leer varias palabras?

apellidos toma la cadena "Antonio"

string nombre, apellidos;cout << "Nombre: ";cin >> nombre;cout << "Apellidos: ";cin >> apellidos;cout << "Nombre completo: "

<< nombre << " "<< apellidos << endl;

string nombre, apellidos;cout << "Nombre: ";cin >> nombre;cin.sync();cout << "Apellidos: ";cin >> apellidos;cout << "Nombre completo: "

<< nombre << " "<< apellidos << endl;

Page 168: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Lectura de cadenas de caracteres (string)

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).

Página 167Fundamentos de la programación: Primeros pasos

string.cpp

¡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;

Page 169: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Expresiones de salida

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;

Página 168Fundamentos de la programación: Primeros pasos

Expresión

Total: 123.45Meses: 7

La biblioteca iostreamdefine la constante endlcomo un salto de línea.

cout <<

Page 170: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Flujos de salida

int meses = 7;

cout << "Total: " << 123.45 << endl << " Meses: " << meses;

Página 169Fundamentos de la programación: Primeros pasos

T o t a l : 1 2 3 . 4 5 M e s e s : 7 Programa

cout

cout << 123.45 << endl << " Meses: " << meses;

cout << endl << " Meses: " << meses;

cout << " Meses: " << meses;

cout << meses;Total: 123.45Meses: 7

Page 171: Lenguaje C

Luis

Her

nán

dez

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;

cout << d;

Página 170Fundamentos de la programación: Primeros pasos

d 123.45

5 4 . 3 2 1

¡Un número real!

¡Un texto!(secuencia de caracteres)

Page 172: Lenguaje C

Luis

Her

nán

dez

Yáñ

ez

Formato de la salidaLas bibliotecas iostream e iomanip tienen definidas constantesque permiten, cuando se envían a cout, establecer opciones de formatoque afecten a la salida que se realice a continuación.

Página 171Fundamentos de la programación: Primeros pasos

Biblioteca Identificador Propósito

iostreamshowpoint /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.)

Page 173: Lenguaje C

Luis

Her

nán

dez

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;

Página 172Fundamentos de la programación: Primeros pasos

0->false

123.45x62

| 123.45|

|123.45 |

|x |

| 62|

96 - 96.0000

1.234500e+002

123.45000000

Se h

an a

ñad

ido

sal

tos

de

lín

ea a

dic

ion

ales

.

Page 174: Lenguaje C

Luis

Her

nán

dez

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

Page 175: Lenguaje C

Luis

Her

nán

dez

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:

Pulsa en la imagen de arriba a la derecha para saber más.

Fundamentos de la programación: Primeros pasos Página 174

Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licenciahará 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.