Está en la página 1de 62

CS1112: Programación II

Unidad 1: Introducción al diseño de


algoritmos y programación en C++

Sesión de Teoría - 1

Profesor:
José Antonio Fiestas Iquira jfiestas@utec.edu.pe
Autores:
María Hilda Bermejo
José Fiestas
Rubén Rivas
Índice:

• Información sobre el curso

• Unidad 1: Introducción al diseño de algoritmos y programación en C++

○ Diseño de un algoritmo y estructura de un programa en C++ (rol de los algoritmos


en el proceso de solución de problemas).
○ Variables y tipos de datos primitivos (ej., números, caracteres, booleanos). Tipos
de datos y operadores.
Programación Orientada a Objetos 1

1 Información sobre el curso de


Programación II
Sistema de Evaluación:
Reglas para evaluaciones de Teoría
Se publicarán los miércoles 9:00 pm:
Cuestionarios (quizzes): en Canvas. Tiempo límite: 10 minutos.
Tarea individual
Ejercicio base: en Canvas, entrega por Gradescope. Tiempo límite:
20 minutos. Tarea individual
Ejercicio opcional: en Canvas, entrega por Gradescope. Tiempo
límite: 1 dia calendario. Tarea grupal
Proyecto de Teoría: en Canvas, entrega por Gradescope. Tiempo
límite: 3 días calendarios desde publicación. Tarea grupal
Reglas de integridad académica
Revisen las reglas en la página 3 del sìlabo en Canvas:
CS1112 Programación II - 2022.1.docx.pdf
Programación Orientada a Objetos 1

2 Unidad 1:
Introducción al diseño de algoritmos
y programación en C++
Logro de la sesión:
Al finalizar la sesión, los alumnos podrán:

● Comprender el diseño de un algoritmo y la estructura de un


programa en C++
● Conocer y usar tipos de variables y operadores
Modelo Computacional

Entrada

Salida
Algoritmos

● ¿Qué es un algoritmo?
Algoritmos

● ¿Qué pasos hay que seguir para


diseñar un algoritmo?
Algoritmos

● ¿Qué importancia tiene desarrollar


un buen algoritmo?
Algoritmos

● ¿Qué define un buen algoritmo?


Algoritmos

● ¿Qué rol cumple un lenguaje de


programación?
Ejemplo de algoritmo:
producción textil
¿Qué es C++?
Es un lenguaje de programación:

● Seguro (soporta el encapsulamiento)


● De alto performance
● Amigable, tanto con el “experto”, con
el “aprendiz” y con el “usuario”
Bjarne Stroustrup (2014)
C++ es un lenguaje tipado, esto significa que cada tipo de
entidad, e.g. objeto, valor, nombre y expresión, debe ser
conocida por el compilador en el punto que se use.

El tipo de un objeto determina el conjunto de operaciones aplicables a el. (Stroustrup,


2018)

El ISO C++ estándar define dos tipos de entidades:

● Core language features, tipos de datos, e.g. char, int y bucles (for, while)
● Standard-library components, como contenedores (e.g. vector, map) y
I/O operations, e.g. << y getline()
Estructura de un programa:
Python C++
print("Hola Mundo!\n") #include <iostream>

int main()
{
std::cout << "Hola Mundo!\n";
return 0;
}o

name = input(); #include <iostream>


print("Hola" + name + "!\n") #include <string>

int main()
{
string name;
std::cin >> name;
std::cout << "Hola" << name << "!\n";
return 0;
}o
Estructura de un programa:
#include <iostream> // #include, importa las declaraciones del I/O de la librería

int main()
{
std::cout << "Hola Mundo!\n";
return 0; // retorna el valor "al Sistema Operativo".
// No todos los sistemas operativos utilizan este valor,
// pero el Linux/Unix si lo hace.
}
riables, constantes y instrucciones de entrada y salida de datos.

Todo programa, tiene al menos la función main() y si tuviese más, la ejecución del programa
siempre empieza por la función main().
Estructura de un programa:

Invocación de bibliotecas Biblioteca de input/output

Tipo de dato que retorna #include <iostream>


la función int main() Inicio bloque
{
std::cout << "Hello, World!\n"; Fin de la sentencia
std:: es el conjunto de return 0;
objetos de la biblioteca } Return indica el valor que
estándar. devolverá la función

Fin bloque
Cout, es el objeto output que recibe con el operador “<<” una cadena
"Hello..."
Estructura de un programa, si hay más de una función:

Forma 1 Forma 2
#include <iostream>
#include <iostream>
using namespace std;
using namespace std;
double square(double x);
double square(double x) { return x*x; } A
void print_square(double n);
void print_square(double n) {
B int main() {
cout << "the square of " << n
print_square(1.234);
<< " is " << square(n) << "\n";
// imprime: the square of 1.234 is 1.52276
}
return 0;
}
int main() {
print_square(1.234);
double square(double x) { return x*x; }
// imprime: the square of 1.234 is 1.52276
return 0;
void print_square(double n) {
} B
cout << "the square of " << n
<< " is " << square(x) << "\n";
}
A Declaración o Interface

B Definición o Implementación
Estructura de un programa, si hay más de una función:
library.h
double square(double x);
Forma 2 A void print_square(double n);

#include <iostream> library.cpp


using namespace std;
double square(double x) { return x*x; }
double square(double x);
void print_square(double n); A
void print_square(double n) {
B cout << "the square of " << n
int main() { << " is " << square(x) << "\n";
print_square(1.234); }
// imprime: the square of 1.234 is 1.52276
return 0;
}
main.cpp
#include <iostream>
double square(double x) { return x*x; }
#include "library.h"
using namespace std;
void print_square(double n) {
cout << "the square of " << n B
int main() {
<< " is " << square(x) << "\n";
print_square(1.234);
}
// imprime: the square of 1.234 is 1.52276
return 0;
}
Estructura de un programa, si hay más de una función:
library.h
double square(double x);
A void print_square(double n);

library.cpp library.o
double square(double x) { return x*x; }

void print_square(double n) {
B cout << "the square of " << n
<< " is " << square(x) << "\n";
}

main.cpp
#include <iostream> main.o
#include "library.h"
using namespace std;

int main() {
print_square(1.234);
// imprime: the square of 1.234 is 1.52276
return 0;
}
Proceso de compilación:
C++ es un Lenguaje compilado. Para que un programa se ejecute el código fuente tiene que
ser procesado por un “Compilador”, produciendo archivos objetos, los cuales son enlazados
por un “Linker” produciendo el archivo ejecutable.
Ejemplo 1:

Estructura de un programa en C++


C++

● ¿Qué diferencias encuentra entre C++ y Python?


● ¿Qué importancia tiene la función main()?
● ¿Comó se delimita o define un bloque de instrucciones en C++?
● ¿Por qué tiene que compilarse un programa en C++?
● ¿Qué pasos incluye la compilación?
C++
● ¿Qué diferencias encuentra entre C++ y Python?
○ En C++ toda instrucción de control debe ser definida dentro de
una función en Python no es un requisito.
○ las variables en C++ son fuertemente tipificadas en Python no.
○ C++ es un lenguaje compilado y Python un lenguaje
interpretado.
● ¿Qué importancia tiene la función main()?
Es la función a partir de la cual se ejecuta las instrucciones de un
programa en C++.
C++

● ¿Comó se delimita o define un bloque de instrucciones en C++?


Por medio del símbolo de llaves { bloque de código}
● ¿Por qué tiene que compilarse un programa?
Para genera un archivo que incluye instrucciones binarias que
puedan ser ejecutadas por la computadora.
● ¿Qué pasos incluye la compilación?
Pre-procesamiento, Compilación y Enlace.
Usando namespaces:
#include <iostream> // #include, importa las declaraciones del I/O de la
librería

using namespace std; // hace visible los nombres del std sin utilizar std::

int main()
{
cout << "Hola Mundo!\n";
cout << "CS1102 - Programación Orientada a Objetos!! \n";
cout << "en C S - U T E C \n";
return 0;
}

Los namespaces, es un mecanismo que permite agrupar algunas declaraciones en conjunto y


evitar que sus nombres entren en conflicto con otros nombres similares. (Stroustrup,2018)
Tipos y variables:
Cada nombre y cada
expresión tiene un tipo que
determina las operaciones
que se pueden realizar con
ellos.

Por ejemplo:
inch es una variable
de tipo int,
con valor igual a 5
Tipos de datos innatos (built in):

Tipos de datos fundamentales en C++:

bool // booleano, los valores posibles son true y false


char // character, Ej: ‘a’, ‘z’, ‘9’
int // integer, Ej: -273, 42, 1066
double // double-precision floating-point Ej: -273.15, 3.14, 6.625e-34
unsigned // non-negative integer Ej: 0, 1, 999

Cada tipo se corresponde directamente con las facilidades de hardware y tiene un tamaño que
determina el rango de valores que puede almacenar.
Tipos de datos:

Una variable de tipo char almacena un carácter y en la máquina típicamente utiliza 8 bits o un
byte. El tamaño de los otros tipos son múltiplos del tamaño de un char. El tamaño de un tipo de
dato lo determina la implementación y puede variar en diferentes máquinas. Si se quiere
conocer el tamaño se puede utilizar el operador sizeof.
Por ejemplo:
sizeof(char) es 1
sizeof(int) es 4
Tipos de datos:
Los números pueden ser enteros o de punto flotante.

Los enteros, por default están expresados en base 10 Ej: 42


El prefijo 0b indica un número en base 2 Ej: 0b10101010
El prefijo 0x indica un número en base 16 Ej: 0xBAD1234
El prefijo 0 indica un número en base 8, Ej: 0334

Los de punto flotante pueden ser:


float de simple precisión
double de doble precisión
long double de precisión extendida
Referencia de los tipos de datos en el siguiente link:
https://en.cppreference.com/w/cpp/language/types
Ejemplo 2,3,4:

Tipos, namespaces
Operadores:

aritméticos: de comparación:
x + y // suma
x == y // igualdad
+x // + unario ej: w = +z;
x != y // diferente
x - y // diferencia
x < y // menor
-x // negativo ej: w = -z;
x * y // multiplicación x > y // mayor

x / y // división x <= y // menor igual


x % y // módulo solo x >= y // mayor igual
// para números enteros
Operadores lógicos: Operadores lógicos para manejo de bits
if(a > 10 && a < 50) { // and
instrucción_1;
instrucción_2;
//…;
instrucción_n;
}

if(x ==’A’ || x==’B’) { // or int a = 5, x = 4, y = 5;


instrucción_1; a = x & y; // and para manejo de bits
instrucción_2;
//…; a = x | y; // or para manejo de bits
instrucción_n;
} a = x ^ y; // or exclusivo para manejo de bits

bool esta = false; a = ~x; // complemento


if (!esta) { // not (negación) a = x << y // Shift left (desplazar un bit a la izq)
instrucción_1; a = x >> y // Shift right (desplazar un bit a la der)
instrucción_2;
//…;
instrucción_n;
}

El resultado de evaluar expresiones con estos


operadores es true o false
Más Operadores:
En adición a los operadores aritméticos y lógicos, C++ ofrece operadores específicos para modificar
el tipo de una variable.

x += y; // x = x + y;
++x; // incrementa x = x + 1;
x -= y; // x = x - y;
--x; // x = x - 1;
x *= y; // x = x * y;
x /= y; // x = x / y;
x %= y; // x = x % y; sólo con enteros
Ejemplo 5:

Operadores en C++
Conversiones:
Cuando se utiliza operaciones aritméticas, el C++ realiza conversiones profundas entre tipos de
datos básicos por lo que se pueden utilizar libremente, por ejemplo:

Las conversiones que se usan se


llaman “the usual arithmetic
#include <iostream> conversions”, y las expresiones son
using namespace std; realizadas utilizando operaciones de
int main() { alta precisión. Por ejemplo la suma de
double d=2.2; un double con un int es calculada
int i = 7; utilizando aritmética de punto flotante
de doble precisión.
d = d+i; // d = 9.2
cout << d << "\n"; // imprime 9.2
i = d*i; // i = 9.2*7
cout << i << "\n"; // imprime 64 y no 64.4
return 0;
}
Definición de una variable (inicialización):

Antes de usar un objeto, este debe ser Cuando se define una variable, se puede deducir el tipo
inicializado. por su inicialización:

double d0; auto c = 1234L;


double d1 =2.3; auto b = true; // bool
auto ch = ’x’; // char
double d2 {2.3};
auto i = 123; // int
double d3 = {2.3}; auto d = 1.2; // double
auto z = sqrt(y); // z toma el tipo de sqrt(y)
vector<int> v = {1,2,3,4,5,6}; auto bb {true}; // bool
auto x; // error

El uso de auto es especialmente importante en


programación genérica.
Constantes:
const significa “I promise not to change the constexpr significa “to be a evaluated at
value” compile time”.

const int dmv=17; const int dmv = 17;


constexpr double max1 = 1.4*square(dmv);
Ejemplo 6:

Conversiones (typecasting)
Tipos de Datos, Operaciones, Conversiones y Variables

● ¿Qué importancia tiene los tipos de datos?


● ¿Mencione alguna operación de Python que no exista en C++?
● ¿Mencione alguna operación que exista en C++ y no en Python?
● ¿Qué tipo de dato tiene la siguiente expresión auto x = 10/3.0?
● ¿Qué características definen a una variable?
Tipos de Datos, Operaciones, Conversiones y Variables

● ¿Qué importancia tiene los tipos de datos?


Permite definir el tamaño y las operaciones válidas.
● ¿Mencione alguna operación de Python que no exista en C++?
○ ** = Potencia
○ // = división de enteros
● ¿Mencione alguna operación que exista en C++ y no en Python?
○ ++
○ --
Tipos de Datos, Operaciones, Conversiones y Variables

● ¿Qué tipo de dato tiene la siguiente expresión auto x = 10/3.0?


double.
● ¿Qué características definen a una variable?
○ tipo de dato
○ espacio
○ nombre
○ valor
Precedencia y asociatividad:
Una expresión que tenga dos o más operadores es una expresión compuesta. Evaluar una
expresión compuesta involucra que se agrupen los operandos y los operadores. La precedencia y
asociatividad, determina como los operandos se agrupan para poder evaluar el expresión.

Los operandos de operadores con alto grado de precedencia se agrupan más fuertemente que
que los operandos de operadores con menor grado de precedencia.

Ej: la multiplicación y división tienen el mismo grado de precedencia entre ellos, pero tiene mayor
precedencia que la suma.
Cuando se tiene una expresión compuesta, formada por operadores aritméticos del mismo grado
de precedencia estos se evalúan de izquierda a derecha.
Precedencia y asociatividad:
Ejemplo:

3 + 4*5 es 23 y no 35 por la precedencia de operadores

20 - 15 - 3 es 2 por la asociatividad. Como el - y + tiene el mismo grado


de precedencia, la expresión se evalúa de izq a derecha.
6 + 3*4/2 + 2 es 14 esta expresión equivale a: ((6 + ((3*4)/2)) + 2)
Precedencia

● ¿Qué es la precedencia?
● ¿Como se puede alterar la precedencia de las operaciones?
Precedencia

● ¿Qué es la precedencia?
Es la que define la secuencia o orden en que se ejecutan las
operaciones dentro de una expresión.
● ¿Como se puede alterar la precedencia de las operaciones?
Por medio de los paréntesis.
Ejemplo 7:
El siguiente programa permite hallar el Área y el Volumen de una esfera.

Se han utilizado estas fórmulas:

Área = 4 * 3.1415 * r^2

Volumen = 4/3 * PI * r^3


Solución 2 - funciones.cpp Solución 2 - funciones.h

#include "funciones.h" const double PI = 3.1415;


#include <cmath> //--- se incluye esta using T = double;
librería using Q = double;
//para poder utilizar la función pow T areaDelaEsfera(T r);
T volumenDelaEsfera(T r);
T areaDelaEsfera(T r)
{
return(4 * PI * r * r);
}

T volumenDelaEsfera(T r)
{
return (4.0/3 * PI * pow(r,3));
}
Solución 2 - main.cpp

#include <iostream>
#include "funciones.h"
using namespace std;

int main() {
T radio=0, area=0, volumen=0;
Q z;
cout << "Radio : ";
cin >> radio;
cout << "\n";
cout << "El area es : " << areaDelaEsfera(radio) << "\n";
cout << "El volumen es : " << volumenDelaEsfera(radio) << "\n";
return 0;
}
Ejemplo 8:
En el siguiente programa se desea convertir grados Fahrenheit a grados Celsius.

La fórmula para convertir entre grados de estos dos tipos de escala de


temperaturas es:

C F - 32
----- = -------
5 9

En la solución que se muestra a continuación, hay un error de lógica, podrías


encontrar el error?.
#include <iostream> Corrida número 1:
using namespace std;

double ACelsius(double f)
{
return 5/9 *(f - 32);
} Corrida número 2:
int main()
{
double fahrenheit=0, celsius=0;

cout << "Fahrenheit : ";


cin >> fahrenheit;
cout <<"Grados Celsius " << ACelsius(fahrenheit);
return 0;
}
#include <iostream> Corrida número 1:
using namespace std;
using T = double;

T ACelsius(T f)
{
return 5/9 *(f - 32); Corrida número 2:
}

int main()
{
T fahrenheit=0, celsius=0;

cout << "Fahrenheit : ";


cin >> fahrenheit;
cout <<"Grados Celsius " << ACelsius(fahrenheit);
return 0;
}
Lo aprendido hoy:

1. La estructura del curso Programación II


2. Cómo un algoritmo permite diseñar la solución a un problema
3. La estructura, partes, instrucciones i/o y proceso de
compilación del lenguaje C++
4. Tipos, operaciones, variables y conversiones en C++
Bibliografía:
Deitel. P.J. and Deitel. H. M. (2016) C++ How to Program, Prentice Hall.
Stroustrup, Bjarne (2013). The C++ Programming Language, 4th Addison-Wesley.
Eckel, Bruce, 2000. Thinking in C++, Vol 1: Introduction to Standard C++, 2nd Edition, Prentice Hall
¡Nos vemos en la
siguiente clase!

También podría gustarte