Académique Documents
Professionnel Documents
Culture Documents
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>
/* 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 */
10
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};
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.
tipo_de_la_variable nombre_de_variable; 11
Tambin es posible declarar en una misma lnea varias variables del mismo tipo, separando sus nombres por comas y terminando en punto y coma:
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.
El ';' debe aparecer al final de cada sentencia (declaracin de variable o instruccin ejecutable) de un programa en C++. 12
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.
14
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
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
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
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
} 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 .
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.
/* 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
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
{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
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.
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
#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
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; }
23