Vous êtes sur la page 1sur 15

PRCTICA

Estructura de un Programa en C++


En esta prctica presentamos cul es la estructura bsica de un programa escrito en C++, as como los mecanismos para traducir a C++ los algoritmos que se realizan en clase de teora. Tambin servir para ejercitar la composicin secuencial de acciones. Es primordial que al final de esta sesin el alumno sepa como traducir a C++ un programa escrito en pseudocdigo y cmo confeccionar programas secuenciales.

1. Estructura Bsica de un Programa en C++


La estructura bsica de un programa escrito en C++ es la que puede verse en la pgina siguiente. Sobre ella podemos hacer las siguientes observaciones:

1.1. Cmo comienza


Todos los programas en C++ comienzan habitualmente por una serie de sentencias que van precedidas de una almohadilla #. Estas rdenes son directivas al preprocesador, y constituyen una ayuda para que el compilador sea ms eficaz, preparando el fichero fuente que se desea compilar. Entre este tipo de rdenes se encuentran las rdenes #include, cuya misin es informar al compilador de dnde puede encontrar el prototipo (formato) de algunas de las operaciones utilizadas muy habitualmente, como pueden ser las de lectura y escritura. 9

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

La forma en la que se especifica en la mayor parte de los casos una directiva #include es la siguiente:

#include <nombre_de_fichero>

donde nombre_de_fichero es el nombre de un fichero llamado fichero de cabecera. As, por ejemplo, el fichero de cabecera iostream (de input output stream) contiene los prototipos de las funciones de lectura y escritura cin y cout que usaremos muy habitualmente. Para incluirlo debemos escribir al comienzo del programa la lnea: #include <iostream>

#include <nombre_de_fichero> #define ...

/* directivas al preprocesador */

/* declaraciones de tipos definidos por el usuario */ /* declaraciones de funciones */ int main() /* inicio del bloque principal */ { const tipo_dato cte_1=valor_1; /* definiciones de constantes */ tipo_1 var_1; tipo_2 var_2, var_3; ... ... } /* definiciones de funciones */ Esquema bsico de un programa escrito en C++ /* declaraciones de variables */

/* cuerpo del bloque principal */

1.2. La zona de declaracin de tipos definidos por el usuario


Tras las directivas #include aparecer la zona de definicin de tipos de datos definidos por el usuario. Aunque por el momento no vamos a hacer uso de ella, esta ser la zona donde deberemos definir tipos de datos compuestos como enumeraciones, registros, etc. (que sern estudiados en prximas prcticas). Ejemplo: Declaracin de los tipos enumerados:

enum nombre_de_tipo { VALORES, ... };

10

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

Por ejemplo la declaracin de un tipo enumerado para los tres colores bsicos, al que llamaramos TColor_Basico, se hara: enum TColor_Basico {ROJO, VERDE, AZUL};

1.3. La zona de declaracin de funciones


Tras la zona de definicin de tipos aparece la zona de declaracin de funciones. Esta es la zona reservada para la declaracin de subprogramas dentro del programa. Este tipo de declaraciones, as como las definiciones de las funciones (zona de cuerpos de funciones en el esquema bsico de la pgina anterior) sern objeto de varias prcticas en sesiones posteriores.

1.4. El bloque principal


Lo siguiente que debe aparecer en nuestro fichero en C++ es el bloque principal (main), que es el lugar dentro del cual aparecen las instrucciones que constituyen el programa propiamente dicho. El bloque principal comienza con la lnea: int main() siguiendo despus un bloque.

1.5. Bloques: las llaves


Un bloque es un conjunto de sentencias consecutivas en C++. Para crear un bloque basta encerrar las sentencias entre llaves { }. La llave de apertura { marca el comienzo de un bloque de sentencias, bloque que debe finalizar con una llave de cierre }. La correspondencia de llaves es muy importante.

NO DEBE HABER NINGUNA { SIN SU CORRESPONDIENTE }

Uno de estos bloques (en general, no es el nico en un programa) es el bloque principal, que acabamos de comentar y que has podido ver en el cuadro del esquema bsico de un programa. Una de las caractersticas de C++ que lo hacen diferente del pseudocdigo que ves en clase de teora es que es posible declarar variables en cualquier lugar de un programa. En particular, las variables que se declaran en la zona variables de un algoritmo en pseudocdigo deben declararse dentro del bloque principal, siguiendo la sintaxis que se detalla a continuacin.

1.6. La zona de declaracin de variables


Como acabamos de decir, en C++ pueden declararse variables en cualquier lugar. La declaracin de variables debe ajustarse al siguiente formato (tipo de la variable, espacio en blanco, nombre de variable, punto y coma):

tipo_de_la_variable nombre_de_variable; 11

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

Tambin es posible declarar en una misma lnea varias variables del mismo tipo, separando sus nombres por comas y terminando en punto y coma:

tipo_de_la_variable nombre_1, nombre_2, ..., nombre_n;

Los tipos pueden ser los predefinidos por el lenguaje o los que el usuario define en la zona de definicin de tipos de usuario. Los tipos predefinidos son los siguientes: Entero: Entero largo: Carcter: Real: Real (doble precisin): Sin valor: Lgico: int long char float double void bool

Por ejemplo, para definir dos variables una entera llamada i y otra de tipo real llamada r escribiramos: int i; float r; El tipo lgico no exista como tal tipo en C cuando ste se desarroll. En una ampliacin posterior se incluy y nuestro compilador lo identifica como tipo bool. Este tipo toma dos valores TRUE o FALSE, aunque internamente funciona como un int, entendiendo que FALSO=0 y VERDAD=1.

1.7 . Los identificadores


Los identificadores son los nombres que daremos a los objetos (constantes, variables, ...) en nuestro programa. Deben cumplir una serie de reglas para que sean vlidos: Pueden contener letras, nmeros y caracteres de subrayado ( _ ). Deben comenzar por una letra. No pueden contener espacios en blanco. No deben sobrepasar una longitud mxima. Esta longitud depende del compilador utilizado.

1.8. El punto y coma ';'


El punto y coma (';') es quizs el carcter que ms veces aparece en los programas en C++. En C++ el ';' es un finalizador de sentencias. El compilador reconoce el fin de una sentencia por la presencia del punto y coma.

El ';' es un finalizador de sentencias.

El ';' debe aparecer al final de cada sentencia (declaracin de variable o instruccin ejecutable) de un programa en C++. 12

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

1.9. Los comentarios


Los comentarios son textos en lenguaje natural que se insertan a lo largo del programa para servir de aclaracin al programador. Quizs, cuando uno se inicia en la programacin el empleo de comentarios parezca superfluo. Sin embargo, ponte en el lugar de alguien que escribi el cdigo de un programa hace unos cuantos aos y trata de reformarlo. En este caso los comentarios son realmente tiles ya que aaden legibilidad al cdigo. Los comentarios se deben encerrar entre estos caracteres: Comienzo de comentario: /* Fin de comentario: */ Por ejemplo: /* Este es un comentario vlido */ /* Este comentario no es vlido /* O bien comenzando el comentario con //, C++ considera comentario el texto que vaya hasta el fin de lnea: Por ejemplo: // Este es un comentario vlido de una lnea // Este es un comentario vlido // de dos lneas

1.10. Sobre las maysculas y las minsculas


C++ es un lenguaje SENSIBLE al uso de maysculas o minsculas en los identificadores y en las estructuras de control. Por ejemplo: los siguientes identificadores son DIFERENTES: contador, Contador, CONTADOR, conTAdor, ...

2. Traduccin de Pseudocdigo a C++.Un ejemplo.


Consideremos un ejemplo de programa realizado en pseudocdigo para su traduccin a lenguaje C++. A travs de l iremos dando las pautas de traduccin, que sern ampliadas en sucesivas prcticas conforme se vayan introduciendo nuevas estructuras de programacin. En este ejemplo solamente se considerar la composicin secuencial de sentencias. El problema es el siguiente: Calcular el volumen de un cilindro dada su altura y el radio de la base. SOLUCIN EN PSEUDOCDIGO Especificacin: r, h: real; {entrada} Vol: real; {salida} {Pre: r > 0, h > 0} Clculo Volumen Cilindro {Post: Vol = r2h } Algoritmo Clculo Volumen Cilindro 13

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

constantes PI = 3.14 variables base : real principio leer(r,h) base := PI*r*r Vol := base * h escribir(Vol) fin Para la traduccin seguiremos el siguiente esquema:
Variables de E/ y S/ ..... {Pre: ...} {Post: ...} Algoritmo Nombre Algoritmo /* No hay un equivalente en C++ para esta lnea */ #include <nombre_fichero> /* ver seccin 2.2 */ constantes cte 1 = valor 1 ... tipos tipo 1 = ... ... variables variable 1 : tipo 1 ... principio ... /* zona de definicin de tipos */ ...

int main() { const tipo cte_1 = valor_1; tipo_1 variable_1; ... /* sentencias */ }

{ sentencias} fin.

Traduccin de pseudocdigo a C++

2.1. Traduccin de las zonas reservadas.


Durante la traduccin, las palabras reservadas que utilizamos en pseudocdigo deben ser traducidas por su correspondencia en C++. Aunque en C++ no existe palabra clave para algunos de los trminos del pseudocdigo (variables, ...,), s que debes respetar un cierto paralelismo entre las dos estructuras, como puedes ver en el cuadro de arriba. Vale la pena resaltar dos de los comentarios realizados en el punto 1: Los identificadores no pueden contener espacios en blanco (pto. 1.7.). Se recomienda poner especial atencin durante su traduccin. El uso del punto y coma (pto. 1.8.) al final de las sentencias C++. Las sentencias sern iguales a las de pseudocdigo. La nica precaucin a tener en cuenta es que los tipos (para la definicin de las variables) y algunos operadores se escriben de distinta forma que en pseudocdigo. Para su traduccin adjuntamos la siguiente tabla:

14

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

Tipos Entero: int Carcter: char Real: float Lgico: bool

Operadores Aritmticos Operadores Relacionales + a+b Suma = a = = b Igual a-b Resta; cambio de signo a ! = b Distinto () * a*b Producto < a < b Inferior div a / b Divisin entera > a > b Superior / a/b Divisin real <= a <= b Menor o igual mod a % b Resto de la divisin >= a >= b Mayor o igual Operadores Lgicos NOT ! a Negacin AND a & & b y OR a | | b o

Operador Asignacin := c = b Asigna el valor de b a c

2.2. Notas sobre la estructura del programa.


La estructura del programa C++ ser la misma que la de pseudocdigo salvo por las siguientes excepciones:

El nombre de algoritmo y las directivas #include


Observa que en C++ no se le da un nombre al algoritmo dentro del cdigo del mismo. Si quieres incluirlo como referencia, puedes hacerlo usando un comentario. Asimismo, no hay nada en pseudocdigo que equivalga a las directivas #include de C++, aunque no debes olvidar incluirlas.

Variables de entrada/salida
En C++ no se diferencia entre variables de entrada/salida e intermedias. Por tanto las variables de entrada/salida que aparecen en la especificacin deben aparecer, junto con las intermedias, en la zona de variables del programa en C++. La localizacin de dicha zona est dentro del bloque principal, como indica la flecha.

Especificacin
El resto de la especificacin (pre y postcondicin) no aparece en C++. Puede incluirse como comentario al principio del programa.

Precondicin
La precondicin expresa qu condiciones deben cumplir los datos de entrada del programa para que ste pueda funcionar. No existe ningn mtodo inmediato que permita hacer cumplir las precondiciones en los programas C++. Es responsabilidad del usuario introducir unos valores adecuados como entrada en el programa. Pero si ste, de forma intencionada o bien por error, introduce valores que no cumplen 15

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

la precondicin, el programa se comportar errneamente.

2.3. Traduccin del programa.


Comenzaremos el programa con unas cuantas lneas de comentarios para aclarar cul es el propsito del programa, la fecha de creacin, cules son los datos de entrada y los de salida, y, en caso de que pueda producirse algn error cul puede ser la causa. Estas lneas no son instrucciones y por tanto no se ejecutarn. Puede pensarse que son superfluas, pero son de gran utilidad cuando se vuelve a leer el programa despus de haber transcurrido un tiempo desde que se escribi. Un esquema general para estos comentarios puede ser /* FECHA: <la fecha de creacin> AUTOR: <nombre del programador> DESCRIPCIN: < qu es lo que hace el programa > ENTRADAS: <nombre de las variables de entrada y cmo deben ser > SALIDAS: <variables de salida> ERRORES: <Condiciones de error, a qu se deben y cmo evitarlas.> */ Tras esta introduccin aparecer (opcionalmente) la lnea con el nombre del programa como comentario. /* Algoritmo Calculo_Volumen_Cilindro */ Seguidamente introducimos una directiva #include. Como vamos a leer por teclado y escribir por pantalla, usamos el fichero de cabecera para entradas y salidas estndar, iostream. #include <iostream> Despus de esta directiva tambin incluiremos #include <cstdlib> using namespace std;

/* sta debe terminar en punto y coma */

Ahora aparece el bloque principal, que comenzar por: int main( ) { Seguimos traduciendo la zona de constantes. const float PI = 3.14

Seguidamente aparece la zona de declaracin de variables. En ella deben figurar todas las variables: relevantes e intermedias. Para la definicin usaremos los tipos correspondientes a C++ (int, float, char...). Cada lnea de definicin debe terminar en punto y coma. float r, h; float vol; float base;

16

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

Al tratarse de variables del mismo tipo podramos haberlas definido todas en la misma lnea: float r, h, vol, base; Es una buena costumbre comentar para qu sirve cada variable, facilitando, de este modo, la lectura y comprensin del programa. float r, h; /* entrada: r, radio de la base; h: altura del cilindro */ float vol; /* salida: volumen del cilindro */ float base; /* rea de la base del cilindro */ Comenzar el grupo de instrucciones del bloque principal. Iremos traducindolas lnea a lnea, usando los operadores adecuados y acabando cada instruccin en punto y coma, hasta llegar al final. Para poder visualizar el resultado en otra ventana escribimos como ltimas dos sentencias las siguientes

system ("PAUSE"); return 0;

Finalmente, el programa acabar con }.

Asignacin externa (lectura) y escritura por pantalla


Para la asignacin externa y la escritura usaremos las funciones de librera de C++ cin (C input, leer) y cout (C output, escribir). Por lo tanto, antes de las instrucciones del programa se deben leer los datos de entrada: int main() { /* declaracin de variables antes comentada */ ... cin >> r; cin >> h; Con estas instrucciones sera suficiente para que el programa funcionase. Pero como hemos comentado anteriormente, es bueno aadir algn aviso de cara al usuario, para que ste sepa qu valor debe introducir y qu condiciones debe cumplir este valor (precondicin). Los avisos sern escritos en pantalla (mediante cout) antes de las correspondientes rdenes de lectura. ... cout << Introduce el valor del radio (valor positivo); cin >> r; cout <<Introduce el valor de la altura (valor positivo); cin >> h; Nos gustara incidir en que las nicas instrucciones estrictamente necesarias para la lectura de los datos son las dos rdenes cin. Las rdenes cout no son imprescindibles aunque s recomendables. Para la escritura del resultado usaremos cout. cout << vol; 17

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

} Como se ve, la asignacin externa y la escritura en C++ son algo ms complejas que los sencillos leer y escribir de pseudocdigo. Merece la pena detenerse para explicar el funcionamiento de cada una de las dos funciones cin y cout .

Asignacin externa por teclado: cin


La funcin que usaremos para la lectura de datos desde el teclado es la funcin estndar cin , cuya sintaxis se detalla a continuacin:

cin >> variable_de_entrada;

Escritura estndar por pantalla: cout


La funcin que usaremos para la escritura de datos en la pantalla es la funcin estndar cout, cuya sintaxis se detalla a continuacin:

cout << texto << variable_de_salida <<...;

As por ejemplo podemos usar cout << para mostrar un mensaje por pantalla: cout << Introduce el valor del radio (valor positivo); Para mostrar el valor de una variable: cout << vol; O, si queremos una salida ms elaborada: cout << Volumen = << vol << endl; donde endl fuerza un salto de lnea.

2.4 El programa completo


Tras todas estas precisiones, una posible traduccin a C++ del pseudocdigo del algoritmo Calculo_Volumen_Cilindro sera:

/* FECHA: AUTOR: profesores de Fundamentos de Informtica DESCRIPCIN: Calcula el rea de un cilindro, conocidos su radio y altura. ENTRADAS: r (radio de la base) y h (altura). Deben ser positivas. SALIDAS: vol 18

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

ERRORES: El programa es incorrecto si los valores de r y h son negativos. */ /* Algoritmo Calculo_Volumen_Cilindro */ #include <iostream> #include <cstdlib> using namespace std; int main() { const float PI = 3.14 float r, h; /* entrada: r, radio de la base; h: altura del cilindro */ float vol; /* salida: volumen del cilindro */ float base; /* rea de la base del cilindro */ cout <<Introduce el valor del radio (valor positivo); cin >> r; cout <<Introduce el valor de la altura (valor positivo); cin >> h; base = PI * r * r; vol = base * h; cout << El volumen del cilindro de radio << r << y altura << h << es << vol; system("PAUSE"); return 0; } Gurdalo en un fichero llamado P2EJ1.

3. Sesin de prcticas
3.1. Traduce programas a C++
Con este ejercicio repasars: cmo traducir a C++ un programa escrito en pseudocdigo. cmo editar, grabar, compilar y ejecutar un programa en Dev-C++.

A. Primer programa
Acaba de traducir el siguiente algoritmo. Su propsito es leer una letra mayscula del alfabeto y escribir su posicin (en el alfabeto). Especificacin: letra: carcter {entrada} posicin: entero {salida} {Pre.: 'A' letra 'Z' } posicin letra mayscula 19

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

{Post.: posicin almacena la posicin de la letra en el alfabeto} {Post.: posicin := ordinal(letra) - ordinal('A') + 1} Algoritmo posicin letra mayscula principio leer(letra) posicin := ordinal(letra) - ordinal('A') + 1 escribir(posicin); fin. La traduccin que tienes que completar es: (PISTA: faltan cosas donde encuentres ... , aunque faltan ms cosas que las indicadas): /* FECHA: AUTOR: DESCRIPCIN: Dada una letra mayscula calcula cual es su posicin en el alfabeto ENTRADAS: letra (la letra mayscula) SALIDAS: posicin (la posicin en el alfabeto) ERRORES: El programa es incorrecto si la letra no es una mayscula */ #include ... #include <cstdlib> using namespace std; ...main() ... posicion = int(letra) ... system("PAUSE"); return 0; }

...('A') + 1

Recupera el fichero del directorio PFINF\P2. Su nombre es P2EJ2. Edita y completa el programa, grbalo, complalo y ejectalo. Para ello utiliza los procedimientos descritos en anteriores sesiones de prcticas. NOTAS: Fjate cmo se ha traducido el operador ordinal de pseudocdigo. C++ no tiene un operador ordinal, aunque obtenemos el mismo resultado haciendo una conversin de tipos (cast), forzando a tipo entero un dato de tipo carcter. Lo que obtenemos es el cdigo ASCII. Algo parecido haremos con el operador carcter del pseudocdigo. En este caso deberemos forzar una conversin de tipo a carcter (char). SUGERENCIA: Ejecuta el programa introduciendo valores que violen la precondicin. Por ejemplo, introduce una letra minscula. Como ves el programa funciona, pero errneamente.

B. Segundo programa
Traduce el siguiente algoritmo. Su propsito es convertir una cantidad positiva de segundos a su equivalente en horas, minutos y segundos. 20

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

Especificacin: cantidad: entero {entrada} h, m, s: entero {salida} {Pre.: cantidad 0 } Convertir horas minutos segundos {Post.: cantidad = 3600*h + 60*m + s con 0 m < 60 y 0 s < 60 } Algoritmo Convertir horas minutos segundos variables auxiliar : entero principio leer(cantidad) h := cantidad div 3600 auxiliar := cantidad mod 3600 m := auxiliar div 60 s := auxiliar mod 60 escribir(h,m,s) fin. Edita el programa, grbalo, complalo y ejectalo. Para ello utiliza los procedimientos descritos en anteriores sesiones de prcticas.

3.2. Corrige programas con errores


Con este ejercicio repasars: Cmo traducir a C++ un programa escrito en pseudocdigo. Cmo recuperar, grabar, compilar y ejecutar un programa. Cmo utilizar el compilador para corregir errores en los programas.

Esta serie de programas ha sido traducida con errores. El objetivo del ejercicio es que los encuentres y los corrijas. Es aconsejable que intentes detectarlos por simple inspeccin. Si no lo consigues puedes utilizar el compilador de Dev-C++. Encontrars unos cuantos errores bastante comunes. Sera aconsejable que los recordases para no cometerlos en el futuro. Hay errores lxicos, sintcticos e incluso puede que falten o sobren cosas.

A. Primer programa
Puedes recuperar este programa del directorio PFINF\P2, fichero P2EJ4. /* FECHA: AUTOR: profesores de Fundamentos de Informtica DESCRIPCIN: Dada una letra minscula escribe su mayscula correspondiente ENTRADAS: minus (la letra minscula) SALIDAS: mayus (la letra mayscula resultante) ERRORES: El programa es incorrecto si minus no es una minscula */ #include <iostream> 21

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

#include <cstdlib> using namespace std; define main[] { caracter minus, mayus leer(minus); mayus := char(int(minus) - int(a) + int(A)); cout << mayus system("PAUSE"); return 0; }

B. Segundo programa
Puedes recuperar este programa del directorio PFINF\P2, fichero P2EJ5. /* FECHA: AUTOR: profesores de Fundamentos de Informtica DESCRIPCIN: Calcula la velocidad en m/s de un corredor de una carrera de 1500 m., conocido el tiempo que tarda en realizar la prueba. ENTRADAS: minutos, cantidad de minutos invertidos por el corredor segundos, cantidad de segundos invertidos por el corredor SALIDAS: velocidad, ser velocidad = 1500/(60*minutos+segundos) ERRORES: El programa es incorrecto si minutos y segundos no son positivos */ #include <iostream> #include <cstdlib> using namespace std; int main() { const DISTANCIA=1500 cin >> minutos; cin >> segundos velocidad := 1500/(60*minutos+segundos); escribir(velocidad); system("PAUSE"); return 0; }

C. Tercer programa
Puedes recuperar este programa del directorio PFINF\P2, fichero P2EJ6. /* FECHA: AUTOR: profesores de Fundamentos de Informtica DESCRIPCIN: Convierte una distancia dada en pies a su equivalente en yardas, pulgadas, centmetros y metros. ENTRADAS: pies, distancia medida en pies SALIDAS: yardas, pulgadas, centmetros, metros = distancia medida en esas unidades 22

Fundamentos de Informtica. Prctica 2.


Estructura de un programa en C++

ERRORES: El programa es incorrecto si pies es negativo */ #include <iostream> #include <cstdlib> using namespace std; int main() { real pies; yardas, pulgadas, centimetros, metros: real; yardas = pies/3.0; pulgadas = = pies * 12.0; centimetros = 2'54 * pulgadas; metros = centimetros / 100; system("PAUSE"); return 0; }

3.3. Realizacin de programas


Con este ejercicio programars varios programas en C++. Es aconsejable que los programes primero en pseudocdigo y, posteriormente, los traduzcas de acuerdo a las reglas descritas durante esta prctica. Programa, edita, graba, compila y ejecuta los siguientes programas. 1.- Lee un nmero entero de dos cifras y presntalo con sus cifras invertidas. 2.-Descodifica la fecha expresada como un entero de 6 dgitos. El ao viene representado en las unidades y decenas, el mes en las centenas y millares y el da en las decenas y centenas de millar. (NOTA: para la solucin de este ejercicio define la variable que almacene la fecha como de tipo long). Ejemplo: 120607 debe producir la salida 12-06-2007.

23

Vous aimerez peut-être aussi