Está en la página 1de 21

ANALISIS Y DESARROLLO DE SISTEMAS DE SOFTWARE

RESOLUCIÓN A PROBLEMAS ALGORÍTMICOS APLICANDO ESTRUCTURAS DE ALMACENAMIENTO


GA3-220501093-AA3-EV02.

PRESENTADO A
INSTRUCTORA ADRIANA PILAR GUZMAN

RENZO RODRIGUEZ PALACIOS


FICHA: 2721466

SENA Centro de Industria y de la Construcción


BOGOTA D.C
SEPTIEMBRE 2023
Tabla de contenido

Introducción..……………………………………………………………………… 3
Objetivo……………………………………………………………………………. 3
Propósito ...................................................................................................... 3
Ejercicios…………........................................................................................ 4
Solución ejercicios………….......................................................................... 5
Conclusiones……………………………………………………………..………. 25
Referencias…………………………………………………………..…………… 25

2
INTRODUCCION

En este trabajo, se abordan cuatro problemas que requieren la aplicación de JavaScript y


estructuras de control, lo que demuestra la capacidad de programación para resolver
problemas diversos. Estos problemas representan situaciones del mundo real, desde cálculos
matemáticos hasta la gestión de datos personales. Para el cálculo de áreas y perímetros de
figuras planas, se aplican fórmulas matemáticas y estructuras de decisión. En el análisis de
edades, se emplea validación de datos y cálculos estadísticos para obtener información
relevante sobre el grupo de personas. La mezcla de vectores ordenados implica algoritmos de
manipulación de datos y verificación de orden. Finalmente, el registro de preferencias
musicales muestra cómo gestionar datos personales y crear un sistema interactivo para
almacenar información sobre entrevistados. Este documento proporciona soluciones detalladas
para cada problema, destacando la efectividad de JavaScript y las estructuras de control en la
resolución de desafíos prácticos, lo que refleja habilidades valiosas en programación y
resolución de problemas.

3
Objetivo

Poner en práctica las habilidades y conocimientos adquiridos en el componente formativo a


través de la resolución de problemas concretos en JavaScript, demostrando la capacidad para
programar, analizar datos y generar soluciones efectivas y eficientes.

Propósito

Evaluar y demostrar las habilidades, competencias y conocimientos del estudiante en


programación, resolución de problemas y documentación, todo ello aplicado al contexto del
lenguaje JavaScript y las estructuras de control.

Actividad:

En esta actividad deberá aplicar todos los conocimientos adquiridos a lo largo del componente
formativo para dar solución a problemas, utilizando todas las estructuras de control requeridas
y el lenguaje JavaScript.

Problemas propuestos:

Utilizando el lenguaje JavaScript desarrollar un programa que dé solución a los siguientes


problemas:
Problema 1: Desarrollar un programa que permita calcular el área o perímetro de algunas
figuras planas según la siguiente tabla:

4
Problema 2: Desarrollar un programa que permita almacenar las edades de un grupo de 10
personas en un vector de enteros y luego determine la cantidad de personas que son menores
de edad, mayores de edad, cuántos adultos mayores, la edad más baja, la edad más alta y el
promedio de edades ingresadas. Para el ejercicio anterior suponga que un adulto mayor debe
tener una edad igual o superior a 60. Debe validar para cada ingreso que los valores estén en
un rango entre 1 y 120 años. En caso de error deberá notificar y solicitar un nuevo valor.

Problema 3. Escriba un programa que lea dos vectores de números enteros ordenados
ascendentemente y luego produzca la lista ordenada de la mezcla de los dos, por ejemplo, si
los dos arreglos tienen los números 1 3 6 9 17 y 2 4 10 17, respectivamente, la lista de números
en la pantalla debe ser 1 2 3 4 6 9 10 17 17. Limite los vectores a un tamaño de 5 y debe validar
en cada ingreso que realmente se estén ingresando los datos de forma ascendente.

Problema 4. Una emisora con presencia en diferentes ciudades desea conocer el rating de
canciones y cantantes más escuchados (sonados) en este semestre del año. Por lo tanto, se
ha pedido a estudiantes del SENA del programa de tecnólogo en análisis y desarrollo de
software desarrollar una solución que permita conocer la respuesta de 6 personas con relación
a sus gustos musicales. Con fines administrativos y realizar una rifa entre las personas
encuestadas, la emisora desea poder registrar de las personas entrevistadas su nombre,
número de identificación (cédula), fecha de nacimiento, correo electrónico, ciudad de
residencia, ciudad de origen. Además, se deberá poder almacenar el artista y título de hasta 3
canciones favoritas en cada una de las personas que se ingrese, teniendo en cuenta lo anterior,
se sugiere que la solución deberá mostrar un menú que permite las siguientes opciones:

a. Agregar una persona con los datos que se listan anteriormente.


b. Mostrar la información personal de una persona particular por medio de su posición en el
vector.

SOLUCION

Problema 1

Código:

<!DOCTYPE html>
Realizado por Renzo Rodriguez
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculadora de Área y Perímetro</title>
</head>
<body>
<h1>Calculadora de Área y Perímetro</h1>
<label for="figura">Selecciona una figura:</label>
<select id="figura">
<option value="triangulo">Triángulo</option>
<option value="rectangulo">Rectángulo</option>
<option value="circulo">Círculo</option>

5
</select>

<div id="triangulo" style="display: none;">


<h2>Triángulo</h2>
<label for="baseTriangulo">Base:</label>
<input type="number" id="baseTriangulo">
<label for="alturaTriangulo">Altura:</label>
<input type="number" id="alturaTriangulo">
<button onclick="calcularTriangulo()">Calcular</button>
<p id="resultadoTriangulo"></p>
</div>

<div id="rectangulo" style="display: none;">


<h2>Rectángulo</h2>
<label for="baseRectangulo">Base:</label>
<input type="number" id="baseRectangulo">
<label for="alturaRectangulo">Altura:</label>
<input type="number" id="alturaRectangulo">
<button onclick="calcularRectangulo()">Calcular</button>
<p id="resultadoRectangulo"></p>
</div>

<div id="circulo" style="display: none;">


<h2>Círculo</h2>
<label for="radioCirculo">Radio:</label>
<input type="number" id="radioCirculo">
<button onclick="calcularCirculo()">Calcular</button>
<p id="resultadoCirculo"></p>
</div>

<script>
function calcularTriangulo() {
const base =
parseFloat(document.getElementById('baseTriangulo').value);
const altura =
parseFloat(document.getElementById('alturaTriangulo').value);
const area = (base * altura) / 2;
const perimetro = base + altura + Math.sqrt(base**2 + altura**2);
document.getElementById('resultadoTriangulo').innerHTML = `Área:
${area.toFixed(2)}, Perímetro: ${perimetro.toFixed(2)}`;
}

function calcularRectangulo() {
const base =
parseFloat(document.getElementById('baseRectangulo').value);

6
const altura =
parseFloat(document.getElementById('alturaRectangulo').value);
const area = base * altura;
const perimetro = 2 * (base + altura);
document.getElementById('resultadoRectangulo').innerHTML = `Área:
${area.toFixed(2)}, Perímetro: ${perimetro.toFixed(2)}`;
}

function calcularCirculo() {
const radio =
parseFloat(document.getElementById('radioCirculo').value);
const area = Math.PI * radio**2;
const perimetro = 2 * Math.PI * radio;
document.getElementById('resultadoCirculo').innerHTML = `Área:
${area.toFixed(2)}, Perímetro: ${perimetro.toFixed(2)}`;
}

document.getElementById('figura').addEventListener('change', function()
{
const figuraSeleccionada = this.value;
document.getElementById('triangulo').style.display = 'none';
document.getElementById('rectangulo').style.display = 'none';
document.getElementById('circulo').style.display = 'none';
document.getElementById(figuraSeleccionada).style.display =
'block';
});
</script>
</body>
</html>

7
Evidencia fotográfica

8
Problema 2:

Código:
<!DOCTYPE html>
Realizado por Renzo Rodriguez
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculadora de Edades</title>
</head>
<body>
<h1>Calculadora de Edades</h1>
<script>

9
const cantidadPersonas = 10;
const edades = [];

// Función para validar una edad ingresada


function validarEdad(edad) {
return edad >= 1 && edad <= 120;
}

// Función para solicitar una edad válida


function pedirEdad(indice) {
let edad;
do {
edad = parseInt(prompt(`Ingrese la edad de la persona ${indice
+ 1}:`));
if (!validarEdad(edad)) {
alert("Edad no válida. Debe estar entre 1 y 120 años.");
}
} while (!validarEdad(edad));
return edad;
}

// Ingresar edades
for (let i = 0; i < cantidadPersonas; i++) {
edades.push(pedirEdad(i));
}

// Contadores para las categorías de edades


let menoresDeEdad = 0;
let adultos = 0;
let adultosMayores = 0;

// Variables para calcular la edad más baja, la edad más alta y el


total de edades
let edadMasBaja = Infinity;
let edadMasAlta = -Infinity;
let sumaEdades = 0;

// Calcular categorías de edades y estadísticas


for (const edad of edades) {
sumaEdades += edad;
if (edad < 18) {
menoresDeEdad++;
} else if (edad < 60) {
adultos++;
} else {

10
adultosMayores++;
}
if (edad < edadMasBaja) {
edadMasBaja = edad;
}
if (edad > edadMasAlta) {
edadMasAlta = edad;
}
}

// Calcular el promedio de edades


const promedioEdades = sumaEdades / cantidadPersonas;

// Mostrar resultados
document.write(`<p>Personas menores de edad: ${menoresDeEdad}</p>`);
document.write(`<p>Personas adultas: ${adultos}</p>`);
document.write(`<p>Adultos mayores: ${adultosMayores}</p>`);
document.write(`<p>Edad más baja: ${edadMasBaja}</p>`);
document.write(`<p>Edad más alta: ${edadMasAlta}</p>`);
document.write(`<p>Promedio de edades:
${promedioEdades.toFixed(2)}</p>`);
</script>
</body>
</html>

11
Evidencia fotográfica:

12
Problema 3

Código:

<!DOCTYPE html>
Realizado por Renzo Rodriguez
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

13
<title>Fusión de Arreglos</title>
</head>
<body>
<h1>Fusión de Arreglos</h1>
<script>
// Función para validar si un arreglo está ordenado ascendentemente
function estaOrdenadoAscendentemente(arreglo) {
for (let i = 1; i < arreglo.length; i++) {
if (arreglo[i] < arreglo[i - 1]) {
return false;
}
}
return true;
}

// Función para leer un arreglo de números enteros ordenados


function leerArregloOrdenado() {
let arreglo = [];
let ingresoValido = false;

do {
ingresoValido = true;
const entrada = prompt("Ingrese hasta 5 números enteros ordenados
ascendentemente (separados por espacios):");
const numeros = entrada.split(" ").map(Number);

if (numeros.length > 5 || !estaOrdenadoAscendentemente(numeros)) {


ingresoValido = false;
alert("Ingrese hasta 5 números enteros ordenados
ascendentemente.");
} else {
arreglo = numeros;
}
} while (!ingresoValido);

return arreglo;
}

// Función para fusionar dos arreglos ordenados


function fusionarArreglos(arreglo1, arreglo2) {
const resultado = [];
let i = 0;
let j = 0;

while (i < arreglo1.length && j < arreglo2.length) {

14
if (arreglo1[i] < arreglo2[j]) {
resultado.push(arreglo1[i]);
i++;
} else if (arreglo1[i] > arreglo2[j]) {
resultado.push(arreglo2[j]);
j++;
} else {
// Si los elementos son iguales, agregamos uno y avanzamos en
ambos arreglos
resultado.push(arreglo1[i]);
i++;
j++;
}
}

// Agregamos los elementos restantes de los arreglos


while (i < arreglo1.length) {
resultado.push(arreglo1[i]);
i++;
}

while (j < arreglo2.length) {


resultado.push(arreglo2[j]);
j++;
}

return resultado;
}

// Leer dos arreglos ordenados


const arreglo1 = leerArregloOrdenado();
const arreglo2 = leerArregloOrdenado();

// Fusionar los arreglos


const resultadoFusion = fusionarArreglos(arreglo1, arreglo2);

// Mostrar el resultado
alert("Lista ordenada de la mezcla de los dos arreglos:\n" +
resultadoFusion.join(" "));
</script>
</body>
</html>

15
Evidencia fotográfica

16
Problema 4. Una emisora con presencia en diferentes ciudades desea conocer el rating de
canciones y cantantes más escuchados (sonados) en este semestre del año. Por lo tanto, se
ha pedido a estudiantes del SENA del programa de tecnólogo en análisis y desarrollo de
software desarrollar una solución que permita conocer la respuesta de 6 personas con relación
a sus gustos musicales. Con fines administrativos y realizar una rifa entre las personas
encuestadas, la emisora desea poder registrar de las personas entrevistadas su nombre,
número de identificación (cédula), fecha de nacimiento, correo electrónico, ciudad de
residencia, ciudad de origen. Además, se deberá poder almacenar el artista y título de hasta 3
canciones favoritas en cada una de las personas que se ingrese, teniendo en cuenta lo anterior,
se sugiere que la solución deberá mostrar un menú que permite las siguientes opciones:

a. Agregar una persona con los datos que se listan anteriormente.


b. Mostrar la información personal de una persona particular por medio de su posición en el
vector.

Código:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

17
<title>Formulario de Concursantes</title>
</head>
<body>
<h1>Formulario de Concursantes</h1>

<form id="formulario">
<fieldset>
<legend>Datos de Concursantes</legend>
<div id="resultados"></div>
</fieldset>
</form>

<script>
const datosConcursantes = [
"Nombre",
"Cédula",
"Fecha de Nacimiento",
"Correo Electrónico",
"Ciudad de Residencia",
"Ciudad de Origen",
"Artista-Canción de la Primera Canción",
"Artista-Canción de la Segunda Canción",
"Artista-Canción de la Tercera Canción"
];

document.addEventListener("DOMContentLoaded", function () {
const formulario = document.getElementById("formulario");
const resultados = document.getElementById("resultados");

formulario.addEventListener("submit", function (e) {


e.preventDefault();

const vectorPersonas = [];


for (let i = 0; i < 6; i++) {
const vectorDatos = {};

for (let j = 0; j < datosConcursantes.length; j++) {


const dato = prompt(`Por favor, ingrese
${datosConcursantes[j]} de la persona ${i + 1}`);
vectorDatos[datosConcursantes[j]] = dato;
}

vectorPersonas.push(vectorDatos);
}

18
mostrarResultados(vectorPersonas);
});

function mostrarResultados(data) {
resultados.innerHTML = "<h2>Datos Ingresados:</h2>";

data.forEach((persona, i) => {
resultados.innerHTML += `<h3>Persona ${i + 1}</h3>`;
resultados.innerHTML += "<ul>";

for (const dato in persona) {


resultados.innerHTML += `<li>${dato}:
${persona[dato]}</li>`;
}

resultados.innerHTML += "</ul>";
});
}
});
</script>
</body>
</html>

Evidencia fotográfica

19
20
Conclusiones

El uso de diagramas de flujo y pseudocódigo es una práctica esencial para resolver


algoritmos de manera efectiva y eficiente en programación. Estas herramientas promueven la
planificación cuidadosa, la comunicación efectiva y la detección temprana de errores, lo que
en última instancia conduce a un desarrollo de software más exitoso y menos propenso a
problemas.

REFERENCIAS
Material de estudio
(https://sena.territorio.la/content_mooc.php?idMateria=2608672&social=29486632)
VISUAL STUDIO CODE Tutorial en Español
(https://www.youtube.com/watch?v=Esnj9pntvyU)
Tutorial de Visual Studio Code para principiantes (https://keepcoding.io/blog/tutorial-
de-visual-studio-code-para-iniciar/)

21

También podría gustarte