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 undamentos de la programación Primeros pasos

description

Lenguaje C

Transcript of Lenguaje C

Page 1: Lenguaje C

2Grado 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áticaUniversidad Complutense

Fundamentos de la programación

Primeros pasos

Page 2: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

ÍndiceUn ejemplo de programación 3El primer programa en C++ 18Las líneas de código del programa35Cálculos en los programas 42Variables 48Expresiones 54Lectura de datos desde el teclado64Resolució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

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ánd

ez Y

áñez

A programar se aprende programando

ProgramarActividad de escribir y probar programas.

ProgramaCó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ónDescribe 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 3Fundamentos de la programación: Primeros pasos

Page 4: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Un ejemplo de programación

Page 5: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Un ejemplo de programación

Una computadora de un cocheCoche 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 5Fundamentos de la programación: Primeros pasos

Page 6: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Un ejemplo de programación

Sintaxis del lenguaje de programación

Página 6Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

El problema a resolverEstando 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?

ArrancarIr un bloque al NorteIr dos bloques al EsteIr cinco bloques al NorteIr dos bloques al EsteParar

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

B

A

N

Bloque:

Page 8: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Un ejemplo de programación

El algoritmoSecuencia de pasos que hay que seguir para resolver el problema.

Página 8Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

El programaPara 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 9Fundamentos de la programación: Primeros pasos

B

A

N

Page 10: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Un ejemplo de programación

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

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

Stat;Go North 1 BlocksGo 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ánd

ez Y

áñez

Un ejemplo de programación

La compilaciónIntroducimos 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 11Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

DepuraciónEditamos el código para arreglar los errores de sintaxis.

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

Stat;Go North 1 BlocksGo 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ánd

ez Y

áñez

Un ejemplo de programación

La ejecuciónSe realiza lo que pidecada instrucción.

Página 13Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

DepuraciónEditamos el código para arreglar el error de ejecución.

Página 14Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

La ejecuciónSe realiza lo que pidecada instrucción.

Página 15Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

DepuraciónEditamos el código para arreglar el error lógico.

Página 16Fundamentos 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ánd

ez Y

áñez

Un ejemplo de programación

La ejecuciónSe realiza lo que pidecada instrucción.

Página 17Fundamentos 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ánd

ez Y

áñez

El lenguaje de programación C++

Muchas instruccionesInstrucciones para... Mostrar textos en la pantalla Leer datos del usuario Realizar cálculos Tomar decisiones Repetir operaciones Etcétera...

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

Page 19: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

El primer programa en C++

Page 20: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

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 20Fundamentos de la programación: Primeros pasos

Page 21: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

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 21Fundamentos de la programación: Primeros pasos

Page 22: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

coutVisualización en la pantalla:

Página 22Fundamentos 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ánd

ez Y

áñez

El dispositivo de salida

Pantalla en modo textoEn 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 23Fundamentos 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ánd

ez Y

áñez

El dispositivo de salida

Ventanas de consola o terminalSistema 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 24Fundamentos 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ánd

ez Y

áñez

Visualización de información (datos)

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 25Fundamentos de la programación: Primeros pasos

cout << ...;

Page 26: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Visualización de información (datos)

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 26Fundamentos de la programación: Primeros pasos

Page 27: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

El programa principalLa 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 27Fundamentos de la programación: Primeros pasos

Page 28: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

El programa principalLa función main():

int main()

{

return 0;

}

Página 28Fundamentos 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ánd

ez Y

áñez

El primer programa en C++

Documentando el códigoLos 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 29Fundamentos de la programación: Primeros pasos

Page 30: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

La infraestructuraC++ 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 30Fundamentos de la programación: Primeros pasos

Es una directiva: empieza por #

Page 31: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

BibliotecasSe 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 31Fundamentos de la programación: Primeros pasos

Page 32: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

Espacios de nombresSi 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 32Fundamentos de la programación: Primeros pasos

Es una instrucción: termina en ;

Page 33: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

Compilación y enlace

Página 33

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ánd

ez Y

áñez

El primer programa en C++

Elementos del programa

#include <iostream>

using namespace std;

int main()

{

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

return 0;

}

Página 34

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

Bloq

ue d

e có

digo Cadena de caracteres Constante

OperadorOperador

Variable

Número

Coloreado sintáctico:Directivas TiposPalabras reservadas generalesDatos literales Comentarios

Page 35: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El primer programa en C++

Uso de espacio en blancoLos 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 35

#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ánd

ez Y

áñez

Fundamentos de la programación

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

Las líneas de código del programa

Page 37: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Programa mínimo

Programa con E/S por consolaUna plantilla para empezar:

#include <iostream>

using namespace std;

int main()

{

return 0;

}

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

¡Tu código aquí!

Page 38: Lenguaje C

Luis

Her

nánd

ez Y

áñez

El Quijote...

... recitado en la consolaMostrar 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 38Fundamentos de la programación: Primeros pasos

Page 39: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Líneas de código

Introducción del código del programaTerminamos 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 39Fundamentos de la programación: Primeros pasos

Page 40: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Líneas de código

Introducción del código del programaNo 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 40Fundamentos de la programación: Primeros pasos

Page 41: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Edición y compilación del programa

Notepad++ y G++

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

D:\FP\Tema2\quijote.cpp

Page 42: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Programar pensando en posibles cambios

Mantenimiento y reusabilidadEl 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 42Fundamentos de la programación: Primeros pasos

Tab / 2 ó 3espacios

Page 43: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Cálculos en los programas

Page 44: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Cálculos en los programas

Operadores aritméticosEn 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 44Fundamentos de la programación: Primeros pasos

Page 45: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Cálculos en los programas

Cómo escribir operandos numéricosLas 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 45Fundamentos 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ánd

ez Y

áñez

Cálculos en los programas

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 46Fundamentos de la programación: Primeros pasos

calculos.cpp

Page 47: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Cálculos en los programas#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 47Fundamentos de la programación: Primeros pasos

División entera/real

Page 48: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Cálculos en los programas

¿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 48Fundamentos 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ánd

ez Y

áñez

Fundamentos de la programación

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

Variables

Page 50: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables

Datos que se mantienen en memoriaUna 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 50Fundamentos de la programación: Primeros pasos

Page 51: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables

DeclaraciónAl 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 51Fundamentos de la programación: Primeros pasos

Memoria

cantidad ?

precio ?

...

Page 52: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables

Declaración#include <iostream>

using namespace std;

int main()

{

int cantidad;

double precio, total;

return 0;

}

Página 52Fundamentos 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ánd

ez Y

áñez

Variables

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 53Fundamentos de la programación: Primeros pasos

Notación científica en C++

Page 54: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables

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 54Fundamentos de la programación: Primeros pasos

Instrucción: termina en ;

Page 55: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Expresiones

Page 56: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Expresiones

ExpresionesSecuencias 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 56Fundamentos de la programación: Primeros pasos

Page 57: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Expresiones

Precedencia de los operadorescantidad1 = 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 57Fundamentos de la programación: Primeros pasos

Page 58: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

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 58Fundamentos de la programación: Primeros pasos

variables.cpp

Page 59: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

Ejemplo de uso de variables#include <iostream>using namespace std;

int main(){ int cantidad; double precio, total;

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

Memoria

cantidad ?

precio ?

total ?

...

Page 60: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

Ejemplo de uso de variables#include <iostream>using namespace std;

int main(){ int cantidad; double precio, total; cantidad = 12;

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

Memoria

cantidad 12

precio ?

total ?

...

Page 61: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

Ejemplo de uso de variables#include <iostream>using namespace std;

int main(){ int cantidad; double precio, total; cantidad = 12; precio = 39.95;

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

Memoria

cantidad 12

precio 39.95

total ?

...

Page 62: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

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 62Fundamentos de la programación: Primeros pasos

Memoria

cantidad 12

precio 39.95

total 479.4

...

Page 63: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

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 63Fundamentos de la programación: Primeros pasos

Memoria

cantidad 12

precio 39.95

total 479.4

...

Page 64: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Variables y expresiones

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 64Fundamentos de la programación: Primeros pasos

Page 65: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Lectura de datos desde el teclado

Page 66: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Valores proporcionados por el usuario

cinLectura de valores para las variables:

Página 66Fundamentos 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ánd

ez Y

áñez

Valores proporcionados por el usuario

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 67Fundamentos de la programación: Primeros pasos

cin >> var;

Page 68: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Valores proporcionados por el usuario

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 68Fundamentos de la programación: Primeros pasos

Page 69: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Valores proporcionados por el usuario

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 69Fundamentos de la programación: Primeros pasos

Page 70: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Valores proporcionados por el usuario

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 70Fundamentos de la programación: Primeros pasos

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

Page 71: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Valores proporcionados por el usuario

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

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ánd

ez Y

áñez

Valores proporcionados por el usuario

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 cantidad No 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ánd

ez Y

áñez

Valores proporcionados por el usuario

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

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ánd

ez Y

áñez

Valores proporcionados por el usuario

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 74Fundamentos de la programación: Primeros pasos

¡¡¡Lectura correcta!!!

Page 75: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Ejemplo

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 75Fundamentos de la programación: Primeros pasos

Datos / cálculos

Variable denominador (double)

Variable resultado (double)

resultado = numerador / denominador

Análisis / Diseño

Variable numerador (double)

Page 76: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Procesamiento

Entrada SalidaDeclaracion

es

Un esquema general

Entrada-Proceso-SalidaMuchos programas se ajustan a un sencillo esquema:

Página 76Fundamentos 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ánd

ez Y

áñez

Ejemplo

División de dos númerosPedir 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 77Fundamentos de la programación: Primeros pasos

cin >> numerador;

cin >> denominador;

resultado = numerador / denominador;

cout << resultado;

Instrucciones

Page 78: Lenguaje C

Luis

Her

nánd

ez Y

áñez Salida

Procesamiento

Entrada

Declaraciones

Ejemplo

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

Implementación

Se puedendeclarar variasvariables de un mismo tiposeparándolascon comas.

division.cpp

Page 79: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Ejemplo

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 79Fundamentos de la programación: Primeros pasos

_Numerador: _

Ejecución

129

_

Denominador: _2_Resultado: _64.5

Page 80: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Resolución de problemas

Page 81: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Resolución de problemas

ProblemaDadas 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 81

Page 82: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Resolución de problemas

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 82

Page 83: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Resolución de problemas

Datos que maneja el programa: tiposCada 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 83

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Resolución de problemas

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 84

Page 85: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Algoritmo

Page 86: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Resolución de problemas

AlgoritmoSecuencia 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 86

Page 87: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Resolución de problemas

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 87

ProgramaDatos

de entrada

Datosde salida

AlgoritmoEstadoinicial

Estadofinal

Page 88: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Programación

Page 89: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Programación

El programa...

int main()

{

return 0;

}

Página 89

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Programación

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 90

Las instrucciones terminan en ;

triangulo.cpp

Page 91: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Programación

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 91

¿¿¿triβngulo???Problemas conlos juegos de

caracteres

Page 92: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Los datos de los programas

Page 93: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Los datos de los programas

Variabilidad de los datos

Página 93

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ánd

ez Y

áñez

Fundamentos de la programación

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

Identificadores

Page 95: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Identificadores

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 95

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Identificadores

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 96

Page 97: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Identificadores

¿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 97

Page 98: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Tipos de datos

Page 99: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

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 99

125'a'

true3.14159

"Hola"

Page 100: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

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 100

Page 101: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

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 101

ASCII (códigos 32..127)

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

1 byte

Page 102: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

bool Valores lógicosSó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.

Página 102

Page 103: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

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 103

char" "

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

Page 104: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

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 104

Page 105: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

Ejemplo de tipos de datos

Página 105

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

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

Page 106: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Tipos de datos

Modificadores de tiposPermiten 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 106

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ánd

ez Y

áñez

Fundamentos de la programación

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

Declaración de variables

Page 108: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Variables

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 108

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Variables

Datos y memoriaCuando 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 109

Memoria01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

. . .

inicio

unidades

balance

Page 110: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Variables

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 110

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Variables

Uso de las variablesObtenció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 111

Page 112: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Constantes

Page 113: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Constantes

Declaración de constantes Modificador de acceso constDeclaramos variables inicializadas a las que no dejamos variar:

Página 113

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Constantes

¿Por qué utilizar constantes con nombre? Aumentan la legibilidad del código:

cambioPoblacion = (0.1758 - 0.1257) * poblacion; versuscambioPoblacion = (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 114

¿Cambio del IVA al 18%?

3 cambios

1 cambio

Page 115: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Constantes

Ejemplo de uso de constantes

Página 115

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

Page 116: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Operadores

Page 117: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores

Operaciones sobre valores de los tiposLas 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 117

Page 118: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

Operadores para tipos de datos numéricos

Página 118

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 ++aa-- a++

Page 119: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

Operadores monarios y operadores binariosOperadores 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 119

Page 120: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

¿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 120

/

Page 121: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

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 121

%

123 5

243

123 % 5

Page 122: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

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 jcout << 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 122

++/--

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

Ejemplo de uso de operadores

Página 123

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operadores aritméticos

Ejemplo de uso de operadores

Página 124

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ánd

ez Y

áñez

Fundamentos de la programación

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

Más sobre expresiones

Page 126: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Más sobre expresiones

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 asociatividadSiempre se evalúan en primer lugar las subexpresiones parentizadas.

Página 126

Page 127: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Más sobre expresiones

Precedencia y asociatividad de los operadores

Página 127

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Más sobre expresiones

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

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

Página 128

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 524 + 4 – 6

28 – 6

22

Primero, los paréntesis...

Ahora, los ++ (mayor prioridad)

Page 129: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Más sobre expresiones

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 129

37

6

5

3)(

2

xx

xf

formula.cpp

Page 130: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Más sobre expresiones

Abreviaturas aritméticasCuando 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 130

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Bit de signo0 = positivo1 = negativo

Más sobre expresiones

DesbordamientoSi 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 131

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Más sobre expresiones

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 132

Page 133: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Instrucciones de asignación

Page 134: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Instrucciones de asignación

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 134

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Instrucciones de asignación

El operador =El operando izquierdo ha de ser siempre una variable.

Posibles errores:

int a, b, c;

const int cte = 1;

Página 135

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Instrucciones de asignación

Variables, asignación y memoria

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

Página 136

Memoria01

02

03

04

05

06

07

08

09

10

. . .

i

j2

?

Memoria01

02

03

04

05

06

07

08

09

10

. . .

i

j2

3323 + 2 * 5

Page 137: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Instrucciones de asignación

Ejemplo: Intercambio de valoresSe necesita una variable auxiliar.

double a = 3.45, b = 127.5, aux;

Página 137

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ánd

ez Y

áñez

Fundamentos de la programación

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

La biblioteca cmath

Page 139: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

La biblioteca cmath

Funciones matemáticasLa 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 139

Page 140: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

La biblioteca cmath

Algunas funciones matemáticas de cmath

Página 140

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

La biblioteca cmath

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 141

)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ánd

ez Y

áñez

Fundamentos de la programación

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

Operaciones con caracteres

Page 143: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operaciones con caracteres

Operadores para caracteresLos ú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 143

Page 144: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operaciones con caracteres

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 144

caracteres.cpp

1 true / 0 false

(sigue)

Page 145: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Operaciones con caracteres

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 145

1 true / 0 false

Page 146: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Operadores relacionales(condiciones simples)

Page 147: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Expresiones lógicas (booleanas)

Operadores relacionalesPermiten 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 147

< 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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Expresiones lógicas (booleanas)

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 148

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

Page 149: Lenguaje C

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

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

Toma de decisiones (if)

Page 150: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Hacer esto... o hacer esto otro...

Página 150

SelecciónSi 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

else instrucciónF

Condición

Page 151: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

La instrucción if

Selección

Página 151

#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ánd

ez Y

áñez

Fundamentos de la programación

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

Bloques de código

Page 153: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Bloques de código

Página 153

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

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Bloques de código

Página 154

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Bloques de código

Página 155

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ánd

ez Y

áñez

Fundamentos de la programación

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

Bucles (while)

Page 157: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Repetir esto...

Página 157

IteraciónMientras 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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

La instrucción while

Iteración

Página 158

#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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

false

La instrucción while

Iteración

Página 159

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ánd

ez Y

áñez

Fundamentos de la programación

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

Entrada/salida por consola

Page 161: Lenguaje C

Luis

Her

nánd

ez Y

áñez

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

Entrada/salida por consola (teclado/pantalla)

Flujos de textoC++ 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 161Fundamentos de la programación: Primeros pasos

Programa

cin cout

Page 162: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada/salida por consola

Flujoscin 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 162

Flujo de entrada Variable

Flujo de salida Expresión<<

>>

Page 163: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada por teclado

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 163

Variable

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

cin >>

Page 164: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada por teclado

Flujos de entrada

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

Página 164

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada por teclado

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 165

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

Page 166: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada por teclado

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 166

Page 167: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada por teclado

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 167

¿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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Entrada por teclado

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 168

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Salida por pantalla

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 169

Expresión

Total: 123.45Meses: 7

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

cout <<

Page 170: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Salida por pantalla

Flujos de salida

int meses = 7;

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

Página 170

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

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Salida por pantalla

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 171

d 123.45

5 4 . 3 2 1

¡Un número real!

¡Un texto!(secuencia de caracteres)

123.45

Page 172: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Salida por pantalla

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

Página 172

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

Page 173: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Salida por pantalla

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 173

0->false

123.45x62

| 123.45|

|123.45 |

|x |

| 62|

96 - 96.0000

1.234500e+002

123.45000000

Se h

an a

ñadi

do s

alto

s de

líne

a ad

icio

nale

s.

Page 174: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Referencias bibliográficas

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

Página 174

Page 175: Lenguaje C

Fundamentos de la programación: Primeros pasos

Luis

Her

nánd

ez Y

áñez

Acerca de Creative Commons

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.

Página 175

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.