Pseudolenguaje Tipo C Dominio 0 .. 2n -1 [MIN(C) .. MAX(C)] Operadores No hay Aritméticos Otras funciones CHR(...) CAP(...) ORD(...) E/S No Formateada: Leer (...) Escribir (...) Pseudolenguaje Tipo N Dominio 0 .. 2n – 1 [0 .. MAX(N)] Operadores + * DIV MOD E/S Formateada: Leer (...) Escribir (...) Laboratorio de Programación. Técnicas de Telecomunicación C/C++ char (1 byte) 0 .. 255 (valores códigos ASCII) [CHAR_MIN .. CHAR_MAX] (Definida en <limits.h>) No hay char (...) (casting) toupper(...), tolower(...) (<ctype.h>) int (…) (casting) isalnum(...) (<ctype.h>) isdigit(...) (<ctype.h>) isalpha(...) (<ctype.h>) #include <iostream> cin >> ... cout << ... << ... Ej: cout << “El carácter es: “ << carácter << endl C/C++ unsigned int (4 bytes) 0 .. 4.294.967.295 [0 .. UINT_MAX] (Definida en <limits.h>) Modificadores: short: 2 bytes [0 .. UHRT_MAX] long: 4 bytes [0 .. UONG_MAX] + * / % #include <iostream> cin >> ... cout << ... Ej: cout << El número es: << num 1 David Bueno Vallejo, José Jerez Aragonés Pseudolenguaje Tipo Z Dominio -2n-1 .. 2n-1 -1 [MIN(N) .. MAX(N)] Operadores + - (unario) - (binario) * DIV MOD E/S Formateada: Leer (...) Escribir (...) Pseudolenguaje Tipo R Dominio [MIN(R) .. MAX(R)] Operadores + - (unario) - (binario) * / E/S Formateada: Leer (...) Escribir (...) Laboratorio de Programación. Técnicas de Telecomunicación C/C++ int (4 bytes) –2.147.483.448 .. 2.147.483.647 [INT_MIN .. INT_MAX] (Definida en <limits.h>) Modificadores: short: 2 bytes [SHRT_MIN .. SHRT_MAX] long: 4 bytes [LONG_MIN .. LONG_MAX] + - (unario) - (binario) * / % #include <iostream> cin >> ... cout << ... C/C++ float / double float: (4 bytes) -3.4x10-38 .. 3.4x1038 [FLT_MIN .. FLT_MAX] (Definida en <float.h>) double: (8 bytes) -1.7x10-308 .. 1.7x10308 [DBL_MIN .. DBL_MAX] (Definida en <float.h>) + - (unario) - (binario) * / #include <iostream> cin >> ... cout << ... 2 David Bueno Vallejo, José Jerez Aragonés Pseudolenguaje Tipo B Dominio Dos posibles valores [FALSO, VERDADERO] Operadores AND OR NOT E/S No permitida C/C++ bool (C++) (no existe en C) 1 byte en representación interna [false, true] && (importante: dos &) || ! No permitida Se deben implementar las funciones necesarias Pseudolenguaje C/C++ Tipo ENUM {<valores>} id_tipo Dominio Valores enumerados que clarifican el dominio y mejoran la legibilidad del programa Operadores Ninguno Funciones MIN, MAX Estándares ORD PRED SUCC E/S No permitida Laboratorio de Programación. Técnicas de Telecomunicación 3 Typedef enum {<valores>} id_tipo Dominio de los int Los de los int, pero haciendo casting INT_MIN, INT_MAX <limits.h> int(<valor>) id_var = id_tipo(id_var - 1) id_var = id_tipo(id_var + 1) (casting) No son circulares. No permiten utilizar el los operadores "++" ni "--", ya que éstos incluyen una operación de asignación sin casting. No permitida Se deben implementar las funciones necesarias David Bueno Vallejo, José Jerez Aragonés Operadores Aritméticos - valor valor * valor valor / valor valor % valor valor + valor valor - valor Relacionales valor < valor valor <= valor valor > valor valor >= valor valor = = valor valor != valor Lógicos !valor valor && valor valor | | valor Reglas de precedencia de operadores !– */% +< <= > >= = = != && || Automática Explícitas Constantes (CONST) Variables (VAR) Sentencia de asignación Descripción Menos unario Producto División ( entera [DIV] y real [/]) Modulo o resto (MOD) (no para reales) Suma Resta Comparación menor Comparación menor o igual Comparación mayor Comparación mayor o igual Comparación igualdad Comparación desigualdad Negación lógica (NOT) AND lógico OR lógico unarios binarios binarios binarios binarios binario binario Conversiones de Tipos (casting) C++ realiza conversiones de tipos automática: el resultado de una operación será el del tipo más amplio implicado en ella. int(‘a’) -> 65 char(65) -> ‘a’ double(2) -> 2.0 int(3.6) -> 3 const <tipo> id_cte = valor; Hay que asignar un valor inicial. <tipo> id_var = valor; Se pueden inicializar las variables en la zona de declaración id_var = expresión; Laboratorio de Programación. Técnicas de Telecomunicación 4 David Bueno Vallejo, José Jerez Aragonés Estructura general de un programa en C/C++ Inclusión de módulos de bibliotecas necesarios Declaraciones y definiciones de constantes, tipos y subprogramas int main( ) { Declaraciones de variables y constantes Secuencia de sentencias; En entorno DEV-C++, para que no se cierre la ventana de MS-DOS y poder ver los resultados la última sentencia del programa deberá ser: system (‘PAUSE’); return Estado; } #include <iostream> cout cin Entrada / Salida Básicas Librería que contiene las funciones de entrada / salida básica Es una librería de C++, que contiene objetos y manipuladores que permiten operar con esos objetos Se utiliza el operador “<<” para indicar que los datos se redireccionan al flujo de salida cout (que representa la pantalla) Ej: cout << “Contador” << contador << endl; Se puede utilizar “\n” para final de línea, pero incluido en una cadena de caracteres. Se utiliza el operador “>>”, para almacenar los datos provenientes del flujo de entrada (teclado) en la variable correspondiente. Ej: cin >> maximo >> minimo Se pueden leer varios valores en una sola sentencia. Entrada de Datos: - Salta los caracteres en blanco y saltos de linea hasta encontrar datos. Formatear E/S Se utilizan manipuladores sobre los objetos cin y cout: Hay que incluir el fichero <iomanip.h> cout << setprecision(2) << 4.567 cout << setw(5) << 234 cout << setfill(‘#’) << setw(5) << 234 cin.get( ) Laboratorio de Programación. Técnicas de Telecomunicación 5 Imprime 4.6 Imprime “ 234” (justifica) Imprime ##234 Lee un carácter de entrada (sin saltar espacios) David Bueno Vallejo, José Jerez Aragonés Estructura de selección (if) if <cond> { <sentencias> } Simple: SI <cond> ENTONCES <sentencias> FINSI Doble: SI <cond> ENTONCES <sentencias_1> SINO <sentencias_2> FINSI Multiple: SI <cond_1> ENTONCES <sentencias_1> SINOSI <cond_2> ENTONCES <sentencias_2> SINOSI <cond_3> ENTONCES <sentencias_3> SINOSI <sentencias> FINSI if <cond> { <sentencias_1> } else { <sentencias_2> } if <cond_1> { <sentencias_1> } else if <cond_2> { <sentencias_2> } else if <cond_3> { <sentencias_3> } else { <sentencias> } Estructura de selección (switch) CASO <expr_ordinal> SEA switch <expr_ordinal> { <valor1>: <sent1> case <valor1>: <valor2>: <sent2> <sent1> <valor3>: <sent3> break; … case <valor2>: ENOTROCASO <sent2> <sentencias> break; FINSI case <valor3>: <sent3>; break; default: <sentencias> } Laboratorio de Programación. Técnicas de Telecomunicación 6 David Bueno Vallejo, José Jerez Aragonés Estructura de iteración REPETIR do { <sentencias> <sentencias> HASTA <cond> } while (!(<cond>)) MIENTRAS <cond> HACER while (<cond>) { <sentencias> <sentencias> FINMIENTRAS } PARA vc = vini HASTA vfin [PASO for (vc = vini; vc <= vfin; vc += paso) { paso] HACER <sentencias> <sentencias> } FINPARA Laboratorio de Programación. Técnicas de Telecomunicación 7 David Bueno Vallejo, José Jerez Aragonés Subprogramas (Procedimientos y Funciones) Pseudolenguaje C/C++ Procedimientos ALGORITMO IdProc (<par_formales>) { void IdProc (<par_formales>) { <sentencias> <sentencias> } } Funciones ALGORITMO <TipoFunc> IdFunc (<par_formales>) { <TipoFunc> IdFunc (<par_formales>) { <sentencias> DEVOLVER (valor); <sentencias> return (valor); } } Parámetros Valor: (..., E <Tipo> id_param, ...) Valor: (..., const <Tipo> id_param, ...) Referencia: (..., [S | ES <Tipo> id_param, ...) Reglas de 1) Regla de ámbito: es la parte del alg. donde ámbito se puede utilizar y va desde el punto donde se declara hasta el final del cuerpo del algoritmo en que se declara, incluyendo los subalgoritmos anidados. Referencia: (..., <Tipo> &id_param, ..) Las mismas que para el pseudolenguaje, pero sin la posibilidad de anidar subalgoritmos en C++, donde no está permitido. 2) Regla de ocultación: La visibilidad de un identificador coincide con su ámbito exceptuando los ámbitos de los identificadores con el mismo nombre declarados en subalgoritmos anidados, los cuales ocultan al más externo. Notas Laboratorio de Programación. Técnicas de Telecomunicación En C/C++, todos los subprogramas son externos, no se permiten anidamientos y el principal, main(), es otro subprograma 8 David Bueno Vallejo, José Jerez Aragonés