Está en la página 1de 25

Nombre de la materia

PROGRAMACION Y ALGORITMOS

Nombre del alumno


Alexander Perdomo Canizalez
Matrícula
200383374

Nombre de la Tarea
Estrategias para combatir la
inseguridad con base en BIG DATA
Unidad #
6y7

Nombre del Docente


Alcides Arbona Garcia
Fecha
Abril 10 de 2021
Unidad #: Trabajo de aplicación
Programación y algoritmos

Índice
INTRODUCCION......................................................................................................................... 3

PROBLEMAS PLANTEADOS......................................................................................................4

Tablas de multiplicar con for.....................................................................................................4

Potenciación con if, else y for...................................................................................................7

Juego de adivinar número con while.......................................................................................10

Inventario con árboles, switch case y apuntadores.................................................................14

CONCLUSIONES....................................................................................................................... 23

BIBLIOGRAFIA.......................................................................................................................... 25

Pag 2
Unidad #: Trabajo de aplicación
Programación y algoritmos

INTRODUCCION

Es incuestionable la importancia de manejar los conceptos básicos de programación y


algoritmos dentro de la “ciencia de datos”, y aunque no sea necesario tener habilidades
exigentes en este aspecto, sí que se evidencia desde un comienzo que estás habilidades son
utilizadas prácticamente en varias de las actividades de gestión de los datos, tales como
- Extracción de datos
- La limpieza de los datos
- En la organización de estos
- En el diseño de las bases de dato
- En el ajuste de los algoritmos de todo incluyendo los de aprendizaje automático
- La visualización.

Si bien es cierto, hoy en día existen lenguajes populares y utilizados en ciencia de datos tales
como R o Python, las bases que nos ofrecen los lenguajes como C o C++ para el manejo de los
algoritmos y las estructuras básicas de datos nos dan una comprensión y herramientas de
lógica que nos ayudarán de manera complementaria en el ámbito profesional.

Elemento clave como las declaraciones condicionales, los bucles, las funciones, las estructuras
de datos son concepto de vital importancia para entender y aplicar una vez se tienen
interiorizados.

Generalmente será necesario aprender, comprender e implementar algún código o algoritmos


que pueden tener cierto grado de complejidad, por lo que, si no tenemos la capacidad de
comprender la sintaxis de estos, estaremos impactando la calidad de los análisis y seguramente
de los resultados que podamos ofrecer, o incluso para diseñar o implementar un modelo
deseado.
Igualmente, al no tener las habilidades adecuadas en programación y algoritmos existe
entonces el riesgo de no entender los pasos de un proceso y no lograr los objetivos o
resultados esperados.

Pag 3
Unidad #: Trabajo de aplicación
Programación y algoritmos

Mediante el presente trabajo de aplicación evidenciaremos la aplicación de los principales


conceptos vistos en la materia, mediante problemas plateados, a los cuales se les diseña su
solución mediante diagrama de flujo para luego proceder a su implementación en C++.

PROBLEMAS PLANTEADOS

Tablas de multiplicar con for

Imprimir en pantalla la tabla de multiplicar del número que ingrese el usuario hasta el 10, por
ejemplo, si el usuario teclea el número 15, se debe presentar: 15 * 1 = 15 15 * 2 = 30 15 * 3 =
45 15 * 4 = 60 15 * 5 = 75 15 * 6 = 90 15 * 7 = 105 15 * 8 = 120 15 * 9 = 135 15 * 10 = 150 El
proceso para desarrollar la tabla de multiplicar debe ser utilizando algunos de las funciones de
repetición (for, while o do while)

 Algoritmo: Planteado a nivel se pseudocódigo

Algoritmo tablaMultiplicar
numero <- 0 // Defino una variable que almacenará el número a multiplicar
resultado <- 1 // Defino una variable que almacenará el resultado
Escribir ' Escribir el número a multiplicar'
Leer numero
Para i<-1 Hasta 10 Con Paso PASO Hacer // Este es el ciclo principal
resultado <- numero*i // La operación a realizar
Escribir numero,' X ',i,' Es igual a : ',resultado
i <- i+1
FinPara
FinAlgoritmo

Pag 4
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Diagrama de flujo

 Código C++
#include <iostream>

using namespace std;

int main(int argc, char** argv) {


float i;
float numero;
float paso;
float resultado;

Pag 5
Unidad #: Trabajo de aplicación
Programación y algoritmos

numero = 0;
resultado = 1;
cout << " Escribir el número a multiplicar" << endl;
cin >> numero;
for (i=1;i<=10;i+=paso) {
resultado = numero*i;
cout << numero << " X " << i << " Es igual a : " << resultado << endl;
i = i+1;
}
return 0;
}
 Pantalla de ejecución

Pag 6
Unidad #: Trabajo de aplicación
Programación y algoritmos

Potenciación con if, else y for

Elevar un numero a una potencia determinada, por ejemplo, 5 elevado a la cuarta potencia es
igual a: 5*5*5*5 = 625. Debes utilizar una función iterativa, recursiva o ambas en este programa.
 Algoritmo planteado a nivel de Pseudocódigo
Algoritmo potenciaDeNumero
base <- 0 // Defino variable que almacenará la base
exponente <- 0 // Defino variable que almacena el exponente
resultado <- 1
Escribir 'Indicar la base ..:'
Leer base
Escribir 'Indicar el exponente .. :'
Leer exponente
Si exponente=0 Entonces
resultado <- 1
SiNo
Si exponente=1 Entonces
resultado <- base
SiNo
Para i<-1 Hasta exponente Con Paso PASO Hacer
resultado <- resultado*base
i <- i+1
FinPara
FinSi
FinSi
Escribir 'La potencia del numero [',base,'] elevado a la [',exponente,'] es : ',resultado
FinAlgoritmo

Pag 7
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Diagrama de flujo

 Código C++
#include<iostream>
using namespace std;
int main(int argc, char** argv) {
float base;
float exponente;
float i;
float paso;
float resultado;
base = 0;
exponente = 0;
resultado = 1;
cout << "Indicar la base ..:" << endl;
cin >> base;
Pag 8
Unidad #: Trabajo de aplicación
Programación y algoritmos

cout << "Indicar el exponente .. :" << endl;


cin >> exponente;
if (exponente==0) {
resultado = 1;
} else {
if (exponente==1) {
resultado = base;
} else {
for (i=1;i<=exponente;i+=paso) {
resultado = resultado*base;
i = i+1;
}}}
cout << "La potencia del numero [" << base << "] elevado a la [" << exponente << "] es :
" << resultado << endl;
return 0;
return 0;
}
 Pantalla de ejecución

Pag 9
Unidad #: Trabajo de aplicación
Programación y algoritmos

Juego de adivinar número con while

Un juego en el que se genera un número al azar entre el 1 y el 100 y el usuario trate de


adivinarlo con 5 intentos como máximo. En este programa debes darle pistas al usuario de la
siguiente manera: si el número que ingresó es menor al que se generó al azar, debes enviar un
mensaje que diga “más arriba”, si el número ingresado es mayor al generado al azar, el
mensaje debe decir “más abajo”.
 Algoritmo planteado a nivel de pseudocódigo
Algoritmo adivinarNumero
numeroAzar <- trunc(Aleatorio(1,100)) // llamo a una función que genera un número
aleatorio
contador <- 1 // Defino un contador
intentos <- 5 // Defino el número de intentos máximos
resultado <- false //Defino una variable booleana para revisar el resultado
numeroUsuario <- 0
Escribir 'Adivinar un numero generado en 5 intentos'
Escribir numeroAzar
Mientras contador<=intentos Hacer
Escribir 'Digitar el numero generado Intento numero [',contador,']'
Leer numeroUsuario
Si numeroUsuario=numeroAzar Entonces
Escribir 'HAZ ADIVINADO!!! FELICITACIONES'
resultado <- true
contador <- 5
SiNo
Si numeroUsuario<numeroAzar Entonces
Escribir 'Mas arriba !!'
SiNo
Escribir 'Mas abajo!!'
FinSi
FinSi

Pag 10
Unidad #: Trabajo de aplicación
Programación y algoritmos

contador <- contador+1


FinMientras
Si resultado=false Entonces
Escribir ' Es una lastima que fallaste !! :-( '
Escribir ' El numero era [',numeroAzar,']'
FinSi
FinAlgoritmo
 Diagrama de flujo

Pag 11
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Código C++
#include <iostream>
#include<cmath>
#include<cstdlib>
using namespace std;

#define SIN_TIPO string

/* run this program using the console pauser or add your own getch, system("pause") or input
loop */

int main(int argc, char** argv) {


int contador = 1;
int intentos = 5;
int numeroazar = int((1+rand()%100));;
int numerousuario = 0;
bool resultado = true;
cout << "Adivinar un numero generado en 5 intentos" << endl;
cout << numeroazar << endl;
while (contador<=intentos) {
cout << "Digitar el numero generado Intento numero [" << contador << "]" << endl;
cin >> numerousuario;
if (numerousuario==numeroazar) {
cout << "HAZ ADIVINADO!!! FELICITACIONES" << endl;
resultado = true;
break;
} else {
if (numerousuario<numeroazar) {
cout << "Mas arriba !!" << endl;
} else {
cout << "Mas abajo!!" << endl;
}
}
contador = contador+1;
}
if (resultado==false) {
cout << " Es una lastima que fallaste !! :-( " << endl;
cout << " El numero era [" << numeroazar << "]" << endl;
}
return 0;
}

Pag 12
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Pantalla de ejecución

Pag 13
Unidad #: Trabajo de aplicación
Programación y algoritmos

Inventario con árboles, switch case y apuntadores

Una tienda de ropa está realizando un inventario del almacén y los datos que requiere son el id
del artículo y la cantidad existente. Utiliza un árbol binario para ingresar a una estructura
dinámica el id del artículo y la cantidad. La salida que debe generar el programa es: Id del
artículo 1, cantidad Id del artículo 2, cantidad Id del artículo 3, cantidad La cantidad de artículos
ingresados puede o no ser solicitados al usuario y la manera de ingresar los datos al árbol
binario puede ser directa en el código o solicitada al usuario.
 Algoritmo a nivel de pseudocódigo
// Esta es una función predefinida que me permite recorrer el árbol es imprimirlo
Funcion printTree (node)
Escribir 'Imprime el arbol'
FinFuncion
// Función predefinida para adicionar un nodo
Funcion resp <- addNode (id,qtyInput,node)
Escribir 'Adiciona el nodo'
FinFuncion
// Algoritmo principal
Algoritmo gestionArbolBinario
resp <- falso
option <- 0
idTemp <- 0
qtyTemp <- 0
tree <- null
Repetir
Escribir ' GESTION DE ARBOLES BINARIOS (0 - Para salir)'
Escribir ' Ingreso de inventario'
Escribir ' 1. Ingresar producto y cantidad '
Escribir ' 2. Imprimir inventario '
Leer option
Segun option Hacer

Pag 14
Unidad #: Trabajo de aplicación
Programación y algoritmos

opcion_1:
Escribir 'Ingrese el id del producto'
Leer idTemp
Escribir 'Ingrese la cantidad en existencia'
Leer qtyTemp
resp <- addNode(idTemp,qtyTemp,tree)
Si resp=false Entonces
Escribir 'Ese producto ya fue ingresado'
SiNo
Escribir 'Producto ingresado correctamente'
FinSi
opcion_2:
printTree(tree)
De Otro Modo:
Escribir 'Opción incorrecta'
FinSegun
Hasta Que option<>0
Escribir 'lista final de inventario'
printTree(tree)
FinAlgoritmo

Pag 15
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Diagrama de flujo

Pag 16
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Código C++

#include <iostream>
#include <random>
#include <stdio.h>
#include <conio.h>

using namespace std;

// Definicion de la estructura de cada nodo del arbol

struct bstNode {
int idProduct;
int qty;
struct bstNode *left; // Apuntador hacia la izquierda
struct bstNode *right; // Apuntador hacia la derecha
};
// Un Nodo actual por defe

typedef struct bstNode *node; // Es como un alias a la estructura o nombre alternativo

// Función o procedimiento para crear o adicionar un nuevo nodo

// Recibe el id de producto, la cantidad y la raiz del arbol en el que vamos a insertar


// Se recibe la raiz por referencia para que los cambios que le afecten se vean reflejados en
el arbol que utilizaremos
// Retorno un booleano para saber si fué exitoso el proceso de inserción
bool addNode(int id, int qtyInput, node &root)
{
bool answer = false;

Pag 17
Unidad #: Trabajo de aplicación
Programación y algoritmos

if (root == NULL){
node newNode = new(struct bstNode); // Creamos un nuevo nodo de tipo node
newNode->idProduct = id; // Almacenamos el id del producto
newNode->qty = qtyInput; // Almacenamos la cantidad
newNode->left = NULL; // Por defecto el lno izquier es Nulo
newNode->right = NULL; // Por defecto el nodo derecho es Nulo
root = newNode;
answer = true;

}else{
if (id < root->idProduct){ // En este caso comparo el ID porque voy a ordenar por
ID y comparo si es menor ai Id de la raiz
addNode(id,qtyInput,root->left);
}else if(id>root->idProduct){
addNode(id,qtyInput,root->right);
} else{
answer = false; // Significa que llegó a un id repetido
}
}
return answer;
}
// Imprimir el arbol en Orden del ID de producto
void printTree(node root){

if (root != NULL){
printTree(root->left); // Primero buscamos el nodo izquierdo
cout <<"ID: "<<root->idProduct<<","<<"Existencia: "<< root->qty<<endl; // Se
imprime la raiz
printTree(root->right); // Luego buscamos el derecho
}

}
Pag 18
Unidad #: Trabajo de aplicación
Programación y algoritmos

int main(int argc, char** argv) {


// Se declaran las variables que trabajaremos en el prgrama principal
bool resp = false;
int option;
int idTemp;
int qtyTemp;
node tree = NULL; // Comenzamos creando un nodo inicial o arbol y lo inicializamos en
nulo

// Se define un menú para el usuario


do{
cout << " GESTION DE ARBOLES BINARIOS"<< endl;
cout << " Ingreso de inventario"<< endl;
cout << " 1. Ingresar producto y cantidad " <<endl;
cout << " 2. Imprimir inventario " <<endl;
cout << " 3. Salir.. " <<endl;
cin>>option;

switch (option){
case 1: // Se adicionarán nodos de inventario
do{
cout << "Ingrese el id del producto (0 - Para Salir)" << endl;

cin >> idTemp;


if (idTemp !=0){

cout << "Ingrese la cantidad en existencia"


<< endl;
cin >> qtyTemp;
resp = addNode(idTemp,qtyTemp,tree);// Se
llama al procedimiento que adiciona un nodo
Pag 19
Unidad #: Trabajo de aplicación
Programación y algoritmos

if (resp==false){ // So la respuesta es false


entonces el producto ya existía en el arbol
cout << "Ese producto ya fue
ingresado" <<endl;
}else{
cout <<"Producto ingresado
correctamente" << endl;
}
}
}while(idTemp != 0);
cout << "Termina de insertar productos ( )" << endl;
system("pause");
system("cls"); // Llamo a una función del sistema operativo
para limpiar la pantalla
break;
case 2: // Llamo al procedimiento que imprime el arbol
cout << "Listado de Inventario por orden de ID" << endl;
printTree(tree);
system("pause");
system("cls");
break;
case 3:
break;
default:
cout << "Opción incorrecta" << endl;
}
} while (option != 3);
cout << "lista final de inventario" << endl;
printTree(tree);
getch();
return 0;
}
Pag 20
Unidad #: Trabajo de aplicación
Programación y algoritmos

 Pantallas de ejecución
Muestra un menú

Ingresando productos

Opción que imprime el inventario ordenado por código

Pag 21
Unidad #: Trabajo de aplicación
Programación y algoritmos

Validando que el producto a ingresar ya no exista

Al salir imprime la lista final de inventario

Pag 22
Unidad #: Trabajo de aplicación
Programación y algoritmos

CONCLUSIONES
A partir de lo visto durante este ciclo y de la participación en los foros, mis conclusiones son:

Los algoritmos se han convertido en una herramienta muy importante, no solo pata programar,
sino también para mejorar nuestra capacidad de análisis y diseño de soluciones a problemas de
cualquier tipo.

Los modelos y teorías que conforman los paradigmas y en los que nos basamos para dar
solución a determinados problemas, son importantes dado que son regularmente el resultado
de prácticas más utilizadas en áreas del conocimiento.

Considero que el entendimiento adecuado de un determinado paradigma, igualmente nos da la


capacidad de cuestionarlo, adaptarlo o incluso cambiarlo, y cuando esto sucede, se da el
reemplazo al anteriormente vigente por un Nuevo Paradigma que incluye los conceptos que se
han refutado o modificado al anterior y luego tomándose nuevamente como válido hasta que
otro modelo se encargue de refutarlo.

Es innegable la importancia de los condicionales y ciclos para la programación.

Estos se orientan en controlar la ejecución de los pasos de los algoritmos, con lo cual los
programas pueden tomar decisiones. Estas decisiones se construyen por medio de las
Estructuras selectivas, en las que se define un conjunto de alternativas de flujo, y de las cuales
solo se podrá elegir una, realizando a evaluación de una o más condiciones.

Luego procederemos con la ejecución del algoritmo. Todas las alternativas finalizan en un paso
común, y posteriormente continuaremos el programa de manera secuencial.

Las estructuras condicionales nos permiten plantear la solución o las soluciones a un problema,
buscando considerar los distintos casos o escenarios que se pueden presentar. De esta
manera, podemos utilizar un algoritmo distinto para enfrentar cada caso que pueda existir en la
problemática analizada.

Pag 23
Unidad #: Trabajo de aplicación
Programación y algoritmos

Las funciones son extremadamente importantes en el desarrollo de software y conllevan


muchas ventajas.

Son también conocidas particularmente como "procedimientos" cuando estas no retornan un


resultado o también como métodos en la programación orientada a objetos.

Las diferentes estructuras de datos y algoritmos de ordenamiento son extremadamente


importantes para el desarrollo de funcionalidades que nos permitan manipular datos, elemento
que será importante considerar como parte de las soluciones a implementar en nuestro rol de
científicos de datos.

Las operaciones como algoritmos de ordenamiento y otras como comparaciones a nivel de


estructuras en memoria mencionadas pueden por tanto ejecutarse del lado del cliente y así
optimizar también los canales de comunicación y dar mejor experiencia de respuesta a los
usuarios.

Si se quieren validar por ejemplo reglas del negocio en un formulario ingresado por un usuario,
es muy práctico hacerlo con arreglos porque lo que hacemos es traer los datos desde un
archivo físico y, una vez disponible la información en un arreglo una lista será mucho más fácil y
rápido trabajar sobre este.

Los grafos son estructuras muy importantes en las que podemos almacenar grandes volúmenes
de datos e información y adicionalmente permiten entender las relaciones entre estos.

Los grafos están compuestos por nodos en los que podemos encontrar diferentes tipos de
datos y estos pueden estar relacionados o conectados de diferentes maneras o por diferentes
aristas.

Con el apoyo de herramientas y algoritmos, podemos entender gráficamente y de mejor manera


los datos a fin de tomar decisiones optimas y mejores y esto hace que tengan especial
relevancia para nosotros como profesionales en "CIENCIA DE DATOS” para tener un
diagnóstico adecuado, análisis acertado y de calidad de estos.
Pag 24
Unidad #: Trabajo de aplicación
Programación y algoritmos

BIBLIOGRAFIA
Pendiente

Pag 25

También podría gustarte