CursoLenguajeProgramacion 0610
CursoLenguajeProgramacion 0610
Objetivo General:
Emplear las diferentes herramientas de estructura de programación para resolver problemas de sistematización de
procesos.
1.3 Apuntadores:
Introducción.
Declaración sintáctica de un puntero.
Apuntadores y funciones.
Expresiones y aritmética.
Método de ordenamiento.
INTRODUCCIÓN
Una computadora está constituida por dos partes fundamentales: Una parte tangible (hardware)
formada por circuitos integrados, cables, monitores, teclados, etc., y los programas, o el conjunto de
instrucciones que controlan y coordinan los componentes del hardware. El proceso de creación de
un software o programa es llamado programación y es realizado por programadores
(b) Software de aplicaciones: Son programas escritos para ejecutar tareas específicas, por ejemplo:
Word, Excel, Calibre (gestión de libros), VLC (reproductor multimedia)
Algoritmos
Un algoritmo se puede definir como una secuencia instrucciones precisas, definidas y finitas que
produce un resultado en un tiempo finito. Es utilizado para resolver un problema mediante la
computadora. El algoritmo no debe confundirse con el programa, este último contiene las
instrucciones para la resolución del problema escritas en un lenguaje de programación.
Ejemplos:
Las instrucciones para descomponer un número en factores primos.
Ordenar una lista de números
Sumar polinomios
Tipos de Lenguajes:
En este ejemplo de lenguaje de máquina se imprime 100 veces en pantalla la letra “A”
169 1 160 0 153 0 128 153 0 129 153 130 153 0 131 200 208 241 96
Lenguajes de bajo nivel o ensambladores: Las instrucciones son escritas como abreviaturas en
inglés llamadas nemotécnicos por ejemplo: Mov, Add, Sub, End. Se requiere un traductor para
llevarlo a lenguaje de máquina, a este traductor se le llama Ensamblador. Algunos ejemplos de
lenguaje ensamblador: TASM (Turbo Assembler de Borland), MASM (Microsoft Macro
Assembler), NASM (Netwide Assembler - Libre). El ensamblador era el lenguaje principal para los
sistemas de videojuegos antiguos, como Sega, Atari 2600 y NES.
Lenguajes de alto nivel: Son lenguajes más comprensibles por los humanos, diseñados para que
las personas tengan una mayor compresión. Además, los lenguajes de programación de alto nivel
son independientes de las máquinas.
Algunas ventajas:
Tiempo de aprendizaje corto comparado con los otros lenguajes
Depuración más sencilla
Mayor portabilidad
Algunas desventajas:
Mayor tiempo de ejecución
Ocupa más memoria
Los lenguajes de alto nivel necesitan de un traductor que los convierte a lenguaje de máquina, este
traductor puede ser un compilador o un intérprete.
Los lenguajes compilados utilizan un programa llamado compilador para la traducción del código
fuente a lenguaje de máquina; el resultado es un código objeto entendible por la computadora
llamado archivo ejecutable. Ejemplos de lenguajes compilados: Fortran, C, C++, Go, Rust.
1. Descargar e instalar el compilador MinGW una vez descargado iniciar la instalación; luego
de lo cual se abrirá una ventana Installer Manager y se seleccionan los paquetes básicos.
2. Una vez instalado se agrega la ruta a la variable de entorno del sistema Path; para ello se
busca en el inicio la palabra “variables” y se agrega la ruta C:\MinGW\bin
(IMPORTANTE: NO MODIFICAR NADA SOLO AGREGAR UNA NUEVA
LÍNEA)
3. Descargar e instalar cualquiera de los siguientes editores de código: Notepad++, Sublime
Text, Atom, Visual Studio Code.
4. Crear una carpeta en lugar y el nombre deseado. Luego se escribe el código del programa
en C/C++ y se guarda en la carpeta creada.
5. Abrir un terminal o consola de sistema de Windows, ir a menú inicio, escribir cmd
(símbolo de sistema).
6. Moverse hasta el directorio donde se encuentra el código fuente escribiendo, por ejemplo,
cd C:\Curso_Programacion\Codigo
7. Compilar escribiendo en el terminal escribiendo g++ nombre_cod.cpp -o salida_cod.exe
8. Finalmente, para ejecutar el programa escriba salida_cod.exe
// Impresión en pantallas de
// varias instrucciones
#include <iostream>
int main()
{
std::cout << "Bienvenidos al curso:\n";
std::cout << "Lenguajes de Programacion I";
return 0;
}
Figura 4. Código fuente un programa simple en C++
1.
// Impresión en pantallas de
// varias instrucciones
Estas líneas representan comentarios utilizados para documentar el programa, en C++ los
comentarios comienzan con “//” (doble barra o slash), también se puede usar “/*” para comenzar y
“*/” para terminar un comentario que ocupe varias líneas.
2.
#include <iostream>
3.
int main()
{
std::cout << "Bienvenidos al curso:\n";
std::cout << "Lenguaje de Programacion I";
return 0;
}
La expresión main() es la función principal, todo programa en C++ debe contener una función
main. La palabra int, indica el tipo de valor devuelto por la función, en este caso es un entero. En la
siguiente línea se presenta el bloque de instrucciones o sentencias que se ejecutan encerradas entre
llaves.
4
std::cout << "Bienvenidos al curso:\n";
Las llaves encierran el cuerpo de la función el cual contiene las instrucciones que se ejecutarán. La
expresión std:cout indica que se usará la función cout de la biblioteca estándar, esta instrucción
junto con “<<” imprime el texto “Bienvenidos al curso:\n”, en pantalla. La expresión ‘\n’ se
llama secuencia de escape e indica que se debe crear una nueva línea. La instrucción termina con
punto y coma “;”
Finalmente, la palabra clave return se utiliza para salir de la función en este caso la función retorna
el valor “0”.
Tipos de datos:
C++ es un lenguaje de programación fuertemente tipado, esto quiere decir que las variables que se
utilicen deben ser, es decir, hay que indicar el nombre y el tipo de variable declaradas antes de ser
utilizadas. Los tipos de datos fundamentales en C++ son los siguientes:
Booleanos: Representa dos valores: Verdadero: true (1) o Falso: false (0)
Char: Representa un carácter o también un entero
Numéricos: Dentro de los datos numéricos se tienen varios tipos
▪ Enteros: short, long, long long
▪ Números en coma flotante: float, double, long double
Estos datos ocupan un determinado tamaño en memoria, en la tabla 1 se muestra el número de bits
(8 bits = 1 byte) y el rango de valores que comprende cada tipo de dato. En el caso de los números
decimales se muestra el valor más pequeño y el más grande que se puede representar. La mayoría de
las veces, para los datos de tipo entero se puede usar el tipo de dato int que incluye los datos tipo
short y long.
Operadores:
Los operadores son signos que representan operaciones básicas entre datos. En C++ lo operadores
pueden ser de varios tipos:
Operadores aritméticos
Suma (+)
Resta (-)
Multiplicación (*)
División (/)
División entera (%) representa el resto de la división; ejemplo
8%4 devuelve 0 (el resto de la división); 8%3 devuelve 2
Operadores de relación:
Comparan expresiones y devuelven 1 (True) o 0 (False)
Menor que <
Mayor que >
Menor o igual que <=
Mayor o igual que >=
Idéntico a ==
Diferente a !=
Operadores Lógicos
And (y lógico) &&
Or (o lógico) | |
Not (negación) !
Operadores de asignación
Igual (=): x=10 asigna el valor de 10 a la variable x
Más igual (+=): x+=5 equivale a x=x+5
Menos igual (- =): x- =3 equivale a x=x-3
Por igual (*=): x*=2 equivale a x=x*2
Dividido igual (/=): x/=5 equivale a x=x/5
Operadores de incremento o decremento
Incremento ++: x++ equivale a la expresión x+=1 es decir incrementa en 1 el valor de la
variable
Decremento - - : x-- equivale a la expresión x-=1, es decir disminuye en 1 el valor de la
variablesSi un operador de incremento ++ (o decremento - -) se coloca antes de una variable
p. ej. ++x, se le llama preincremento (o predecremento), esto ocasiona que la variable se
incremente en 1 (o disminuya en 1) y después el nuevo valor de la variable se utiliza.
Ejercicio de programación
El siguiente programa muestra el uso de los operadores ++ para preincrementar y postincrementar
la variable c.
int main()
{
int c; // declara la variable
// demuestra el posincremento
c = 5; // asigna 5 a c
cout << "Posincremento muestra el valor de c y luego incrementa en 1" << endl;
cout << " c : " << c << endl; // despliega 5
cout << "c++ : " << c++ << endl; // despliega 5 y después posincrementa
cout << " c : " << c << endl << endl; // despliega 6
// demuestra el preincremento
c = 5; // asigna 5 a c
cout << "Preincremento incrementa en 1 el valor de c y luego muestra el valor
incrementado" << endl;
cout << " c : " << c << endl; // despliega 5
cout << "++c : " << ++c << endl; // preincrementa y después despliega 6
cout << " c : " << c << endl; // despliega 6
return 0;
}
Figura 5. Ejercicio de programación, demuestra el uso de los operadores de preincremento y
postincremento
Estructuras de Control en C++
Las estructuras de control controlan la secuencia de ejecución de un conjunto de instrucciones o de
instrucciones individuales en un bloque o unidad, se dividen en tres tipos:
Estructuras de secuencia
Estructuras de selección: if, if/else, switch
Estructuras de repetición: while, do while, for
Estructuras de secuencia:
El conjunto de instrucciones o sentencias que se van ejecutando en orden una a continuación de la
otra.
{
Instruccion1
Instrucción 2
Instrucción 3
…
}
Estructuras de selección if, if/else, if / else if /else: Ejecuta una instrucción si se cumple cierta
condición, la sintaxis es la siguiente
if
if (condicion)
instrucción;
if (condición) {
instruccion1;
instruccion2;
instruccion3;
}
if/else
if (condición1)
instruccion1;
else
instruccion2;
if/else if/else
if (condición1)
instruccion1;
else if (condicion2)
instruccion2;
else if (condicion3)
instruccion3;
else
instruccion4;
Ejemplo1: Uso de if
int calificacion;
cout <<"Ingrese la calificación del estudiante";
cint >> calificación;
if (calificacion>=10)
cout<< "El estudiante aprobó la materia";
if/else: Ejecuta una instrucción si se cumple la condición si no se cumple ejecuta otra instrucción
if (calificaion>=10)
cout<< "El estudiante aprobó la materia";
else
cout << "El estudiante reprobó";
int calificacion;
if (calificacion==20)
cout<< " Superior \n";
else if (calificacion >= 18)
cout << "Excelente \n";
else if (calificacion >= 16)
cout << "Muy bueno \n";
else if (calificacion >= 14)
cout << " Bueno \n";
else if (calificacion >= 10)
cout << "Puedes mejorar \n";
else
cout << "Reprobado \n ";
return 0;
}
Estructura de selección switch
Permite seleccionar una instrucción entre múltiples alternativas de acuerdo al valor de la variable
que puede ser del tipo char o int. La sintaxis del condicional switch es la siguiente:
switch (opción)
{
case valor1:
Instrucion1;
break;
case valor2:
Instrucion2;
break;
case valor3:
Instrucion3;
break;
default:
Instrucion4;
El siguiente ejemplo pide introducir un número entero entre 1 y 7, dependiendo del número entero
la salida será la impresión en pantalla del día correspondiente.
Ejemplo uso de switch
#include <iostream>
using namespace std;
int main() {
int diasemana;
switch (diasemana)
{
case 1:
cout<<"Lunes\n";
break;
case 2:
cout<<"Martes\n";
break;
case 3:
cout<<"Miercoles\n";
break;
case 4:
cout<<"Jueves\n";
break;
case 5:
cout<<"Viernes\n";
break;
case 6:
cout<<"Sabado\n";
break;
case 7:
cout<<"Domingo\n";
break;
default:
cout << "No corresponde a ningun dia de la semana";
break;
}
return 0;
}
Estructuras de repetición:
También llamados ciclos o bucles permiten repetir una acción mientras cierta condición sea
verdadera, En C++ existen 3 estructuras de este tipo
while
do/ while
for
Estructura de repetición while: El bucle o ciclo while repite una instrucción o serie de
instrucciones hasta que se satisface una condición, esta condición es una expresión lógica.
int main(){
int suma=0;
while (suma<=100){
cout<< "La suma es : "<< suma << endl;
suma+=10;
}
}
Estructura de repetición do/while: El bucle o ciclo do/while es semejante al ciclo while, ambas
estructuras repiten una instrucción (o serie de instrucciones) hasta que se satisface una condición;
la diferencia es que la evaluación de la condición se hace después que la instrucción se ejecuta, lo
que le permite ejecutarse al menos una vez.
do
instrucción;
while (condición);
do {
instrucción;
instrucción;
instrucción;
…
} while (condición);
Ejemplo uso de la estructura do/while, compare las dos estructuras inicializando la variable suma
con un valor superior a 100
// Uso de estructura do/while
#include <iostream>
int main(){
int suma=0;
do {
cout<< "La suma es : "<< suma << endl;
suma+=10;
} while (suma<=100);
return 0;
}
Estructura de repetición for: Es un tipo de estructura controlada por un contador, la sintaxis
incluye tres expresiones que indican: el valor inicial del contador, otra que indica si se continúa o
no y la tercera que permite que el contador se modifique.
Ejemplo de ciclo for, muestra en pantalla el valor que va tomando el contador y luego el valor
multiplicado por 2
int main(){
Datos Simples: Ocupan una casilla o celda en memoria: enteros (integer), reales (real), carácter
(char), lógico (boolean)
Datos estructurados: Son datos en los que con un nombre o identificador se hace referencia a un
grupo de celdas o casilla en memoria, ejemplos de datos estructurados Arreglos (arrays), cadenas de
caracteres (strings), listas enlazadas, pilas, colas, árboles, grafos.
FUNCIONES Y PROCEDIMIENTOS
Una función es un conjunto de procedimientos encapsulados en un bloque o módulo, estas
instrucciones se utilizan para resolver problemas específicos. En C++ todo programa consta de una
o más funciones y una de ellas se debe llamar main. Las funciones pueden recibir o no parámetros y
retornar un valor, en caso de que la función no retorne valores se denomina procedimiento o no.
Funciones definidas por el usuario: Creadas por el usuario para resolver problemas específicos la
sintaxis es la siguientes
Para definir una función en C++ se utiliza la siguiente sintaxis
<bloque de instrucciones>;
return valor;
}
Figura 6. Sintaxis para declarar una función en C++
double mayor=x;
if (y > x)
mayor = y;
if (z > mayor)
mayor = z;
return mayor;
}
if (n==0){
cout << "El valor de n es 0";
return 0;
}
Llamadas de la función
La llamada o invocación de una función se realiza desde cualquier parte del código y para ello se
escribe el nombre de la función y los valores de los parámetros. Por ejemplo:
Parámetros y argumentos:
Parámetros: representan las variables dentro de los paréntesis en la definición de la función mientras
que los argumentos son los valores que se envían a la función cuando esta es llamada.
Funciones recursivas:
Una función recursiva es una función que se llama así misma de forma repetida hasta que se
satisface una condición, esta función solo resuelve casos bases, si la función se le llama en el caso
base la función devuelve un resultado, en un caso más complicado la función replantea el caso más
complicado en un caso más sencillo y se vuelve a llamar a la función para resolver este caso menos
complicado, este proceso es realizado de manera recursiva hasta que la función alcance el caso
base. En el siguiente código se muestra como resolver de manera recursiva el factorial de un
número n.
n! = n*(n-1)*(n-2)*(n-3)* …*2*1
por ejemplo
7=7*6*5*4*3*2*1.
#include <iostream>
double factorial(int);
double factorial(int n) {
double fact=1;
if (n==1 || n==0 )
fact=1;
else
fact=n*factorial(n-1);
return fact;
}
Escribir la función factorial de manera que imprima en pantalla los factores que se multiplican y el
resultado, por ejemplo
Factorial(5)
Imprime en pantalla
5*4*3*2*1=120
Bibliografía principal
Bibliografía complementaria
Pereira, Rui & Couto, Marco & Ribeiro, Francisco & Rua, Rui & Cunha, Jácome &
Fernandes, João & Saraiva, João. (2017). Energy efficiency across programming
languages: how do energy, time, and memory relate? 256-267.
Doi: 10.1145/3136014.3136031.
Wikilibros: Programación en C++ [consulta: septiembre 2022]. Disponible en
<https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B>
Curso de Programación en C++ Píldoras Informativas (YouTube)
https://www.youtube.com/watch?v=EaTeni7YCyM&list=PLU8oAlHdN5BmoxxnllWdZfRc
ffMPCNck5&index=1