Lenguaje c++

25  Download (0)

Full text

(1)

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>

(2)

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

(3)

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

(4)

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

(5)

! % ^ & ( ) - + = ! % ^ & ( ) - + = { } ~ [ ] \ ; • : { } ~ [ ] \ ; • : < > ? , . / “ < > ? , . / “ 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 

(6)

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

(7)

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

(8)

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

(9)

• 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 

(10)

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

(11)

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:

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(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

(19)

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

(20)

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

(21)

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.

(22)

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

(23)

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

(24)

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

(25)

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

Figure

Updating...

References