Introducción
Introducción a a la la Informática. Informática. Fundamentos de Fundamentos de la la Programación.Programación.PágPág 11
1.2.
1.2. Estructura General de un Programa en C+ Estructura General de un Programa en C+++
1.3.
1.3. Constantes, Variables y Tipos de DatosConstantes, Variables y Tipos de Datos
1.4.
1.4. Acciones Básicas y Expresiones Acciones Básicas y Expresiones
1.5
1.5 Entrada y Salida en C+ Entrada y Salida en C+++
Ejercicios Ejercicios
En este capítulo vamos a introducir el lenguaje de programación C++ que se va a utilizar En este capítulo vamos a introducir el lenguaje de programación C++ que se va a utilizar en la asignatura, describiendo algunos conceptos básicos y plasmando la estructura general en la asignatura, describiendo algunos conceptos básicos y plasmando la estructura general de un programa escrito en este lenguaje. A lo largo de los sucesivos temas se seguirá la de un programa escrito en este lenguaje. A lo largo de los sucesivos temas se seguirá la notación BNF para ir describiendo las diferentes reglas sintácticas del lenguaje. De esta notación BNF para ir describiendo las diferentes reglas sintácticas del lenguaje. De esta forma se irá introduciendo de una manera formal la sintaxis de
forma se irá introduciendo de una manera formal la sintaxis de C++.C++.
1.1
1.1 ELEMENTOS
ELEMENTOS DEL
DEL LENGUAJE
LENGUAJE
Comenzaremos viendo los elementos más simples que integran un programa escrito en Comenzaremos viendo los elementos más simples que integran un programa escrito en C++, es decir palabras, símbolos y
C++, es decir palabras, símbolos y las reglas para su flas reglas para su formación.ormación. a)
a) IdentificadoresIdentificadores:: Son nombres elegidos por el programador para Son nombres elegidos por el programador para representar representar entidades (variables, tipos, constantes, etc.) en el
entidades (variables, tipos, constantes, etc.) en el programa. El usuario puede elegir programa. El usuario puede elegir cualquier identificador excepto un pequeño grupo que se reserva para
cualquier identificador excepto un pequeño grupo que se reserva para usos específicos.usos específicos.
C++ distingue entre letras mayúsculas y minúsculas
C++ distingue entre letras mayúsculas y minúsculas, por lo que a, por lo que a efectos del programa serán identificadores distintos
efectos del programa serán identificadores distintos holahola,, HolaHola yy hoLa
hoLa..
La gramática que define la sintaxis de los identificadores es la siguiente: La gramática que define la sintaxis de los identificadores es la siguiente:
<ident>
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
<carácter_i
<carácter_ident> ::= a | b |···| z | A | B dent> ::= a | b |···| z | A | B |··· | Z | _ |··· | Z | _ <dígito> ::= 0 | 1 | 2 | ··· | 9
<dígito> ::= 0 | 1 | 2 | ··· | 9 No
No se se impone impone en en principio principio ningún ningún límite límite en en cuanto cuanto a a la la longitud longitud de de loslos identificadores. Dichos limites dependerán del compilador que se esté empleando. Más identificadores. Dichos limites dependerán del compilador que se esté empleando. Más aún, en esta asignatura no emplearemos identificadores tan largos como para darnos aún, en esta asignatura no emplearemos identificadores tan largos como para darnos problemas en este
problemas en este sentido.sentido. b) Palabras reservadas:
b) Palabras reservadas: Tienen un significado predeterminado para el compilador Tienen un significado predeterminado para el compilador y sólo pueden ser usadas con dicho sentido. En C++ se escriben siempre con y sólo pueden ser usadas con dicho sentido. En C++ se escriben siempre con minúsculas.
minúsculas. and
and and_eq and_eq asm asm auto auto bitand bitand bitorbitor bool
bool break break case case catch catch cdecl cdecl charchar class
class compl compl const const const_cast const_cast continuecontinue default
default
delete do
delete do double double dynamic_casdynamic_cast t else else enum enum explicit
explicit export export extern extern false false float float forfor friend
friend goto goto if if inline inline int int longlong mutable
mutable namespace namespace new new not not not_eq not_eq operator
operator or
or or_eq or_eq private private protected protected publicpublic register
register
reinterpret_c
reinterpret_cast ast return return short short signed signed sizeofsizeof static
static static_cast static_cast struct struct switch switch template template thisthis throw
throw true true try try typedef typedef typeid typeid typename
typename union
union unsigned unsigned using using virtual virtual void void volatile
volatile wchar_t
wchar_t xor xor xor_eq xor_eq whilewhile c) Identificadores estándares:
c) Identificadores estándares: Tienen un significado predefinido dentro del lenguaje,Tienen un significado predefinido dentro del lenguaje, pero a diferencia de
pero a diferencia de las palabras reslas palabras reservadas, el programervadas, el programador puede redeador puede redefinirlos dentrofinirlos dentro de su programa (aunque esto normalmente no
de su programa (aunque esto normalmente no es aconsejable). Dos ejemplos de dichoses aconsejable). Dos ejemplos de dichos identificadores estándares serán presentados en este tema: los flujos
identificadores estándares serán presentados en este tema: los flujos de entrada y salidade entrada y salida cin
cin yy coutcout..
d) Literales constantes:
d) Literales constantes: Se distingue entre números reales, números enteros ySe distingue entre números reales, números enteros y cadenas de caracteres.
cadenas de caracteres. <literal
<literal > > ::= ::= <num_entero<num_entero> > | | <num_real> <num_real> | | <car> <car> || <cadena_car>
<cadena_car> <num_entero>
<num_entero> ::= ::= [+|-] [+|-] <dígito> <dígito> {<dígito>}{<dígito>} <num_real>
<num_real> ::= ::= <num_entero><num_entero>.{<dígito>} .{<dígito>} [<factor_es[<factor_esc>]c>] <factor_esc>
<factor_esc> ::= ::= (e|E) (e|E) <num_entero><num_entero> <car>
<car> ::= ::= ‘ ‘ <carácter> <carácter> ‘‘ <cadena_car>
<cadena_car> ::= ::= “ “ {<carácter>} {<carácter>} ““ Cuando se usa
Cuando se usa ee en un literal constante real se dice que el número está expresado enen un literal constante real se dice que el número está expresado en
punto flotante
punto flotante (notación científica). En cuanto (notación científica). En cuanto a las cada las cadenas de enas de caracteres (ocaracteres (o strings strings),),
en C++ se expresan mediante una secuencia de caracteres cualesquiera
en C++ se expresan mediante una secuencia de caracteres cualesquiera11 encerradosencerrados entre comillas simples.
entre comillas simples. e) Delimitadores:
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
! % ^ & ( ) - + = ! % ^ & ( ) - + = { } ~ [ ] \ ; • : { } ~ [ ] \ ; • : < > ? , . / “ < > ? , . / “ f) Comentarios:
f) Comentarios: Un comentario es una secuencia de caracteres que es Un comentario es una secuencia de caracteres que es ignorada por elignorada por el compilador. Se usan para documentar el programa, de
compilador. Se usan para documentar el programa, de manera que aunque nomanera que aunque no contribuyan a resolver el problema, sí
contribuyan a resolver el problema, sí ayudan a mejorar la comprensión del programa.ayudan a mejorar la comprensión del programa. Se pueden insertar en el programa de dos maneras: escribiendo un texto entre los Se pueden insertar en el programa de dos maneras: escribiendo un texto entre los símbolos
símbolos /*/*yy */*/ (este texto se puede extender a lo largo de varias líneas), o usando el(este texto se puede extender a lo largo de varias líneas), o usando el símbolo
símbolo ////(se interpretará como comentario todo lo que siga hasta llegar al final de la(se interpretará como comentario todo lo que siga hasta llegar al final de la línea).
línea).
Debe tenerse cuidado para no encerrar trozos de código útil dentro de
Debe tenerse cuidado para no encerrar trozos de código útil dentro de un comentario,un comentario, ya que un comentario puede extenderse a lo largo de múltiples líneas. Encerrar trozos de ya que un comentario puede extenderse a lo largo de múltiples líneas. Encerrar trozos de código como comentarios es útil cuando se está desarrollando un programa para código como comentarios es útil cuando se está desarrollando un programa para comprobar si ciertas partes funcionan o no, pero es un error muy común encerrar por comprobar si ciertas partes funcionan o no, pero es un error muy común encerrar por descuido otras zonas de código que son necesarias o bien olvidarse de sacar órdenes de descuido otras zonas de código que son necesarias o bien olvidarse de sacar órdenes de dentro de un comentario.
dentro de un comentario.
El anidamiento de comentarios (poner comentarios dentro de El anidamiento de comentarios (poner comentarios dentro de otrosotros comentarios) puede dar problemas en
comentarios) puede dar problemas en algunos compiladores.algunos compiladores. NuncaNunca emplearemos este tipo de anidamiento
emplearemos este tipo de anidamiento.. g)
g) SeparadoresSeparadores:: SonSonespacios en blancoespacios en blanco,, tabuladorestabuladores,,retornos de carroretornos de carro,, fin de fichero fin de fichero
yy fin de línea fin de línea. Habrá ocasiones en que se . Habrá ocasiones en que se pongan para dar legibilidad al pongan para dar legibilidad al programa, yprograma, y
otras por necesidad. Los comentarios son considerados también
otras por necesidad. Los comentarios son considerados también separadores separadorespor elpor el
compilador. compilador.
1.2
1.2 ESTRUCTURA
ESTRUCTURA DE
DE UN
UN PROGRAMA
PROGRAMA EN
EN C++
C++
Comenzaremos viendo la estructura global de un programa escrito en C++ para a Comenzaremos viendo la estructura global de un programa escrito en C++ para a continuación ir desglosando y analizando cada uno de sus componentes. El programa continuación ir desglosando y analizando cada uno de sus componentes. El programa que se muestra es el famoso “Hola Mundo”, un programa que únicamente muestra el que se muestra es el famoso “Hola Mundo”, un programa que únicamente muestra el mensaje “Hola Mundo” en pantalla antes de
mensaje “Hola Mundo” en pantalla antes de finalizar.finalizar. /*
/* *
* Nombre: Nombre: HolaMundo.cppHolaMundo.cpp *
* Autor: Autor: Johann Johann Sebastian Sebastian MastropieroMastropiero *
* Fecha: Fecha: 01/01/200101/01/2001
* Descripción: Este es el programa “Hola Mundo”. * Descripción: Este es el programa “Hola Mundo”. *
* */ */
#include <iostream.h> // Para usar cout #include <iostream.h> // Para usar cout #include
#include <stdlib.h> <stdlib.h> // // No No hace hace falta falta en en este este casocaso
void
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Como puede apreciarse, el programa comienza con un comentario a
Como puede apreciarse, el programa comienza con un comentario a lo largo de lo largo de sietesiete líneas, y en el cual se da información sobre el nombre, autor, fecha y
líneas, y en el cual se da información sobre el nombre, autor, fecha y propósito delpropósito del programa. Esto no e
programa. Esto no es sintácticamente s sintácticamente necesario comnecesario como es bien sabido, o es bien sabido, pero siempre lopero siempre lo incluiremos como norma de estilo. A
incluiremos como norma de estilo. A continuación nos encontramos con doscontinuación nos encontramos con dos operaciones de inclusión. Sin entrar en
operaciones de inclusión. Sin entrar en detalles sobre lo que internamente significandetalles sobre lo que internamente significan dichas inclusiones
dichas inclusiones22, lo que hacemos mediante las mismas es indicarle al compilador que, lo que hacemos mediante las mismas es indicarle al compilador que pretendemos hac
pretendemos hacer uso de las funer uso de las funcionalidades qucionalidades que nos proporcionan e nos proporcionan unas ciertasunas ciertas bibliotecas (en este
bibliotecas (en este caso predefinidascaso predefinidas; en temas pos; en temas posteriores aprenderemos teriores aprenderemos a definirlasa definirlas por nuestra cuenta). E
por nuestra cuenta). En este caso con este caso concreto queremoncreto queremos emplear la biblioteca s emplear la biblioteca dede entrada/salida
entrada/salida iostreamiostreampara lo cual tenemos que incluir para lo cual tenemos que incluir iostream.hiostream.h. La otra inclusión. La otra inclusión que se realiza corresponde a una
que se realiza corresponde a una biblioteca (biblioteca (stdlibstdlib) que no es necesaria en este caso) que no es necesaria en este caso dada la simplicidad del programa, pero que sí lo será en la
dada la simplicidad del programa, pero que sí lo será en la mayoría de los programasmayoría de los programas que realicemos más adelante.
que realicemos más adelante. El algoritmo comienza en la línea
El algoritmo comienza en la línea void void main()main(). Aquí aparecen varios elementos cuyo. Aquí aparecen varios elementos cuyo significado veremos en temas posteriores. Lo que
significado veremos en temas posteriores. Lo que sí debemos saber es que todosí debemos saber es que todo programa que realice
programa que realicemos tendrá un algomos tendrá un algoritmo principal (el que eritmo principal (el que empezará a realizarsempezará a realizarse cuando ejecutemos el programa), y que el
cuando ejecutemos el programa), y que el comienzo de dicho algoritmo principal secomienzo de dicho algoritmo principal se indica mediante una línea de estructura como la mostrada
indica mediante una línea de estructura como la mostrada33.. A continuación encontramos el cuerpo del algoritmo
A continuación encontramos el cuerpo del algoritmo principal, que abarca desde la llaveprincipal, que abarca desde la llave de apertura (
de apertura ({{) hasta la llave de cierre () hasta la llave de cierre (}}). Siempre aparecerán estas llaves delimitando). Siempre aparecerán estas llaves delimitando
el cuerpo de un algoritmo. En este caso, el algoritmo consta de una sola orden, mostrar el cuerpo de un algoritmo. En este caso, el algoritmo consta de una sola orden, mostrar en pantalla el mensaje “Hola Mundo” y saltar a la lí
en pantalla el mensaje “Hola Mundo” y saltar a la línea siguiente. Como puede verse,nea siguiente. Como puede verse, esto se expresa haciendo uso del objeto
esto se expresa haciendo uso del objeto predefinido (enpredefinido (en iostreamiostream precisamente)precisamente)coutcout.. Todo lo que redirijamos (mediante el empleo del operador
Todo lo que redirijamos (mediante el empleo del operador <<<<) hacia dicho objeto será) hacia dicho objeto será mostrado en pantalla. En el ejemplo se redirige en primer lugar la
mostrado en pantalla. En el ejemplo se redirige en primer lugar la cadena “Holacadena “Hola Mundo”, y a continuación la indicación de salto de linea (
Mundo”, y a continuación la indicación de salto de linea (endlendl – abreviatura de– abreviatura de end of end of
line
line). La instrucción termina mediante un punto y coma (). La instrucción termina mediante un punto y coma (;;), que la separa de), que la separa de instrucciones posteriores. Es preciso poner dicho delimitador incluso si
instrucciones posteriores. Es preciso poner dicho delimitador incluso si como es el casocomo es el caso aquí, no hay una instrucción posterior. De hecho, es posible poner el punto y coma aquí, no hay una instrucción posterior. De hecho, es posible poner el punto y coma incluso si no se
incluso si no se especifica una instrucción concreta. En dicho caso se habla de especifica una instrucción concreta. En dicho caso se habla de unauna
instrucción vacía instrucción vacía..
1.3
1.3 CONSTANTES,
CONSTANTES, VARIABLES
VARIABLES Y
Y TIPOS
TIPOS DE
DE DATOS
DATOS
En un programa intervienen objetos sobre los que actúan las instrucciones que lo En un programa intervienen objetos sobre los que actúan las instrucciones que lo componen. Algunos de estos objetos tomarán valores a lo largo del programa. componen. Algunos de estos objetos tomarán valores a lo largo del programa. Dependiendo de si pueden cambiar de valor o no, podemos distinguir dos tipos de Dependiendo de si pueden cambiar de valor o no, podemos distinguir dos tipos de objetos:
objetos:
•
• ConstanteConstante: Objeto –referenciado mediante un identificador- al que se le asignará: Objeto –referenciado mediante un identificador- al que se le asignará
un valor que
un valor que no se podrá modificar no se podrá modificar a lo largo del programa.a lo largo del programa.
22 Todas las órdenes que comienzan por la almohadilla (#) van dirigidas alTodas las órdenes que comienzan por la almohadilla (#) van dirigidas al
preprocesador
preprocesador , un programa, un programa
que repasa el código
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
•
• VariableVariable: Objeto –referenciado por un identificador– que: Objeto –referenciado por un identificador– que puede tomar puede tomar distintosdistintos
valores
valoresa lo largo del programa.a lo largo del programa.
Será misión del programador asignar el
Será misión del programador asignar el identificador identificador que desee a cada constante yque desee a cada constante y
variable. El identificador o nombre de cada objeto sirve para identificar sin ningún tipo variable. El identificador o nombre de cada objeto sirve para identificar sin ningún tipo de ambigüedad a cada objeto, diferenciándolo de los
de ambigüedad a cada objeto, diferenciándolo de los demás objetos que intervienen endemás objetos que intervienen en el programa. En C++ hay que indicar (de la manera que más adelante se indicará) el el programa. En C++ hay que indicar (de la manera que más adelante se indicará) el nombre de las constantes y variables que
nombre de las constantes y variables que vamos a usar, para que vamos a usar, para que el compilador puedael compilador pueda asociar internamente a dichos nombres las posiciones de memoria
asociar internamente a dichos nombres las posiciones de memoria correspondientes.correspondientes. Para esto último es preciso también que junto con dichos nombres, se indique
Para esto último es preciso también que junto con dichos nombres, se indique explícitamente para cada constante o variable el
explícitamente para cada constante o variable el tipo de los datos tipo de los datos que pueden contener.que pueden contener. En C++ existen una serie de tipos básicos predefinidos, así como herramientas para En C++ existen una serie de tipos básicos predefinidos, así como herramientas para la construcción de tipos más complejos. Los principales tipos de datos predefinidos en la construcción de tipos más complejos. Los principales tipos de datos predefinidos en C++ son los siguientes:
C++ son los siguientes:
•
• Enteros Enteros: el tipo básico es: el tipo básico es intint. Las variables definidas de este tipo podrán tomar . Las variables definidas de este tipo podrán tomar
típicamente valores entre -2147483648 y 2147483647. En determinadas típicamente valores entre -2147483648 y 2147483647. En determinadas circunstancias podremos querer modificar este rango, para lo que disponemos de circunstancias podremos querer modificar este rango, para lo que disponemos de dos tipos de modificadores
dos tipos de modificadores shortshort//longlongyy signed signed //unsigned unsigned ..
o
o shortshort intint: el rango de representación es menor (–32768 a 32767: el rango de representación es menor (–32768 a 32767
típicamente), y por lo tanto también lo es la
típicamente), y por lo tanto también lo es la memoria ocupada (la mitad).memoria ocupada (la mitad).
o
o longlong intint: mayor rango de representación: mayor rango de representación44 (e.g., (e.g., -922337203685-92233720368547758084775808
a 9223372036854775
a 9223372036854775807), y más memoria necesaria (el 807), y más memoria necesaria (el doble).doble).
o
o unsigned unsigned intint: ocupa la misma memoria que un: ocupa la misma memoria que un intint, pero sólo toma, pero sólo toma
valores positivos (e.g., 0 a
valores positivos (e.g., 0 a 4294967295).4294967295).
o
o signed signed intint: es equivalente a un: es equivalente a un intint..
Los modificadores mencionados se pueden combinar, e.g.,
Los modificadores mencionados se pueden combinar, e.g., longlong unsigned unsigned intint
(ocupa la misma memoria que un
(ocupa la misma memoria que un longlong intint, pero sólo almacena números, pero sólo almacena números
positivos, con
positivos, con lo que el rango de replo que el rango de representación es resentación es mayor). Adicionalmemayor). Adicionalmente, puedente, puede suprimirse la indicación
suprimirse la indicación intinten todos los casos anteriores, asumiéndose ésta por en todos los casos anteriores, asumiéndose ésta por
defecto (e.g.,
defecto (e.g., unsigned unsigned es lo mismo quees lo mismo que unsigned unsigned intint).).
•
• Carácter Carácter : se emplea el tipo: se emplea el tipo charchar.. •
• Lógico Lógico: se utiliza el tipo: se utiliza el tipo bool bool. Los objetos de este tipo sólo pueden tomar dos. Los objetos de este tipo sólo pueden tomar dos
valores:
valores: truetrue(cierto) y(cierto) y falsefalse(falso).(falso).
•
• Reales Reales: los números reales (en realidad números en punto flotante, ya que los: los números reales (en realidad números en punto flotante, ya que los
números reales en sentido estricto no son representables en ningún computador números reales en sentido estricto no son representables en ningún computador digital) se representan mediante los tipos
digital) se representan mediante los tipos floatfloat yy doubledouble. El segundo tipo. El segundo tipo
permite
permite representar representar números números con con mayor mayor magnitud magnitud y y precisión, precisión, empleando empleando parapara ello el doble de memoria que
ello el doble de memoria que floatfloat. Si se precisa mayor rango de representación. Si se precisa mayor rango de representación
o de precisión puede emplearse el modificador
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
double
double. No se pueden emplear los modificadores. No se pueden emplear los modificadores signed signed //unsigned unsigned sobresobre double
double..
Todos estos tipos tienen dos propiedades en común: cada
Todos estos tipos tienen dos propiedades en común: cada uno está formado por uno está formado por elementos
elementos indivisiblesindivisibles o atómicos que además estáno atómicos que además están ordenadosordenados. Los tipos de datos con. Los tipos de datos con
estas características se denominan
estas características se denominan tipos de datos escalarestipos de datos escalares. Cuando decimos que un. Cuando decimos que un
valor es atómico, nos referimos
valor es atómico, nos referimos a que no contiene partes a que no contiene partes componentes a las que puedacomponentes a las que pueda accederse independiente
accederse independientemente. Por ejemplo, un carácter mente. Por ejemplo, un carácter es indivisible, mientras que laes indivisible, mientras que la cadena de caracteres “Hola” no. Cuando hablamos de que un conjunto de
cadena de caracteres “Hola” no. Cuando hablamos de que un conjunto de valores estávalores está ordenado, queremos decir que los operadores relacionales estándares (mayor que, menor ordenado, queremos decir que los operadores relacionales estándares (mayor que, menor que, igual, etc.) pueden aplicarse a
que, igual, etc.) pueden aplicarse a los mismos.los mismos.
Para declarar una variable basta con indicar el tipo de la misma y
Para declarar una variable basta con indicar el tipo de la misma y su nombre. Lasu nombre. La declaración termina con el punto
declaración termina con el punto y coma. Los siguientes ejemplos muestrany coma. Los siguientes ejemplos muestran declaraciones válidas:
declaraciones válidas:
int
int num;num;
unsigned unsigned x,y;x,y;
long double
long double masaPlanetaria;masaPlanetaria;
char
char car = ‘c’, letra;car = ‘c’, letra;
short int
short int corto;corto;
Como puede apreciarse en el último ejemplo, es posible dar un valor inicial a una Como puede apreciarse en el último ejemplo, es posible dar un valor inicial a una variable a la vez que se declara. Así, la sintaxis BNF de
variable a la vez que se declara. Así, la sintaxis BNF de una declaración de variable es:una declaración de variable es: <decvar> ::= <tipo> <ident> [= <literal>] {, <ident> [=
<decvar> ::= <tipo> <ident> [= <literal>] {, <ident> [= <literal>]};
<literal>]};
La declaración de constantes es muy similar a la de variables, con dos diferencias La declaración de constantes es muy similar a la de variables, con dos diferencias fundamentales: hay que usar la palabra
fundamentales: hay que usar la palabra reservadareservada constconstpara indicar que se estápara indicar que se está
definiendo una constante, y la asignación de un valor inicial no es opcional, sino definiendo una constante, y la asignación de un valor inicial no es opcional, sino obligatoria:
obligatoria:
<decconst> ::= const <tipo> <ident> = <literal>; <decconst> ::= const <tipo> <ident> = <literal>; Ejemplos de declaraciones de
Ejemplos de declaraciones de constantes válidasconstantes válidas55son los siguientes:son los siguientes:
const int
const int HORAS = 24;HORAS = 24;
const double
const double NUMERO_AVOGADRO = 6.023e+23;NUMERO_AVOGADRO = 6.023e+23;
const short
const short ALUMNOS = 100;ALUMNOS = 100;
const char
const char ACEPTAR = ‘S’;ACEPTAR = ‘S’;
En algunos compiladores se permite que no se indique el tipo de una En algunos compiladores se permite que no se indique el tipo de una constante, asumiéndos
constante, asumiéndose que es entera e que es entera por defecto.por defecto. Siempre indicaremosSiempre indicaremos explícitamente el tipo de
explícitamente el tipo de las constantes que definamoslas constantes que definamos..
Tanto las declaraciones de variables como de constantes pueden realizarse de dos Tanto las declaraciones de variables como de constantes pueden realizarse de dos maneras:
maneras: global global yylocal local . El primer modo consiste en situar dicha declaración al. El primer modo consiste en situar dicha declaración al
principio del código, ju
principio del código, justo después dsto después de las inclusiones. e las inclusiones. El segundo mEl segundo modo consiste esodo consiste es situarlas dentro del programa principal, en la zona delimitada por las llaves. Ejemplos: situarlas dentro del programa principal, en la zona delimitada por las llaves. Ejemplos:
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Start Free Trial
Cancel Anytime.
int
int num, x, y;num, x, y;
void
void main()main() {
{
void
void main()main() {
{
int
int num, x, y;num, x, y;
La diferencia entre ambas formas de declaración será evidente cuando en temas La diferencia entre ambas formas de declaración será evidente cuando en temas posteriores
posteriores se se introduzca introduzca la la noción noción de de función. función. De De momento, momento, la la regla regla práctica práctica queque seguiremos será definir siempre variables y
seguiremos será definir siempre variables y constantes de manera local.constantes de manera local. C++ permite que las declaraciones locales se realicen
C++ permite que las declaraciones locales se realicen en cualquier puntoen cualquier punto del algoritmo situado entre el comienzo (
del algoritmo situado entre el comienzo ({{) y el final () y el final (}}) del mismo.) del mismo.
Siempre declararemos los objetos locales inmediatamente después de Siempre declararemos los objetos locales inmediatamente después de la llave de
la llave de aperturaapertura..
1.4
1.4 ACCIONES
ACCIONES BÁSICAS
BÁSICAS Y
Y EXPRESIONES
EXPRESIONES
Dentro del cuerpo del algoritmo principal se indicarán las acciones que conducirán a la Dentro del cuerpo del algoritmo principal se indicarán las acciones que conducirán a la resolución del problema para el que dicho algoritmo fue confeccionado. La acción más resolución del problema para el que dicho algoritmo fue confeccionado. La acción más básica que se
básica que se puede realizar es puede realizar es la asignación. Su la asignación. Su sintaxis es:sintaxis es: <asignación
<asignación> > ::= ::= <ident> <ident> = = <expresión><expresión>;; <expresión>
<expresión> ::= ::= <literal> <literal> | | <ident> <ident> | | <op_unario> <op_unario> <expresión> <expresión> || <expresión> <op_binario> <expresión> |
<expresión> <op_binario> <expresión> | (<expresión>)
(<expresión>)
El caso más simple es aquél en el que se asigna un valor literal a una variable, o el El caso más simple es aquél en el que se asigna un valor literal a una variable, o el valor de una variable a otra, e.g.,
valor de una variable a otra, e.g.,
void
void main()main() {
{
int
int num1, num2;num1, num2; num1 = 10;
num1 = 10; num2 = num1; num2 = num1;
En general, se empleará una expresión para
En general, se empleará una expresión para asignar valores a las variables. Las posiblesasignar valores a las variables. Las posibles expresiones que se pueden utilizar dependerán en principio del t
expresiones que se pueden utilizar dependerán en principio del tipo de los objetosipo de los objetos involucrados en las mismas. Sin embrago, debe tenerse
involucrados en las mismas. Sin embrago, debe tenerse en cuenta que C++ no es en cuenta que C++ no es unun lenguaje con una comprobación de tipos muy fuerte. Ello quiere decir que no se lenguaje con una comprobación de tipos muy fuerte. Ello quiere decir que no se controla el tipo de los objetos que forman parte de
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Start Free Trial
Cancel Anytime.
En los casos que sea
En los casos que sea preciso realizaremos las operaciones de conversiónpreciso realizaremos las operaciones de conversión de manera explícita.
de manera explícita. Nunca dejaremos que el sistema las realice Nunca dejaremos que el sistema las realice dede manera implícita
manera implícita..
C++ proporciona operadores para realizar las operaciones más usuales, como pueden C++ proporciona operadores para realizar las operaciones más usuales, como pueden ser las siguientes:
ser las siguientes:
•
• Operaciones aritméticasOperaciones aritméticas: se proporcionan los operadores binarios: se proporcionan los operadores binarios ++,, ––,, **,, // yy %%
con el significado de suma, resta, multiplicación, división (entera o en punto con el significado de suma, resta, multiplicación, división (entera o en punto flotante dependiendo de los operandos) y resto o módulo respectivamente. flotante dependiendo de los operandos) y resto o módulo respectivamente. Asimismo, existe el operador unario
Asimismo, existe el operador unario –– para la inversión de para la inversión de signo. Ejemplos:signo. Ejemplos:
int
int num1, num2, num3;num1, num2, num3; ··· ··· num1 = -10*num2; num1 = -10*num2; num2 = num1%7; num2 = num1%7; num3 = num1/num2; num3 = num1/num2; •
• Operaciones relacionalesOperaciones relacionales: se proporcionan los operadores binarios: se proporcionan los operadores binarios ====,, !=!=,, >>,, <<,,
>=
>=,, <=<= con el significado respectivo de comparación de igualdad, desigualdad,con el significado respectivo de comparación de igualdad, desigualdad, mayor que, menor que, mayor o igual que y menor o igual que. El resultado de la mayor que, menor que, mayor o igual que y menor o igual que. El resultado de la operación relacional será un valor lógico, e.g.,
operación relacional será un valor lógico, e.g.,
int
int num1, num2;num1, num2;
bool bool b1, b2;b1, b2; ··· ··· b1 = num2 == num1; b1 = num2 == num1; b2 = (num1-num2) >= (num2*2); b2 = (num1-num2) >= (num2*2); •
• Operaciones lógicasOperaciones lógicas: se proporcionan los operadores binarios: se proporcionan los operadores binarios &&&& yy |||| con elcon el
significado de conjunción y disyunción lógica respectivamente. También se significado de conjunción y disyunción lógica respectivamente. También se dispone del operador unario
dispone del operador unario !! con el significado de negación. Ejemplos:con el significado de negación. Ejemplos:
int
int num1, num2;num1, num2;
bool
bool b1, b2;b1, b2; ···
···
b1 = !(num2 == num1); // equivale a b1 = !(num2 == num1); // equivale a num2!=num1
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Start Free Trial
Cancel Anytime.
Precisamente en relación con este último
Precisamente en relación con este último ejemplo, C++ proporciona una formaejemplo, C++ proporciona una forma sintáctica aún más simple mediante el
sintáctica aún más simple mediante el uso de los denominados operadores deuso de los denominados operadores de incremento (
incremento (++++) y decremento () y decremento (----). Éstos son operadores unarios que sólo ). Éstos son operadores unarios que sólo puedenpueden aplicarse sobre variables (no sobre expresiones) y que modifican
aplicarse sobre variables (no sobre expresiones) y que modifican el valor de el valor de la misma,la misma, incrementándola o decrementándola según corresponda. Por ejemplo:
incrementándola o decrementándola según corresponda. Por ejemplo:
int int x, y, z;x, y, z; ··· ··· z++; z++; // equivale // equivale a a z z = = z z + + 1 1 o o a a z z +=+= 1 1 --x; --x; // equivale // equivale a a x x = = x x - - 1 1 o o a a x x -=-= 1 1 Tanto el
Tanto el ++++ como elcomo el ---- pueden ponerse antes o después de la variable que deseamospueden ponerse antes o después de la variable que deseamos incrementar o decrementar. La diferencia entre ambas formas sintácticas estriba en su incrementar o decrementar. La diferencia entre ambas formas sintácticas estriba en su uso dentro de expresiones más complejas: si el operador se coloca antes de la variable, uso dentro de expresiones más complejas: si el operador se coloca antes de la variable, ésta se incrementa (o decrementa) y es dicho valor modificado el que se emplea en la ésta se incrementa (o decrementa) y es dicho valor modificado el que se emplea en la expresión; si el operador se sitúa después, se usa el valor actual de la variable en la expresión; si el operador se sitúa después, se usa el valor actual de la variable en la expresión y luego se modifica. Por ejemplo:
expresión y luego se modifica. Por ejemplo:
int
int x, y, z;x, y, z; ···
··· x =
x = --y * --y * z++; z++; // equi// equivale a vale a y = y = y - y - 11 //
// x x = = y y * * z;z; //
// z z = = z z + + 1;1;
Con el fin de mejorar la
Con el fin de mejorar la legibilidad del código –y a pesar de que eslegibilidad del código –y a pesar de que es sintácticamente correcto–
sintácticamente correcto– nunca emplearemos los operadores denunca emplearemos los operadores de incremento o decremento dentro de
incremento o decremento dentro de expresionesexpresiones..
En el caso de que tengamos una expresión compleja con varios operadores, C++ En el caso de que tengamos una expresión compleja con varios operadores, C++ proporciona reglas de precede
proporciona reglas de precedencia que permiten determinar cuál es el orden en el que sencia que permiten determinar cuál es el orden en el que se aplican los operadores. Dichas reglas son las
aplican los operadores. Dichas reglas son las siguientes:siguientes: 1.
1. Los operadores unarios se aplican antes que los binarios. Si hay más de unLos operadores unarios se aplican antes que los binarios. Si hay más de un operador unario aplicado sobre la misma variable o subexpresión, el orden de operador unario aplicado sobre la misma variable o subexpresión, el orden de
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Start Free Trial
Cancel Anytime.
En caso de que aparezcan varios operadores con igualdad de precedencia, se En caso de que aparezcan varios operadores con igualdad de precedencia, se evalúan de izquierda a derecha. Estas reglas pueden alterarse mediante el uso evalúan de izquierda a derecha. Estas reglas pueden alterarse mediante el uso de paréntesis.
de paréntesis.
1.5
1.5 ENTRADA/SALIDA
ENTRADA/SALIDA EN
EN C++
C++
La entrada y salida (E/S en lo sucesivo) de información la gestionaremos en C++ La entrada y salida (E/S en lo sucesivo) de información la gestionaremos en C++ mediante la funcionalidad que nos proporciona la biblioteca
mediante la funcionalidad que nos proporciona la biblioteca iostreamiostream, ya mencionada, ya mencionada anteriormente. La palabra
anteriormente. La palabra stream stream significa “flujo” o “corriente” en inglés, y nos da unasignifica “flujo” o “corriente” en inglés, y nos da una
indicación de cómo funcionan los aspectos de E/S: los dispositivos de salida (e.g., el indicación de cómo funcionan los aspectos de E/S: los dispositivos de salida (e.g., el monitor) se modelan como sumideros a los que va llegando un flujo de información; del monitor) se modelan como sumideros a los que va llegando un flujo de información; del mismo modo, los dispositivos de entrada (e.g., el teclado) son fuentes de las que surge mismo modo, los dispositivos de entrada (e.g., el teclado) son fuentes de las que surge un flujo de información. Tanto en un caso como en otro, lo único que necesitamos son un flujo de información. Tanto en un caso como en otro, lo único que necesitamos son operadores para insertar información en el flujo de salida, o extraer información del operadores para insertar información en el flujo de salida, o extraer información del flujo de entrada. La biblioteca
flujo de entrada. La biblioteca iostreamiostream nos proporciona dichos operadores así comonos proporciona dichos operadores así como unos identificadores estándar para los flujos
unos identificadores estándar para los flujos más comunes.más comunes. Cuando incluimos la biblioteca
Cuando incluimos la biblioteca iostreamiostream disponemos automáticamente del flujodisponemos automáticamente del flujo cincin (asociado a la entrada a través de teclado), y el fl
(asociado a la entrada a través de teclado), y el flujoujo coutcout (asociado a la salida a través(asociado a la salida a través de pantalla). Sobre dichos flujos
de pantalla). Sobre dichos flujos podemos aplicar respectivamente las operaciones depodemos aplicar respectivamente las operaciones de extracción (
extracción (>>>>) y de inserción () y de inserción (<<<<). Empezando por este último, i). Empezando por este último, imaginemos elmaginemos el siguiente código:
siguiente código:
#include <iostream.h> #include <iostream.h>
void
void main()main() {
{
int
int x = 10, y = -1;x = 10, y = -1;
char
char c = ‘A’;c = ‘A’;
double double d = d = 10.124567;10.124567; cout << x << y << endl cout << x << y << endl << c << d << “Se acabó”; << c << d << “Se acabó”; } }
La ejecución del mismo produciría en pantalla la salida: La ejecución del mismo produciría en pantalla la salida:
10-1 10-1
A10.124567S
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Start Free Trial
Cancel Anytime.
En el código que se muestra, se leen de teclado los valores de
En el código que se muestra, se leen de teclado los valores de xx,,yy,,cc yy dd sucesivamente.sucesivamente. Así pues, en general tendremos la siguiente sintaxis para la E/S en C++:
Así pues, en general tendremos la siguiente sintaxis para la E/S en C++: <entrada> ::= cin >> <ident> {>> <ident>};
<entrada> ::= cin >> <ident> {>> <ident>}; <salida>
<salida> ::= ::= cout cout << << (<expresión> | (<expresión> | endl) {<< endl) {<< (<expresión> |(<expresión> | endl)};
endl)};
El siguiente programa muestra un
El siguiente programa muestra un ejemplo de uso combinado de operaciones de E/S. Enejemplo de uso combinado de operaciones de E/S. En este caso se trata de leer dos números y mostrar su suma en
este caso se trata de leer dos números y mostrar su suma en pantalla:pantalla: #include <iostream.h>
#include <iostream.h>
void
void main()main() {
{
int
int a, b; // los números que queremosa, b; // los números que queremos sumar
sumar
cout << “Introduzca dos números: “ << cout << “Introduzca dos números: “ << endl;
endl; cin
cin >> >> a a >> >> b;b;
cout << “Su suma es “ << a + b << cout << “Su suma es “ << a + b << endl;
endl; } } Nótese un hech
Nótese un hecho importante: en la última o importante: en la última línea aparecen clínea aparecen combinados los oombinados los operadores deperadores de inserción (
inserción (<<<<) y de suma () y de suma (++). El funcionamiento del programa es correcto, ya que el). El funcionamiento del programa es correcto, ya que el operador de inserción tiene una precedencia menor que la suma. Por ello, primero se operador de inserción tiene una precedencia menor que la suma. Por ello, primero se realiza esta última, y es el resultado lo que
realiza esta última, y es el resultado lo que se inserta en el flujo de salida. Si volvemos ase inserta en el flujo de salida. Si volvemos a la lista de niveles de precedencia mostrada al final de la sección anterior, los operadores la lista de niveles de precedencia mostrada al final de la sección anterior, los operadores de flujo se situarían en un nivel intermedio entre el
de flujo se situarían en un nivel intermedio entre el 2 (suma y resta) y el 3 2 (suma y resta) y el 3 (operaciones(operaciones relacionales).
relacionales).
Para finalizar este tema, debe mencionarse el hecho de que es posible alterar el formato Para finalizar este tema, debe mencionarse el hecho de que es posible alterar el formato de impresión de los datos en pantalla mediante el uso de la funcionalidad que
de impresión de los datos en pantalla mediante el uso de la funcionalidad que proporciona la bibliotec
proporciona la bibliotecaa iomanipiomanip. Mediante la misma es posible indicar el número de. Mediante la misma es posible indicar el número de decimales de precisión con el que queremos escribir un número en punto flotante, el decimales de precisión con el que queremos escribir un número en punto flotante, el número de espacios que vamos a emplear para
número de espacios que vamos a emplear para escribir un dato, caracteres de relleno,escribir un dato, caracteres de relleno, etc. Esto se realiza mediante la inserción en el flujo de
etc. Esto se realiza mediante la inserción en el flujo de salida de modificadores, quesalida de modificadores, que afectarán a los datos que
afectarán a los datos que se introduzcan a continuación. Alguno de estos modificadoresse introduzcan a continuación. Alguno de estos modificadores son los siguientes:
son los siguientes:
•
• setprecision()setprecision(). Para indicar el número de dígitos significativos en un. Para indicar el número de dígitos significativos en un
dato en punto flotante. Afecta a todos los datos que se introduzcan con dato en punto flotante. Afecta a todos los datos que se introduzcan con posterioridad.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime. { { const double const double a1 = 1.1;a1 = 1.1; const double const double a2 = 10.12;a2 = 10.12; const double const double a3 = 101.179;a3 = 101.179;
cout << setprecision(2) << a3 << endl; cout << setprecision(2) << a3 << endl; cout << setprecision(4) << a3 << endl; cout << setprecision(4) << a3 << endl; cout << setprecision(5) << a3 << endl; cout << setprecision(5) << a3 << endl;
cout << “a1” << setw(10) << setfill(‘.’) << a1 << cout << “a1” << setw(10) << setfill(‘.’) << a1 << endl;
endl;
cout << “a2” << setw(10) << setfill(‘.’) << a2 << cout << “a2” << setw(10) << setfill(‘.’) << a2 << endl;
endl;
cout << “a3” << setw(10) << setfill(‘.’) << a3 << cout << “a3” << setw(10) << setfill(‘.’) << a3 << endl;
endl; } }
Este código produciría la siguiente salida en pantalla: Este código produciría la siguiente salida en pantalla:
1e+02 1e+02 101.2 101.2 101.18 101.18 a1...1.1 a1...1.1 a2...10.12 a2...10.12 a3....101.18 a3....101.18
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
EJERCICIOS
EJERCICIOS
1
1 El siguiente El siguiente programa esprograma escrito en crito en C++ tiene C++ tiene errores. Enerrores. Encuéntrelos.cuéntrelos. /*
/* *
* Nombre: Nombre: Ejemplo.cppEjemplo.cpp *
* Autor: Autor: ChindasvintChindasvinto o de de PrusiaPrusia *
* Fecha: Fecha: 10/12/200010/12/2000 *
* Descripción: Descripción: Programa Programa ejemplo ejemplo sobre sobre erroreserrores léxicos,
léxicos, *
* sintácticosintácticos s y y semánticossemánticos * * */ */ #include <iostream.h> #include <iostream.h> void
void main ()main ()
{ {
const
const intint tasa = 25.00;tasa = 25.00;
double
double horas, días, total, neto;horas, días, total, neto;
cout << “Introduce las horas trabajadas: ' << cout << “Introduce las horas trabajadas: ' << endl;
endl;
cin >> horas cin >> horas
cout << “Introduce los dias trabajados: << endl; cout << “Introduce los dias trabajados: << endl; cin >> dias;
cin >> dias;
horas*dias = total; horas*dias = total; neto =
neto = total-Tasa;total-Tasa;
cout >> “El valor total que pagar es: “ >> endl; cout >> “El valor total que pagar es: “ >> endl; cin
cin << << total total << << endl;endl;
cout << “El valor neto que pagar es: “ << endl cout << “El valor neto que pagar es: “ << endl
Start Free Trial
Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions!
Start Free Trial
Cancel Anytime.
4
4 Experimente con las coExperimente con las conversiones entre tipos. Lnversiones entre tipos. Lea una variable de tipo ea una variable de tipo carácter, ecarácter, e imprima en pantalla el valor de la misma, y el valor de su conversión a entero. Haga lo imprima en pantalla el valor de la misma, y el valor de su conversión a entero. Haga lo mismo con enteros negativos y su conversión a enteros sin signo (
mismo con enteros negativos y su conversión a enteros sin signo ( unsigned unsigned ), o con), o con
números en punto flotante y su conversión a entero. números en punto flotante y su conversión a entero.
5 Escriba un programa que lea una palabra de cuatro letras por teclado, y 5 Escriba un programa que lea una palabra de cuatro letras por teclado, y posteriormente escriba
posteriormente escriba dicha dicha palabra de palabra de manera que manera que cada letra cada letra se se encuentre codificadaencuentre codificada sustituyéndola por aquel carácter que le sigue en la tabla de código ASCII. (
sustituyéndola por aquel carácter que le sigue en la tabla de código ASCII. (AyudaAyuda:: deberá emplear conversiones entre tipos).