Está en la página 1de 60

LENGUAJES DE PROGRAMACIÓN I

CLASE # 1
 Lenguaje de programación C++
 Generalidades
 Historia y desarrollo de C++
 Tarea de investigación: Componentes del IDE de C++ (composición del
menú principal)

HISTORIA Y DESARROLLO DEL C++


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), Dennis 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 Dennis 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.

Ahora el desarrollo del estándar de C++ acaparaba la atención de los


diseñadores.

En el año 1995, se incluyeron algunas bibliotecas de funciones al lenguaje C. Y


con base en ellas, se pudo en 1998 definir el estándar de C++.

Algunas personas podrían pensar que entonces C++ desplazó a C, y en algunos


aspectos podría ser cierto, pero también es cierto que algunas soluciones a
problemas requieren de la estructura simple de C más que la de C++, C
generalmente es usado por comodidad para escribir controladores de dispositivos
y para programas de computadoras con recursos limitados.

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 ordenadores y el segundo para
que los no programadores pudiesen entender partes del programa.

Página: N° 1
LENGUAJES DE PROGRAMACIÓN I

C++ es un lenguaje de nivel medio pero no porque sea menos potente que otro,
sino porque combina la programación estructurada de los lenguajes de alto nivel
con la flexibilidad del ensamblador. La siguiente tabla muestra el lugar del
lenguaje respecto a otros.

Ejemplos de lenguajes estructurados:

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. Por esto, la mayoría de desarrolladores compilan con C++
su código escrito en C, incluso hay quienes, siendo código en C ponen la
extensión CPP (extensión de los archivos de código C++) y lo compilan con C++.

TAREAS DE REFUERZO E INVESTIGACIÓN


 Familiarización y utilización del IDE de C++
 Creación de programas
 Conservación, compilación, y ejecución de un programa en el entorno de C++

Página: N° 2
LENGUAJES DE PROGRAMACIÓN I

CLASE # 2
 Palabras reservadas del lenguaje C++
 Tipos de datos
 Estructura de un programa en C++
 Declaración y uso de constantes en un programa

Palabras reservadas
Tienen un significado predeterminado para el compilador y sólo pueden ser
usadas con dicho sentido.
auto double int struct
break else long switch
case enum register Typedef
char extern return Union
const float short Unsigned
continue For signed void
default goto sizeof Volatile
do if static While
Además cada compilador puede añadir al conjunto de palabras estándar las
suyas de propia creación.

IDENTIFICADORES
Los identificadores son nombres creados para designar constantes, variables,
tipos, funciones, etc., que forman parte de un programa.

Un identificador consta de uno o más caracteres (letras, dígitos y caracteres de


subrayado); el primero debe ser una letra o el carácter _. El número de
caracteres no debe superar 31.

En C/C++ hay diferencia entre mayúsculas y minúsculas. Entre todos los


identificadores distinguimos un conjunto de ellos, predefinidos, con un
significado especial para el compilador (palabras clave).

DIAGRAMA DE SINTAXIS DE UN IDENTIFICADOR VALIDO


Letra
Identificador
Letra

Dígito

Subrayado

Tipos de datos simples


El tipo de dato determina la naturaleza del valor que puede tomar una variable.
Un tipo de dato define un dominio de valores y las operaciones que se pueden
realizar con éstos valores.

C++ dispone de unos cuantos tipos de datos predefinidos (simples) y permite al


programador crear otros tipos de datos

Página: N° 3
LENGUAJES DE PROGRAMACIÓN I

Tipo int
Tamaño en bytes: 2 bytes (16 bits)
Dominio: son todos los números enteros entre los valores -32.768 y 32.767
Operaciones:

Tipo float
Tamaño en bytes: 4 bytes
Dominio: son todos los números reales que contienen una coma decimal
comprendidos entre los valores:

Página: N° 4
LENGUAJES DE PROGRAMACIÓN I

Tipo double
Tamaño en bytes: 8 bytes
Dominio: son todos los números reales que contienen una coma decimal
comprendidos entre los valores:

Además de estas operaciones, C++ dispone de un gran conjunto de funciones


matemáticas.

Tipo bool
Tamaño en bytes: 1 byte
Dominio: dos únicos valores: { true, false }

Página: N° 5
LENGUAJES DE PROGRAMACIÓN I

No todos los compiladores de C++ tienen éste tipo de dato. En su lugar se


utiliza el tipo int para representar el tipo de datos bool, de forma que el valor
entero 0 representa false y cualquier otro valor representa true.

Tabla de verdad:

Escritura de valores bool


Raramente se tiene la necesidad de escribir o leer valores de tipo bool ya que
éste tipo de datos se utiliza sobre todo para evaluar expresiones lógicas.
En caso necesario, si escribimos un dato de tipo bool cuyo valor es true, en
consola se visualiza el valor 1.
La lectura es análoga.

Tipo char
Tamaño en bytes: 1 byte
Dominio: dígitos, letras mayúsculas, letras minúsculas y signos de puntuación.

Internamente, los caracteres se almacenan como números. El tipo char


representa valores en el rango -128 y 127 y se asocian con el código ASCII. Así,
el carácter ‘A’ se almacena como el número 65, etc. ...

0 < 1 < 2 …. < 9 < A < B < … < Z < a < b < …< z

Página: N° 6
LENGUAJES DE PROGRAMACIÓN I

Operaciones:
Dado que los caracteres se almacenan internamente como números enteros, se
pueden realizar operaciones aritméticas con los datos de tipo char. Se puede
sumar un entero a un carácter para obtener otro código ASCII diferente.
Ejemplos:
 Para convertir una letra minúscula en mayúscula basta con restar 32.
‘a’ - 32 = ‘A’
 Para convertir una letra mayúscula en minúscula basta con sumar 32.
‘B’ + 32 = ‘b’
 Para convertir el carácter ‘4’ en el número 4 basta con restar 48.
‘4’ - 48 = 4
Funciones:

Modificadores de tipos de datos


Los tipos de datos int, double y char tienen variaciones o modificadores de
tipos de datos.

Las computadoras realizan numerosas operaciones para la resolución de


problemas,
- Operaciones aritméticas y lógicas.
- Operaciones condicionales.

Además, puede ocurrir que en una misma expresión concurran varios tipos de
datos. Ante ésta situación, debemos saber cómo se comporta el compilador.

Página: N° 7
LENGUAJES DE PROGRAMACIÓN I

ESTRUCTURA DE LOS PROGRAMAS


Estructura de un programa
Un programa en C++ puede verse como un grupo de bloques construidos
llamados funciones. Una función es una o más instrucciones en C++ designadas
para una tarea específica.

#include <iostream.h>
La parte del #include se refiere a la biblioteca de funciones que vamos a utilizar.
Es decir para llamar a una biblioteca en particular debemos hacer lo siguiente:

#include <librería_solicitada>

El estándar de C++ incluye varias bibliotecas de funciones, y dependiendo del


compilador que se esté usando, puede aumentar el número.

Página: N° 8
LENGUAJES DE PROGRAMACIÓN I

int main(void){
Todo programa en C++ comienza con una función main(), y sólo puede haber
una.

En C++ el main() siempre regresa un entero, es por eso se antepone “int” a la


palabra “main”. Los paréntesis que le siguen contienen lo que se le va a mandar
a la función. En este caso se puso la palabra “void” que significa vacío, es decir
que a la función main no se le está mandando nada, podría omitirse el void
dentro de los paréntesis, el compilador asume que no se enviará nada. La llave
que se abre significa que se iniciará un bloque de instrucciones.

cout<<”hola mundo”<<endl;
Esta es una instrucción. La instrucción cout está definida dentro de la biblioteca
iostream.h, que previamente declaramos que íbamos a utilizar. Una función, en
este caso main() siempre comienza su ejecución con una instrucción (la que se
encuentra en la parte superior), y continúa así hasta que se llegue a la última
instrucción (de la parte inferior). Para terminar una instrucción siempre se coloca
“;”. Pero además de instrucciones se pueden invocar funciones definidas por el
usuario (por supuesto diferentes de main) como se verá más adelante.

return 0;
Esta es otra instrucción, en este caso la instrucción return determina que es lo
que se devolverá de la función main(). Habíamos declarado que main devolvería
un entero, así que la instrucción return devuelve 0. Lo cual a su vez significa que
no han ocurrido errores durante su ejecución.

}
La llave de cierre de la función main() indica el termino del bloque de
instrucciones.

En algunos programas de ejemplo, notará el uso de dobles diagonales (“//”).


Estas diagonales se usan para escribir comentarios de una línea dentro del código
del programa. Además podrá encontrar el uso de “/*” “*/” estos caracteres
encierran un comentario de varias líneas y cualquier cosa que se escriba dentro
de ella no influenciará en el desempeño del programa.

Directivas del preprocesador


Existen archivos de cabecera estándar muy utilizados

El uso más frecuente en C++ de las directivas del preprocesador es la inclusión


de archivos de cabecera, pero también se usan para definir macros, nombres de
constantes, etc.

Página: N° 9
LENGUAJES DE PROGRAMACIÓN I

Comienzan con el símbolo # y son órdenes dadas al preprocesador para efectuar


determinadas acciones sobre el fichero fuente C/C++.

El preprocesador de C es un procesador de texto que manipula el archivo que


contiene el texto del programa fuente, como una primera fase de la compilación.

Cuando se ejecuta la orden para compilar un fichero, el preprocesador procesa el


texto fuente antes de que lo haga el compilador, realizando las siguientes
acciones:
1. Se elimina caracteres dependientes del sistema.
2. El texto fuente se descompone en elementos reconocibles por el C.
3. Se ejecuta las directivas, se expanden las macros, etc..
4. Se compila el código fuente resultante.
Fuente.c

Preprocesador

Fuente_resultante.c

Compilador

Fichero.obj

Librerías
Link

fichero_ejecutable.exe

La función main()
Una función C++ es un subprograma que devuelve un valor, un conjunto de
valores o realiza una tarea específica.
Todo programa C++ tiene una única función main() que es el punto inicial de
entrada al programa.

DECLARACIÓN DE CONSTANTES Y VARIABLES


Constantes y variables C++
 Son porciones de memoria que almacenan un valor.
 Las variables son palabras que manipulan datos. Dicho valor puede ser
modificado en cualquier momento durante la ejecución del programa.
 Una constante es una variable cuyo valor no puede ser modificado.

Página: N° 10
LENGUAJES DE PROGRAMACIÓN I

 Las variables pueden almacenar todo tipo de datos: caracteres, números,


estructuras, etc … Dependiendo del valor de la variable, decimos que dicha
variable es de un tipo de dato.
 Tanto las variables como las constantes están constituidas por un nombre
y un valor. El nombre lo llamaremos identificador.

Declaración de variables
La declaración de una variable consiste en escribir una sentencia que proporciona
información al compilador de C++.
 El compilador reserva un espacio de almacenamiento en memoria.
 Los nombres de las variables se suelen escribir en minúsculas.

El procedimiento para declarar una variable:

Una forma de expresar el procedimiento para declarar una variable es mediante


los diagramas sintácticos:

Declaraciones locales
Son variables locales aquellas que están declaradas dentro de las funciones o de
los bloques.

Declaraciones globales ( variables globales, funciones, …) La zona de


declaraciones globales de un programa puede incluir declaraciones de variables
y declaraciones de funciones (prototipos).

Página: N° 11
LENGUAJES DE PROGRAMACIÓN I

Declaración de Constantes
Una constante es una variable cuyo valor no puede ser modificado.
Los nombres de las constantes se suelen escribir en mayúsculas.

1. Constantes declaradas const


La palabra reservada const es un calificador de tipo variable e indica que el valor
de variable no se puede modificar.

2. Constantes definidas
Se declaran mediante la directiva #define

Página: N° 12
LENGUAJES DE PROGRAMACIÓN I

3. Constantes enumeradas
Las constantes enumeradas permiten crear listas de elementos afines.

Ejemplo del funcionamiento de enumeraciones

 Deber:

ESPECIFIQUE CUAL DE LOS SIGUIENTES IDENTIFICADORES LISTADOS


A CONTINUACIÓN SON CORRECTOS:
DECLARAR VARIABLES

a) valor_un
b) porcentaje%
c) razon.social

Página: N° 13
LENGUAJES DE PROGRAMACIÓN I

d) 1ernombre
e) precio de fábrica
f) sueldounificado
g) entero
h) _sueldo

ESPECIFIQUE CUAL DE LAS SIGUIENTES CONSTANTES ESTÁN ESCRITAS


CORRECTAMENTE:
DECLARAR CONSTANTES

a) 62,2
b) 3.1421
c) 10 5
d) 010
e) “país”
f) 0X4FT
g) 0XAB

ESPECIFIQUE EL TIPO DE DATO AL QUE PERTENECE LAS CONSTANTES


LISTADAS A CONTINUACIÓN:
TIPOS DE DATOS

a) ‘\\’
b) .8
c) 053
d) 0XAF
e) “país”
f) 50020U
g) 0XFUL

ESPECIFIQUE SI EXISTE O NO DIFERENCIA EN LENGUAJE C AL ESCRIBIR


UNA CONSTANTE CARACTER ENTRE COMILLAS SIMPLES (‘T’) O
COMILLAS DOBLES (“T”).
‘T’ .- Representa
“T”.- Representa

CUAL ES LA LONGITUD DE LA CADENA DE CARACTERES “SUELDO


BÁSICO “ JUSTIFIQUE SU RESPUESTA

DE LAS DECLARACIONES SIGUIENTES IDENTIFIQUE CUALES SON


CORRECTAS Y DE NO SERLAS REALICE LAS CORRECCIONES
RESPECTIVAS:

int letra = ‘A’;


int letra2=”B”;
int valor =67;
short letra ==‘A’;
float letra=’A’;
char letra=’\n’;
int valor = int (3.45);
include letra = “A”;

Página: N° 14
LENGUAJES DE PROGRAMACIÓN I

ESPECIFIQUE CUAL DE LOS SIGUIENTES IDENTIFICADORES LISTADOS


A CONTINUACIÓN SON CORRECTOS:
DECLARAR VARIABLES

a) valor_un
b) porcentaje%
c) razon.social
d) 1ernombre
e) precio de fábrica
f) sueldounificado
g) entero
h) _sueldo

ESPECIFIQUE CUAL DE LAS SIGUIENTES CONSTANTES ESTÁN ESCRITAS


CORRECTAMENTE:
DECLARAR CONSTANTES

a) 62,2
b) 3.1421
c) 10 5
d) 010
e) “país”
f) 0X4FT
g) 0XAB

ESPECIFIQUE EL TIPO DE DATO AL QUE PERTENECE LAS CONSTANTES


LISTADAS A CONTINUACIÓN:
TIPOS DE DATOS

a) ‘\\’
b) .8
c) 053
d) 0XAF
e) “país”
f) 50020U
g) 0XFUL

ESPECIFIQUE SI EXISTE O NO DIFERENCIA EN LENGUAJE C AL ESCRIBIR


UNA CONSTANTE CARACTER ENTRE COMILLAS SIMPLES (‘T’) O
COMILLAS DOBLES (“T”).
‘T’ .- Representa
“T”.- Representa

CUAL ES LA LONGITUD DE LA CADENA DE CARACTERES “SUELDO


BÁSICO “ JUSTIFIQUE SU RESPUESTA

DE LAS DECLARACIONES SIGUIENTES IDENTIFIQUE CUALES SON


CORRECTAS Y DE NO SERLAS REALICE LAS CORRECCIONES
RESPECTIVAS:

Página: N° 15
LENGUAJES DE PROGRAMACIÓN I

int letra = ‘A’;


int letra2=”B”;
int valor =67;
short letra ==‘A’;
float letra=’A’;
char letra=’\n’;
int valor = int (3.45);
include letra = “A”;

Página: N° 16
LENGUAJES DE PROGRAMACIÓN I

CLASE # 3
 Uso de las variables
 Sentencia de asignación
 Operaciones básicas
 Operadores en C++
 Funciones predefinidas
 Operaciones de entrada/salida
 Ejemplo: Uso de un programa que contenga constantes y variables

Constantes de carácter no imprimibles

Declaración de variables
Todas las variables deben de ser declaradas antes de utilizarlas, aunque ciertas
declaraciones se realizan implícitamente por el contexto. Una declaración
especifica un tipo, y le sigue una lista de una o más variables de ese tipo.

Ejemplo:
int a, b;
char c;

Las variables también se pueden inicializar en su declaración.


Ejemplo:
int i = 0;
float x = 3.4;

EJEMPLO: texto completo de condolar.cpp


// Programa: CONDOLAR.CPP
// Desc. : Convierte pesos a dólares
#include <iostream.h>
void main(void){
int pesos;
float dolares;
cout << endl << "Cuantos pesos desea convertir a dolares? ";
cin >> pesos;
dolares = pesos / 11;
cout << "Dolares = " << dolares;
}

Una variable es una posición de memoria con nombre, empleada para guardar un
dato, que puede ser modificado durante la ejecución del programa.

Página: N° 17
LENGUAJES DE PROGRAMACIÓN I

Sintaxis: tipo_de_almacenamiento tipo nombre_de_variable;

Asignación:
DIAGRAMA DE SINTAXIS DE LA OPERACIÓN DE ASIGNACIÓN

Se evaluará la expresión y el resultado es asignado a la variable. El tipo


resultante de la expresión debe coincidir con el tipo de la variable.
Ejemplo: a8 a = 8;
b5+3*2 -a b = 5 + 3*2 – a;
OPERACIONES BÁSICAS
Operadores aritméticos
Operador Acción
- resta y menos unario
+ suma
* multiplicación
/ división
% modulo de división
-- decremento
++ incremento
Operadores relaciónales
Operador Acción
> mayor que
> = mayor que o igual que
< menor que
<= menor o igual que
== igual
!= no igual
Nota: El doble signo igual == es la notación de C++ para "es igual a". Este
símbolo se distingue de la condición de igualdad del simple = empleado en las
asignaciones.

Operadores lógicos
Operador Acción
&& and
|| or
! not
Incremento

Página: N° 18
LENGUAJES DE PROGRAMACIÓN I

++ Incrementa en uno
Decremento
-- Decrementa en uno

Ejemplos:

Al usar la forma de prefijo la variable se incrementa o decrementa antes de ser


usada; en la forma pos fijo la variable primero se usa y después se incrementa o
decrementa según sea el caso.

EJEMPLO: texto completo de mas_mas.cpp


//Programa : mas_mas.cpp
// Descripción: Demostración del operador unario ++
#include <iostream.h>
void main(void) {
int i;
i = 10;
i++;
cout << "i = " << i;
cout << "\nSalida en posfija de i++ = " << i++;
cout << "\n\Salida de i = " << i;
cout << "\nSalida prefija de ++i = " << ++i;
}

1.6 Precedencia y orden de evaluación de operadores

Página: N° 19
LENGUAJES DE PROGRAMACIÓN I

EJEMPLOS DE ASIGNACIONES
Operadores se asignación.

Operador Descripción Ejemplo C Pseudocódigo


++ Incremento. a ++ a  a+1
-- Decremento. a-- a  a-1
= Asignación simple. a =1 a1
*= Multiplicación más asignación. a *=5 a  a*5
/= División más asignación. a /=2 a  a/2
%= Módulo más asignación a %2 a  a%2
+= Suma más asignación. a +=2 a  a+2
-= Resta más asignación a -=3 a  a-3
&= Operación AND sobre bits más a&b aa&b
asig.
|= Operación OR sobre bits más a |= b aa|b
asig.

OPERACIONES DE ENTRADA/SALIDA.
Instrucciones de Entrada / Salida
En C++ la entrada y salida se lee y escribe en flujos. Cuando se incluye la
biblioteca iostream.h en el programa, se definen automáticamente dos flujos:

Esta biblioteca también nos proporciona dos operadores, uno de inserción (<<),
que inserta datos en el flujo cout y otro operador de extracción ( >> ) para
extraer valores del flujo cin y almacenarlos en variables.

Página: N° 20
LENGUAJES DE PROGRAMACIÓN I

C++ utiliza secuencias de escape para visualizar caracteres que no están


representados por los símbolos tradicionales.

Las más utilizadas las mostramos en la siguiente tabla:

 Deber:
1. Declaración de constantes y variables de tipo entero, float, char y string
2. Realizar un programa que lea dos número y realice el cálculo de suma, resta
multiplicación y división entre dichos números
3. Diseñar un programa que permita obtener el promedio de 4 notas

TAREAS DE REFUERZO E INVESTIGACIÓN


 Uso de la estructura de un programa en C++
 Declaración de constantes y variables
 Evaluación de expresiones

Página: N° 21
LENGUAJES DE PROGRAMACIÓN I

CLASE # 4
 Programación estructurada
 Estructura secuencial
 Estructura de selección simple (IF /ELSE)
 Omisión de la cláusula ELSE
 Sentencias compuestas

Programación estructurada
Introducción. Teorema de la programación estructurada
El principio fundamental de la programación estructurada es que en todo
momento el programador pueda mantener el programa “dentro” de la cabeza.
Esto se consigue con:
a) Un diseño descendente del programa,
b) Unas estructuras de control limitadas y
c) Un ámbito limitado de las estructuras de datos del programa.

Hace más fácil la escritura y verificación de programas. Se adapta perfectamente


al diseño descendente.
Para realizar un programa estructurado existen tres tipos básicos de estructuras
de control:
 Secuencial: Ejecuta una sentencia detrás de otra.
 Condicional: Se evalúa una expresión y, dependiendo del resultado, se
decide la siguiente sentencia a ejecutar.
 Iterativa: Repetimos un bloque de sentencias hasta que sea verdadera
una determinada condición.

Existe un teorema debido a que establece lo siguiente:

“Todo programa propio se puede escribir utilizando únicamente las estructuras de


control secuencial, condicional e iterativa”

Un programa propio es aquel que:


 Tiene un único punto de entrada y un único punto de salida.
 Existen caminos desde la entrada hasta la salida que pasan por todas las
partes del programa.
 Todas las instrucciones son ejecutables y no existen bucles sin fin.
 Este teorema implica que la utilización de la sentencia GOTO es totalmente
innecesaria, lo que permite eliminar esta sentencia. Un programa escrito
con GOTO es más difícil de entender que un programa escrito con las
estructuras mencionadas.

Estructura secuencial
Ejecución de sentencias una detrás de la otra. En C++, toda una estructura
secuencial se agrupa mediante los símbolos { y }.
Ejemplo:

Página: N° 22
LENGUAJES DE PROGRAMACIÓN I

Todo el bloque se considera una sola sentencia. Después de las llaves no se pone
punto y coma.

Estructura condicional
Alternativa simple:

Alternativa doble:

Página: N° 23
LENGUAJES DE PROGRAMACIÓN I

Sentencias if anidadas:
Cuando la sentencia dentro del if es otra sentencia if.

Página: N° 24
LENGUAJES DE PROGRAMACIÓN I

 Deber:
1. Diseñar un programa que permita determinar si un año es bisiesto. Un año
es bisiesto si es múltiplo de 4. Los años múltiplos de 100 no son bisiestos
salvo si ellos son también múltiplos de 400 (Ejemplo: 2000 es bisiesto, 1800
no lo es).
2. Diseñar un programa que permita ingresar una letra y decir si es no vocal
3. Encontrar el mayor de 3 números
4. Encontrar el mayor, menor y el número intermedio entre 3 números considere
también los casos en los que exista más de un número igual
5. Dada la siguiente ecuación:
AX 2  BX  C  0
Encontrar:
B 2  4 AC
X 1, X 2  B 
2A
Considere los casos:
 Si el discriminante es mayor a 0 la respuesta será dos números reales
distintos
 Si el discriminante es igual a 0 la respuesta será dos números reales
iguales
 Si el discriminante es menor a 0 la respuesta será dos números
imaginarios

Página: N° 25
LENGUAJES DE PROGRAMACIÓN I

RESUELVA LOS SIGUIENTES EJERCICIOS

Página: N° 26
LENGUAJES DE PROGRAMACIÓN I

CLASE # 5
 Sentencia de selección múltiple (switch)

Alternativa múltiple:

Pseudocódigo:

La expresión ya no es lógica, sino de tipo ordinal.

Una forma de implementar esta estructura es mediante sentencias if anidadas.

Página: N° 27
LENGUAJES DE PROGRAMACIÓN I

Página: N° 28
LENGUAJES DE PROGRAMACIÓN I

Página: N° 29
LENGUAJES DE PROGRAMACIÓN I

Importante resaltar la utilización de la palabra reservada ‘break’ como señal de


final de las sentencias que van con cada opción o conjunto de opciones.

 Deber:
1. Diseñar un programa que permita ingresar 3 notas valoradas cada una de
ellas sobre una nota de 20 puntos. Obtener su promedio e imprimir uno de
los siguientes mensajes:
20-19 Sobresaliente
18-16 Muy buena
15-13 Buena
12-10 Regular
09-0 Insuficiente
2. Diseñar un programa que permita ingresar un caracter e imprimir un mensaje
que diga si es vocal, consonante, cifra o carácter especial
3. Ingresar un número que se encuentre entre 1 y 31 y decir si es un número
primo o no primo
4. Simular el trabajo de una calculadora en la que se sume, reste, multiplique y
divida siempre con un número fijo cualesquiera.
5. Diseñar un programa que permita calcular las funciones trigonométricas

Página: N° 30
LENGUAJES DE PROGRAMACIÓN I

TAREAS DE REFUERZO E INVESTIGACIÓN


 Uso de las estructuras de selección
 IF/ELSE
 Switch
 Ejemplo: Control de los números que sean pares
 Deber
1. Pago de la factura de alquiler de un automóvil
2. La fecha de Pascua se corresponde al primer domingo después de la
primera luna llena que sigue al equinoccio de primavera y se calcula con
las siguientes expresiones
A = año mod 19
B = año mod 4
C = año mod 7
D = (19*A+24) mod 30
E = (2*B+4*C+6*D+5) mod 7
N = 22 +D+ E
En el que N indica el número del día del mes de marzo (o abril sí N es mayor
a 31) correspondiente al domingo de pascua.
3. Diseñar un programa que permita resolver un sistema de 2 ecuaciones,
verificando que no se produzca división para cero
aX + bY = C
dX + eY = F

X= ce- df/ae-bd
Y= af - cd/ae-bd

Página: N° 31
LENGUAJES DE PROGRAMACIÓN I

CLASE # 6
 Estructuras de repetición
 Sentencia While Do
 Reglas de funcionamiento del While do
 Sentencia do While
 Reglas de funcionamiento del do While
 Comparación de los bucles while do/ do While
 Ejemplo: Diseñar un programa que permita sumar n número enteros
positivos ingresados por el usuario y obtener su promedio utilizando While do
y do While

ESTRUCTURAS REPETITIVAS
Son aquellas que crean un bucle (repetición continua de un conjunto de
instrucciones) en la ejecución de un programa respecto de un grupo de
sentencias en función de una condición.
Las tres sentencias repetitivas de C++ son:
 SENTENCIA WHILE
 SENTENCIA DO WHILE
 SENTENCIA FOR

Cabe destacar que todos funcionan hasta que se cumple con una condición que
es la encargada de hacer parar el ciclo y continuar con el resto de instrucciones
del programa.

Página: N° 32
LENGUAJES DE PROGRAMACIÓN I

La sentencia puede no ejecutarse nunca si la condición no se cumple.


Si la condición está mal hecha, el bucle puede no acabar nunca. Es lo que se
denomina un bucle infinito

En C++ la sintaxis sería:


while (expresión lógica)
sentencia

Ejemplo:

cin >> n;
num = 1;
while (num <= n)
{
cout << num << endl;
num++;
}

Con el bucle mientras se puede construir cualquier estructura iterativa. De todas


maneras, por comodidad existen otras estructuras iterativas.

REGLAS DE FUNCIONAMIENTO DEL WHILE DO


1. Permite repetir un bloque de sentencias cero o más veces dependiendo del
valor que se evalúa para una expresión booleana.
2. Primero se evalúa la condición; si la expresión booleana es “verdadera” se
ejecuta el cuerpo del bucle y se vuelve a evaluar la condición.
3. El proceso se repite mientras la condición resulte cierta en cada evaluación
y termina cuando la condición evaluada es “falsa”.

Repetir (o hacer)

Repite la sentencia mientras la expresión sea cierta.

La sentencia siempre se ejecuta como mínimo una vez.

Página: N° 33
LENGUAJES DE PROGRAMACIÓN I

La sintaxis en C++:
do
sentencia
while (expresión lógica);

Se utiliza sobre todo en preguntas o menús, puesto que siempre se han de


ejecutar al menos una vez.

do
{
cout << "Introduce un entero";
cin >> i;
cout << "¿Es correcto (s/n)?";
cin >> c;
}
while (c != 's');

REGLAS DE FUNCIONAMIENTO DEL DO WHILE


1. Permite repetir un bloque de sentencias una o más veces dependiendo del
valor que se evalúa para una expresión booleana.
2. Primero se ejecuta el cuerpo del bucle y luego se evalúa la condición; si la
expresión booleana es “verdadera” se ejecuta el cuerpo del bucle.
3. El proceso se repite mientras la condición resulte verdadera en cada
evaluación y termina cuando la condición evaluada es “falsa”.

 Deber:
1. Diseñar un programa que permita encontrar la sumatoria de los n primeros
números primos
2. Diseñar un programa que permita encontrar la sumatoria de los n primeros
números perfectos. Un número es perfecto cuando es igual a la suma de

Página: N° 34
LENGUAJES DE PROGRAMACIÓN I

todos los números para los cuales es divisible excepto el mismo número. (6 =
1+2+3).
3. Diseñar un programa que permita realizar la operación de multiplicación de
dos números utilizando sumas sucesivas
4. Diseñar un programa que permita realizar la operación de potenciación
utilizando sumas sucesivas
5. Diseñar un programa que permita encontrar el factorial de un número

Página: N° 35
LENGUAJES DE PROGRAMACIÓN I

CLASE # 7
 Sentencia FOR
 Reglas de funcionamiento del FOR
 Bucles anidados
 Ejemplo: Diseñar un programa que permita generar la sumatoria de la serie:
1  2! 2  3! 3  ....  n! n
2 2 2 2

Para (o desde)
Es como una estructura mientras, pero especialmente preparada para incorporar
un contador.

Pseudocódigo
para <variable> <- <valor inicial> hasta <valor final> hacer
<sentencia>
fin_para

La variable del bucle se denomina variable de control.

Ejemplo:
leer n
para num 1 hasta n hacer
escribir n
fin_para

Se utiliza cuando se conocen el número de veces que se van a repetir las


sentencias.

La variable de control NO se puede modificar dentro del bucle.

Cuando el bucle acaba, el valor de la variable de control es indeterminado.

La sintaxis en C++ es:


for(inicialización; condición; incremento)
sentencia

En C++, la instrucción for es como una instrucción while, con la salvedad de


que tiene espacios especiales para poner la inicialización de la variable de
control, la condición de repetición y el incremento de la variable de control.

El incremento se realiza siempre después de ejecutar la sentencia.

Al igual que en la instrucción while, la sentencia puede no ejecutarse nunca si la


condición no se cumple.

Ejemplo:
cin >> n;
for(num = 1; num <= n; num ++)
cout << num << endl;

Se utiliza también para realizar sumatorias o productos con la ayuda de una


variable acumuladora:

Página: N° 36
LENGUAJES DE PROGRAMACIÓN I

Tipos de control de bucles


Existen tres formas típicas de controlar cuando se ejecuta un bucle:
a) Bucles con contador (ya vistos).
b) Bucles controlados por indicadores (banderas o flags).

Decir si un número introducido por teclado contiene sólo cifras menores que
cinco;

bool menor;
int num;
cin >> num;
menor = true;
while (menor && (num > 0) )
{
if (num % 10 >= 5)
menor = false;
num = num / 10;
}
if (menor)
cout << “Todas las cifras son menores que 5”;
else
cout << “Hay alguna cifra mayor o igual que 5”;

Página: N° 37
LENGUAJES DE PROGRAMACIÓN I

c) Bucles controlados por centinela.

Bucles anidados
Los bucles, al igual que las sentencias condicionales, también se pueden anidar.
Esto es especialmente útil para el manejo de matrices, como veremos en los
temas posteriores

CUÁNDO UTILIZAR WHILE DO/DO WHILE/FOR?


 Utilizar la sentencia o estructura FOR cuando se conozca el número de
iteraciones, y siempre que la variable de control de bucle sea de tipo
ordinal.
 Utilizar la estructura DO WHILE cuando el bucle se realice por lo menos
una vez.
 En todos los demás casos utilizar la sentencia WHILE.

 Deber:
1. Diseñar un programa que permita generar la sumatoria de la serie:

Página: N° 38
LENGUAJES DE PROGRAMACIÓN I

a (a1)!  a ( a2)!  a ( a3)!  .......


2. Diseñar un programa que permita generar la sumatoria de la serie:
2 4 4 6 6
2     ......
3 3 5 5 7
3. Diseñar un programa que permita generar las tablas de multiplicación
4. Imprimir todos los caracteres en minúsculas que existen entre un intervalo de
mayúsculas ejemplo: A b c d e f g H

TAREAS DE REFUERZO E INVESTIGACIÓN

 Uso del While do/ Do While / For


 Tarea de investigación: Consultar sobre todos los procedimientos y
funciones que se utilizan en el manejo de cadenas.
 Ejemplo:
 Diseñar un programa que permita calcular cuántas palabras existen en una
frase
 Probar si una palabra ingresada por el usuario es o no palíndromo. Una
palabra es palíndromo cuando se lee igual de derecha a izquierda que de
izquierda a derecha ejemplo Ana, Radar, Oso
Deber:
1. Diseñar un programa que permita calcular cuántas vocales existen en una
frase
2. Contar la incidencia de las letras en una palabra. Es decir cuantas veces se
repiten
3. En una frase contar palabras de longitud par y las de longitud impar que
existan en ella
4. Reemplazar las palabras de longitud par en una frase por asteriscos
5. Visualizar las palabras de longitud impar en una frase al revés

Página: N° 39
LENGUAJES DE PROGRAMACIÓN I

CLASE # 8
 Programación modular
 Diseño descendente
 Procedimientos
 Declaración de los procedimientos
 Llamada al procedimiento
 Ventajas de utilizar procedimientos
 Los parámetros: transferencia de información a/desde procedimientos
 Variables locales y globales
 Funciones definidas por el usuario
 Definición
 Llamada de funciones

Subprogramas. Funciones y procedimientos


Los subprogramas (procedimientos y funciones) constituyen una unidad de
ejecución mayor que el bloque. Proporcionan abstracción operacional al
programador y constituyen una unidad fundamental en la construcción de
programas.

Los subprogramas pueden ser vistos como un “mini” programa encargado de


resolver algorítmicamente un subproblema que se encuentra englobado dentro
de otro mayor. En ocasiones también pueden ser vistos como una
ampliación/elevación del conjunto de operaciones básicas (acciones primitivas)
del lenguaje de programación, proporcionándole un método para resolver nuevas
operaciones.

Funciones y procedimientos
Dependiendo de su utilización (llamada) podemos distinguir dos casos:

Procedimientos: encargados de resolver un problema computacional. Se les


envía los datos necesarios y produce unos resultados que devuelve al lugar
donde ha sido requerido:
int main()
{
int x = 8;
int y = 4;
ordenar(x, y);
...
}
Funciones: encargados de realizar un cálculo computacional y generar un
resultado (normalmente calculado en función de los datos recibidos) utilizable
directamente:
int main()
{
int x = 8;
int y = 4;
int z;
z = calcular_menor(x, y);

Definición de subprogramas
Su definición podría ser como se indica a continuación:

Página: N° 40
LENGUAJES DE PROGRAMACIÓN I

void ordenar(int &a, int &b)


{
if (a > b)
{
int aux = a;
a = b;
b = aux;
}
}
int calcular_menor(int a, int b)
{
int menor;
if (a < b)
{
menor = a;
}
else
{
menor = b;
}
return menor;
}

La definición de un subprograma comienza con una cabecera en la que se


especifica en primer lugar el tipo del valor devuelto por este si es una función, o
void en caso de ser un procedimiento.

A continuación vendrá el nombre del subprograma y la declaración de sus


parámetros.

El cuerpo del subprograma determina la secuencia de acciones necesarias para


resolver el problema especificado. En el caso de una función, el valor que toma
tras la llamada vendrá dado por el resultado de evaluar la expresión de la
construcción return. Aunque C++ es más flexible, y nosotros sólo permitiremos
una única utilización del return y deberá ser al final del cuerpo de la función.

Nota: la función calcular_menor anterior también podría haber sido definida de la


siguiente
forma:

int calcular_menor(int a, int b)


{
return ( (a < b) ? a : b ) ;
}

Normalmente la solución de un subproblema o la ejecución de una operación


dependerá del valor de algunos datos, modificará el valor de otros datos, y
posiblemente generará nuevos valores.

Todo este flujo de información se realiza a través de los parámetros o


argumentos del subprograma.

Parámetros por valor y por referencia

Página: N° 41
LENGUAJES DE PROGRAMACIÓN I

Llamaremos argumentos o parámetros de entrada a aquellos que se utilizan para


recibir la información necesaria para realizar la computación. Por ejemplo los
argumentos a y b de la función calcular_menor anterior.

Los argumentos de entrada se reciben por valor, que significa que son valores
que se copian desde el sitio de la llamada a los argumentos en el momento de la
ejecución del subprograma.

Se declaran especificando el tipo y el identificador asociado.

Llamaremos argumentos o parámetros de salida a aquellos que se utilizan para


transferir información producida como parte de la solución realizada por el
subprograma.

Ejemplo:
int main()
{
int cociente;
int resto;
dividir(7, 3, cociente, resto);
// ahora ’cociente’ valdrá 2 y ’resto’ valdrá 1
}

Su definición podría ser la siguiente:

void dividir(int dividendo, int divisor, int &cociente, int &resto)


{
cociente = dividendo / divisor;
resto = dividendo % divisor;
}

Así, dividendo y divisor son argumentos de entrada y son pasados “por valor”
como se vio anteriormente. Sin embargo, tanto cociente como resto son
argumentos de salida (se utilizan para devolver valores al lugar de llamada), por
lo que es necesario que se pasen por referencia que significa que ambos
argumentos serán referencias a las variables que se hayan especificado en la
llamada. Es decir, cualquier acción que se haga sobre ellas es equivalente a que
se realice sobre las variables referenciadas.

Se declaran especificando el tipo, el símbolo “ampersand” (&) y el identificador


asociado.

Llamaremos argumentos o parámetros de entrada/salida a aquellos que se


utilizan para recibir información necesaria para realizar la computación, y que
tras ser modificada se transfiere al lugar de llamada como parte de la
información producida resultado de la computación del subprograma. Por ejemplo
los argumentos a y b del procedimiento ordenar anterior.

Los argumentos de entrada/salida se reciben por referencia y se declaran como


se especificó anteriormente.

También es posible recibir los parámetros de entrada por referencia constante de


tal forma que el parámetro será una referencia al argumento especificado en la

Página: N° 42
LENGUAJES DE PROGRAMACIÓN I

llamada, tomando así su valor, pero no podrá modificarlo al ser una referencia
constante, evitando así la semántica de salida asociada al paso por referencia.
Para ello, se declaran como se especificó anteriormente para el paso por
referencia, pero anteponiendo la palabra reservada const.

int calcular_menor(const int &a, const int &b)


{
return ( (a < b) ? a : b ) ;
}

En la llamada a un subprograma, una expresión de un tipo compatible es


adecuada para un parámetro que se pase por valor, sin embargo, si el parámetro
se pasa por referencia es obligatorio que sea pasada como parámetro actual una
variable que concuerde en tipo. Si el paso es por referencia constante ((const int
&x)) es posible que el parámetro actual sea una expresión de tipo compatible.

Declaración de subprogramas
Los subprogramas, al igual que los tipos, constantes y variables, deben ser
declarados antes de ser utilizados. Dicha declaración se puede realizar de dos
formas: una de ellas consiste simplemente en definir el subprograma antes de
utilizarlo. La otra posibilidad consiste en declarar el subprograma antes de su
utilización, y definirlo posteriormente. El ámbito de visibilidad del subprograma
será global al fichero, es decir, desde el lugar donde ha sido declarado hasta el
final del fichero.

Para declarar un subprograma habrá que especificar el tipo del valor devuelto (o
void si es un procedimiento) seguido por el nombre y la declaración de los
argumentos igual que en la definición del subprograma, pero sin definir el cuerpo
del mismo. En lugar de ello se terminará la declaración con el carácter “punto y
coma” (;).

int calcular_menor(int a, int b); // declaracion de ’calcular_menor’


int main()
{
int x = 8;
int y = 4;
int z;
z = calcular_menor(x, y);
// ahora ’z’ contine el calcular_menor numero de ’x’ e ’y’
..............}

Ejemplo de un programa que imprime los números primos menores que


100.
//- fichero: primos1.cpp --------------------------------------------
#include <iostream>
const int MAXIMO = 100;
bool es_divisible(int x, int y)
{
return ( x % y == 0 );
}
bool es_primo(int x)
{
int i;

Página: N° 43
LENGUAJES DE PROGRAMACIÓN I

for (i = 2; ((i < x) && ( ! es_divisible(x, i))); ++i) {


// vacio
}
return (i >= x);
}
void escribir(int x)
{
cout << x << " ";
}
void primos(int n)
{
for (int i = 1; i < n; ++i) {
if (es_primo(i)) {
escribir(i);
}
}
cout << endl;
}
int main()
{
primos(MAXIMO);
// return 0;
}
//- fin: primos1.cpp ---------------------------------

Página: N° 44
LENGUAJES DE PROGRAMACIÓN I

FUNCIONES SIN ARGUMENTOS


Son funciones que no recogen ni devuelven ningún valor.

FUNCIONES CON ARGUMENTOS


Son funciones que recogen uno o más parámetros del mismo o distinto tipo.

Página: N° 45
LENGUAJES DE PROGRAMACIÓN I

FUNCION QUE DEVUELVE UN VALOR


#include < stdio.h >
double suma(double x, double y);
int maximo(int x, int y);
void main (void)
{ int a,b, mayor;
double x, y ,total;
x=22.2; y= 443.0;
a=1; b=2;
total = suma (x,y);
mayor= maximo (a,b);
}
double suma(double x, double y)
{
return (x+y);
}
int maximo(int x, int y)
{
// si (x>y) entonces devuelve x, sino devuelve y
return (x >y) ? x:y;
}

EJEMPLO:
#include < stdio.h >
void uno(void);
void dos(void);

Página: N° 46
LENGUAJES DE PROGRAMACIÓN I

void main (void)


{
uno( );
}
void uno( )
{
printf(“\n UNO 1”);
dos( ); // desde una función llamamos a otra función
}
void dos( )
{
printf(“\n DOS 2”);
}

Variables locales y globales


Locales
#include < stdio.h>
void fun(void);
void main (void )
{ int a,b; /* Variables locales */
a=b= 1;
printf("\n Antes de llamar a fun: a = %d, b= %d", a,b);
fun( );
printf("\n Después de llamar a fun: a = %d, b= %d",a,b);
}
void fun()
{ int a,b; // son locales a esta función
a=b=11;
printf {"\n En la función: a = %d b= %d", a,b);
}
_________________________________________________________
#include < stdio.h >
int suma(int,int);
void main(void)
{ int a,b,total; /* Variables locales */
a=b=1;
total = suma(a,b);
printf ("\n a = %d, b= %d, suma = %d",a,b,total);
}
int suma(int a, int b)
{ //a y b son locales en suma
int total;
total = a+b;
a++;
b++;
return ( total) ;
}

Globales
#include < stdio.h >
void suma(int a, int b);
int total; /* Variable global , declarada fuera del main */
void main (void)

Página: N° 47
LENGUAJES DE PROGRAMACIÓN I

{ int a,b; /* Variables locales */


a=b=1;
suma(a,b);
printf("\n a = %d, b= %d, suma = %d1”,a,b,total);
}
void suma(int a, int b )
{ /* a y b son locales en suma */
total = a+b; /* Total es variable global */
a++; b++;
}

Funciones definidas por el usuario


Una función es un bloque de código con un nombre asignado, este código es
privado a la función y no puede ser accesazo por ninguna declaración en ninguna
otra función excepto a través de argumentos y variables globales.

Las variables definidas dentro de una función son variables locales dinámicas.
(Empiezan a existir cuando la función es llamada y se destruyen al terminar).

Forma general:
especificador_tipo nombre_funcion(declaración de argumentos )
{
cuerpo de la función
}

El especificador_de_tipo especifica el tipo de valor que la función devolver


mediante el return.

La lista_de_argumentos es una lista de nombres de variables separados por


comas que recibe los valores de los argumentos cuando se llama la función.

Las funciones terminan y devuelven automáticamente al lugar que la llamo


cuando se encuentra la ultima llave o mediante la sentencia return.

EJEMPLO:texto completo de mayusculas.cpp


// Programa : mayusculas.cpp
// Convierte una cadena de caracteres a mayusculas
#include <iostream.h>
char mensaje[80] =”Esta es un prueba”;
void mayusculas(void) {
int i;
for (i = 0; mensaje[i] != '\0'; i++)
mensaje[i] = toupper(mensaje[i]);
}
int main() {
system("cls");
cout << "Programa para cambiar a mayúsculas un mensaje ";
mayusculas();
cout << "\nEl mensaje en mayúsculas es " << mensaje;
}

Página: N° 48
LENGUAJES DE PROGRAMACIÓN I

Argumentos de funciones
Hay tres tipos de argumentos para las funciones
1. Por valor
2. Por puntero
3. Por referencia

Llamada por valor


Este método copia el valor del argumento dentro de los parámetros formales de
la función y todos los cambios que sufran los parámetros no afectan el valor del
argumento usado para llamar la función. Los parámetros formales de la función
son las declaraciones de las variables que aceptan los valores de los argumentos.

EJEMPLO: texto completo de sqr.cpp


// Programa : SQR.CPP
// Descripcion: Usa una funcion que recibe y regresa un valor entero
#include <iostream.h>
int sqr(int num) {
num = num * num;
return num;
}
main() {
int n, x;
cout << "Ingresa un numero ";
cin >> n;
x = sqr(n);
cout << endl << "El cuadrado de " << n << " es " << x;
}

EJEMPLO: texto completo de cambiarf.cpp


// Prog: CambiaRf.Cpp
// Desc: Usa una funcion que intercambia los valores de sus argumentos
// utilizando paso por Referencia
#include <iostream.h>
void cambia(int &a, int &b) {
int paso;
paso = a;
a = b;
b = paso;
}
main() {
int x, y;
x = 10; y = 20;
cambia(x, y);
cout << endl << "X = " << x;
cout << endl << "Y = " << y;
}
 Deber de procedimientos:
1. Transformar un número de cualquier base a base 10
2. Diseñar un programa que permita encontrar cuantas palabras existen en una
frase que no contengan vocales
3. Diseñar un programa que calcule la siguiente serie:

Página: N° 49
LENGUAJES DE PROGRAMACIÓN I

(a! X ) a ((a  1)! X ) ( a 1) ((a  2)! X ) ( a  2 )


  ....
ea e ( a 1) e( a 2)
X Toma valores de 1 .. 5 y a indica el número de términos que deberá ser entre
3y6

4. Encontrar cuantas palabras de longitud 3 existen en una frase ingresada por


el usuario
5. Transformar la frase: La _ _ EIE _ _ _ esta _ en _ la _ _ _ _ ESPOCH.
Retirando los espacios en blanco que están de más
La _ EIE _ esta _ en _ la _ ESPOCH

 Deber de funciónes:
1. Hallar el número relativo de un número
2. Convertir un número dado en su respectivo número pero en Romanos
3. Halar el máximo común divisor entre dos números
4. Hallar la siguiente sumatoria
3 5 7
X X X  X ....
3! 5! 7!

5. Cuántas palabras que tienen al menos 2 letras "a" existen en una frase
ingresada por el usuario

TAREAS DE REFUERZO E INVESTIGACIÓN

 Uso de procedimientos y funciones


 Ejemplo:
 Cuántas palabras palíndromo existen en una frase ingresada por el usuario:
ejemplo: El oso de Ana se llama Radar. Respuesta = Existen 3 palabras
palíndromos en al frase oso, Ana, Radar
 Deber:
1. Hallar las siguientes sumatorias:
aan!  aa(n1)!  aa(n2)!.....
2 3 5 7 11 13
1      ...
2. 2! 3! 4! 5! 6! 7!

(( n * X )  1) n! ((( n  1) * X )  2) ( n1)! ((( n  2) * X )  3) ( n2)!


   ....
3. n (n  1) (n  2)
Con todos los valores para X de 1 a 5

( X  1) ( X  2) ( X  3)
  2!2  3!3  ....
4. 11!1 2 3
Con todos los valores para X entre 1 y 10 y el número de términos
solamente entre 1 y 9
5. Cuántas palabras de longitud 5 existen en la frase y visualizarlas en una
línea diferente cada una

Página: N° 50
LENGUAJES DE PROGRAMACIÓN I

CLASE # 9
 Concepto de los arreglos
 Arreglos unidimensionales: Los vectores
 Operaciones con vectores
 Arreglos como parámetros en procedimientos y funciones
 Ejemplo:
 Ingresar n números en un vector, sumar y visualizar cada elemento
 Cuántos números entre a y b se encuentran almacenados en un vector
 Tarea de investigación: Consultar sobre los distintos métodos de
ordenación y búsqueda de los elementos de un vector.

Arreglos

 Un arreglo se compone de elementos de igual tamaño almacenados


linealmente en posiciones de memoria consecutiva.

 Un arreglo es un conjunto finito de posiciones de memoria consecutivas


que tienen el mismo nombre y el mismo tipo de dato. Los arreglos de una
dimensión (Unidimensionales) se llaman vectores. Los arreglos de dos
dimensiones (bidimensionales) se llaman matrices.

int A [ 7 ];
“A” es un vector de 7 elementos que C++ reconoce de la posición 0 a la 6.
Se puede “ignorar” la posición 0 y trabajar de la 1 a la 6.

int A [ 7 ] = {0,72,53,43,23,46,35};
En este caso se inicializa el valor de los elementos al momento de declarar el
vector. También puede hacerse desde el programa:
A[1] = 72;
A[2] = 53;
….etc.

 Un vector o array -arreglos en algunas traducciones- es una secuencia de


objetos del mismo tipo almacenados consecutivamente en memoria. El
tipo de objeto almacenado en el array puede ser cualquier tipo definido en
C/C++. Los vectores y matrices son pasados siempre por referencia como
argumentos de una función. La única diferencia con los tipos simples es

Página: N° 51
LENGUAJES DE PROGRAMACIÓN I

que no se usa el ‘&’ ya que basta simplemente el nombre del vector o


matriz.

Forma general de un arreglo unidimiensional:

tipo nombre_variable[tamaño]

En C++ todos los arreglos usan el cero como índice del primer elemento.

Los siguientes son dos ejemplos de declaraciones de arreglos válidas en C/C++

int CoordenadasDePantalla[5]; /*Un arreglo de 5 enteros */


char IDCompania[20]; /*Un arreglo de 20 caracteres */

En la figura 1 se muestra el primer arreglo que fue declarado con el tipo de


números enteros, llamado CoordenadasDePantalla, ocupa en memoria 5
localidades de memoria contiguas, cada una de ellas capaz de almacenar un
número entero. Actualmente es común que los números enteros sean de 32 bits,
esto hace que el arreglo CoordenadasDePantalla ocupe 32 × 5 = 160 bits

No se permite utilizar nombres de variables dentro de los corchetes. Por esto no


es posible evitar la especificación del tamaño del arreglo hasta la ejecución del
programa. La expresión debe ser un valor constante, para que el compilador
sepa exactamente cuánto espacio de memoria tiene que reservar para el arreglo.

Una buena práctica de programación es usar constantes predefinidas.

#define Coordenadas_Max 20
#define Tamano_MaX_Compania_Id 15

int CoordenadasDePantalla[Coordenadas_Max];
char IDCompania[Tamano_MaX_Compania_Id];

El uso de constantes predefinidas garantiza que futuras referencias al arreglo no


excedan el tamaño del arreglo definido.

Iniciación del arreglo


C/C++ proporciona 3 maneras de iniciar elementos del arreglo:
Por defecto: Cuando son creados, se aplica solamente a arreglos globales y
estáticos.

Página: N° 52
LENGUAJES DE PROGRAMACIÓN I

Explícita: Cuando son creados, suministrando datos de iniciación


Tiempo de ejecución: Durante la ejecución del programa cuando se asignan o
copias datos en el arreglo.

Acceso a los elementos de un arreglo


Si se tiene un error cuando se utilizan arreglos en C/C++, de seguro el error
involucra el acceso a los elementos del arreglo, por la simple razón de que el
primer elemento está en una posición 0, no 1. De manera que el último elemento
del arreglo lo encontramos en n-1, donde n es el número de elementos.

Supongamos la siguiente declaración:


int Estado[Rango_Maximo_Estado]={-1,0,1};

La siguiente sentencia tiene acceso a -1:


Estado[0];

Si escribimos Estado[3] causará un error porque no hay 4 elementos.

Página: N° 53
LENGUAJES DE PROGRAMACIÓN I

Ejemplo:
int lista[10]

El ejemplo declara un arreglo llamado lista con diez elementos desde lista[0]
hasta lista[9].

EJEMPLO: texto completo de fecha.cpp


// fecha.cpp
#include <iostream>
using namespace std;
void main() {
int fecha[3];
fecha[0] = 8; // mes
fecha[1] = 21; // dia
fecha[2] = 2003;// año
cout << "Fecha ";
cout << fecha[0] << '/' << fecha[1] << '/' << fecha[2];
}

Arreglos como argumentos de funciones

Se pueden pasar vectores como argumentos de una función

Prototipo:

tipo_devuelto NombreFun(tipo_vec nom_vec[ ]);

Llamada: var = NombreFun(nom_vec);

Página: N° 54
LENGUAJES DE PROGRAMACIÓN I

 Deber:
1. Sumar dos vectores de igual longitud
2. Sumar dos vectores de distinta longitud
3. Buscar el mayor y menor número que se encuentran almacenados en un
vector
4. Ordenar un vector
5. Reemplazar en un vector todos los números repetidos por un -5

Página: N° 55
LENGUAJES DE PROGRAMACIÓN I

CLASE # 10
 Arreglos multidimensionales
 Arreglos bidimensionales (Tablas)
 Declaración de arreglos bidimensionales
 Variables del tipo matriz
 Operaciones con matrices
 Matrices como parámetros en procedimientos y funciones
 Ejemplo: En una fábrica de componentes electrónicos se desea conocer la
cantidad de componentes fabricados en dos semanas consecutivas. Para
resolver este problema hay que realizar las siguientes tares:
a) Conocer cuántos tipos diferentes de componentes se fabrican y cuántos
días a la semana se trabaja
b) Leer la cantidad fabricada por cada componente en cada día laborable en
al primera semana
c) Leer la cantidad fabricada por cada componente en cada día laborable en
al segunda semana
d) Hallar la suma total en la primera semana
e) Hallar la suma total en la segunda semana

Arreglos multidimensionales
El término dimensión representa el número de índices utilizados para referirse a
un elemento particular en el arreglo. Los arreglos de más de una dimensión se
llaman arreglos multidimensionales.

Matrices en C++
int M [ 4 ] [ 4 ];
“M” es una matriz de 4 renglones y 4 columnas que C++ reconoce de la posición
0 a la 3.

Se puede “ignorar” la posición 0 y trabajar de la 1 a la 3.


int M [ 4 ] [ 4 ] = { 0,0,0,0,
0,5,1,9,
0,8,6,4,
0,3,7,2 };

Página: N° 56
LENGUAJES DE PROGRAMACIÓN I

En este caso se inicializa el valor de los elementos al momento de declarar la


matriz. También puede hacerse desde el programa:
A[1][1] = 5;
A[1][2] = 1;
….etc.

EJEMPLO:Matrices
#include<stdio.h>
#define M 3
#define N 2
int main(void)
{
int a[M][N]; /* matriz bidimensional */
int i, j;
for (i=0;i<M;i++) { /* lectura de cada elemento */
for (j=0;j<N;j++) {
printf(“Elemento %d,%d : “, i,j);
scanf(“%d”,&a[i][j]);
}
}
printf(“\nLa matriz introducida es:\n\n”); /* muestra cada elem */
for (i =0;i <M;i++) {
for (j =0;j <N;j++) {
printf(“%d ”,a[i][j]);
}
printf(“\n”); /* para cambiar de línea al final de cada fila */
}

Página: N° 57
LENGUAJES DE PROGRAMACIÓN I

Paso de matrices a funciones

Vector multidimensional:
En el prototipo hay que indicar el tamaño de todas las dimensiones, excepto la
primera

Dado que un vector no tiene tamaño predefinido, pasar su contenido como un


parámetro por valor es un costo innecesario que C/C++ no asume.

Un vector completo (a través de su referencia) se puede pasar a una función


como parámetro.

Recordemos que la referencia a un vector o la dirección inicial, se especifica


mediante su nombre, sin corchetes ni subíndices.
char caracteres[80] = “esta cadena es constante”;

foo(caracteres, longitud);

El parámetro formal debe ser definido dentro de la función, se escribirá un par de
corchetes vacíos, es decir, el tamaño del vector no se especifica.

void foo(char cadena_entrada[], int lng)

En C/C++ los arreglos en general son pasados como parámetros por referencia.
Esto es, el nombre del arreglo es la dirección del primer elemento del arreglo.

En C/C++ un elemento cualquiera de un arreglo puede ser pasado a una función


por valor o por referencia, tal y como se hace con una variable simple.

Ejemplo
float media(int a, float x[]) // Definición de la función
{ // Note que se incluyen los corchetes
// calculo de la media
// Fijese que el tamaño del vector ´x´ es pasado en ´a´
}
void main ()
{

Página: N° 58
LENGUAJES DE PROGRAMACIÓN I

int n;
float med;
float lista[100];

med = media(n, lista); // Esta llamada pasa como parámetros
// actuales la longitud del vector y
// el vector. Note que no se incluyen los
// corchetes

}

Ejemplo
#include <ctype.h>
#include <string.h>
void F1(char cadena[], int lng) {
int i;
for (i=0; i!=lng; i++)
cadena[i] = toupper(cadena[i]);
}
int main () {
char caracteres[80] = “Ejemplo”;
int longitud = strlen(caracteres);
puts(caracteres);
F1(caracteres, longitud);
puts(caracteres);
return 0;
}

Ejemplo
Diseñar un programa que calcule y escriba el área y la circunferencia de n
círculos, tal que todos n radios se deben almacenar en el vector R.

#include <stdio.h>
#define n 100
void leerRadios(float radios[], int &numEltos) {
// Parametros de salida: vector radios su numero de
elementos numEltos
int j;
printf(“¿Cuantos radios seran introducidos ?\n”);
scanf(“%i”,&numEltos);
for (j = 0; j < numEltos; j++) {
printf(“radio %i = ”);
scanf(“%i”,&radios[j]);
}
}
void AreaCirc (float radio, float &area, float &cir)
// Parametros de entrada: radio
// Parametros de salida: area y cir
{
float pi = 3.14159;
area = pi * pow(radio, 2);
cir = 2 * pi * radio;
}

Página: N° 59
LENGUAJES DE PROGRAMACIÓN I

void AreasCircs(float radios[], int numEltos, float


areas[], float cirs[]) {
// Parametros de entrada: vector radios
// Parametros de salida: vectores areas y cirs
int I;
for (I = 0; I < numEltos; I++)
AreaCirc(radios[I], areas[I], cirs[I]);
}
void escribirAreasCircs (float radios[], int numEltos, float
areas[], float cirs[]) {
int j;
for (j = 0; j < numEltos; j++) {
printf(“Para la circunferencia de radio %i”,radios[j]);
printf(“su area es: %i\n”, areas[j]);
printf(“su circunferencia es: %i\n”,cirs[j]);
}
}
int main() {
float R[n], A[n], C[n];
int nRadios;
leerRadios(R, nRadios);
AreasCircs(R, nRadios, A, C);
escribirAreasCircs (R, nRadios, A, C);
return 0;
}

 Deber:
1. Sumar dos matrices de igual dimensión
2. Sumar dos matrices de distinta longitud
3. Ingresar en una matriz las n notas de m estudiantes y encontrar el promedio
de notas por estudiante y el promedio de cada nota
4. Cuántas palabras de longitud 4 existen en una matriz
5. Diseñar un programa que simule el juego de la sopa de letras

Página: N° 60

También podría gustarte