Вы находитесь на странице: 1из 82

Fundamentosdelaprogramacin

2
Grado en Ingeniera Informtica
Grado en Ingeniera del Software
Grado en Ingeniera de Computadores
Luis Hernndez Yez

LuisHernndezYez

Facultad de Informtica
Universidad Complutense

Unejemplodeprogramacin
ElprimerprogramaenC++
Laslneasdecdigodelprograma
Clculosenlosprogramas
Variables
Expresiones
Lecturadedatosdesdeelteclado
Resolucindeproblemas
Losdatosdelosprogramas
Identificadores
Tiposdedatos
Declaracinyusodevariables
Instruccionesdeasignacin
Operadores
Mssobreexpresiones
Constantes
Labibliotecacmath
Operacionesconcaracteres

50
64
80
86
92
98
108
119
127
129
133
142
147
152
160
167
171
174

Fundamentosdelaprogramacin:TiposeinstruccionesI

Operadoresrelacionales
Tomadedecisiones(if)
Bloquesdecdigo
Bucles(while)
Entrada/salidaporconsola
Funcionesdefinidas
porelprogramador

177
180
183
186
190
199

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 50

Una computadora de un coche


Instrucciones que entiende:

<instruccin> ::= <inst> ;


<inst> ::= Start | Stop | <avanzar>
<avanzar> ::= Go <direccin> <num> Blocks
<direccin> ::= North | East | South | West
<num> ::= 1 | 2 | 3 | 4 | 5

LuisHernndezYez

Ejemplos:

Start;
Go North3Blocks;
Stop;
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 51

Sintaxis del lenguaje de programacin


= Literales

Start
instruccin

Stop
avanzar

LuisHernndezYez

avanzar

direccin

direccin

Go

num

Blocks

North

East

2
num

South

West

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 52

El problema a resolver

LuisHernndezYez

Estando el coche en la posicin A,


conseguir llegar al Cine Tvoli (B)
Qu pasos hay que seguir?
Arrancar
Ir un bloque al Norte
Ir dos bloques al Este
Ir cinco bloques al Norte
Ir dos bloques al Este
Parar

Fundamentosdelaprogramacin:TiposeinstruccionesI

A
Bloque:

Pgina 53

El algoritmo

Secuencia de pasos que hay que


seguir para resolver el problema

LuisHernndezYez

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

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 54

El programa

LuisHernndezYez

Instrucciones escritas en
el lenguaje de programacin

Start;
Go North1Blocks;
Go East2Blocks;
Go North5Blocks;
Go East2Blocks;
Stop;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 55

El programa

LuisHernndezYez

Escribimos el cdigo del programa en un editor


y lo guardamos en un archivo:

Stat;
Go North1Blocks
Go EastBlocks;
Go Noth 5Blocks;
Go West2Blocks;
Stop;

Copiamos el archivo
en una llave USB
y lo llevamos al coche

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 56

La compilacin

LuisHernndezYez

Introducimos la llave USB en el coche


y pulsamos el botn de ejecutar el programa:
Stat;
^Unknown word.
Go North1Blocks
^;missing.
Go EastBlocks;
^Number missing.
Go Noth 5Blocks;
^Unknown word.
Go West2Blocks;
Stop;
There areerrors.Impossible to run the program.

Fundamentosdelaprogramacin:TiposeinstruccionesI

Errores
de sintaxis

Pgina 57

Depuracin
Editamos el cdigo para corregir los errores sintcticos:

Start;
Go North1Blocks;
Go East3 Blocks;
Go North5Blocks;
Go West2Blocks;
Stop;

LuisHernndezYez

Stat;
Go North1Blocks
Go EastBlocks;
Go Noth 5Blocks;
Go West2Blocks;
Stop;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 58

La ejecucin
Se realiza lo que pide
cada instruccin:

Start;
Go North1Blocks;

LuisHernndezYez

Go East3Blocks;

Error de ejecucin
Una instruccin no se puede ejecutar!

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 59

Depuracin
Editamos el cdigo para arreglar el error de ejecucin:

Start;
Go North1Blocks;
Go East2 Blocks;
Go North5Blocks;
Go West2Blocks;
Stop;

LuisHernndezYez

Start;
Go North1Blocks;
Go East3Blocks;
Go North5Blocks;
Go West2Blocks;
Stop;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 60

La ejecucin
Se realiza lo que pide
cada instruccin:

?
B

LuisHernndezYez

Start;
Go North1Blocks;
Go East2Blocks;
Go North5Blocks;
Go West2Blocks;
Stop;
Error lgico
El programa no llega al resultado deseado!
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 61

Depuracin
Editamos el cdigo para arreglar el error lgico:

Start;
Go North1Blocks;
Go East2Blocks;
Go North5Blocks;
Go East 2Blocks;
Stop;

LuisHernndezYez

Start;
Go North1Blocks;
Go East2Blocks;
Go North5Blocks;
Go West2Blocks;
Stop;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 62

La ejecucin

Se realiza lo que pide


cada instruccin:

LuisHernndezYez

Start;
Go North1Blocks;
Go East2Blocks;
Go North5Blocks;
Go East2Blocks;
Stop;

Conseguido!
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 63

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 64

Hola Mundo!
De vuelta en el programa que muestra un saludo en la pantalla:
#include<iostream>
usingnamespacestd;
int main() //main()esdondeempiezalaejecucin
{
cout<<"HolaMundo!"<<endl;

LuisHernndezYez

return 0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 65

Hola Mundo!
La nica instruccin que produce algo tangible:
#include<iostream>
usingnamespacestd;
intmain()//main()esdondeempiezalaejecucin
{
cout<<"HolaMundo!"<<endl;

LuisHernndezYez

return0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

cout (iostream)

Pgina 66

character output stream

Visualizacin en la pantalla: operador << (insertor)

cout<<"HolaMundo!"<<endl;
cout <<"HolaMundo!" <<endl;
HolaMundo!

LuisHernndezYez

endl end line

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 67

Pantalla en modo texto


Lneas de 80 caracteres (textos)
Aplicacinenmodotexto

LuisHernndezYez

80caracteres

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 68

Ventanas de consola o terminal


Las aplicaciones en modo texto se ejecutan dentro de ventanas:
Windows: ventanas de consola (Smbolo del sistema)
Linux: ventanas de terminal

H o l a

M u n d o !

...

LuisHernndezYez

...

Cursor parpadeante: Donde se colocar el siguiente carcter.

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 69

El insertor <<

cout<<...;

Inserta textos en la pantalla de modo texto


Representacin textual de los datos
A partir de la posicin del cursor
Line wrap (contina en la siguiente lnea si no cabe)
Se pueden encadenar:
cout<<...<<...<<...;

LuisHernndezYez

Recuerda:lasinstruccionesterminanen;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 70

Con el insertor << podemos mostrar...


Cadenas de caracteres literales
Textos encerrados entre comillas dobles: "..."
cout<<"HolaMundo!";

Lascomillasnosemuestran!

LuisHernndezYez

Nmeros literales
Con o sin decimales, con signo o no: 123, 37, 3.1416, ...
cout<<"Pi=" <<3.1416;
Se muestran los caracteres que representan el nmero
endl

Fundamentosdelaprogramacin:TiposeinstruccionesI

Puntodecimal,NOcoma!

Pgina 71

El programa principal
La funcin main(): donde comienza la ejecucin...
#include<iostream>
usingnamespacestd;
int main()

//main()esdondeempiezalaejecucin

{
cout<<"HolaMundo!"<<endl;
return 0;
LuisHernndezYez

Contiene las instrucciones que hay que ejecutar

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 72

El programa principal
La funcin main():
Tipo de la funcin (int = entero): Tipo de valor que devuelve
Nombre de la funcin
int main()

Es una funcin!

{
...
return 0;

Cuerpo de la funcin (bloque de cdigo)

LuisHernndezYez

return 0;

Devuelve el resultado (0) de la funcin

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 73

Documentando el cdigo...
Comentarios (se ignoran):
#include<iostream>
usingnamespacestd;
intmain()//main()esdondeempiezalaejecucin
{
cout<<"HolaMundo!"<<endl;

LuisHernndezYez

...

Hasta el final de la lnea:


De varias lneas:

// Comentariodeunalnea
/* Comentariodevarias
lneasseguidas*/

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 74

La infraestructura
Cdigo para reutilizar:
#include<iostream>

Una directiva: empieza por #

usingnamespacestd;
intmain()//main()esdondeempiezalaejecucin
{
cout<<"HolaMundo!"<<endl;
return0;
LuisHernndezYez

Bibliotecas de funciones a nuestra disposicin

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 75

Bibliotecas
Se incluyen con la directiva #include:
#include<iostream>
(Utilidades de entrada/salida por consola)
Para mostrar o leer datos hay que incluir la biblioteca iostream

Espacios de nombres
En iostream hay espacios de nombres; cul queremos?

LuisHernndezYez

#include<iostream>
usingnamespacestd;

Es una instruccin: termina en ;

Siempre usaremos el espacio de nombres estndar (std)


Muchas bibliotecas no tienen espacios de nombres
Fundamentosdelaprogramacin:TiposeinstruccionesI

Compilacin y enlace
hola.cpp
(cdigofuente)

Pgina 76

Amenudoenunpaso
Compilador

Cdigo objeto de
la biblioteca iostream

hola.obj
(cdigoobjeto)

Enlazador

LuisHernndezYez

HolaMundo!

Cargador

Fundamentosdelaprogramacin:TiposeinstruccionesI

hola.exe
(ejecutable)

Pgina 77

Elementos del programa


Biblioteca
Directiva
Instruccin

Bloquedecdigo

LuisHernndezYez

Coloreadosintctico:

usingnamespacestd;

Tipo
Declaracin

Espaciodenombres

#include<iostream>

Palabrasreservadas

Cabeceradelafuncin

int main()
{

DirectivasTipos
Palabrasreservadasgenerales
DatosliteralesComentarios

Cadenadecaracteres

Variable

Constante

cout<<"HolaMundo!" <<endl;

Instruccin

Operador

Operador

Datosliterales

return0;

Instruccin

Nmero

Cuerpodelafuncin

Lasinstruccionesterminanen;
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 78

Uso de espacio en blanco


Separacin de elementos por uno o ms espacios en blanco
(espacios, tabuladores y saltos de lnea)
El compilador los ignora

LuisHernndezYez

#include<iostream>
usingnamespacestd;

#include<iostream>usingnamespacestd;
intmain(){cout<<"HolaMundo!"<<endl;
return0;}

intmain()
{
cout<<"HolaMundo!"<<endl;
return0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Cul se lee mejor?

Pgina 79

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 80

Programa con E/S por consola


Una plantilla para empezar:
#include<iostream>
usingnamespacestd;
int main()
{

LuisHernndezYez

Tu cdigo aqu!
return 0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 81

... recitado en la consola


Mostrar los textos con cout<<:
#include<iostream>
usingnamespacestd;
int main()
{
cout<<"EnunlugardelaMancha," <<endl;
cout<<"decuyonombrenoquieroacordarme," <<endl;

LuisHernndezYez

cout<<"nohamuchotiempoquevivaunhidalgodelosde
lanzaenastillero,..." <<endl;
return 0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 82

Introduccin del cdigo del programa


Terminamos cada lnea de cdigo con un salto de lnea ():
#include<iostream>
usingnamespacestd;

int main()
{
cout<<"EnunlugardelaMancha," <<endl;
cout<<"decuyonombrenoquieroacordarme," <<endl;

LuisHernndezYez

cout<<"nohamuchotiempoquevivaunhidalgodelosde
lanzaenastillero,..." <<endl;
return 0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 83

Introduccin del cdigo del programa


No hay que partir una cadena literal entre dos lneas:
cout<<"nohamuchotiempoquevivaunhidalgode
losde lanzaenastillero,..." <<endl;

La cadena no termina (1 lnea)!

LuisHernndezYez

No se entiende los (2 lnea)!

Veamos cmo nos muestra los errores el compilador...

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 84

Mantenimiento y reusabilidad
Usa espacio en blanco para separar los elementos:
cout<<"EnunlugardelaMancha," <<endl;

LuisHernndezYez

mejor que
cout<<"EnunlugardelaMancha,"<<endl;
Usa sangra (indentacin) para el cdigo de un bloque:
{
Tab
cout<<"EnunlugardelaMancha," <<endl;

...
3 esp.
return 0;
}

El estilo importa!
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 85

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 86

Operadores aritmticos
+

*
/

Suma
Resta
Multiplicacin
Divisin

LuisHernndezYez

Operadores binarios
operando_izquierdo
Operacin
3 +4
2.56 3
143 *2
45.45 /3

operadoroperando_derecho
Resultado
7
0.44
286
15.15

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 87

Nmeros literales (concretos)


Enteros: sin parte decimal
Signo negativo (opcional) + secuencia de dgitos
314312673211234

No se usan puntos de millares

LuisHernndezYez

Reales: con parte decimal


Signo negativo (opcional) + secuencia de dgitos
+ punto decimal + secuencia de dgitos
3.1416357.01.3332345.6789404.1

Punto decimal (3.1416), NO coma (3,1416)


Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 88

clculos.cpp

Ejemplo
#include<iostream>
usingnamespacestd;

LuisHernndezYez

int main()
Un texto
Un nmero
{
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;//Div.entera
cout<<"500.0/3=" <<500.0 /3 <<endl;//Div.real
return 0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 89

LuisHernndezYez

Divisin entera

Divisin real

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 90

Divisin entera o divisin real?


Ambos operandos enteros Divisin entera
Algn operando real Divisin real

LuisHernndezYez

Divisin
500 /3
500.0 /3
500 /3.0
500.0 /3.0

Resultado
166
166.667
166.667
166.667

Comprueba siempre que el tipo de divisin sea el que quieres

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 91

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 92

Datos que se mantienen en memoria


Variable: dato que se accede por medio de un nombre
Dato literal: un valor concreto
Variable: puede cambiar de valor (variar)

LuisHernndezYez

edad=19;//variableedadyliteral19
Las variables deben ser declaradas
Qu tipo de dato queremos mantener?
Valor numrico sin decimales (entero): tipo int
Valor numrico con decimales (real): tipo double
Declaracin: tipo nombre;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 93

Declaracin de variables
int cantidad;
double precio;

tipo nombre;
Memoria

Se reserva espacio suficiente

cantidad

precio

?
...

LuisHernndezYez

LAS VARIABLES NO SE INICIALIZAN


No se deben usar hasta que se les haya dado algn valor
Dnde colocamos las declaraciones?
Siempre, antes del primer uso
Habitualmente al principio de la funcin

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 94

Declaracin de variables
#include<iostream>
usingnamespacestd;
int main()
{

Memoria
cantidad

precio

total

?
...

int cantidad;

LuisHernndezYez

double precio,total;

return 0;

Podemos declarar varias de un mismo tipo


separando los nombres con comas

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 95

Capacidad de las variables


int
2.147.483.648 ... 2.147.483.647
2147483648 .. 2147483647
double
2,23 x10308 ... 1,79 x 10+308 y sus negativos

LuisHernndezYez

[+|] 2.23e308 .. 1.79e+308

Notacin cientfica

Problemas de precisin

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 96

Asignacin de valores a las variables (operador =)


variable = expresin;

Instruccin: termina en ;

cantidad 12
cantidad=12; //int
precio=39.95; //double
total=cantidad*precio;//Asigna479.4

LuisHernndezYez

Concordancia de tipos:

cantidad=12.5;

A la izquierda del = debe ir siempre una variable!!!

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 97

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 98

Expresiones
Secuencias de operandos y operadores
operando operador operandooperador operando...
total=cantidad*precio*1.18;

Expresin

LuisHernndezYez

A igual prioridad se evalan de izquierda a derecha


Parntesis para forzar ciertas operaciones
total=cantidad1+cantidad2*precio;
total=(cantidad1+cantidad2)*precio;

Unos operadores se evalan antes que otros


Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 99

Precedencia de los operadores


cantidad1=10;
cantidad2=2;
precio=40.0;
* y /

se evalan antes que

+ y

LuisHernndezYez

total=cantidad1+cantidad2*precio;
* antes que + 10 + 2 * 40,0 10 + 80,0 90,0
total=(cantidad1+cantidad2)*precio;
+ antes que * (10 + 2) * 40,0 12 * 40,0 480,0

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 100

variables.cpp

Ejemplo de uso de variables y expresiones

LuisHernndezYez

#include<iostream>
usingnamespacestd;
int main()
{
int cantidad;
double precio,total;
cantidad=12;
precio=39.95;
total=cantidad*precio;
cout<<cantidad<<"x"<<precio<<"="
<<total<<endl;
return 0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 101

Ejemplo de uso de variables


#include<iostream>
usingnamespacestd;
intmain()
{
int cantidad;
double precio,total;

Memoria
cantidad

precio

total

LuisHernndezYez

...

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 102

Ejemplo de uso de variables


#include<iostream>
usingnamespacestd;

cantidad

12

precio

total

?
...

LuisHernndezYez

intmain()
{
intcantidad;
doubleprecio,total;
cantidad=12;

Memoria

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 103

Ejemplo de uso de variables


#include<iostream>
usingnamespacestd;

cantidad
precio

12
39.95

total

?
...

LuisHernndezYez

intmain()
{
intcantidad;
doubleprecio,total;
cantidad=12;
precio=39.95;

Memoria

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 104

Ejemplo de uso de variables


#include<iostream>
usingnamespacestd;

cantidad

12

precio

39.95

total

479.4
...

LuisHernndezYez

intmain()
{
intcantidad;
doubleprecio,total;
cantidad=12;
precio=39.95;
total=cantidad*precio;

Memoria

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 105

Ejemplo de uso de variables

LuisHernndezYez

#include<iostream>
usingnamespacestd;

Memoria
cantidad

12

precio

39.95

intmain()
{
479.4
total
intcantidad;
doubleprecio,total;
...
cantidad=12;
precio=39.95;
total=cantidad*precio;
cout<<cantidad<<"x"<<precio<<"="
<<total<<endl;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 106

Ejemplo de uso de variables

LuisHernndezYez

#include<iostream>
usingnamespacestd;
intmain()
{
intcantidad;
doubleprecio,total;
cantidad=12;
precio=39.95;
total=cantidad*precio;
cout<<cantidad<<"x"<<precio<<"="
<<total<<endl;
return 0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 107

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

cin (iostream)

Pgina 108

character input stream

Lectura de valores de variables: operador >> (extractor)

cin>>cantidad;
Memoria

cin

>>cantidad;

cantidad

12
?
...

12
_

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 109

El extractor >>

cin>>variable;

Transforma los caracteres introducidos en datos


Cursor parpadeante: lugar de lectura del siguiente carcter
La entrada termina con Intro (cursor a la siguiente lnea)
El destino del extractor debe ser SIEMPRE una variable!

LuisHernndezYez

Se ignoran los espacios en blanco iniciales

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 110

Lectura de valores enteros (int)


Se leen dgitos hasta encontrar un carcter que no lo sea
12abc
12abc
12abc
12
Se asigna el valor 12 a la variable
El resto queda pendiente para la siguiente lectura
Recomendacin: Lee cada variable en una lnea
12

Lectura de valores reales (double)


Se leen dgitos, el punto decimal y otros dgitos
LuisHernndezYez

39.95.5abc

39.95abc

39.95

Se asigna el valor 39,95 a la variable; el resto queda pendiente


Recomendacin: Lee cada variable en una lnea
39.95
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 111

Qu pasa si el usuario se equivoca?


El dato no ser correcto
Aplicacin profesional: cdigo de comprobacin y ayuda
Aqu supondremos que los usuarios no se equivocan
En ocasiones aadiremos comprobaciones sencillas

LuisHernndezYez

Para evitar errores, lee cada dato en una instruccin aparte

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 112

Qu pasa si el usuario se equivoca?

LuisHernndezYez

int cantidad;
Amigable con el usuario!
double precio,total;
Qu tiene que introducir?
cout<<"Introducelacantidad:";
cin>>cantidad;
cout<<"Introduceelprecio:";
cin>>precio;
cout<<"Cantidad:" <<cantidad<<endl;
cout<<"Precio:" <<precio<<endl;

No se puede leer un entero 0 para cantidad y Error


La lectura del precio falla: precio no toma valor (basura)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 113

Qu pasa si el usuario se equivoca?


12 para cantidad
No se puede leer un real
0 para precio y Error
12 para cantidad
.5 0,5 para precio
Lo dems queda pendiente

LuisHernndezYez

Lectura correcta!!!

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 114

Divisin de dos nmeros


Pedir al usuario dos nmeros y mostrarle el resultado
de dividir el primero entre el segundo
Algoritmo.

Datos/clculos

1. Pedir el numerador
Variablenumerador (double)

2. Pedir el denominador

Variabledenominador (double)

LuisHernndezYez

3. Realizar la divisin, guardando el resultado


Variableresultado (double)
resultado=numerador/denominador

4. Mostrar el resultado
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 115

EntradaProcesoSalida
Muchos programas se ajustan a un sencillo esquema:

Declaraciones

Entrada

Procesamiento

Salida

1. Leer numerador
2. Leer denominador
LuisHernndezYez

3. Calcular divisin en resultado


4. Mostrar resultado

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 116

Divisin de dos nmeros


Pedir al usuario dos nmeros y mostrarle el resultado de dividir el
primero entre el segundo.
1.

Leer numerador
cin>>numerador;

2.

Leer denominador
cin>>denominador;

LuisHernndezYez

3.
4.

Calcular divisin en resultado


Mostrar resultado

resultado=numerador/denominador;

cout<<resultado;
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 117

Divisin de dos nmeros


#include<iostream>
usingnamespacestd;

divisin.cpp
Numerador:_129

_
Denominador:_
2

_
int main()
{
Declaraciones double numerador,denominador,resultado;
cout<<"Numerador:";
cin>>numerador;
Entrada
cout<<"Denominador:";
cin>>denominador;
Procesamiento resultado=numerador/denominador;
cout<<"Resultado:" <<resultado<<endl;
Salida
return0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 118

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 119

LuisHernndezYez

LuisHernndezYez

_
Resultado:_
64.5
64.5

Problema
Dadas la base y la altura de un tringulo, mostrar su rea

Refinamiento

LuisHernndezYez

Mostrar en la pantalla un texto que pida la base del tringulo. El usuario


introducir el valor con el teclado. Mostrar en la pantalla un texto que
pida la altura del tringulo. El usuario introducir el valor con el teclado.
Se calcular el rea del tringulo y se mostrar en la pantalla.

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 120

Objetos: Datos que maneja el programa


variable

cin
cadena literal

cout

Mostrar en la pantalla un texto que pida la base del tringulo. El usuario


introducir la base con el teclado. Mostrar en la pantalla un texto que
pida la altura del tringulo. El usuario introducir la altura con el
teclado. Se calcular el rea del tringulo y se mostrar en la pantalla.

LuisHernndezYez

cadena literal

variable
variable

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 121

Datos que maneja el programa: tipos


Objeto

Vara?

Nombre

Pantalla

Variable

cout

"Introduzcalabasedeltringulo:"

Constante

ninguno

Variable

base

Teclado

Variable

cin

"Introduzcalaalturadeltringulo:"

Constante

ninguno

Basedeltringulo

Tipo

double

double

Variable

altura

readeltringulo

double

Variable

area

LuisHernndezYez

Alturadeltringulo

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 122

Operaciones (acciones)
cout<<...

cin>>...

LuisHernndezYez

Mostrar en la pantalla un texto que pida la base del tringulo. El usuario


introducir la base con el teclado. Mostrar en la pantalla un texto que
pida la altura del tringulo. El usuario introducir la altura con el
teclado. Se calcular el rea del tringulo y se mostrar en la pantalla.

area =base*altura/2

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 123

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 tringulo
2. Leer del teclado el valor para la base del tringulo
3. Mostrar en la pantalla el texto que pida la altura
4. Leer del teclado el valor para la altura del tringulo
5. Calcular el rea del tringulo

LuisHernndezYez

6. Mostrar el rea del tringulo

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 124

#include<iostream>
usingnamespacestd;
int main()
{
Declaraciones
1. Mostrar en la pantalla el texto que pida la base del tringulo

Algoritmo
traducido
a cdigo
en C++

2. Leer del teclado el valor para la base del tringulo


3. Mostrar en la pantalla el texto que pida la altura del tringulo
4. Leer del teclado el valor para la altura del tringulo
5. Calcular el rea del tringulo

LuisHernndezYez

6. Mostrar el rea del tringulo

return 0;
}

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 125

tringulo.cpp

El programa: implementacin
tringulo?

int main()
{
double base,altura,area;//Declaraciones
cout<<"Introduzcalabasedeltringulo:";//1
cin>>base;//2
cout<<"Introduzcalaalturadeltringulo:";//3
cin>>altura;//4
area =base*altura/2;//5
//6
cout<<"Elreadeuntringulodebase" <<base
<<"yaltura"<<altura<<"es:" <<area <<endl;
return 0;
}

Recuerda: las instrucciones terminan en ;


Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 126

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 127

LuisHernndezYez

LuisHernndezYez

#include<iostream>
usingnamespacestd;

Variabilidad de los datos


"Introduzcalabasedeltringulo:"
3.141592653589

Literales
Constantes
Con nombre

Datos

base,altura,area

Identificadores

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 128

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 129

LuisHernndezYez

LuisHernndezYez

Variables

Pi=3.141592653589

palabras reservadas
Para variables y constantes con nombre
Nombre de un dato (para accederlo/modificarlo)
Deben ser descriptivos
Sintaxis:
a..z,A..Z,_
0..9,a..z,A..Z,_

LuisHernndezYez

cantidadprrecio

totalbasealturaarea

numerador

Al menos 32 caracteres significativos


Ni ees ni vocales acentuadas!
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 130

Palabras reservadas del lenguaje C++


asm

autoboolbreakcasecatchcharclassconst

const_cast

continuedefaultdeletedodouble

dynamic_cast

elseenumexplicitexternfalse

floatforfriendgoto

ifinlineintlong

mutablenamespacenewoperatorprivateprotected
publicregisterreinterpret_cast

LuisHernndezYez

signedsizeofstaticstatic_cast

returnshort
structswitch

templatethisthrowtruetrytypedeftypeid
typename

unionunsignedusingvirtualvoid

volatilewhile
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 131

a..z,A..Z,_

Qu identificadores son vlidos?


balance

_base_imponible

__edad

valor%100

interesAnual

EDAD12

_12_meses

clculoNmina
AlgunValor
valor?
____valor

salario_1_mes

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 132

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 133

LuisHernndezYez

LuisHernndezYez

100caracteres

aos

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

Tipos
Cada dato, de un tipo concreto
Cada tipo establece:

125
true
'a'
3.14159
"Hola"

El conjunto (intervalo) de valores vlidos

El conjunto de operaciones que se pueden realizar

LuisHernndezYez

Expresiones con datos de distintos tipos (compatibles):


Transformacin automtica de tipos (promocin de tipo)

Anexo del Tema 2: detalles tcnicos

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 134

int
Nmeros enteros (sin decimales)
1363, 12, 49
float
Nmeros reales
12.45, 3.1932, 1.16E+02
double
Nmeros reales (mayores intervalo y precisin)
char
Caracteres
'a' , '{', '\t'
bool
Valores lgicos (verdadero/falso)
true, false
string
Cadenas de caracteres (biblioteca string) "HolaMundo!"
void
Nada, ausencia de tipo, ausencia de dato (funciones)
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 135

Caracteres
Intervalo de valores: Juego de caracteres (ASCII)
Literales:
'a''%''\t'

1 byte

LuisHernndezYez

Constantes de barra invertida (o secuencias de escape):


Caracteres de control
'\t' = tabulador '\n' = salto de lnea

ISO88591
(ASCII extendido: cdigos 128..255)
ASCII (cdigos 32..127)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 136

Valores lgicos
Slo dos valores posibles:
Verdadero (true)
Falso (false)
Literales:
truefalse

LuisHernndezYez

Cualquier nmero distinto de 0 es equivalente a true


El 0 es equivalente a false

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 137

C++ distingue entre maysculas y minsculas


int: palabra reservada de C++ para declarar datos enteros
Int, INT o inT no son palabras reservadas de C++
true: palabra reservada de C++ para el valor verdadero

LuisHernndezYez

True o TRUE no son palabras reservadas de C++

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 138

Cadenas de caracteres
"Hola""Introduceelnumerador:""X142FG5TX?%A"

"

"
char

LuisHernndezYez

Secuencias de caracteres
Programas con variables de tipo string:
#include<string>
usingnamespacestd;

Las comillas tipogrficas (apertura/cierre) NO sirven


Asegrate de utilizar comillas rectas: ""

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 139

tipos.cpp

LuisHernndezYez

#include<iostream>
#include<string>
usingnamespacestd;//Unsolousing...paraambasbibliotecas
int main()
{
int entero=3;//Podemosasignar(inicializar)aldeclarar
double real=2.153;
char caracter ='a';
bool cierto=true;
string cadena="Hola";
cout<<"Entero:" <<entero<<endl;
cout<<"Real:" <<real<<endl;
cout<<"Carcter:" <<caracter <<endl;
cout<<"Booleano:" <<cierto<<endl;
cout<<"Cadena:" <<cadena<<endl;
return 0;
}

Cuntos nmeros hay en total en el programa?


Y caracteres? Y cadenas? Y booleanos?

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 140

signed / unsigned : con signo (por defecto) / sin signo


short / long : menor / mayor intervalo de valores

Tipo

Intervalo

int

2147483648 .. 2147483647

unsignedint

0 .. 4294967295

shortint

32768 .. 32768

LuisHernndezYez

unsignedshortint 0 .. 65535
longint

2147483648 .. 2147483647

unsignedlongint

0 .. 4294967295

double

+| 2.23e308 .. 1.79e+308

longdouble

+| 3.37E4932 .. 1.18E+4932

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 141

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 142

[modificadores]tipo lista_de_variables;
Opcional

lista_de_variables

Identificador

LuisHernndezYez

,
int i,j,l;
shortintunidades;
unsignedshortintmonedas;
double balance,beneficio,perdida;

Programacin con buen estilo:


Identificadores descriptivos
Espacio tras cada coma
Nombres de las variables en minsculas
(Varias palabras: capitaliza cada inicial: interesPorMes)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 143

Se reserva memoria suficiente para cada tipo de dato


Memoria

int inicio;
shortintunidades;
double balance;

inicio

01
02
03
04

unidades

05
06

balance

07
08
09
10
11
12

LuisHernndezYez

13
14
15
...

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 144

En C++ las variables no se inicializan automticamente!


Una variable debe ser haber sido inicializada antes de ser accedida!
Cmo se inicializa una variable?
Al leer su valor (cin>>)
Al asignarle un valor (instruccin de asignacin)
Al declararla
Inicializacin en la propia declaracin:

LuisHernndezYez

Identificador

Expresin

int i=0,j,l=26;
shortintunidades=100;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Expresin: valor compatible

Enparticular,unaexpresin
puedeserunliteral

Pgina 145

Obtencin del valor de una variable


Nombre de la variable en una expresin
cout<<balance;
cout<<interesPorMes *meses /100;

Modificacin del valor de una variable

Las variables han de haber sido previamente declaradas

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 146

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 147

LuisHernndezYez

LuisHernndezYez

Nombre de la variable a la izquierda del =


balance =1214;
porcentaje =valor/30;

El operador =
Variable

Expresin

A la izquierda, SIEMPRE una variable

int i,j=2;

LuisHernndezYez

i=23 +j*5;//itomaelvalor33

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 148

Errores
int a,b,c;
5 =a;
//ERROR:unliteralnopuederecibirunvalor
a+23 =5;
//ERROR:nopuedehaberunaexpresinalaizda.
b="abc";
//ERROR:unenteronopuedeguardarunacadena

LuisHernndezYez

c=23

5;

//ERROR:expresinnovlida(faltaoperador)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 149

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

01

02
03
04

Memoria

i
23 +2 *5

08

03

07

33

02

04

05
06

01

05

06
07
08

09

09

10

10
...

LuisHernndezYez

...

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 150

Necesitamos una variable auxiliar


double a=3.45,b=127.5,aux;
a

3.45

127.5

aux

aux=a;

LuisHernndezYez

a=b;

b=aux;

Fundamentosdelaprogramacin:TiposeinstruccionesI

3.45

127.5

aux

3.45

127.5

127.5

aux

3.45

127.5

3.45

aux

3.45

Pgina 151

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 152

LuisHernndezYez

Operaciones sobre valores de los tipos


Cada tipo determina las operaciones posibles
Tipos de datos numricos (int, float y double):
Asignacin (=)
Operadores aritmticos
Operadores relacionales (menor, mayor, igual, ...)
Tipo de datos bool:
Asignacin (=)
Operadores lgicos (Y, O, NO)
Tipos de datos char y string:
Asignacin (=)
Operadores relacionales (menor, mayor, igual, ...)
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 153

Operadores para tipos de datos numricos

LuisHernndezYez

Operador Operandos Posicin

float / double

int

1(monario) Prefijo

2(binario)

Infijo

Suma

2(binario)

Infijo

Resta

2(binario)

Infijo

Producto

2(binario)

Infijo

Div.entera

Divisinreal

2(binario)

Infijo

Mdulo

Noaplicable

Cambiodesigno

++

1(monario) Prefijo/postfijo

Incremento

1(monario) Prefijo/postfijo

Decremento

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 154

Operadores monarios y operadores binarios


Operadores monarios (unarios)
Cambio de signo ():
Delante de variable, constante o expresin entre parntesis
saldoRATIO(3 *a b)

Incremento/decremento (slo variables) (prefijo/postfijo):

LuisHernndezYez

++interes

mesesj++

//1ms1menos

Operadores binarios
Operando izquierdo operador operando derecho
Operandos: literales, constantes, variables o expresiones
2 +3

a*RATIOa+b

(a%b)*(c/d)
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 155

Divisin entera o divisin real?

Ambos operandos enteros: divisin entera


int i=23,j=2;
cout<<i/j;//Muestra11

LuisHernndezYez

Algn operando real: divisin real


int i=23;
double j=2;
cout<<i/j;//Muestra11.5

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 156

Mdulo (resto de la divisin entera)

Ambos operandos han de ser enteros


int i=123,j=5;
cout<<i%j;//Muestra3

LuisHernndezYez

Divisin entera:
No se obtienen decimales Queda un resto
123

24

123 %5

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 157

Operadores de incremento y decremento

++/

Incremento/decremento de la variable numrica en una unidad


Prefijo: Antes de acceder
i=i+1;
j=i;

int i=10,j;
j=++i;//Incrementaantesdecopiar
cout<<i<<" "<<j;//Muestra11 11

Postfijo: Despus de acceder

LuisHernndezYez

j=i;
i=i+1;

int i=10,j;
j=i++;//Copiaydespusincrementa
cout<<i<<" "<<j;//Muestra11 10
No mezcles ++ y con otros operadores

Fundamentosdelaprogramacin:TiposeinstruccionesI

LuisHernndezYez

#include<iostream>
usingnamespacestd;

Pgina 158

operadores.cpp

int main(){
int entero1=15,entero2=4;
double real1=15.0,real2=4.0;
cout<<"Operacionesentrelosnmeros15y4:"<<endl;
cout<<"Divisinentera(/):"<<entero1/entero2<<endl;
cout<<"Restodeladivisin(%):"<<entero1%entero2<<endl;
cout<<"Divisinreal(/):"<<real1/real2<<endl;
cout<<"Num="<<real1<<endl;
real1=real1;
cout<<"Cambiadesigno():"<<real1<<endl;
real1=real1;
cout<<"Vuelveacambiar():"<<real1<<endl;
cout<<"Seincrementaantes(++prefijo):"<<++real1<<endl;
cout<<"Semuestraantesdeincrementar(posfijo++):"
<<real1++<<endl;
cout<<"Yaincrementado:" <<real1<<endl;
return 0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 159

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 160

En qu orden se evalan los operadores?


3 +5 *2 /2 1
De izquierda a derecha?
De derecha a izquierda?
Unos antes que otros?

LuisHernndezYez

Precedencia de los operadores (prioridad):


Se evalan antes los de mayor precedencia
Y si tienen igual prioridad?
Normalmente, de izquierda a derecha
Parntesis: fuerzan a evaluar su subexpresin

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 161

Precedencia

Operadores

Mayor prioridad

++ (postfijos)
++ (prefijos)
(cambio de signo)
*/%

Menor prioridad

LuisHernndezYez

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

Misma precedencia:
Izquierda antes

Mayor
precedencia

Misma precedencia:
Izquierda antes

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 162

((3 + 5)*4 +12)/4 (3 * 2 1)


(8 *4 +12)/4

Primero, los parntesis...

* antes que
(6 1)

* antes que +
(32 +12)/4

44 /4 5
/ antes que
LuisHernndezYez

11 5

Pon espacio antes y despus


de cada operador binario

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 163

frmula.cpp

#include<iostream>
usingnamespacestd;

LuisHernndezYez

int main()
{
double x,f;
cout<<"IntroduceelvalordeX:";
cin>>x;
f=3 *x*x/5 +6 *x/7 3;
cout<<"f(x)=" <<f<<endl;
return 0;
}
Usa parntesis para mejorar la legibilidad:
f=(3 *x*x/5)+(6 *x/7) 3;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 164

variable =variable operador op_derecho;

La misma

LuisHernndezYez

variable operador=op_derecho;
Asignacin
a=a+12;
a=a*3;
a=a 5;
a=a/37;
a=a%b;

Abreviatura
a+=12;
a*=3;
a=5;
a/=37;
a%=b;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Igual precedencia
que la asignacin
De momento,
mejor evitarlas

Pgina 165

Valor siguiente al mximo?


Valor mayor del mximo (o menor del mnimo) del tipo
shortinti=32767;//Valormximoparashortint
i++;//32768nocabe enunshortint
cout<<i;//Muestra 32768

Bit de signo
0 1 1 1 1 1 1 1
0 = positivo
+ 0 0 0 0 0 0 0 0
1 = negativo

32767

+ 1

0 0 0 0 0 0 0 0

32768

LuisHernndezYez

1 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1

Pgina 166

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 167

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Declaracin de constantes Modificador de acceso const


Variables inicializadas a las que no dejamos variar

const

Declaracindevariableconinicializador

constshortintMeses=12;
constdouble Pi=3.141592,

LuisHernndezYez

RATIO=2.179 *Pi;

La constante no podr volver a


aparecer a la izquierda de un =

Programacin con buen estilo:


Pon en mayscula la primera letra
de una constante o todo su nombre

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 168

Aumentan la legibilidad del cdigo

vs.

cambioPoblacion =(0.1758 0.1257)*poblacion;

cambioPoblacion =(RatioNacimientos RatioMuertes)*poblacion;

Facilitan la modificacin del cdigo

LuisHernndezYez

double compra1=bruto1*18 /100;


3 cambios
double compra2=bruto2*18 /100;
double total=compra1+compra2;
cout<<total<<"(IVA:"<<18 <<"%)" <<endl;
Cambio del IVA al 21%?
constint IVA=18;
double compra1=bruto1*IVA/100;
double compra2=bruto2*IVA/100;
1 cambio
double total=compra1+compra2;
cout<<total<<"(IVA:"<<IVA<<"%)" <<endl;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 169

constantes.cpp

int main(){
const double Pi=3.141592;
double radio=12.2,circunferencia;
circunferencia=2 *Pi*radio;
cout<<"Circunferenciadeuncrculoderadio"
<<radio<<":" <<circunferencia<<endl;
const double Euler =2.718281828459;//Nmeroe
cout<<"Nmeroealcuadrado:"<<Euler *Euler <<endl;
const int IVA=21;
int cantidad=12;
double precio=39.95,neto,porIVA,total;
neto=cantidad*precio;
porIVA =neto*IVA/100;
total=neto+porIVA;
cout<<"Totalcompra:"<<total<<endl;
return 0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 170

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 171

LuisHernndezYez

LuisHernndezYez

#include<iostream>
usingnamespacestd;

#include<cmath>
Algunas ...

abs(x)

Valor absoluto de x

LuisHernndezYez

pow(x,y) x elevado a y
sqrt(x)

Raz 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 ms prximo

trunc(x)

Prdida de la parte decimal (entero)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 172

mates.cpp

LuisHernndezYez

#include<iostream>
usingnamespacestd;
#include<cmath>
int main(){
double x,y,f;
pow() con argumento entero:
cout<<"ValordeX:";
Usa el molde double():
cin>>x;
pow(double(i),5)
cout<<"ValordeY:";
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;
}
Pon un espacio detrs de cada coma en las listas de argumentos
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 173

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 174

char
Asignacin, ++/ y operadores relacionales

Funciones para caracteres (biblioteca cctype)


isalnum(c)
isalpha(c)
isdigit(c)
islower(c)
isupper(c)

true si c es una letra o un dgito


true si c es una letra
true si c es un dgito
true si c es una letra minscula
true si c es una letra mayscula

LuisHernndezYez

false en caso contrario


toupper(c)
tolower(c)

devuelve la mayscula de c
devuelve la minscula de c

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 175

caracteres.cpp

int main(){
char caracter1='A',caracter2='1',caracter3='&';
cout<<"Carcter1(" <<caracter1<<")."<<endl;
cout<<"Alfanumrico?"<<isalnum(caracter1)<<endl;
cout<<"Alfabtico?"<<isalpha(caracter1)<<endl;
cout<<"Dgito?"<<isdigit(caracter1)<<endl;
cout<<"Mayscula?"<<isupper(caracter1)<<endl;
caracter1=tolower(caracter1);
cout<<"Enminscula:"<<caracter1<<endl;
cout<<"Carcter2(" <<caracter2<<")."<<endl;
cout<<"Alfabtico?"<<isalpha(caracter2)<<endl;
cout<<"Dgito?"<<isdigit(caracter2)<<endl;
cout<<"Carcter3(" <<caracter3<<")."<<endl;
cout<<"Alfanumrico?"<<isalnum(caracter3)<<endl;
cout<<"Alfabtico?"<<isalpha(caracter3)<<endl;
cout<<"Dgito?"<<isdigit(caracter3)<<endl;
return 0;
1 true / 0 false
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 176

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 177

LuisHernndezYez

LuisHernndezYez

...
#include<cctype>

Operadores relacionales
Comparaciones (condiciones)
Condicin simple ::= Expresin Operador_relacional Expresin

Concordancia de tipo entre las expresiones

LuisHernndezYez

Resultado: bool (true o false)


<

menor que

<=

menor o igual que

>

mayor que

>=

mayor o igual que

==

igual que

!=

distinto de

Fundamentosdelaprogramacin:TiposeinstruccionesI

Operadores(prioridad)
...
*/%
+
< <=>>=
==!=
=+==*=/=%=
Pgina 178

Menor prioridad que los operadores aditivos y multiplicativos


bool resultado;
int a=2,b=3,c=4;
resultado=a< 5;//2<5 true
resultado=a*b+c>= 12;//10>=12 false
resultado=a*(b+c)>= 12;//14>=12 true
resultado=a!= b;//2!=3 true
resultado=a*b> c+5;//6>9 false

LuisHernndezYez

resultado=a+b== c+1;//5==5 true


No confundas el operador de igualdad (==)
con el operador de asignacin (=)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 179

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 180

Seleccin: bifurcacin condicional


true

LuisHernndezYez

cdigoT

Condicin

false
cdigoF

if (condicin) {
cdigoT
}
else{
cdigoF
}

int num;
cout<<"Nmero:";
Opcional:puedenohaberelse
cin>>num;
if (num%2 ==0){
cout<<num<<"espar";
}
else {
cout<<num<<"esimpar";
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 181

seleccin.cpp

int main(){
intop1=13,op2=4;
intopcion;
cout<<"1 Sumar"<<endl;
cout<<"2 Restar"<<endl;
cout<<"Opcin:";
cin>>opcion;
if (opcion ==1){
cout<<op1+op2<<endl;
}
else {
cout<<op1 op2<<endl;
}
return0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 182

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 183

LuisHernndezYez

LuisHernndezYez

#include<iostream>
usingnamespacestd;

Agrupacin de instrucciones
Grupo de instrucciones a ejecutar en una rama del if
{

instruccin

Tab

LuisHernndezYez

3 esp.

int num,total=0;
cin>>num;
if (num>0)
{
cout<<"Positivo";
total=total+num;
}
cout<<endl;

intruccin1
intruccin2
...
intruccinN

mbito local
(declaraciones locales)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 184

Posicin de las llaves: cuestin de estilo


if (num>0)
{
cout<<"Positivo";
total=total+num;
}
cout<<endl;

if (num>0){
cout<<"Positivo";
total=total+num;
}
cout<<endl;

No necesitamos las llaves si slo hay una instruccin

LuisHernndezYez

if (num>0){
cout<<"Positivo";
}

if (num>0)
cout<<"Positivo";

Usaremos siempre llaves por simplicidad...


Evita poner el if y la instruccin objetivo en la misma lnea:
if (num>0)cout<<"Positivo";
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 185

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 186

Repeticin o iteracin condicional


while

condicin

cuerpo
Bloque
de cdigo

true

Condicin

false

LuisHernndezYez

Cuerpo

while (condicin) {
cuerpo
}

Si la condicin es false al empezar,


no se ejecuta el cuerpo ninguna vez
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 187

serie.cpp

LuisHernndezYez

#include<iostream>
usingnamespacestd;
int main(){
inti=1,n=0,suma=0;
while (n<=0){//Slonpositivo
cout<<"Cuntosnmerosquieressumar?";
cin>>n;
}
while(i<=n){
suma=suma+i;
i++;
}
cout<<"Sumatoriodei(1a" <<n <<")="
<<suma<<endl;
return0;
}
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 188

Iteracin condicional
while(i<=n){
suma=suma+i;
i++;
}

true

i<=n

false

6
2
3
4
5
1

suma

15
10
1
3
6
0

LuisHernndezYez

suma+=i;
i++;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 189

LuisHernndezYez

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 190

#include<iostream>
usingnamespacestd;

Flujos de texto (streams)

Conectan la ejecucin del programa con los dispositivos de E/S


Son secuencias de caracteres
Entrada por teclado: flujo de entrada cin (tipo istream)
Salida por pantalla: flujo de salida cout (tipo ostream)

cin
7

cout
5

Programa 1

= l a t o T

LuisHernndezYez

Biblioteca iostream con espacio de nombres std


Extractor

Flujodeentrada

>>

Variable

Insertor

Flujodesalida

<<

Expresin

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 191

cin

>>

Variable

LuisHernndezYez

Salta los espacios en blanco (espacios, tabuladores o saltos de lnea)


char
Se lee un carcter en la variable
int
Se leen dgitos y se transforman en el valor a asignar
float/double:
Se leen dgitos (quiz el punto y ms dgitos) y se asigna el valor
bool:
Si se lee 1, se asigna true; con cualquier otro valor se asigna false
Se amigable con el usuario
Lee cada dato en una lnea
cout<<"Introducetuedad:";
cin>>edad;
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 192

#include<string>
usingnamespacestd;

cin>>cadena
cin.sync()

termina con el primer espacio en blanco


descarta la entrada pendiente

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

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

LuisHernndezYez

apellidos recibe "Antonio"

Cmo leer varias palabras?


Siguiente pgina...
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 193

Lectura sin saltar los espacios en blanco iniciales


Llamada a funciones con el operador punto (.) :
El operador punto permite llamar a una funcin sobre una variable
variable.funcin(argumentos)

Lectura de un carcter sin saltar espacios en blanco:


cin.get(c);//Leeelsiguientecarcter

Lectura de cadenas sin saltar los espacios en blanco:


getline(cin,cad);
LuisHernndezYez

Lee todo lo que haya hasta el final de la lnea (Intro)


Recuerda:
Espacios en blanco son espacios, tabuladores, saltos de lnea, ...
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 194

cout

Expresin

<<

Representacin textual de los datos


int meses=7;
cout<<"Total:"<<123.45 <<endl<<"Meses:"<<meses;

El valor double 123.45 se guarda en memoria en binario


Su representacin textual es:'1''2''3''.''4''5'
double d=123.45;
d

123.45

Un nmero real!

LuisHernndezYez

cout<<d;
La biblioteca iostream
define la constante endl
como un salto de lnea

5 4 . 3 2 1
Un texto!
(secuencia de caracteres)

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 195

Expresin

<<

cout

Programa

cout
int meses=7;
cout<<"Total:"<<123.45 <<endl<<"Meses:"<<meses;
cout<<123.45 <<endl<<"Meses:"<<meses;
cout<<endl<<"Meses:"<<meses;

LuisHernndezYez

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

cout<<meses;

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 196

#include<iomanip>
Constantes y funciones a enviar a cout para ajustar el formato de salida
Biblioteca Constante/funcin
iostream

LuisHernndezYez

iomanip

Propsito

showpoint/
noshowpoint

Mostrar o no el punto decimal para reales sin


decimales (34.0)

fixed

Notacin de punto fijo (reales) (123.5)

scientific

Notacin cientfica (reales) (1.235E+2)

boolalpha

Valores bool como true / false

left/right

Ajustar a la izquierda/derecha (por defecto)

setw(anchura)*

N de caracteres (anchura) para el dato

setprecision(p)

Precisin: N de dgitos (en total)


Con fixed o scientific, n de decimales

*setw() slo afecta al siguiente dato que se escriba,


mientras que los otros afectan a todos
Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 197

bool fin=false;
cout<<fin<<">" <<boolalpha <<fin<<endl;

0>false

double d=123.45;
char c='x';
int i=62;
cout<<d<<c<<i<<endl;

123.45x62

cout<<"|" <<setw(8)<<d<<"|"<<endl;

|123.45|

cout<<"|" <<left<<setw(8)<<d<<"|"<<endl;

|123.45|

cout<<"|" <<setw(4)<<c<<"|"<<endl;

|x|

cout<<"|" <<right<<setw(5)<<i<<"|"<<endl;

|62|

cout<<e<<" "<<showpoint<<e<<endl;

96 96.0000

cout<<scientific<<d<<endl;

1.234500e+002

cout<<fixed<<setprecision(8)<<d<<endl;

123.45000000

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 198

Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 199

LuisHernndezYez

LuisHernndezYez

double e=96;

Los programas pueden incluir otras funciones adems de main()


Forma general de una funcin en C++:

LuisHernndezYez

tipo nombre(parmetros)//Cabecera
{
//Cuerpo
}

Tipo de dato que devuelve la funcin como resultado


Parmetros para proporcionar datos a la funcin
Declaraciones de variables separadas por comas
Cuerpo: secuencia de declaraciones e instrucciones
Un bloque de cdigo!

Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 200

Datos locales: declarados en el cuerpo de la funcin


Datos auxiliares que utiliza la funcin (puede no haber)
Parmetros: declarados en la cabecera de la funcin
Datos de entrada de la funcin (puede no haber)
Ambos son de uso exclusivo de la funcin y no se conocen fuera

LuisHernndezYez

double f(intx,int y){


//Declaracindedatoslocales:
double resultado;
//Instrucciones:
resultado=2 *pow(x,5) +sqrt(pow(x,3)
/pow(y,2)) /abs(x*y) cos(y);
return resultado;//Devolucindelresultado
}
Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 201

Llamada a una funcin con parmetros


Nombre(Argumentos)
Al llamar a la funcin:
Tantos argumentos entre los parntesis como parmetros
Orden de declaracin de los parmetros
Cada argumento: mismo tipo que su parmetro
Cada argumento: expresin vlida (se pasa el resultado)

LuisHernndezYez

Se copian los valores resultantes de las expresiones


en los correspondientes parmetros
Llamadas a la funcin: en expresiones de otras funciones
int valor=f(2,3);

Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 202

Se copian los argumentos en los parmetros


int funcion(int x,double a){
...
}

Memoria
i

124

3.0
...

int main(){
int i=124;

...

double d=3;

124

funcion(i,33 *d);

99.0

LuisHernndezYez

...

...

return0;//main()devuelve0alS.O.
}

Los argumentos no se modifican

Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 203

La funcin ha de devolver un resultado


La funcin termina su ejecucin devolviendo un resultado
La instruccin return (slo una en cada funcin)
Devuelve el dato que se pone a continuacin (tipo de la funcin)
Termina la ejecucin de la funcin
El dato devuelto sustituye a la llamada de la funcin:
int cuad(int x){

int main(){

return x*x;

cout<<2 *cuad(16);

LuisHernndezYez

x=x*x;
}

return 0;
Esta instruccin
no se ejecutar nunca

256

Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 204

Qu funciones hay en el programa?


Colocaremos las funciones despus de main()
Son correctas las llamadas a funciones del programa?
Existe la funcin?
Concuerdan los argumentos con los parmetros?
Prototipos tras las inclusiones de bibliotecas

LuisHernndezYez

Prototipo de funcin: Cabecera de la funcin terminada en ;


double f(intx,int y);
int funcion(int x,double a)
int cuad(int x);
...
main() es la nica funcin
que no hay que prototipar
Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 205

#include<iostream>
usingnamespacestd;
#include<cmath>

LuisHernndezYez

//Prototiposdelasfunciones(exceptomain())
bool par(int num);
boolletra(char car);
intsuma(int num);
double formula(int x,inty);
int main(){
intnumero,sum,x,y;
char caracter;
double f;
cout<<"Entero:";
cin>>numero;
if (par(numero)){
cout<<"Par";
}
...
Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 206

LuisHernndezYez

else{
cout<<"Impar";
}
cout<<endl;
if (numero>1){
cout<<"Sumatoriode1a" <<numero<<":"
<<suma(numero)<<endl;
}
cout<<"Carcter:";
cin>>caracter;
if(!letra(caracter)){
cout<<"no";
}
cout<<"esunaletra" <<endl;
cout<<"f(x,y)=" <<formula(x,y)<<endl;
//Losargumentospuedenllamarseigualonoquelosparmetros
return 0;
}
...
Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 207

//Implementacindelasfuncionespropias
boolpar(int num){
bool esPar;
if (num%2==0){
esPar =true;
}
else {
esPar =false;
}

LuisHernndezYez

return esPar;
}
...

Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 208

LuisHernndezYez

bool letra(char car){


bool esLetra;
if ((car>='a')&&(car<='z')||(car>='A')&&(car<='Z')){
esLetra =true;
}
else {
esLetra =false;
}
return esLetra;
}
int suma(int num){
int sum =0,i=1;
while (i<num){
sum =sum +i;
i++;
}
return sum;
}
...
Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 209

funciones.cpp

double formula(int x,inty){


double f;
f=2 *pow(x,5)+sqrt(pow(x,3)/pow(y,2))
/abs(x*y) cos(y);
return f;

LuisHernndezYez

Fundamentosdeprogramacin:TiposeinstruccionesI

Pgina 210

Licencia CC (Creative Commons)


Este tipo de licencias ofrecen algunos derechos a terceras personas
bajo ciertas condiciones.
Este documento tiene establecidas las siguientes:
Reconocimiento (Attribution):
En cualquier explotacin de la obra autorizada por la licencia
har falta reconocer la autora.

LuisHernndezYez

No comercial (Non commercial):


La explotacin de la obra queda limitada a usos no comerciales.
Compartir igual (Share alike):
La explotacin autorizada incluye la creacin de obras derivadas
siempre que mantengan la misma licencia al ser divulgadas.

Pulsa en la imagen de arriba a la derecha para saber ms.


Fundamentosdelaprogramacin:TiposeinstruccionesI

Pgina 211

Вам также может понравиться