Programacion en C++

Programación con C++ Nivel 1 Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial

Views 128 Downloads 5 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

  • Author / Uploaded
  • trino
Citation preview

Programación con C++ Nivel 1

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial, por medios impresos o digitales, sin autorización del Autor.

CENEAC Producciones, C.A. Universidad Central de Venezuela, Facultad de Ciencias, Edif. III, Av. Los Ilustres, Los Chaguaramos, Caracas, Venezuela Tlf. (58 212) 605-13-14 693-47-38 (telfax) correo [email protected] www.ceneac.com.ve

CENEAC - Programación con C++ Nivel 1.

ÍNDICE 1. Creación de Algoritmos en Pseudocódigo 1.1. Conceptos básicos y características … 1 1.2. Definición de los elementos presentes en un algoritmo … 3  Datos, Tipos de datos, Variables … 3  Secuenciamiento de Acciones … 7  Acciones Básicas (Asignación, Lectura y Escritura) … 9  Estructuras de Control Condicional (Si y Selección ) … 10  Estructuras de Control Iterativas (Ciclos: Para, Repetir y Mientras) … 12  Procedimientos (Acciones, Funciones y Pase de parámetros) … 17

2. Creación de Programas en C++ 2.1. Introducción al lenguaje, origen y principales características … 24 2.2. Elementos de un programa … 26 2.3. Identificadores y Palabras reservadas … 28 2.4. Tipos de datos básicos … 28 2.5. Variables, Constantes, Operadores básicas, Expresiones y Prioridad de Operadores… 30 2.6. Operaciones básicas Entrada (Lectura) y Salida (Escritura) … 35 2.7. Conversión de Tipos y Modificadores de formato … 36 2.8. Estructuras de Control Condicional:  if (Si) … 39  switch (En caso de) … 41 2.9. Estructuras e Control Iterativo (Ciclos):  for (Para) … 43  while (Mientras) … 44  do-while (Hacer … mientras o Repetir) … 45 2.10. Funciones, Procedimientos, Prototipos y Macros … 47

3. Estructuras de Datos en C++ 3.1. Arreglos Unidimensionales … 52 3.2. Arreglos Multidimensionales … 56 3.3. Registros … 58

4. Instalación de un Editor y Compilador de C++ … 64

5. Anexo 1:

Principales Instrucciones y su traducción de Pseudocódigo a C++ Principales funciones predefinidas Biblioteca Estándar de C++ y Principales Librerías … 65

6. Ejercicios de creación de Algoritmos y Programación con C++

… 72

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

CENEAC - Programación con C++ Nivel 1.

T E MA 1 .

CREACIÓN DE ALGORITMOS EN PSEUDOCÓDIGO 1.1 Conceptos Básicos A partir de los años 80, la masificación en el uso de los computadores se ha convertido en una realidad, de tal forma que hoy en día son una herramienta indispensable en casi todas las actividades del quehacer humano. A pesar de las diversas áreas en las que el computador juega un papel preponderante y del desarrollo tecnológico, que ha llevado de los grandes computadores (main frames) a los microcomputadores actuales, las componentes básicas de un computador siguen siendo: el hardware y el software. El hardware de un computador es el conjunto de componentes físicas que lo forman, siendo las tres componentes principales del hardware: La memoria principal o memoria RAM (Random Access Memory)

• La Unidad Central de Proceso o CPU

Los Dispositivos Periféricos. La memoria principal o memoria RAM es la componente encargada del almacenamiento tanto de los programas como de los datos a ser procesados. El rendimiento de una memoria se mide en términos de su capacidad (tamaño medido en MB o GB) y de la velocidad con que los datos son almacenados y recuperados. La Unidad Central de Proceso o CPU es la componente encargada de realizar los cálculos y transformaciones sobre los datos, para obtener los resultados; así como también de “gobernar” las diferentes componentes del computador. El CPU está formado por dos componentes principales: Unidad de Control, parte encargada de “gobernar” a las distintas componentes del computador. Unidad Aritmético-Lógica o ULA, componente encargada de realizar los cálculos y transformaciones sobre los datos. El rendimiento del CPU se mide en términos de su velocidad (medida en MHz o GHz) para efectuar los cálculos. Los Dispositivos Periféricos tienen como función principal permitir la comunicación entre el usuario y el computador, ya sea para la captura de datos o presentación de resultados. Estos dispositivos pueden clasificarse, de acuerdo a su utilización, en tres categorías: Dispositivos de Entrada: Son aquellos dispositivos que sólo permiten la comunicación Usuario  Computador. Por ejemplo: el teclado, el ratón, el micrófono, los controles para juegos (joystick), el escáner, las pantalla táctiles, etc. Dispositivos de Salida: Son aquellos dispositivos que sólo permiten la comunicación Computador  Usuario. Por ejemplo: la impresora (salida permanente), el monitor (salida no permanente), las cornetas, etc. Dispositivos de Entrada/Salida: También llamados memorias auxiliares o secundarias, son aquellos dispositivos que permiten la comunicación Usuario  Computador; además, estos dispositivos le proporcionan al computador un medio de almacenamiento de información adicional, desde el cual es posible leer o escribir información. Ejemplos de estos dispositivos son: la unidad de disquete, la unidad de CD, DVD, disco duro (fijos y USB), pendrive, tarjetas flash, etc. El software de un computador es el conjunto de programas (sistemas) que permiten la utilización de los recursos del computador y comprende: Programas para el control del computador (Sistemas Operativos, Interpretadores, Compiladores,...) Programas de aplicación para la resolución de una amplia gama de problemas mediante el computador (Sistemas Administrativos, Bases de Datos, Editores de Texto, Editores Gráficos, Editores de Páginas Web,...) Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

1

CENEAC - Programación con C++ Nivel 1.

La disciplina dentro de la computación dedicada a la resolución de problemas mediante el computador es la Programación, cuyo producto final son los Programas, los cuales tienen como finalidad dar órdenes a una máquina (computador), a fin de obtener resultados. Para la elaboración de un programa, el programador debe atacar dos aspectos fundamentales: Organizar los datos en la memoria del computador (Estructuración de los Datos). Definir el proceso de tratamiento de esos datos (Estructuración de los Programas). Abstracción Mecanismo intelectual principal en la actividad de la programación, el cual durante la etapa de análisis del problema permite la separación de los aspectos relevantes de los irrelevantes en el contexto estudiado. Análisis Descendente Método de análisis que consiste en la aplicación sucesiva de la capacidad de abstracción sobre un problema determinado, lo cual permite la descomposición del problema en subproblemas, tales que, la composición de sus soluciones constituyen una solución al problema original. A su vez, para la obtención de la solución de cada subproblema se puede aplicar nuevamente este método. De esta forma, la solución del problema se presenta por etapas, conocidas como Niveles de Abstracción. Estado Es el conjunto de valores que poseen los objetos de un algoritmo en un momento dado. Instrucciones o Acciones Es un suceso que dura un tiempo finito y produce un resultado o efecto perfectamente definido y previsto. Toda acción opera sobre algún objeto y es posible reconocer el efecto de tal acción por los cambios de estado presentados por el objeto. Por lo tanto, una acción está perfectamente determinada por sus estado inicial (antes de realizar la acción) y final (después de realizar la acción). Algoritmo Es una secuencia finita de pasos (instrucciones), expresados en un lenguaje natural o pseudo-formal, que resuelven un problema dado. Programa Es un algoritmo expresado o traducido a un Lenguaje de Programación con el objetivo de dar órdenes a un dispositivo o máquina. Máquina o Dispositivo Es un mecanismo capaz de realizar acciones según un patrón determinado (programa) el cual es descrito mediante un repertorio finito de acciones elementales propio de cada máquina. Resolución de problemas de programación Así, la principal razón para que las personas aprendan lenguajes y técnicas de programación es utilizar al computador como una herramienta para resolver problemas a través de la creación y ejecución de programas. La resolución de un problema exige al menos la realización de las siguientes actividades: 1. Análisis del problema 2. Diseño del algoritmo 3. Traducción del algoritmo para obtener el programa 4. Ejecución y validación del programa.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

2

CENEAC - Programación con C++ Nivel 1.

1.2 Definición de los Elementos presentes en un Algoritmo Para expresar la solución de un problema a través de un algoritmo, es necesario definir primero el lenguaje con el cual se escribirá el algoritmo. El uso de lenguaje natural (por ejemplo, castellano) para estos fines presenta una serie de inconvenientes, tales como ambigüedad (diferentes interpretaciones a una misma oración) e imprecisión (dificultad para expresar ideas). Estos inconvenientes conducen a la necesidad de definir los elementos presentes en un algoritmo a través de la definición de una Notación Algorítmica (o Lenguaje Pseudo-formal) en la cual dichos inconvenientes se minimicen o eventualmente eliminen. Además, la Notación Algorítmica a definir y utilizar debe:  Ser fácil de leer y entender  Reflejar de una manera directa el análisis que produjo la solución del problema  Ser poderosa, esto es, que con pocos elementos se puedan expresar muchas cosas. A continuación, serán presentados los diferentes elementos que conforman un algoritmo a través de la definición de la Notación Algorítmica que utilizaremos para escribir los algoritmos. La presentación de estos elementos se hará a través de ejemplos tipo. Generalmente, los problemas están especificados en términos de un conjunto de informaciones iniciales (datos) y del cálculo que se desea efectuar para obtener los resultados (requerimientos). Por lo tanto, para la definición de una Notación Algorítmica, para expresar la solución de dichos problemas, es necesario especificar los diferentes Tipos de Datos (conjuntos de valores que pueden tomar la información y las operaciones que pueden aplicarse sobre ellos). Así como también, las diferentes maneras en que se pueden expresar dichos valores (constantes, variables y expresiones).

1.2.1. Tipos de Datos Un tipo de dato es el conjunto de valores que puede tomar la información y las operaciones que se pueden realizar sobre esos valores. Los tipos de datos se clasifican en: 

Tipos de datos no estructurados: son aquellos cuyos valores no pueden dividirse en componentes.



Tipos de datos estructurados (Estructuras de Datos): son aquellos cuyos valores están formados por componentes y por lo tanto pueden descomponerse en términos de los valores que los constituyen.

En principio sólo consideraremos los Tipos de Datos no estructurados, dejando para la parte final la manipulación de los Tipos de Datos Estructurados.

Tipos de Datos no Estructurados Los distintos tipos de datos se representan en diferentes formas en el computador, siendo esta representación un conjunto o secuencia de bits (dígitos 0 o 1). Los lenguajes de programación de alto nivel permiten al programador hacer abstracción de la manera como los datos son representados. Los tipos de datos no estructurados con los que se trabajará se pueden clasificar en:  Numéricos (entero, real)  Lógicos o Booleanos  Caracteres (carácter, string o cadena)

Tipo de dato Entero El tipo entero es un subconjunto finito de los números enteros (números que no tienen parte decimal), pudiendo ser positivos o negativos. Los siguientes son ejemplos de valores de tipo entero: 5 -15 1340 -325 0 12000

Tipo de dato Real El tipo real es un subconjunto finito de los números reales. Los números reales están formados por una parte entera y una parte decimal, pudiendo ser positivos o negativos. Los siguientes son ejemplos de valores de tipo real: 5.0 -15.25 1340.3 -325.1245 0.007 Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

3

CENEAC - Programación con C++ Nivel 1.

Tipo de dato Lógico El tipo lógico, también denominado booleano, es aquel conformado por dos valores: verdadero y falso. Este tipo de dato se utiliza para representar las alternativas (si/no) a determinadas condiciones.

Tipo de dato Carácter El tipo carácter, esta conformado por el conjunto finito y ordenado de caracteres que el computador reconoce, pudiendo ser diferentes de un computador a otro. Los siguientes son ejemplos de valores del tipo carácter: 

Caracteres alfabéticos (A, B, C, ....., Y, Z) (a, b, c, ......, y, z).



Caracteres numéricos (1, 2, 3, ....., 9, 0).



Caracteres especiales (+ , - , * , / , ; , . , < , > , = , $ , @ , % , ....... )

Tipo de dato String (cadena) El tipo string, es una sucesión de caracteres delimitados por comillas. La longitud de la cadena de caracteres es el número de ellos comprendidos entre las comillas. Los siguientes son ejemplos de valores del tipo string: "Luis Rivas"

"A, B, C"

""

" "

"8 de octubre de 2.015"

"Sr. Pastor"

1.2.2. Constantes, Variables y Expresiones Existen tres maneras de denotar a los valores de los distintos tipos de datos, estas son:  Constantes:

denotación de un valor particular del conjunto.

 Variables:

denotación de un valor genérico del conjunto.

 Expresiones

denotación de valores a partir operaciones entre constantes y variables.

Constantes Son valores que no cambian durante la ejecución del algoritmo (programa). Ejemplos de constantes según su tipo de dato: Tipo Ejemplos Entero Real Lógico Carácter String

0

345

-124

200

32456 -9799

0.1

12.25

-3.25

350.0

-123.3 1234.5643

"$"

"7"

verdadero

falso

"A"

"1"

"Casa"

"X"

"18 de julio"

"US$ 300.7"

Variables Una variable es un objeto cuyo valor puede cambiar durante el desarrollo del algoritmo o la ejecución del programa. Cada variable tendrá entonces asociado un tipo de dato, pudiendo sólo tomar valores de ese tipo.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

4

CENEAC - Programación con C++ Nivel 1.

Los nombres de las variables, a veces conocidos como identificadores, pueden constar de varios caracteres alfanuméricos (letras y números) de los cuales el primero debe ser una letra. Ejemplos de nombres válidos de variables: A3, Nombre, Contador, Total. Los nombres elegidos para las variables del algoritmo (programa) deben ser significativos y tener relación con el objeto que representan, para así facilitar la lectura del mismo.

Expresiones Las expresiones son combinaciones de constantes, variables, operadores y paréntesis. Cada expresión al ser evaluada toma un valor que se determina aplicando los operadores a los valores de las constantes y variables implicadas en la expresión. Dependiendo del valor resultante de evaluar la expresión se tiene el tipo de la expresión. Así, encontramos expresiones aritméticas (resultado entero o real), expresiones lógicas (resultado lógico) y expresiones de tipo carácter (resultado carácter o string).

Expresiones Aritméticas A continuación se presentan los diferentes operadores aritméticos que se pueden utilizar para la construcción de expresiones aritméticas, indicando el tipo de operando que admiten y el tipo del resultado de la expresión. Operador

Significado

Tipo de Operandos

Tipo de Resultado

**

Exponenciación

Entero o real

Entero o real

div

División entera

Entero

Entero

mod

Resto de la división entera

Entero

Entero

/

División real

Entero o Real

Real

*

Multiplicación

Entero o real

Entero o real

-

Resta

Entero o real

Entero o real

+

Suma

Entero o real

Entero o real

Los siguientes ejemplos muestran resultados de expresiones aritméticas, compruébelos: Expresión

Resultado

Expresión

Resultado

10.5 / 3.0

3.5

10 div 3

3

1/4

0.25

18 div 2

9

2.0 / 4.0

0.5

30 div 30

1

6/1

6.0

6 div 8

0

Reglas de Prioridad Cuando las expresiones tienen dos o más operandos, se requieren reglas que permitan evitar ambigüedades al momento de realizar la evaluación de la expresión. Estas se denominan Reglas de prioridad o de precedencia y son: Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen diferentes paréntesis anidados (unos dentro de otros), las expresiones más internas se evalúan primero. Las operaciones aritméticas se realizan de acuerdo al siguiente orden de prioridad. 

Exponencial ( ** )

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

5

CENEAC - Programación con C++ Nivel 1.



División real ( / ), División entera ( div ), Resto de la división entera ( mod ) y Multiplicación ( * )



Suma ( + ) y Resta ( - )

En caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión encerrada entre paréntesis, el orden de prioridad será de izquierda a derecha.

Expresiones Lógicas Una expresión lógica es aquella que al ser evaluada puede tomar sólo uno de estos dos valores: verdadero o falso. Las expresiones lógicas se forman combinando constantes lógicas, variables lógicas y otras expresiones lógicas, utilizando los operadores lógicos no, y, o, y los operadores relacionales (de relación o comparación) =, , =, . Operadores Lógicos Operador no y o

Significado Negación Conjunción Disyunción

Ejemplo de Expresión no P PyQ PoQ

Operadores Relacionales Operador

Significado Menor que Mayor que Igual Menor o igual Mayor o igual Diferente

< > = =

Ejemplo de Expresión AQ P=1 A = Q P Q

Los siguientes ejemplos muestran resultados de expresiones lógicas, compruébelos. Expresión (1 > 0) y (3 = 3) 5 >= 7 (A > 0) y (A < 0) 5 5) P o (no P) P y (no P) 5=0

Resultado verdadero verdadero falso falso

Prioridad de los operadores (Aritméticos y Lógicos) Operador **, no /, *, div, mod, y

Prioridad Más alta (primera operación ejecutada) 

+, -, o , =, =,

Más baja (última operación ejecutada)

Al igual que en las expresiones aritméticas, los paréntesis se pueden utilizar y tendrán prioridad sobre cualquier operación. Además, en caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión encerrada entre paréntesis, el orden de prioridad será de izquierda a derecha. Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

6

CENEAC - Programación con C++ Nivel 1.

Expresiones String Una expresión de tipo string es aquella que al ser evaluada produce un valor de tipo string. Las expresiones string se forman combinando constantes, variables y otras expresiones de tipo string lógicas, utilizando los operadores del tipo string: concatenar y subcadena. En el caso de concatenar se utilizan diversos operadores, los comunes: || + & Operadores String Operador

Significado

Ejemplo de Expresión

|| + &

Concatenación

"Pedro y " || "Pablo"

substr(string,inicio,tamaño)

Subcadena

substr("Pedro",1,2)

Los siguientes ejemplos muestran resultados de expresiones String Expresión

Resultado

"Pedro y " + " Pablo"

"Pedro y Pablo"

substr("Pedro",1,2)

"Pe"

substr("Casa roja",6,4)

"roja"

1.2.3. Secuenciamiento de Acciones Las formas de composición de acciones son los mecanismos mediante los cuales se construirán nuevas acciones a partir de acciones ya creadas. A continuación se presentan las formas de composición de acciones más usuales, así como también ejemplos de sus usos. Las siguientes convenciones serán usadas en la presentación: 

Las letras mayúsculas A, B, C, … representarán acciones cualesquiera.



Las letras griegas , , , … representaran expresiones lógicas (predicados).

Secuenciamiento La forma de composición de acciones más natural es el secuenciamiento, el cual simplemente consiste en la presentación de un conjunto de acciones en un cierto orden. Permite indicar el orden en que se desea se ejecuten una serie de acciones. Notación Sean A, B, C acciones cualesquiera. El secuenciamiento de ellas en el orden A, B, C se expresa de la siguiente forma: A B (orden textual) C o bien A ; C ; B; (orden dado mediante el operador de secuenciamiento “ ; “) EJEMPLO 1: Intercambio de dos valores Enunciado Dadas dos variables n1 y n2 que identifican a dos valores enteros cualesquiera, intercambiar su valor. Análisis Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

7

CENEAC - Programación con C++ Nivel 1.

Para la solución del problema es necesario evitar la pérdida del valor de una de las dos variables, pérdida que se deriva de una utilización directa de la asignación, por eso se utilizará una tercera variable aux. De las versiones que se presentan, la primera resuelve el problema con la ayuda de una variable auxiliar (solución por memorización) y la segunda lo resuelve mediante acumulaciones basadas en las propiedades de los operadores + y – (solución por cálculo). Solución de la Primera Versión

Solución de la Segunda Versión

Escribir(“Suministre los 2 números de entrada.”);

Escribir(“Suministre los 2 números de entrada.”);

Leer(n1);

Leer(n1);

Leer(n2);

Leer(n2);

EI = { n1 = x, n2 = y, x, y  ENTEROS }

EI = { n1 = x, n2 = y, x, y  ENTEROS }

aux = n1; //se guarda en aux para no perder n1

n1 = n1 + n2;

n1 = n2;

n2 = n1 – n2;

n2 = aux;

n1 = n1 – n2;

EF = { n1= y, n2 = x, x, y  ENTEROS }

EF = { n1 = y, n2 = x, x, y  ENTEROS }

Escribir(“Resultado luego del intercambio: ”);

Escribir(“Resultado luego del intercambio: ”);

Escribir(n1);

Escribir(n1);

Escribir(n2);

Escribir(B);

Léxico

Léxico

Entero n1, n2: Nominan a los valores a intercambiar

Entero n1, n2: Nominan a los valores a intercambiar

Entero aux:

Variable auxiliar para el proceso

Ejemplo 2: Equivalencia de una cantidad en segundos a días, horas, minutos y segundos Enunciado Dadas un valor entero y positivo S, que representa una cantidad en segundos, se quiere hallar su equivalente en días, horas, minutos y segundos sobrantes. Análisis La solución consiste hacer divisiones sucesivas sobre el número de segundos inicial para hallar las equivalencias. Solución Escribir(“Suministre la cantidad inicial de segundos.”);

Leer(S);

MIN = S div 60 ;

SEG = S mod 60; // div y mod son operadores y palabras reservadas

HOR = MIN div 60 ;

MIN = MIN mod 60;

DIA = HOR div 24 ;

HOR = HOR mod 24;

Escribir(“El equivalente de segundos en días, horas, minutos y segundos es: ”); Escribir(DIA + “ ” + MIN + “ ” + SEG);

Léxico Entero S: Variable que nomina al valor en segundos dado. Entero SEG, MIN, HOR, DIA: Variables para almacenar la cantidad de segundos, minutos, horas y días respectivamente calculadas a partir del valor dado.

1.2.4. Acciones Básicas Se definirán tres acciones básicas: asignación, entrada simple (lectura) y salida simple (escritura), a partir de las cuales, mediante las formas de composición de acciones, se crearan acciones más complejas que permitirán expresar la solución de cualquier tipo de problema. Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

8

CENEAC - Programación con C++ Nivel 1.

Asignación ( = ) Esta acción es la base para la construcción de las soluciones de los problemas; ya que permite modificar el estado de los objetos que conforman el algoritmo y de esta forma obtener los resultados requeridos. Ejemplos. Sean A y P variables de tipo entero, PI variable de tipo real, C variable de tipo lógico y S variable de tipo string. A

= -3

(a la variable A se le asigna u otorga el valor -3)

PI = 3,1415 P

= -9 * A

C

= (PI = 8,1)

P

= P+1

S

= "Perro Nro. " + P

El operador = se conoce como operador de asignación (también se utiliza “”) y tiene como efecto el cambio de estado (cambio de valor), de la variable que aparece a la izquierda de él. Cabe estacar que el operador = también puede ser utilizado para realizar comparaciones entre expresiones y verificar sin sus valores son iguales.

Para los ejemplos anteriores, el efecto de cada acción de asignación es: Acción

Efecto de la asignación

A

A toma el valor 3 (o el valor 3 se le asigna a la variable A)

= -3

PI = 3,1415

PI toma el valor 3,1415 (a PI se le asigna el valor 3,1415)

P

= -9 * A

P se le asigna el resultado de -9 por el valor de A (-3), es decir, se la asigna 27

C

= (PI = 8,1)

C se le asigna el resultado de comparar si el valor de PI es igual a 8,1 pero como son distintos, a C se le asigna Falso

P

= P+1

P toma su valor más 1, es decir, a P se le asigna 28

S = "Perro Nro. " + P

S se le asigna la concatenación o de la cadena "Perro Nro." con el valor de P, S toma entonces como valor la cadena “Perro Nro. 28”

Entrada Simple ( Leer ) La entrada simple o lectura permite nominar información que se encuentra almacenada en un dispositivo de entrada. Ejemplos: Sean A y B dos variables de tipo entero Leer(A)

Leer(B)

La operación Leer indica que de algún dispositivo de entrada externo, del cual se hace abstracción, se está copiando un valor sobre la variable que aparece entre paréntesis. Esta acción tiene como efecto el cambio de valor (o cambio de estado) de la variable entre paréntesis.

Nota: ¿Por qué subrayar algunas palabras? Es común observar en los algoritmos que algunas de las instrucciones se destacan, bien sea con negritas o subrayándolas. Esto se hace con el objetivo de destacarlas como palabras reservadas o instrucciones que tienen un significado especial en el pseudocódigo. Se destacan porque tienen un uso especial, y por lo tanto, esas palabras no se pueden usar como nombres o identificadores de constantes, variables o procedimientos.

Salida Simple ( Escribir ) Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

9

CENEAC - Programación con C++ Nivel 1.

La salida simple o escritura es la acción que se utiliza para mostrar los valores almacenados en las variables, se utiliza frecuentemente para mostrar los resultados obtenidos por el algoritmo o programa. Ejemplos: Sea A variable de tipo entero A = 5 * 20

Escribir(A)

Escribir(A + 1)

La operación Escribir indica que a través de algún dispositivo de salida externo, del cual se hace abstracción, se está escribiendo o mostrando el valor que aparece entre paréntesis.

Intradocumentación o comentarios ( // ) Esta acción permite agregar al algoritmo comentarios sobre la utilidad de sus instrucciones. La intradocumentación del código es una buena práctica algorítmica y de programación ya que ayuda al mejor entendimiento de la lógica utilizada en la solución que el algoritmo plantea a un problema dado. Uno de los operadores utilizados para agregar comentarios en pseudocógigo es //, mientras que otros lenguajes se usan: (* *) /* */ ‘ # /

1.3. Estructuras de Control Condicional (Si y Selección) Las estructuras condicionales son formas de composición de acciones que se utiliza en problemas donde las acciones a realizar dependen del resultado de evaluar ciertas condiciones.

1.3.1. Condicional simple Se utiliza cuando solo se necesita considerar el caso en que la condición evaluada es verdadera, y no es relevante el caso en que esta condición no se cumpla, es decir, al evaluarse se tenga un valor falso para ella. Notación Sea  un predicado (expresión lógica) que condiciona la ejecución de una acción A cualquiera, el condicionamiento de la acción A al predicado  se expresa: Si



entonces

A; FinSi;

En este análisis, la acción A sólo se ejecutará si el predicado  al ser evaluado es verdadero.

Ejemplo 3: Ordenamiento de dos valores Enunciado Dadas dos variables a y b que identifican a dos valores enteros respectivamente, se quiere modificar eventualmente esas identificaciones de tal manera que a nomine al valor más grande y b al más pequeño. Análisis Debemos intercambiar los valores de las variables, lo cual nos lleva a un problema cuya solución es conocida: intercambio de dos valores. El centro de la solución está en la respuesta a la pregunta ¿Cuándo debemos intercambiar? Solución Escribir(“Suministre los valores de los dos números a comparar.”); Leer(a, b); //solicitud y lectura de valores Si a < b entonces // a es menor que b, por lo tanto hay que intercambiar sus valores c = a ; a = b ; b = c; // reutilizamos las instrucciones para intercambiar valores Finsi; Escribir(“El valor máximo es: ” + A + “ y el mínimo es; ” + B );

Léxico Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

10

CENEAC - Programación con C++ Nivel 1.

entero a, b: variables para los valores a ordenar como máximo y mínimo. entero c:

variable auxiliar para no perder uno de los dos valores de entrada.

1.3.2. Condicional doble El condicional doble es una forma de composición de acciones que se utiliza en problemas donde las acciones a realizar dependen de si el resultado de evaluar ciertas condiciones es verdadero o falso. Notación Sean A y B acciones cualesquiera y sea  un predicado (expresión lógica) que condiciona la ejecución de las acciones A y B en forma excluyente; esto es si  es verdadero se ejecutará la acción A y si  es falso se ejecutará la acción B. Este tipo de condicionamiento se expresa de la siguiente forma: Si

 entonces A; sino B; Finsi; En este análisis, sólo se ejecutará una de las dos acciones, dependiendo del resultado de evaluar 

Ejemplo 4: Máximo de dos valores Enunciado Dadas dos variables a y b que identifican a dos valores enteros e1 y e2 respectivamente, se quiere determinar cual de los dos valores es el mayor. Análisis La solución se basa en la determinación de una partición del dominio de los datos, que refleje los casos posibles asociados al problema. Solución Escribir(“Suministre los valores de los dos números a comparar.”); Leer(a, b); Si a > b entonces Escribir(“El mayor valor es: ” + a); // el mayor valor lo tiene la variable a Sino Si a < b entonces Escribir(“El mayor valor es: ” + b); // el mayor valor lo tiene la variable b Sino Escribir(“Ambos valores son iguales”) FinSi; FinSi;

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

11

CENEAC - Programación con C++ Nivel 1.

1.4. Estructuras de Control Iterativas (Ciclos: Para, Repetir y Mientras) Para aquellos problemas en los cuales es necesario repetir un conjunto de acciones un número (conocido o no) de veces, se definen las formas iterativas de composición de acciones, también llamadas estructuras de control iterativas. Existen varias estructuras de control iterativas, siendo las tres más comunes: el para (for), el repetir (repeat) y el mientras (while).

1.4.1. Ciclo Para (For) Esta estructura de control iterativa, se utiliza en aquellos problemas donde se conoce el número de veces que se desea ejecutar un conjunto de acciones. Notación Sea N un número entero y positivo que indica cuantas veces se desea ejecutar las acciones A, B y C, siendo A, B, C acciones cualesquiera. La repetición de las acciones A, B, C utilizando la estructura de control iterativa Para se expresa: Para

I = 1 hasta N inc 1 hacer

ó

Para

I = N hasta 1 dec 1 hacer

A;

A;

B;

B;

C; FinPara;

C; FinPara;

Donde: I se denomina variable de control y es incrementada (inc) o decrementada (dec) automáticamente en el valor indicado. N es el número de veces que se desea repetir las acciones. Notas: 

A las acciones comprendidas entre los delimitadores Para y FinPara se les denomina cuerpo de la iteración o instrucciones del ciclo.



En el ciclo Para la variable de control no debe ser modificada en el cuerpo de la iteración.



Cuando el incremento es en 1, se puede omitir la instrucción “inc 1” en el encabezado del Para.

Ejemplo 8: Cálculo de la nota promedio, nota máxima y nota mínima de una serie de N notas Enunciado Dada una serie de N notas se desea calcular el promedio de las mismas, así como también la máxima y la mínima nota. Análisis La solución se basa en el tratamiento secuencial de cada una de las N notas; esto es, en la definición de las acciones a realizar sobre una nota (acumularla, compararla para determinar máximo y mínimo) y la aplicación de estas mismas acciones sobre el resto las notas.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

12

CENEAC - Programación con C++ Nivel 1.

Solución Algoritmo Principal // Calcula el promedio, máximo y mínimo de un conjunto de N notas suministradas. Se asume que N > 0 Real Nota, Max, Min, Suma, Prom; // declaración de las variables del algoritmo Entero i, N; // i es la variable índice del ciclo Para y N la cantidad de notas a procesar Escribir(“Suministre la cantidad de notas a procesar.”); Leer(N); Max

= 0 ; Min = 20;

// inicializamos las variables con sus mayores valores opuestos

Suma = 0; // se inicializa la variable acumuladora en 0 Para i = 1 hasta N en 1 hacer Escribir(“Suministre la nota ” + i ); Leer(Nota); Suma = Suma + Nota; Si Nota < Min entonces Min = Nota; FinSi; si Nota > Max entonces Max = Nota; FinSi; FinPara; PROM = SUMA / N; Escribir(“La nota promedio es: ” + Prom); Escribir(“La nota máxima es: ” + Max); Escribir(“La nota mínima es: ” + Min);

FinAlgoritmo Principal;

Léxico del Algoritmo Principal entero N: Nomina al número de notas a procesar. real Nota: Nomina a cada una de las notas. real Suma: Almacena la suma de las notas a procesar. real Prom: Nomina a la nota promedio real Max: Nomina a la nota máxima. real Min: Nomina a la nota mínima. Observación En el estado inicial se asume que el valor de N es mayor que cero y en términos de esa suposición se trabaja. ¿Qué resultados daría el algoritmo si, por error, al introducir el valor de N se introduce un valor negativo o cero?

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

13

CENEAC - Programación con C++ Nivel 1.

1.4.2. Ciclo Repetir (Repeat) Esta estructura de control iterativa, se utiliza en aquellos problemas donde no se conoce el número de veces que se desea ejecutar un conjunto de acciones, pero las mismas se ejecutan 1 o más veces. Notación Sea  un predicado que caracteriza la terminación de un proceso iterativo y sean A y B acciones cualesquiera. La repetición de las acciones A y B utilizando la estructura de control iterativa Repetir se expresa: Repetir A; B; hasta ;

Esta composición es equivalente al siguiente secuenciamiento de acciones: A ; B  ; (A ; B  ; (A ; B  ; (A ; B  ; .............. )))     test test test test donde el test de terminación se efectúa después de cada ejecución de las acciones A y B. Así, con el repetir las acciones del cuerpo de la iteración se ejecutan una o más veces. Ejemplo 9: Cálculo de interés sobre un capital. Enunciado Dado un valor real C, que representa una cantidad en Bolívares y un valor R que representa un porcentaje de interés anual, se desea calcular al cabo de cuantos años se duplicará el capital. Análisis La solución se basa en el cálculo y acumulación de los intereses generados por el capital inicial año por año, hasta alcanzar la meta propuesta. Solución: Algoritmo Principal // Calcula la cantidad de años necesarios para duplicar un capital inicial C Real CI, I, C;

Entero Años; // declaración de variables

Escribir(“Introduzca el capital inicial”); Leer(CI); //solicitud y lectura de los valores de entrada Escribir(“Introduzca el % de Interés”); Leer(I); C

= CI ; Años = 0; // inicializamos convenientemente las variables C y Años

Repetir C = C + C * I / 100;

Años  Años + 1;

hasta C >= 2 * CI; Escribir(“Para duplicar el capital se necesitan: ” + Años);

FinAlgoritmo Principal;

Léxico del Algoritmo Principal Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

14

CENEAC - Programación con C++ Nivel 1.

real CI: Nomina al capital inicial. real I: Nomina a la tasa de interés anual. real C: Almacena el capital acumulado a lo largo de los años. entero Años: Nomina al número de años necesarios para duplicar el capital Observación En el estado inicial se asume que el valor del Capital Inicial (CI) y el valor de la tasa de interés (I) son mayores que cero y en términos de esa suposición se trabaja. ¿Cómo generalizaría Ud. el algoritmo para que funcione independientemente de los valores de entrada dados?

1.4.3. Ciclo Mientras (While) Esta estructura de control iterativa, se utiliza en aquellos problemas donde no se conoce el número de veces que se desea ejecutar un conjunto de acciones, pero las mismas se ejecutan 0 o más veces. Notación Sea  un predicado que caracteriza el comienzo o continuación (negación de la condición de terminación) de un proceso iterativo y sean A y B acciones cualesquiera. La repetición de las acciones A y B utilizando la estructura de control iterativa Mientras se expresa: Mientras  hacer A; B; Fmientras;

Esta composición es equivalente al siguiente secuenciamiento de acciones:  (A ; B  ; (A ; B  ; (A ; B ................. )))    test test test donde el test de comienzo o continuación se efectúa antes de cada ejecución de las acciones A y B. Así, con el mientras las acciones del cuerpo de la iteración se ejecutan cero o más veces. Ejemplo 10: Cálculo del salario de una serie de trabajadores por hora. Enunciado Se desea calcular lo que devengarán una serie de trabajadores por el trabajo realizado en una obra, para esto se definió la siguiente tarifa horaria: las horas trabajadas en horario normal se pagan a razón de Bs. 20 y las horas extras a razón de Bs. 25, mientras no excedan de 10 horas. Si las horas extras exceden de 10 horas, el exceso se paga a razón de Bs. 23,5 la hora. Además, se conoce que los datos de cada trabajador, que se introducirán, son: nombre del trabajador, horas normales trabajadas y horas extras trabajadas. La introducción de los datos terminará cuando se introduzca "*" como nombre del trabajador.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

15

CENEAC - Programación con C++ Nivel 1.

Análisis La solución se basa en el procesamiento y cálculo del salario devengado por cada trabajador de acuerdo a las tarifas definidas, la solución se obtiene al aplicar los cálculos de un trabajador a todos los trabajadores a través de la estructura iterativa mientras. Solución: Algoritmo Principal; // Calcula el salario de un trabajador en función de las horas normales y horas extras trabajadas String Nombre;

// declaración de variables

Real HN, HE, S, PagoHN, PagoHE, pagoHE2; //inicializamos estas variables con el monto pagado al trabajador PagoHN = 20; PagoHE = 25; pagoHE2 = 23,5; Escribir(“Introduzca nombre del trabajador o * para terminar”);

Leer(Nombre);

Mientras NOMBRE "*" hacer Escribir(“Introduzca número de horas trabajadas en horario normal”); Leer(HN); Escribir(“Introduzca número de horas extras trabajadas”); Leer(HE); S = HN * PagoHN; Si HE > 10 entonces S = S + 10 * PagoHE + (HE - 10) * PagoHE2; sino S = S + HE * PagoHE; Fsi; // se muestra el salario del trabajador actual Escribir(“El trabajador ”+ Nombre + “ devengará un salario de Bs. ” + S); // se solicita el nombre del siguiente trabajador Escribir(“Introduzca nombre del siguiente trabajador o * para terminar”); Leer(Nombre); FinMientras;

FinAlgoritmo Principal;

Léxico del Algoritmo Principal string Nombre: Nomina al nombre de cada trabajador. real HN,HE: Nomina a las horas normales y extras trabajadas por cada trabajador. real S: Almacena la cantidad de Bolívares devengada por cada trabajador. Observación El fin del proceso iterativo, en este caso viene dado por una marca especial “*” en la secuencia de datos de entrada. Esta marca o valor de parada la define el trabajador según las características del problema.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

16

CENEAC - Programación con C++ Nivel 1.

1.5. Procedimientos 1.5.1. Procedimientos Nominados (Acciones y Funciones) La nominación de acciones es un mecanismo que permite asociarle un nombre a un conjunto de acciones, para luego referirse al conjunto mediante ese nombre. Dependiendo de ciertas características propias de la Acción Nominada, esta puede ser un Procedimiento o una Función. Este mecanismo de asociarle un nombre a un conjunto de acciones, puede utilizarse como: 

Simplificación en la escritura del algoritmo, al "factorizar" un conjunto de acciones que se repiten.



Una forma de abstracción, al dar un nombre a una acción que se especifica y posteriormente se desarrolla (análisis descendente).

La especificación de una Acción Nominada (procedimiento o función) es una caracterización del efecto de la acción independientemente de su desarrollo. Por lo tanto toda Acción Nominada tiene un sola especificación (¿Qué hace la acción?) y una o más realizaciones (¿Cómo lo hace?) Notación de Procedimientos Definición de Procedimientos La definición de un procedimiento consta de dos partes: 1. El encabezado del procedimiento (primera línea) 2. El cuerpo del procedimiento (líneas restantes) Ejemplo de definición de procedimientos Con A, B, C y D acciones cualesquiera y  un predicado (expresión lógica) Procedimiento NOMBRE ( lista de parámetros formales ) // comentario con el objetivo o especificación de la función A; C; B; FinProcedimiento NOMBRE;

Uso de procedimientos Para ejecutar el Procedimiento antes definido, basta colocar su nombre seguido de una lista de parámetros actuales sobre los que se aplicará el conjunto de acciones agrupadas en el procedimiento. Ejemplo de uso de procedimientos B; C; Si



entonces D;

sino NOMBRE (lista de parámetros actuales); Finsi; A;

Notación de Funciones Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

17

CENEAC - Programación con C++ Nivel 1.

Definición de Funciones La definición de una función también consta de dos partes: 1. El encabezado de la función (1era. línea) 2. El cuerpo de l función (líneas restantes) Ejemplo de definición de funciones Con A, B, C y D acciones cualesquiera Función NOMBRE ( lista de parámetros formales ) : tipodedatodelretorno // comentario con el objetivo o especificación de la función A; C; Retornar(valor_resultado_que_retorna); FinFunción NOMBRE;

Uso de funciones Para ejecutar una función, basta colocar su nombre seguido de una lista de parámetros actuales sobre los que se aplicará la función a la derecha de un operador de asignación. Las funciones retornan un solo valor. Ejemplo de uso de funciones B; D; Variable = NOMBRE (lista de parámetros actuales); A;

Tanto para el caso de los procedimientos como en el de las funciones, se tiene que: 

Lista de parámetros formales es una serie de 0 ó más variables que se utilizaran dentro del cuerpo de la Acción Nominada (procedimiento o función).



Lista de parámetros actuales es una serie de 0 ó más constantes, variables y/o expresiones sobre las cuales se desea aplicar la Acción Nominada (procedimiento o función). Estos deben especificarse en cada llamada a la Acción Nominada y contienen los valores que sustituirán a los parámetros formales, es decir, los valores sobre los cuales se desea aplicar la Acción Nominada; pudiendo cambiar de una llamada a otra.



Debe existir una correspondencia uno a uno tanto en el tipo como en el número de parámetros actuales y formales, la cual en general se establece de acuerdo al orden de colocación de los mismos.



Dependiendo del tipo de sustitución deseada, se definen diversas maneras de realizar el Paso de Parámetros, siendo las dos más utilizadas las denominadas: Paso de parámetros por valor y Paso de parámetros por referencia.

1.5.2. Paso de Parámetros por Valor Bajo este esquema, el parámetro actual se evalúa y el valor resultante de la evaluación sustituye al correspondiente parámetro formal; de tal forma que, independientemente de los cambios que sufra el parámetro formal, durante la ejecución de la Acción Nominada, el valor del parámetro actual correspondiente no se modificará.

1.5.3. Paso de Parámetros por Referencia

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

18

CENEAC - Programación con C++ Nivel 1.

Bajo este esquema, el parámetro actual se evalúa y el valor resultante de la evaluación sustituye al correspondiente parámetro formal; de tal forma que, cualquier cambio que sufra el parámetro formal, durante la ejecución de la Acción Nominada, afectará el valor del parámetro actual correspondiente. Así, el parámetro actual puede cambiar su valor una vez ejecutada la Acción Nominada. Para distinguir las dos clases de Paso de Parámetros, se postulan las siguientes reglas: 1. El Paso de Parámetros por Valor es la forma más frecuente de sustitución y por ende se tomará por defecto. 2. El Paso de Parámetros por Referencia se indica colocando var antes de parámetro formal correspondiente. Para ilustrar los conceptos relacionados con los tipos de Paso de Parámetros, se presenta el siguiente ejemplo. Ejemplo 5: Diferencia entre el Paso de Parámetros por Valor y por Referencia Sea el siguiente procedimiento: Procedimiento EJEMPLO (var Entero X , Entero Y) // Ejemplo para mostrar el efecto de los dos tipos de paso de parámetros X

= X + 5;

Y

= Y + 5;

FinProcedimiento EJEMPLO;

y sea el siguiente fragmento de algoritmo que llamo o utiliza al procedimiento Ejemplo: Entero A, B; // declaración de las variables y del tipo de dato de sus valores A = 10; B = 10; EJEMPLO( A , B ) // al regresar del procedimiento EJEMPLO A = 15 y B = 10 Escribir(“los valores de A y B luego de llama a EJEMPLO son: ” + A + “ - ” + B);

Una vez realizada la llamada al procedimiento EJEMPLO, los valores que se imprimen son 15 y 10 respectivamente, los cuales corresponden a los valores que almacenan los parámetros actuales A y B. Note que el valor del parámetro A cambió (por haber sido pasado por referencia) mientras que el valor del parámetro B no cambió (por haber sido pasado por valor). Ejemplo 6: Cálculo de las raíces de una ecuación de 2do. grado Enunciado Dados tres valores reales a, b y c correspondientes a los coeficientes de la ecuación de 2do. grado ax 2 + bx + c, se quiere calcular las raíces de dicha ecuación, ya sean reales o imaginarias. Análisis La solución del problema consiste en primero verificar que los valores dados efectivamente representen los coeficientes de una ecuación de 2do. grado, esto es el valor a debe ser diferente de cero. Una vez realizada esta verificación se debe determinar las condiciones bajo las cuales se tienen soluciones reales o imaginarias y en un primer nivel de abstracción, se especificaran dos procedimientos llamados: SolucionesReales y SolucionesImaginarias, que calculan las soluciones reales o imaginarias respectivamente. El segundo nivel de abstracción consiste en el desarrollo de los procedimientos antes descritos.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

19

CENEAC - Programación con C++ Nivel 1.

Solución: Algoritmo Principal // algoritmo que llama a los procedimientos SolucionesReales y SolucionesImaginarias para calcular las raíces de // una ecuación de segundo grado Real a, b, c, d, r1, r2, i1, i2; // declaración de las variables del algoritmo Escribir(“Suministre los valores de los coeficientes a, b y c de la ecuación.”); Si

a=0

Leer(a, b, c);

entonces

Escribir(“Datos de Entrada Inválidos”); sino d = B ** 2 – 4 * A * C; si

d >= 0 entonces SolucionesReales( a , b , d , r1 , r2 ); Escribir(“Las raíces reales de la ecuación son r1= ” + r1 + ” y r2= ” + r2);

sino SolucionesReales( a , b , d , r1 , i1 , r2 , i2 ); Escribir(“Las raíces reales de la ecuación son r1= ” + r1 + ” , r2= ” + r2 + “ y raíces imaginarias son i1= ” + i1 + ” , i2= ” + i2); FinSi; FinSi;

Léxico del Algoritmo Principal real a, b, c: Variables que nominan a los valores de entrada. real d : Variable para almacenar el valor del discriminante de la ecuación. real r1, r2, i1, i2: Variables que nominan a las raíces de la ecuación. procedimiento SolucionesReales(a,b,d,r1,r2): Calcula las raíces reales de una ecuación de 2º procedimiento solucionesImaginarias(a,b,d,r1,i1,r2,i2): Calcula la raíces reales y las imaginarias de una ecuación de 2º Observe que en el algoritmo anterior se utilizan dos procedimientos sin haberlos desarrollado, sólo los invocamos o llamamos en el cuerpo de instrucciones del algoritmo, esto permite solucionar el problema en un primer nivel de abstracción. La solución definitiva y completa se obtendrá cuando se desarrollen los siguientes procedimientos. Definición del Procedimiento SolucionesReales(a,b,d,r1,r2) Procedimiento SolucionesReales (Real A, B, D, Var Real X1, X2) // Calcula las raíces reales de una ecuación de 2do. grado Real R, P; // declaramos variables propias o locales del procedimiento SolucionesReales R

= D ** (1/2) / (2 * A);

P

= -B / (2 * A);

X1 = P + R;

X2 = P – R;

FinProcedimiento SolucionesReales;

Léxico del Procedimiento SolucionesReales real A, B, D: Parámetros formales pasados por valor, contienen a los valores de entrada al procedimiento Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

20

CENEAC - Programación con C++ Nivel 1.

real X1, X2: Parámetros formales pasados por referencia, contienen a los valores de las raíces reales de la ecuación de 2do. grado. real P, R: Variables auxiliares para el cálculo. Definición del Procedimiento SolucionesImaginarias(a, b, d, r1, i1, r2, i2) Procedimiento SolucionesImaginarias (Real a, b, d, Var Real r1, i1, r2, i2) // Calcula las raíces reales y las imaginarias de una ecuación de 2do. grado R

= -D ** (1/2) / (2 * A);

P

= -B / (2 * A);

R1 = P ; I1  R; R2 = P ; I2  -R; FinProcedimiento SolucionesImaginarias;

Léxico del Procedimiento SOLUCIONES_ IMAGINARIAS real A,B,D: Parámetros formales pasados por valor, contienen a los valores de entrada al procedimiento real R1, I1, R2, I2:Parámetros formales pasados por referencia, contienen a los valores de las raíces imaginarias de la ecuación de 2do. grado. real P,R: Variables auxiliares para el cálculo. Ejemplo 7: Cálculo de una función matemática Enunciado Dados dos valores reales a y b, se quiere construir un algoritmo para evaluar la siguiente función matemática: y = 8x3 + 3x

si x > 1

y = -3x + 1

si x  1

sobre cada uno de los valores de entrada, así como también sobre la suma de ambos. Análisis La solución se basa en la definición de una función que implemente la función matemática dada y que se aplique a cada uno de los valores de entrada así como también a la suma de ambos. La función se debe realizar de tal forma que permita calcular el valor resultante de la evaluación de la función matemática dada. Este valor será retornado al algoritmo en el nombre de la función. Solución: Algoritmo Principal // invoca o llama a una función matemática Real A, B, FA, FB, FAB; // declaración de las variables del algoritmo Escribir(“Suministre los valores de entrada A y B a evaluar.”); FA

= FUNCMAT(A);

FB

= FUNCMAT(B);

Leer(A, B);

FAB = FUNCMAT(A+B); Escribir(“El valor de la función para A es: ” + FA); Escribir(“El valor de la función para B es: ” + FB); Escribir(“El valor de la función para A + B es: ” + FAB);

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

21

CENEAC - Programación con C++ Nivel 1.

Léxico del Algoritmo Principal real A, B: Variables que nominan a los valores de entrada. real FA, FB, FAB: Variables que nominan los resultados de evaluar la función en los valores indicados. función FUNCMAT (X): Evalúa la función matemática dada. Definición de la Función FUNCMAT(X) Función FUNCMAT (Real X): Real // Evalúa la función matemática según el valor de X Real Y; // variable local de FUNCMAT utilizada para guardar el resultado de la evaluación de cada función Si X > 1 entonces Y

= 8 * X ** 3 + 3 * X;

Y

= -(3 * X) + 1;

sino Fsi; Retornar(Y); FinFunción FUNCMAT;

Léxico de la Función FUNCMAT real X: Parámetro formal pasado por valor, contiene el valor sobre el cual se desea evaluar la función matemática dada real Y: Variable auxiliar para el cálculo.

1.5.4. Alcance: Variables Locales y Variables Globales Las variables utilizadas en el algoritmo principal y en los procedimientos se clasifican en variables locales y variables globales. Una variables local es aquella que está declarada y definida dentro de un procedimiento o función (subprograma), así esta variable será considerada como diferente de otras variables con el mismo nombre declaradas en el algoritmo principal o en otros procedimientos y funciones. La variable tendrá validez en el subprograma en que está definida. Cuando otro subprograma utiliza el mismo nombre se refiere a una posición de memoria diferente y por ende a otra variable. Una variable global es aquella que está declarada en el algoritmo principal, del que dependen todos los subprogramas. El uso de variables locales tiene muchas ventajas, siendo una de las más importantes la de que los subprogramas se hacen independientes, estableciéndose la comunicación entre el algoritmo principal y los subprogramas a través de los parámetros únicamente. Esto conlleva a que para utilizar un subprograma (procedimiento o función) sólo se necesita saber lo que hace y no como lo hace. Esta característica hace posible dividir grandes proyectos en partes independientes más pequeñas y de esta forma varios programadores podrán contribuir a encontrar la solución trabajando independientemente. En un algoritmo simple con un subprograma, cada variable es o bien local al procedimiento o global al algoritmo completo. Sin embargo, si el algoritmo incluye subprogramas que a su vez contiene a otros subprogramas -subprogramas anidadosentonces la noción de global y local cambia a una forma más general. El alcance de un identificador (constante, variables o subprograma) es la parte de algoritmo donde se conoce el identificador, esto es: si están definidas localmente a un subprograma su alcance se confina a cualquier subprograma que esté dentro del subprograma donde están definidas, a menos que la variable sea redefinida. En la siguiente figura, se ilustra el concepto de alcance. Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

22

CENEAC - Programación con C++ Nivel 1.

Identificadores (*) Son accesibles

A

definidos en:

B C

D E F

G

desde:

A

A,B,C,D,E,F,G

B

B,C

C D

C D,E,F,G

E

E,F,G

F

F

G

G

Excepto que sean redefinidos dentro del procedimiento (*) Identificadores: variables, constantes, acciones y funciones.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

23

CENEAC - Programación con C++ Nivel 1.

TEMA 2. CREACIÓN DE PROGRAMAS EN C++ 2.1.

Introducción al Lenguaje, origen y principales características

La historia del lenguaje de programación C++ comienza a principios de los años 70, con un programador de nombre Dennis Ritchie que trabajaba en los laboratorios de AT&T Bell. Trabajando con un lenguaje llamado BCPL inventado por Martin Richards (que luego influyó para crear el B de Ken Thompson), Ritchie deseaba un lenguaje que le permitiese manejar el hardware de la misma manera que el ensamblador pero con algo de programación estructurada como los lenguajes de alto nivel. Fue entonces que creó el C que primeramente corría en computadoras PDP-7 y PDP-11 con el sistema operativo UNIX. Pero los verdaderos alcances de lo que sería éste, se verían poco tiempo después cuando Ritchie volvió a escribir el compilador C de UNIX en el mismo C, y luego Ken Thompson (diseñador del sistema) escribió UNIX completamente en C y ya no en ensamblador. Al momento de que AT&T cedió (a un precio bastante bajo) el sistema operativo a varias universidades, el auge de C comenzaba. Cuando fueron comerciales las computadoras personales, empezaron a diseñarse varias versiones de compiladores C, éste se convirtió en el lenguaje favorito para crear aplicaciones. En 1983, el Instituto Americano de Normalización (ANSI) se dio a la tarea de estandarizar el lenguaje C, aunque esta tarea tardó 6 años en completarse, y además con la ayuda de la Organización Internacional de Normalización (ISO), en el año de 1989 definió el C Estándar. A partir de éste, se dio pie para evolucionar el lenguaje de programación C. Fue en los mismos laboratorios de AT&T Bell, que Bjarnes Stroutstrup diseñó y desarrolló C++ buscando un lenguaje con las opciones de programación orientada a objetos. Bjarne Stroustrup crea una versión experimental denominada "C with Classes" hacia 1979, con la intención de proporcionar una herramienta de desarrollo para el kernel Unix en ambientes distribuidos. En particular, Stroustrup consideraba que ciertas características del lenguaje Simula (notablemente su orientación a objetos) eran útiles en desarrollos de software complejos. Es así como decide extender el lenguaje C. El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". La expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C. En 1985 Stroustrup publica la primera edición del libro "The C++ Programming Language" que sirvió de estándar informal y texto de referencia. Posteriormente el lenguaje fue estandarizado (ISO C++) y paralelamente son publicadas la segunda y tercera ediciones de "The C++ Programming Language" de modo tal que reflejan estos cambios. Desde sus inicios, C++ intentó ser un lenguaje que incluye completamente al lenguaje C (quizá el 99% del código escrito en C es válido en C++) pero al mismo tiempo incorpora muchas características sofisticadas no incluidas en aquél, tales como: Programación Orientada a Objetos, manejo de excepciones, sobrecarga de operadores, plantillas. La base del lenguaje fue creada por programadores y para programadores, a diferencia de otros lenguajes como Basic o Cobol que fueron creados para que los usuarios resolvieran pequeños problemas de sus computadores y el segundo para que los no programadores pudiesen entender partes del programa. Es un lenguaje de nivel medio porque combina la programación estructurada de los lenguajes de alto nivel con la flexibilidad del ensamblador. A continuación se clasifican según su nivel algunos de los lenguajes de programación más conocidos:1 

Alto nivel: Ada, Modula-2, Pascal, Cobol, Fortran, Basic



Nivel medio: Java, C++, C, Forth, Macroensamblador



Nivel bajo: Ensamblador

Muchos compiladores de C++ están orientados hacia el desarrollo para entornos gráficos como Windows y Linux. El sistema operativo Windows en sus versiones 98 y XP, por ejemplo, está escrito casi completamente en C, incluso cuando la compañía Microsoft creó el compilador Visual C++. 1

Fuente: Herbert Schildt. C Manual de Referencia.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

24

CENEAC - Programación con C++ Nivel 1.

C++ es un superconjunto de C, cualquier compilador de C++ debe ser capaz de compilar un programa en C. De hecho la mayoría admite tanto código en C como en C++ en un archivo. Cuando se compila código C en un compilador C++ este debe cumplir con los estándares definidos en 1989, cualquier palabra definida en el estándar de 1999 no funcionará. La evolución de C++ continúa. Es un lenguaje influenciado por C y Simula y a su vez ha influido en los lenguajes Ada, C#, Java, PHP, D, Perl. Entre las implementaciones más usadas de este lenguaje destacan GNU Compiler Collection, Microsoft Visual C++, Borland C++ Builder, Dev-C ++, C++ Free. Ha sido estandarizado y actualizado a través de las versiones ISO C++, ANSI C++ 1998 y ANSI C++ 2003. Entre los lenguajes asociados a C destacan: 

C++ Builder: Creado por la empresa Inprise, reconocida por la calidad de sus herramientas de desarrollo. Por ejemplo, llevan la firma Borland, quien ha desarrollado Borland C++, Intrabuilder, JBuilder, Delphi, C++ Builder. C++ Builder surgió de la fusión de dos tecnologías: Borland C++ que soporta el lenguaje C++ estándar con todas sus novedades, y el entorno RAD de Delphi.



Visual C++: En el año de 1992, la compañía Microsoft introduce C/C++ 7.0 y la biblioteca de clases MFC, los cuales tenían la finalidad de que el desarrollo de aplicaciones para Windows, escritas en C, fuera más fácil. Sin embargo, no resultó como esperaban, así que un año más tarde fue creado Visual C++ 1.0, que parecía más amigable a los desarrolladores, porque tenía una versión mejorada de las clases MFC. Con Visual C++ se introdujo una tecnología de desarrollo a base de asistentes. En general es un entorno de desarrollo diseñado para crear aplicaciones gráficas orientadas a objetos.



C#: Este lenguaje es una evolución de C y C++. Creado por Microsoft y presentado como Visual C# en el conjunto de Visual Studio .NET. Está diseñado para crear una amplia gama de aplicaciones empresariales. La biblioteca para programar en este lenguaje es .NET Framework. El lenguaje es simple, moderno, y está orientado a objetos. El código de C# se compila como código administrado, lo que significa que se beneficia de los servicios de Common Language Runtime. Estos servicios incluyen la interoperabilidad entre lenguajes, la recolección de elementos no utilizados, mayor seguridad y mejor compatibilidad entre las versiones.



Java: El lenguaje de programación Java fue creado a partir de C++, como una plataforma para desarrollo de sistemas de información para Internet y para aparatos electrodomésticos. Poco tiempo después de su liberación (en 1995), se empiezan a ver las capacidades de este lenguaje. Pronto deja de ser un lenguaje que sólo se usaba en Internet, y empiezan a crearse programas completos con él. El lenguaje es orientado a objetos y multiplataforma, esto quiere decir que el código se puede transportar a diferentes sistemas operativos y ejecutarse en ellos por medio de la maquina virtual de Java. Al igual que con C++ existen varios compiladores para este lenguaje como lo son JBuilder y Visual J++ (ahora evolucionado a J#).

Entre las principales ventajas de C++ destacan: 

Lenguaje de programación orientado a objetos.



Lenguaje muy didáctico, facilita el aprendizaje posterior de C#, Java, Visual Basic, Javascript, PHP, entre otros.



Muy potente en lo que se refiere a creación de sistemas complejos, un lenguaje muy robusto, permite elaborar desde aplicaciones sencillas hasta sistemas operativos.



Actualmente, puede compilar y ejecutar código de C, ya que incluye librerías para realizar esta labor.



Existe un amplio grupo de apoyo para programadores y desarrolladores, ya que es un lenguaje muy empleado, hay mucho contenido didáctico en tutoriales en línea y libros, existe una gran fuente de códigos ya desarrollados en C++ que pueden ser reutilizados.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.

25

CENEAC - Programación con C++ Nivel 1.

2.2.

Elementos de un programa

A continuación mostramos un ejemplo de la estructura básica de un programa en C++: Ejemplo 1. Estructura básica de un programa #include using namespace std; int main () { // mostramos un mensaje por salida estándar cout