Академический Документы
Профессиональный Документы
Культура Документы
ndice general
1.1. El ordenador, algoritmos y programas . . . . . . .
1.1.2. Algoritmos . . . . . . . . . . . . . . . . . . . .
1.1.4. Programas . . . . . . . . . . . . . . . . . . . . 12
1.2. Especificacin de programas . . . . . . . . . . . . . 16
1.2.1. Escritura y organizacin de un programa . . 16
1.2.2. Elementos bsicos de un lenguaje de programacin . . . . . . . . . . . . . . . . . . . . 23
1.2.2.1. Tokens y reglas sintcticas . . . . . 23
1.2.2.2. Palabras reservadas . . . . . . . . . 24
1.2.3. Tipos de errores en la programacin . . . . 26
1.3. Datos y tipos de datos . . . . . . . . . . . . . . . . . 28
1.3.1. Representacin en memoria de datos e instrucciones . . . . . . . . . . . . . . . . . . . . 28
1.3.2. Datos y tipos de datos . . . . . . . . . . . . . 29
1.3.2.1. Literales . . . . . . . . . . . . . . . . 31
1.3.2.2. Declaracin de datos . . . . . . . . 32
1.3.2.3. Datos constantes . . . . . . . . . . . 36
1.3.2.4. Normas para la eleccin del identificador . . . . . . . . . . . . . . . . 40
NDICE GENERAL
NDICE GENERAL
T EMA 1. P ROGRAMACIN
1.1.
EN
C++: I NTRODUCCIN
1.1.1.
Hardware
Software (Programa)
Usuario
Lenguaje de Programacin
Programador
5
Tema 1. Programacin en C++: Introduccin
Estructura de un ordenador:
ENTRADA
datos e instrucciones
MEMORIA MASIVA
datos e instrucciones
MEMORIA PRINCIPAL
datos
UNIDAD
ARITMETICO-LOGICA
UNIDAD
DE CONTROL
CPU
datos
SALIDA
1.1.2.
A LGORITMOS
1.1.3.
L ENGUAJES
DE PROGRAMACIN
1. Lenguaje mquina.
10
11
1.1.4.
12
P ROGRAMAS
Al cdigo escrito en un lenguaje concreto se le denomina cdigo fuente. ste se guarda en ficheros de texto normales (en
el caso de C++ suelen tener extensin .cpp).
Ecuacion.cpp
/*
Programa para resolver la ecuacin de primer grado:
ax + b = 0
*/
#include <iostream> // Inclusin de los recursos de E/S
// (cin y cout)
using namespace std;
int main(){
double a, b, x;
// Programa Principal
// Declara las variables a, b, x
13
14
Ecuacion.cpp es un simple fichero de texto. Para obtener el programa ejecutable (el fichero en binario que puede ejecutarse en
un ordenador) a partir del cdigo fuente, se utiliza un compilador:
Cdigo fuente
Programa
Compilacin
del programa
ejecutable
La extensin usual del programa ejecutable en Windows es
.exe
Compilador
15
Otro ejemplo:
/*
Programa para calcular la hipotenusa de un tringulo.
*/
#include <iostream>
#include <cmath>
using namespace std;
int main(){
//Programa Principal
double lado1, lado2, hip; //Declara variables para guardar
//los dos lados y la hipotenusa
cout << "Introduzca la longitud del primer cateto: ";
cin >> lado1;
cout << "Introduzca la longitud del segundo cateto: ";
cin >> lado2;
hip = sqrt(lado1*lado1 + lado2*lado2);
cout << "\n La hipotenusa vale " << hip;
}
1.2.
1.2.1.
E SPECIFICACIN
E SCRITURA
16
DE PROGRAMAS
Y ORGANIZACIN DE UN PROGRA -
MA
A continuacin aparece int main(){ que indica que comienza el programa principal. ste se extiende desde la llave
abierta {, hasta encontrar la correspondiente llave cerrada.
Dentro del programa principal van las sentencias que componen el programa. Una sentencia es una parte del cdigo
fuente que el compilador puede traducir en una instruccin
en cdigo binario.
17
Declara tres datos (variables) de tipo real que el programador puede usar en el programa.
Sentencias de clculo, a travs de la asignacin =
lado1 = 7;
lado2 = 5;
hip = sqrt(lado1*lado1 + lado2*lado2);
18
19
20
Sentencias para leer datos desde el dispositivo de entrada establecido por defecto. Por ahora, ser el teclado. Se
construyen usando cin, que es un recurso externo incluido
en la biblioteca iostream.
Su sintaxis ms elemental es la siguiente
cin >> variable;
Por ejemplo, cin >> lado1, espera a que el usuario introduzca un valor real (double) desde el teclado (dispositivo
de entrada) y, cuando se pulsa la tecla Intro, lo almacena
en la variable lado1. Conforme se va escribiendo el valor,
ste se muestra en pantalla, incluyendo el salto de lnea.
Es una asignacin en tiempo de ejecucin
Las entradas de datos deben etiquetarse adecuadamente:
// MAL:
cin >> lado1;
cin >> lado2;
// BIEN:
cout << "Introduzca la longitud del primer cateto: ";
cin >> lado1;
cout << "Introduzca la longitud del segundo cateto: ";
cin >> lado2;
21
22
1.2.2.
23
1.2.2.1.
1.2.2.2.
24
PALABRAS RESERVADAS
Errores sintcticos
int main(){
double main;
// main
es un nombre de dato incorrecto
double double; // double es un nombre de dato incorrecto
}
25
break
double
if
sizeof
void
case
else
int
static
volatile
char
enum
long
struct
while
const
extern
register
switch
continue
float
return
typedef
default
for
short
union
and_eq
compl
friend
operator
static_cast
typename
asm
const_cast
inline
or
template
using
bitand
delete
mutable
or_eq
this
virtual
bitor
dynamic_cast
namespace
private
throw
wchar_t
bool
explicit
new
protected
true
xor
catch
export
not
public
try
xor_eq
1.2.3.
T IPOS
26
DE ERRORES EN LA PROGRAMACIN
*/
27
Errores lgicos
Se ha generado el programa ejecutable, pero el programa
ofrece una solucin equivocada.
.........
lado1 = 4;
lado2 = 9;
hip = sqrt(lado1+lado1+lado2*lado2);
.........
1.3.
DATOS
1.3.1.
28
Y TIPOS DE DATOS
R EPRESENTACIN
EN MEMORIA DE DATOS E
INSTRUCCIONES
MEMORIA PRINCIPAL
0101100 11110110 00000001 10100001
0001111 11100011 10100100 10111001
1111111 00111111 11010010 00100100
ENTRADA
instrucciones
datos e instrucciones
UNIDAD
DE CONTROL
CPU
SALIDA
datos
UNIDAD
ARITMETICO-LOGICA
datos
29
Datos
"Juan Prez" 1 0 1 1 .. 0 1 1
75225813
1 1 0 1 .. 0 0 0
3.14159
0 0 0 1 .. 1 1 1
Instrucciones
Abrir Fichero 0 0 0 1 .. 1 1 1
1 1 0 1 .. 0 0 0
Imprimir
1.3.2.
DATOS
Y TIPOS DE DATOS
Juan Prez
75225813
3.14159
30
El compilador reconoce distintas categoras de datos (numricas, texto, etc.). Necesitamos almacenar muchos tipos de informacin (enteros, reales, caracteres, cadenas de caracteres,
etc.). Para cada tipo, el lenguaje ofrece un tipo de dato.
Por ejemplo, en C++:
Tipos
Lgico : bool
Puntero : *
Numricos
Matriz
Cadena de caracteres : string
Compuestos
Registro
Fichero
1.3.2.1.
31
L ITERALES
1.3.2.2.
32
D ECLARACIN DE DATOS
Cada dato que se use en un programa debe declararse al principio (despus de main), asocindole un tipo de dato concreto
y un identificador.
Al declarar un dato, el compilador reserva una zona de memoria para trabajar con l. Ningn otro dato podr usar dicha zona.
Cada dato debe estar asociado a un nico tipo de dato (el
tipo no puede cambiarse durante la ejecucin).
El valor que se le puede asignar a un dato depende del tipo
de dato con el que es declarado.
Los datos se pueden clasificar como:
variables
constantes
datos
33
Declaracin de variables:
Un nico identificador por declaracin:
<tipo> <identificador1>;
<tipo> <identificador2>;
...
Ejemplo:
double lado1;
double lado2;
double hip;
Ejemplo:
double lado1, lado2, hip;
Ejemplo:
double dato = 4.5;
int sumaCuentas = 0,
totalVentas;
34
salario_bruto
?
retencion
?
salario_bruto
32538.0
retencion
4229.94
35
// :-(
1.3.2.3.
36
DATOS CONSTANTES
Suelen usarse identificadores slo con maysculas para diferenciarlos de los datos variables.
37
salario_bruto
?
IRPF
0.18
retencion
?
salario_bruto
32538
IRPF
0.18
retencion
4229.94
38
39
1.3.2.4.
40
41
1.4.
1.4.1.
O PERADORES
T ERMINOLOGA
42
E XPRESIONES
EN
M ATEMTICAS
x/y
1.4.2.
O PERADORES
43
EN UN LENGUAJE DE PROGRA -
MACIN
La asignacin es otro operador (infijo y binario). En primer lugar, se evala el argumento de la derecha y se asigna el resultado al dato (variable) de la izquierda.
lado = 3 + 5;
44
3
lado
5
3+5
En la mayor parte (no todos) de los operadores prefijos, los argumentos van entre parntesis y para denotarlos suelen usarse caracteres alfanumricos . Si hay varios argumentos se separan por una coma. Estos operadores se denominan funciones
sqrt(4)
sin(6.4)
pow(3,6)
1.4.3.
45
E XPRESIONES
Una expresin es una combinacin de datos y operadores sintcticamente correcta, que el compilador evala y devuelve un
valor.
3
3+5
lado1
lado1*lado1
lado1*lado1 + lado2*lado2
sqrt(lado1*lado1 + lado2*lado2)
Las expresiones pueden aparecer a la derecha de una asignacin, pero no a la izquierda. Tambin pueden pasarse como
argumentos de operadores.
Una expresin NO es una sentencia de un programa:
Expresin: sqrt(lado1*lado1 + lado2*lado2)
Sentencia: hip = sqrt(lado1*lado1 + lado2*lado2)
Cuando el compilador evala una expresin, devuelve un valor
de un tipo de dato (entero, real, carcter, etc.). Diremos que la
expresin es de dicho tipo de dato.
Por ejemplo:
3+5 es una expresin entera
3.5+6.7 es una expresin de reales
int main(){
double dato_real;
int dato_entero;
dato_real = 3.5+6.7;
datos_entero = 3+5;
......
}
46
47
48
Nota: Cuando se usa una expresin dentro de cout, el compilador detecta el tipo de dato y la imprime de forma adecuada.
cout << "\nResultado = " << 3+5;
cout << "\nResultado = " << 3.5+6.7;
Imprime en pantalla:
Resultado = 8
Resultado = 10.2
1.5.
T IPOS
1.5.1.
DE DATOS COMUNES EN
R ANGO
49
C++
Y OPERADORES APLICABLES A UN TI -
PO DE DATO
1.5.2.
L OS
1.5.2.1.
50
Subconjunto del conjunto matemtico Z. La cardinalidad depender del nmero de bytes que cada compilador utiliza para
su almacenamiento. Cuanta ms memoria, ms datos distintos
podrn representarse.
Los compiladores suelen ofrecer distintos tipos enteros. En
C(C++): int, long, short, etc.
Por simplificar, en MP1 usaremos un nico tipo entero: int
Literales enteros
Los literales son la especificacin de un valor concreto de un
tipo de dato.
Los literales enteros son tokens formados por smbolos numricos. Pueden empezar con un signo negativo 34
-406778
0
51
1.5.2.2.
52
O PERADORES
Operadores binarios
+
int
n =
n =
n =
n =
n =
5 /
5 /
n;
5 *
n +
5 /
5 %
7 %
7 =
7;
7;
1;
7;
7;
5;
n;
//
//
//
//
//
//
//
Asigna a la variable n
Asigna a la variable n
Asigna a la variable n
Asigna a la variable n
Asigna a la variable n
Sentencia Incorrecta.
Sentencia Incorrecta.
el
el
el
el
el
valor
valor
valor
valor
valor
35
36
0
5
2
53
Incrementan y decrementan, respectivamente, el valor de la variable entera sobre la que se aplican (no pueden aplicarse sobre una expresin).
Unarios de notacin postfija.
<variable>++;
/* Incrementa la variable en 1
Es equivalente a:
<variable> = <variable> + 1; */
<variable>--;
/* Decrementa la variable en 1
Es equivalente a:
<variable> = <variable> - 1; */
1.5.2.3.
54
E XPRESIONES ENTERAS
Reglas de precedencia:
()
- (operador unario de cambio de signo)
* / %
+ -
// equivale a 3+(5*7)
// equivale a (3/5)*7
Ejemplo. Incrementar el salario en 100 euros y calcular el nmero de billetes de 500 euros a usar en el pago.
(salario + 100) / 500
salario + 100 / 500
BIEN
MAL
1.5.3.
L OS
1.5.3.1.
R ANGO
55
Subconjunto finito de R
Parte entera de 4,56 4
Parte real de 4,56 56
La precisin de un tipo real puede definirse como la diferencia
entre 1,0 y el siguiente nmero que se puede representar.
En Matemticas, R es denso, por lo que la precisin es infinita.
En cualquier lenguaje de programacin los reales tendrn una
precisin limitada, que depender de la cantidad de memoria
utilizada para representar la parte decimal.
Por ejemplo, si la precisin es 0,001, el valor 0,0003 no podra
representarse.
Los compiladores suelen ofrecer distintos tipos reales. Por ejemplo, en C(C++): float, double
Por simplificar, en MP1 usaremos un nico tipo real: double
En aplicaciones reales habr que escoger el tipo adecuado dependiendo de lo que representa.
56
Literales reales
Son tokens formados por dgitos numricos y con un nico
punto que separa la parte decimal de la real. Pueden llevar el
signo - al principio.
800.457
4.0
-3444.5
Importante:
El literal 3 es un entero.
El literal 3.0 es un real.
Los compiladores suelen usar el tipo double para representar
literales reales.
1.5.3.2.
57
O PERADORES
+, -, *, /
1.5.3.3.
58
F UNCIONES ESTNDAR
1.5.3.4.
59
E XPRESIONES REALES
Reglas de precedencia:
()
- (operador unario de cambio de signo)
* /
+ -
b +
b2 4ac
2a
-b+sqrt(b*b-4.0*a*c)/2.0*a
((-b)+(sqrt(b*b - (4.0*a)*c)))/(2.0*a)
(-b + sqrt(b*b - 4.0*a*c))/(2.0*a)
MAL
BIEN
RECOMENDADO
1.5.4.
60
* 7.0
/ 7.0
/ 7;
7;
Devuelve
Devuelve
Devuelve
Devuelve
35.0
0.7142857
0.7142857
0
// double = int
// double = int
Internamente, transforma el valor 5 (en su representacin como un int) al valor 5.0 (en su representacin como un double)
61
double real;
real = 5 / 7;
//
//
real = 5.0 / 7; //
//
double
Asigna
double
Asigna
=
a
=
a
int
real el valor 0.0
double
real el valor 0.7142857
Otro ejemplo:
int edad1 = 10, edad2 = 5;
double media;
media = (edad1 + edad2)/2;
// :-(
// :-)
62
Qu pasa cuando asignamos un real a un entero? Simplemente, se pierde la parte decimal, es decir, se trunca.
double real;
int
entera;
real = 5.7;
entera = real
1.5.5.
EL
1.5.5.1.
R ANGO
Es un conjunto finito y ordenado de caracteres: letras minsculas, maysculas, dgitos del 0 al 9 y otros caracteres especiales.
Hay varios tipos de dato de carcter: char, wchar, signed char,
etc. En MP1 usaremos char.
63
64
65
Literales de carcter
Son tokens formados por:
O bien un nico carcter encerrado entre comillas simples:
! A a 5
Cuidado!: cinco o 11 no son literales de carcter.
O bien una secuencia de escape, es decir, el smbolo \ seguido de otro smbolo, como por ejemplo:
Secuencia
\n
\t
\b
\r
\f
\
\"
\\
Significado
Nueva lnea (retorno e inicio)
Tabulador
Retrocede 1 carcter
Retorno de carro
Salto de pgina
Comilla simple
Comilla doble
Barra inclinada
66
#include <iostream>
using namespace std;
int main(){
const char NUEVA_LINEA = \n;
char car;
car = B;
// Almacena B
cout << car << "ienvenidos";
cout << \n << "Empiezo a escribir en la siguiente lnea";
cout << \n << \t << "Acabo de tabular esta lnea";
cout << NUEVA_LINEA;
cout << \n << "Esto es una comilla simple: " << \;
}
Escribira en pantalla:
Bienvenidos
Empiezo a escribir en la siguiente lnea
Acabo de tabular esta lnea
Esto es una comilla simple:
1.5.5.2.
67
F UNCIONES ESTNDAR
El fichero de cabecera cctype contiene varias funciones relativas a caracteres. Por ejemplo:
tolower
toupper
#include <cctype>
using namespace std;
int main(){
char car;
car = tolower(A);
car = toupper(A);
car = tolower(B);
car = tolower(?);
..................
//
//
//
//
Almacena
Almacena
Almacena
Almacena
a
A
b
?
1.5.6.
EL
68
Hay que destacar que las secuencias de escape tambin pueden aparecer en los literales de cadena de caracteres presentes en cout
int main(){
cout << "Bienvenidos";
cout << "\nEmpiezo a escribir en la siguiente lnea";
cout << "\n\tAcabo de tabular esta lnea";
cout << "\n";
cout << "\nEsto es una comilla simple ";
cout << " y esto es una comilla doble \"";
}
Escribira en pantalla:
Bienvenidos
Empiezo a escribir en la siguiente lnea
Acabo de tabular esta lnea
Esto es una comilla simple y esto es una comilla doble "
69
1.5.7.
EL
70
Es un tipo de dato muy comn en los lenguajes de programacin que se utiliza para representar los valores verdadero y
falso que suelen estar asociados a una condicin.
En C++ se usa el tipo bool
1.5.7.1.
R ANGO
1.5.7.2.
O PERADORES
|| (O)
true
true
true
false
true
false
! (NO)
false
true
71
isalnum
isdigit
...
Por ejemplo,
isalpha(3)
*/
int main() {
bool es_alfa, es_alfanum, es_digito_numerico;
bool compuesto;
es_alfa = isalpha(3);
// Asigna false a es_alfa
es_alfanum = isalnum(3);
// Asigna true a es_alfanum
es_digito_numerico = isdigit(3);
// Asigna true a es_digito_numerico
compuesto = (es_alfa && es_alfanum);
compuesto = (es_alfa || es_alfanum);
compuesto = !es_alfa;
.......
}
// Resultado: false
// Resultado: true
// Resultado: true
1.5.7.3.
72
O PERADORES R ELACIONALES
//
73
int main(){
int entero1 = 3, entero2 = 5;
double real1, real2;
bool menor, iguales;
menor =
menor =
menor =
real1 =
real2 =
menor =
menor =
iguales
74
Reglas de Precedencia:
()
!
< <= > >=
== !=
&&
||
MAL
BIEN
RECOMENDADO
1.5.8.
75
1.5.8.1.
En C++, el tipo char es realmente compatible con un tipo entero. Cuando hacemos
char c;
c = A;
=
=
=
=
A;
65;
7;
7;
//
//
//
//
Almacena
Almacena
Almacena
Almacena
65
65
55
7
76
c
c
c
c
//
//
//
//
=
=
=
=
A+1;
65+1;
7-1;
A + 7;
Almacena
Almacena
Almacena
Almacena
66 = B
66 = B
54 = 6
120
1.6.
77
R EFERENCIAS
Referencias de funciones.
http://www.icce.rug.nl/documents/cplusplus/
http://c.conclase.net/librerias/index.php
Libros fundamentales:
Garrido, A., Fundamentos de Programacin en C++. Delta
Publicaciones, 2005.
Savitch, W., Resolucin de problemas en C++, 2a Edicin,
Prentice Hall. Mayo, 2000.