SINTAXIS EN C++ Preparado por: Nelliud D. Torres Enero/2003 Versión 1.0.

Post on 23-Jan-2016

218 views 0 download

Transcript of SINTAXIS EN C++ Preparado por: Nelliud D. Torres Enero/2003 Versión 1.0.

SINTAXIS EN C++

Preparado por: Nelliud D. Torres

Enero/2003

Versión 1.0

LA ESTRUCTURA DE C++

main function

Square function

Cube function

1. En C++ todos los sub-programas se llaman funciones (“functions”).

2. Un programa en C++ puede ser un conjunto de funciones.

3. Cada función realiza una tarea en particular con el objetivo de resolver un problema.

4. El ejemplo del lado tiene 3 funciones. La principal y dos auxiliares.

ESTRUCTURA (CONT.)

main function

Square function

Cube function

Todo programa en C++ tiene una función llamada “main”. La ejecución del programa siempre comienza aqui. Se puede decir que “main” es la función “master” e invoca a las demas para poder completar su tarea.

Square y Cube son las funciones auxiliares que son invocadas por la función main. Las tres funciones son necesarias para poder completar el problema.

LISTADO DEL PROGRAMA EN C++

//******************************************************************

// Sample program

// This program computes the square and cube of 27

//******************************************************************

#include <iostream>

using namespace std;

int Square( int );

int Cube( int );

int main()

{

cout << "The square of 27 is " << Square(27) << endl;

cout << "and the cube of 27 is " << Cube(27) << endl;

return 0;

}

int Square( int n )

{

return n * n;

}

int Cube( int n )

{

return n * n * n;

}

FUNCIÓN main

int main()

{

cout << "The square of 27 is " << Square(27) << endl;

cout << "and the cube of 27 is " << Cube(27) << endl;

return 0;

}

Marca el comienzo de las intrucciones que se van a ejecuar.

Marca el final de las intrucciones que se van a ejecuar.

Estas instrucciones se conocen como el cuerpo “body” del programa.

Primera instrucción del programa.

El resultado que va a devolver este programa es:

The square of 27 is 729

And the cube of 27 is 19683

Encabezamiento.

FUNCIONES AUXILIARES

int Square( int n )

{

return n * n;

}

int Cube( int n )

{

return n * n * n;

}

Ambas funciones son ejemplo de funciones llamadas “value-returning functions”

Este identifier establece que la función Square devuelve un resultado entero.

El “identifier” return le permite a la función devolver un valor.

VOCABULARIO1.1. FunciFunciónón – Un sub-programa en C++.

2.2. SyntaxSyntax – Reglas que indican como se escriben las instrucciones correctamente en un lenguaje de programación.

3.3. SemanticsSemantics – Conjunto de reglas que determinan el significado de las instrucciones escritas en un lenguaje de programación.

4.4. MetalanguageMetalanguage – Un lenguaje que es usado para escribir las reglas de sintaxis para otros lenguajes.

5.5. IdentifierIdentifier – Un nombre asociado a una función o “data object” y se utiliza para hacer referencia a esa función o “data object”.

METALANGUAGE “Syntax template”

Existen muchas formas de hacer anotaciones para especificar los lenguages. Estas anotaciones, se llaman “metalanguage”. Utilizaremos el formato llamado “syntax template” para indicar formatos de instrucciones en el programa.

Letter Letter _ _ … Digit

Ejemplo: El “template” para un identifier es:

El área sombreada significa que es opcional. Los 3 puntos significan que se puede repetir el símbolo que le precede.

TEMPLATE NÚMERO Y LETRASPor lo tanto concluimos que un “identifier” puede comenzar con una letra o un guión y puede seguir repitiendose ese patrón. Los templates para letras y números son: A a J j S s B b K k T t C c L l U u D d M m V v E e N n W w F f O o X x G g P p Y y H h Q q Z z I I R r

0

123456789

TEMPLATE DE LA FUNCIÓN “main”

int main(){ statement

.

.

.}

La instrucción en gris significa que es opcional y los tres puntos, que se pueden incluir mas instrucciones. El programa mas corto en C++ sería.

int main()

{

return 0;

}

IDENTIFIERSLos “identifiers” se utilizan en C++ para nombrar cosas tales como sub-programas, variables, constantes, etc. Se compone de letras (A-Z, a-z) y de dígitos (0-9) y el “underscore” (_). Sin embargo, debe empezar con una letra o con el “underscore”. Los que comienzan con el “underscore”, tienen un significado especial en algunos compiladores de C++, de modo que siempre comenzaremos con letras.

Letter Letter _ _ … Digit

Template del “identifier”Ejemplos de “identifiers válidos

1. suma_de_cuadrados

2. J9

3. ObtenerDatos

4. Contador

5. Bin3D4

IDENTIFIERS INVÁLIDOS

IDENTIFIER INVÁLIDO

Explicación

40Horas No puede comenzar con números.

Obtener Datos No se permiten espacios en blanco.

box-22 El guión (“hyphen”) no es válido.

costo_en_$No se pueden utilizar símbolos especiales como el signo de dolar.

intLa palabra “int” es una palabra reservada en C++.

QUIZZ # 1– DETERMINE SI ES VÁLIDO O INVÁLIDO24

IDENTIFIER VÁLIDO/INVÁLIDO (Razón)

say_what

eres_#_1

return

Buscar

pacoAmigoGrande

5Veces

habichuela Colora

dude

cuajito-con-guineo

Main

IDENTIFIER VÁLIDO/INVÁLIDO (Razón)

say_what Válido

eres_#_1 Inválido – Signo “#”

return Inválido – Palabra reservada

Buscar Válido

pacoAmigoGrande Válido

5Veces Inválido – Comienza con un número.

habichuela Colora Inválido – Espacio en blanco.

dude Válido

cuajito-con-guineo Inválido – Uso del guión.

Main Válido

QUIZZ # 1– RESPUESTAS

DATA TYPEEl “Data type” determina como los datos son representados en la computadora y los tipos de procesamientos que la computadora puede ejecutar en ellos. El propósito de las distintas representaciones, es optimizar el uso de la memoria. Algunas de las representaciones de datos en C++ es.

ch ar sh o rt in t long

In te gra l

f lo a t d oub le lo ng d oub le

F loa ting

C + +d a ta typ es

S im p le

Char Data TypeLos “Data type” tipo char describen datos los cuales consisten de un solo caracter. Pueden ser una letra, un dígito o un caracter especial. Se utilizará el signo (‘ ) para representar los valores tipo char.

EJEMPLOS:

‘A’ ‘a’ ‘8’ ‘2’ ‘?’

‘+’ ‘-’ ‘$’ ‘*’ ‘ ‘

String Data TypeLos “Data type” tipo String describen datos los cuales consisten de mas de un caracter. Pueden ser letras, dígitos o caracteres especiales. Se utilizará el signo (“ ) para representar los valores tipo String.

EJEMPLOS:

“C++” “Programación” “Petraca”

“la vaca” “ y “ “Minga “

Naming Elements: DeclarationsLos “identifiers” se utilizan entre otras cosas para ponerle nombre a las constantes y a las variables. En otras palabras, un “identifier” puede ser el nombre de una localización de memoria. Utilizamos declaraciones para poder definir varibles y constantes.

Formato para declarar una variable.

DataType Identifier , Identifier . . .;

EJEMPLO DE DECLARACIONES DE VARIABLESchar letra, laInicial, ch;

char letra;

char laInicial;

char ch;

float payRate; //Pago por hora al empleado

float horas; // Horas trabajadas

float salario; // Salario del empleado

int cantidadEmpleados; // Cantidad de empleados

Se puede definir mas de una variable en una sola declaración del mismo tipo.

Se recomienda que se declaren las varibles con una sola declaración.

Separar las declaraciones permite documentarlas.

CONSTANTESTodo caracter encerrado entre comillas sencillas (‘) y “strings” encerrados en doble comillas (“) son constantes. Las constantes son valores que nunca cambian. Cuando usamos el valor de una constante en un programa, la llamamos “literal value”. También se le conoce como “named constant” o “symbolic constant”.

EJEMPLOS

‘A’ ‘@’ “UPR”

“Entre número” ‘*’ “123456789”

Se pueden utilizar en un programa como un “literal string” o una constante (“named constant”).

Literal string “Programming and Problem Solving with C++”

Named constant BOOK_TITLE

EJEMPLO DE DECLARACIONES DE CONSTANTES

const DataType Identifier = LiteralValue;

El template para definir una constante es:

Ejemplo de declaraciones de constantes:

const string ESTRELLAS = “**********”;

const char BLANCO = ‘ ‘;

const string BOOK_TITLE = “Programming and Problem Solving with C++”

const string EL_MENSAJE = “café puya”

QUIZZ # 2– ESCRIBA LA DECLARACIÓN

DESCRIPCIÓN DECLARACIÓNVariable entera llamada total.

Constante tipo float llamada PI con valor 3.14159.

Variable tipo char llamada inicial.

Variable tipo string llamada titulo.

Constante entera llamada HORAS_SEMANA con valor = 40.

Constante tipo char llamada PORCIENTO con valor = ‘%’.

Constante tipo string llamada CAFE con valor = “agua de piringa”.

QUIZZ # 2– RESPUESTAS

DESCRIPCIÓN DECLARACIÓNVariable entera llamada total. int total;Constante tipo float llamada PI con valor 3.14159.

const float PI = 3.14159;

Variable tipo char llamada inicial. char inicial;Variable tipo string llamada titulo. string titulo;

Constante entera llamada HORAS_SEMANA con valor = 40.

const int HORAS_SEMANA = 40;

Constante tipo char llamada PORCIENTO con valor = ‘%’.

const char PORCIENTO = ‘%’;

Constante tipo string llamada CAFE con valor = “agua de piringa”.

const string CAFE = “agua de piringa”;

VOCABULARIO (2)1. Palabra reservada – Una palabra que tiene un significado especial

en C++. No puede ser usado como una variable.

2. Data Type – Valores de datos en conjunto con unas operaciones para esos valores.

3. Variable - Localización en memoria a la cual se le hace referencia utilizando un “identifier” que contiene un valor y puede ser modificable.

4. Declaration – Comando que asocia un “identifier” con un “data object”, función o “data type”.

5. Constantes – Localización en memoria a la cual se le hace referencia utilizando un “identifier” que contiene un valor y NO puede ser modificable.

ASIGNACIONESEl valor de una variable puede ser definido o cambiado utilizando un “assignment statement” el cual almacena el valor de una expresión.

Por ejemplo:

lastName = “Lincoln”;

Asigna el “string” “Lincoln” a la variable lastName. El “template” para asignar valores es:

Variable = Expression;

EJEMPLO DE ASIGNACIONES VÁLIDAS

Utilizando las siguientes

declaraciones:

string firstName;

string middleName;

string lastName;

string title;

char middleInitial;

char letter;

VÁLIDOS

firstName = “Pablo”;

middleName = firstName;

middleName = “”;

lastName = “Rivera”;

title = “Ingeniero”;

middleInitial = ‘ ‘;

letter = middleInitial;

EJEMPLO DE ASIGNACIONES INVÁLIDAS

Utilizando las siguientes

declaraciones:

string firstName;

string middleName;

string lastName;

string title;

char middleInitial;

char letter;

INVÁLIDOS

middleInitial = “A.”; No se puede guardar un “string” una variable tipo “char”.

letter = firstName; No se puede guardar una varibla tipo “string” en otra variable tipo “char”.

firstName = Tomas; La computadora piensa que Tomas es un identifier.

“Rivera” = lastName; Al reves.

lastName = ; No esta asignando nada.

QUIZZ # 3 – DETERMINE VALIDEZ

DECLARACIONES INSTRUCCIONES VÁLIDO/INVÁLIDO (Razón)

char letra;

string nombre;

float promedio;

int cuentaGota;

const float PI = 31.14159;

const string MENSAJE = “yo tengo un sapo”;

const int TOTAL_PERSONAS = 50;

letra = “abc”;

nombre = carlos;

cuentaGota = cuentaGota + 1;

cuentaGota = promedio + 50;

promedio = promedio + 1.0;

nombre = MENSAJE;

MENSAJE = “fin”;

QUIZZ # 3 – RESPUESTAS

DECLARACIONES INSTRUCCIONES VÁLIDO/INVÁLIDO (Razón)

char letra;

string nombre;

float promedio;

int cuentaGota;

const float PI = 31.14159;

const string MENSAJE = “yo tengo un sapo”;

const int TOTAL_PERSONAS = 50;

letra = “abc”; INVÁLIDO

nombre = carlos; INVÁLIDO

cuentaGota = cuentaGota + 1;

VÁLIDO

cuentaGota = promedio + 50;

INVÁLIDO

promedio = promedio + 1.0;

VÁLIDO

nombre = MENSAJE; VÁLIDO

MENSAJE = “fin”; INVÁLIDO

VOCABULARIO (3)

1. Literal value – Cualquier constante escrita en un progama.

2. Named constant (symbolic constant) – Definición similar a la de constante.

3. Assignment statement – Instrucción que almacena el valor de una expresión dentro de una variable.

4. Expression – Conjunto de “identifiers”, literales y operadores de los cuales se puede obtener un resultado.

5. Evaluate – Calcular un nuevo valor ejecutando un conjunto específico de operaciones con unos valores dados.

STRING“String Expressions’ – Aunque no se puede ejecutar aritmética con los “strings”, se puede ejecutar una operación llamada concadenación (“concatenation”) la cual utiliza el símbolo de suma (+).

De acuerdo a la siguientes declaraciones:

string bookTitle;

string phrase1;

string phrase2;

phrase1 = “Programming and ”;

phrase2 = “Problem Solving”;

Las siguientes instrucciones:

bookTitle = phrase1 + phrase2;

bookTitle = phrase2 + phrase3;

Almacenan en la variable “bookTitle” lo siguiente:

“Programming and Problem Solving”

“Problem SolvingProgramming and ”

STRING (EXAMPLE)

De acuerdo a la siguiente definición:

const string WORD1 = “rogramming”;

const string WORD3 = “Solving”;

const string WORD5 = “C++”;

Podriamos asignar la siguiente expresión a la variable bookTitle

bookTitle = ‘P’ + WORD1 + “ and Problem “ + WORD3 + “ with “ + WORD5;

Para que contenga el siguiente “string”:

“Programming and Problem Solving with C++”

COUTPara poder mostrar resultados en pantalla, utilizaremos en C++ el comando cout en conjunto con el “insertion operator” (<<).

Ejemplo: la instrucción: cout << “Hello”; va a mostrar la palabra Hello en el “standard output device”, usualmente el monitor. El “template” de cout es:

cout << Expression << Expression . . .;

EJEMPLOS DE COUT Y DISPLAY DE PSEUDOCÓDIGO

cout << “Hello”; DISPLAY “Hello”

cout << “a” << “b”; DISPLAY “a” + “b”

cout “total: “ << cantDinero; DISPLAY “total: “ + cantDinero;

COUT (CONT.)

EJEMPLOS DE COUT

cout << ch; 2

cout << “ch = “ << ch; ch= 2

cout << firstName + “ “ + lastName; MarieCurie

cout << firstName << lastName; MarieCurie

cout << firstName << ‘ ‘ << lastName; MarieCurie

cout << “ERROR MESSAGE”; ERROR MESSAGE

cout << “Error=“ << ch; Error=2

Asuma que ch = ‘2’, firstName = “Marie” y lastName = “Curie”

OTRAS CARACTERISTICAS IMPORTANTES DEL COUT

Si queremos mostrar en pantalla la siguiente frase:

Juanito “el cuco” Trucupei

El cout quedaría: cout << “Juanito \”el cuco\” Trucupei”;

Para terminar una línea, utilizamos el “identifier” endl.

Cout << “Hi”;

Cout << “there”;

Produce lo siguiente:

Hithere

Cout << “Hi” << endl;

Cout << “there” << endl;

Produce lo siguiente:

Hi

thereEl “identifier” endl es particular de C++ y se le conoce como un manipulador.

COMENTARIOSPodemos poner los comentarios en C++ de dos formas:

1. Se puede poner cualquier comentario entre los símbolos. /* */

Ejemplo:

/* Este programa calcula el sueldo neto de un empleado */

2. Comenzar el comentario con dos ‘slashes’. (la mas común)

Ejemplo:

// Este programa calcula el sueldo neto de un empleado

La documentación en un programa es bien importante. En las reglas para programar en C++ se discute el formato de los programas que se van a entregar en la clase incluyendo la documentación.

CONSTRUCCIÓN DE UN PROGRAMA EN C++

Ya hemos explorado lo que son “identifiers”, declaraciones, variables, constantes, expresiones, “statements”, comentarios, etc. Ahora vamos a ver como integrar esos elementos en un programa. Como vimos anteriormente, un programa en C++ se compone de funciones y una de ellas se tiene que llamar “main”. El “syntax template” de un programa en C++ es:

Declaration...FunctionDefinitionFunctionDefinition...

Un “Function Definition” consiste del encabezamiento de la función y del cuerpo (“body). Su “Syntax Template” es:

Heading{Statement...}

EJEMPLO DE UN PROGRAMA EN C++ CON UNA SOLA FUNCIÓN//******************************************************************// PrintName program// This program prints a name in two different formats//******************************************************************#include <iostream>#include <string>

using namespace std;

const string FIRST = "Herman"; // Person's first nameconst string LAST = "Smith"; // Person's last nameconst char MIDDLE = 'G'; // Person's middle initial

int main(){ string firstLast; // Name in first-last format string lastFirst; // Name in last-first format

firstLast = FIRST + " " + LAST; cout << "Name in first-last format is " << firstLast << endl;

lastFirst = LAST + ", " + FIRST + ", "; cout << "Name in last-first-initial format is "; cout << lastFirst << MIDDLE << '.' << endl;

return 0;}

La instrucción #include le indica al compilador que inserte en el programa el contenido de los archivos llamados “iostream” y “string”. El primer archivo contiene información que C++ necesita para mostrar valores (cout). El segundo contiene información para manejo de cualquier “string”.

Definición de constantes.

Final de la función. Devuelve el valor 0 indicando que termino exitosamente. Se le conoce como el “exit status”.

Comentarios.

Block, FunctionDefinition, Statement

{Statement...}

HeadingBlock

NullStatement Declaration AssignmentStatement OutputStatement Block

BLOCK FunctionDefinition Statement

El cuerpo de una función es un ejemplo de un bloque (“block), el cual esta delimitado por los corchetes ({}).

Con eso en mente, podemos redefinir una función con solo 2 palabras. “Heading” y “Block”.

El “syntax template” de un statement de acuerdo a lo que hemos discutido hasta aqui, queda como el que se muestra arriba. El “NullStatement” es una linea con solo el (;).

“BLOCKS”, “FUNCTION DEFINITIONS” Y “STATEMENTS” EN EL PROGRAMA DE C++ QUE VIMOS ANTERIORMENTE

//******************************************************************// PrintName program// This program prints a name in two different formats//******************************************************************#include <iostream>#include <string>

using namespace std;

const string FIRST = "Herman"; // Person's first nameconst string LAST = "Smith"; // Person's last nameconst char MIDDLE = 'G'; // Person's middle initial

int main(){ string firstLast; // Name in first-last format string lastFirst; // Name in last-first format

firstLast = FIRST + " " + LAST; cout << "Name in first-last format is " << firstLast << endl;

lastFirst = LAST + ", " + FIRST + ", "; cout << "Name in last-first-initial format is "; cout << lastFirst << MIDDLE << '.' << endl;

return 0;}

Function Definitions

BLOCK

Statements

Statements

COMENTARIO ADICIONAL SOBRE LOS BLOQUES (“BLOCKS”)

Como indica el “syntax template”, dentro de un bloque yo puedo poner instrucciones de asignación. Esto significa que se pueden poner en cualquier orden. Sin embargo se recomienda que se pongan las asignaciones primero y las demas instrucciones despues. Ejemplo: DESORGANIZADO ORGANIZADO

{char ch;ch = ‘A’;cout << ch;string str;Str = “Hello”;Cout << str;}

{char ch;string str;

ch = ‘A’;cout << ch;Str = “Hello”;Cout << str;}

EL PRE-PROCESADOR DE C++Si compilamos el siguiente programa:

//*******************************************

// This program prints Happy Birthday

//********************************************

int main()

{

cout << “Feliz cumpleaños” << endl;

return 0;

}

El compilador reconoce los identifiers “int” y “main”, pero no reconoce “cout” y “endl”. Esto es debido a que no se ha incluido la librería “iostream”. Si en el programa se va a trabajar con “string”, también faltaria la librería “string”. Estos problemas se arreglan incluyendo la instrucción:

#include <iostream>

EL PRE-PROCESADOR DE C++ (2)//*******************************************

// This program prints Happy Birthday

//********************************************

#include <iostream>

int main()

{

cout << “Feliz cumpleaños” << endl;

return 0;

}

La línea “#include” no es manejado por el compilador, sino por el pre-procesador. Las líneas que comienzan con el “#” no se considera una instrucción del lenguaje, sino una directiva del pre-procesador. El pre-procesador es un programa que actua como un filtro durante la fase de compilación

EL PRE-PROCESADOR DE C++ (3)

Source Program

ExpandedSource Program

C++ compiler

Preprocessor

El pre-procesador expande una directiva al insertar físicamente el contenido del archivo de la directiva dentro del source program. (diagrama)

Los archivos que aparecen en el “#include” se conocen como “header file” y contienen constantes, variables, “datatypes” y declaraciones de funciones necesarios para el programa.

Los “brackets” (< >) son requeridos e indica que busque el archivo en el “standard include directory” que es donde estan todos los “header files”.

NAMESPACESAún incluyendo la directiva, el programa no corre. El compilador todavía no reconoce los “identifers” cout y endl. Esto se debe a que el “header file iostream” y todos los “headers files”declaran sus “identifiers” para que estén en un “namespace” llamado “std”;

Ejemplo:

namespace std

{

Declaraciones de variables, “data types”, etc.

}

NAMESPACES (2)Los programadores tiene dos opciones para aceder a los “identifiers” que están dentro de un “namespace”, las dos formas son:

I. Usar un “qualified name” para el “identifier”> Consiste de nombre :: operador. De esta forma el programa quedaría asi://*************************************

// This program prints Happy Birthday

//*************************************

#include <iostream>

int main()

{

std::cout << “Feliz cumpleaños” << std::endl;

return 0;

}

NAMESPACES (3)II. La otra forma es usar un “statement” con una directiva

llamada “using”. De esta forma no hay que cualificar cada directiva, sino definirla solo al principio.

using namespace std:

//*************************************

// This program prints Happy Birthday

//*************************************

#include <iostream>

using namespace std;

int main()

{

cout << “Feliz cumpleaños” << endl;

return 0;

}

CONCEPTOS ADICIONALES DE OUTPUTManejo de líneas

STATEMENTS OUTPUT PRODUCEDcout << “Hi there, “;cout << “Lois Lane. “ << endl;cout << “Have you seen “;cout << “Clark Kent?” << endl;

Hi there, Lois Lane.Have you seen Clark Kent?

cout << “Hi there, “ << endl;cout << “Lois Lane. “ << endl;cout << “Have you seen “ << endl;cout << “Clark Kent?” << endl;

Hi there,Lois Lane.Have you seenClark Kent?

cout << “Hi there, “ << endl;cout << “Lois Lane. “;cout << “Have you seen “ << endl;cout << “Clark Kent?” << endl;

Hi there,Lois Lane. Have you seenClark Kent?

CONCEPTOS ADICIONALES DE OUTPUT (2)3 FORMAS DE DECIR LO MISMO

STATEMENTSOUTPUT

PRODUCEDcout << “Hi there, “ << endl;cout << endl;cout << “Lois Lane. “ << endl;

Hi there,

Lois Lane.

cout << “Hi there, “ << endl << endl;cout << “Lois Lane. “ << endl;

Hi there,

Lois Lane.

cout << “Hi there, “ << endl << endl << “Lois Lane. “ << endl; Hi there,

Lois Lane.

PROCESO DE COMPILAREnter

Program

CompileProgram

Compile-timeErrors?

Run Program

Logic-errors?

Success!

Encontrar la causa de los errores, arreglarlos en el programa y volver a compilar.

YES

YES Volver al algoritmo y arreglar lo que esta mal y modificarlo en el editor.

LABORATORIO

Utilizando de referencia el documento hecho por el profesor Antonio Huertas, vamos a escribir y compilar el siguiente programa que ya esta escrito en Pseudocódigo.