miércoles, 21 de enero de 2026

04a.- Programación II - Parcial Nro. 4 - Final (Solución del Profesor)

Ejercicio Parcial Nro. 4 (Semestre 2026 - I).

Usted ha sido contratado por la constructora Katherine Silva y Sucesores

Una nueva catedral que se construirá en Barquisimeto se instalarán ventanas con la forma que muestra la siguiente imagen:


Los marcos de las ventanas se elaborarán en Hierro y Aluminio. El metro lineal de Aluminio podría costar entre 1$ y 5$, el metro lineal de Hierro 1$ y 6 $.

¿Cuáles deben ser las dimensiones del marco de la ventana (r y h) de forma de obtener la ventana de máxima área que se pueda construir considerando que usted dispone solamente de presupuesto para gastar en cada ventana en rango de 15 a 45$ (Aluminio y Hierro)?

Nota: El costo en accesorios y cristales no forma parte del ejercicio. 

Elabore un programa que permita calcular las dimensiones del Radio (r) y la Altura (h) considerando que usted ingresa el costo del metro lineal de Aluminio y Hierro, así como el presupuesto por ventana.  

Complete la siguiente tabla con los resultados del programa, los datos serán indicados por el profesor una vez el programa este operativo:

 

Costo Metro Lineal Aluminio 

(1 – 5 $)

Costo metro lineal Hierro

 (1 a 6 $)

Presupuesto

por Ventana

(15 a 45 $)

Radio

(mts)

 

Altura

(mts)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Solución

Importante !!!!!

El programa intentara crear la ventana con el área mas grande sin importar si se mantiene la forma. Si el precio del hierro se hace muy bajo con respecto al aluminio el programa preferirá comprar solamente hierro y no comprar aluminio proponiendo una ventana rectangular. Si el precio del hierro se hace muy alto con respecto al aluminio entonces aumentara el área de la media circunferencia desapareciendo el rectángulo. Ambas soluciones son matemáticamente correctas, pero lamentablemente en la realidad no serian aceptables dado que las ventanas no respetarían la forma original, en ese caso habría que construir una ventana distinta con menos área para poder respetar la forma. Para esto habria que iterar hasta modificar las medidas hasta alcanzar las formas deseadas.


Programa

/* Programa para determinar el radio y la altura de una ventana conformada
por un rectángulo y un a media circunferencia de manera de obtener la máxima 
área con el un presupuesto determinado y unos costos del metro lineal de material
hierro y aluminio definidos

Elaborado: Carlos Ferrer
Revisión 21 - 01 - 2026

*/
#include <math.h>
#include <iostream>
#include <locale.h>

double CA=-1, CH=-1; //Costo del metro lineal del Hierro y del Aluminio
double P=-1; //Presupuesto por ventana
double R=0,H=0,A=0; //Radio, Altura y área de la ventana

using namespace std;

main()
{
setlocale(LC_ALL,"spanish");
while (CA<0)
{
cout <<"Ingrese el costo del metro lineal de Aluminio ($) = ";
cin >>CA;
}
while (CH<0)
{
cout <<"Ingrese el costo del metro lineal de Hierro ($) = ";
cin >>CH;
}
while (P<0)
{
cout <<"Ingrese el Presupuesto por ventana ($) = ";
cin >>P;
}
//Calculamos el radio de la ventana

R= P/(4*CH+2*M_PI*CA-M_PI*CH);

//Calculamos la altura

H=(P-2*R*CH-M_PI*R*CA)/(2*CH);

//Calculamos el área de la ventana

A= 2*R*H+ M_PI*pow(R,2)/2;

//Presentamos los resultados

cout <<endl<<endl<<"El radio requerido para obtener la ventana de mayor area es de = "<<R<<" mts"<<endl;
cout <<"La altura requerida para obtener la ventana de mayor area es de = "<<H<<" mts"<<endl;
cout <<"El area de la ventana corresponde a = "<<A<<" mts cuadrados"<<endl<<endl;

//Evaluamos el caso cuando se afecte la forma

if (H<=0)
{
if (H<=0)
{
cout <<endl<<endl<<"Como se aprecia la altura H es menor o igual a cero"<<endl;
}
if (R<=0)
{
cout <<endl<<endl<<"Como se aprecia el radio R es menor o igual a cero"<<endl;
}
cout <<"por lo tanto, la forma de la ventana no es construible si se mantiene el"<<endl;
cout <<"criterio de el area maxima. Por lo tanto, se propone construir"<<endl;
cout <<"una ventana de menor área pero respetando la forma !!!!"<<endl<<endl;
cout <<"El profesor."<<endl<<endl;
}
system("pause");
}









Costo Metro Lineal Aluminio

(1 – 5 $)

Costo metro lineal Hierro 

(1 a 6 $)

Presupuesto

por Ventana

(15 a 45 $)

Radio

(mts)

 

Altura

(mts)

 2

 2

 15 

1.0501 

1.0501 

 1

 3

 20 

1.0148 

4.2030 

 3

 1

20

2.2577 

-0.1066 

 

Como se aprecia en el ultimo escenario para obtener la ventana de máxima área el programa recomienda no construir la parte rectangular, matemáticamente esta bien pero en la realidad no seria aceptable dado que no cumpliríamos con el diseño, en consecuencia se recomienda construir una ventana de menor área,

jueves, 4 de diciembre de 2025

03e.- Programación II - Simulación y Control - Proyecto 3er Parcial (Semestre 2026-I)

Considerando el siguiente sistema:

El archivo . CPP debe ser enviado a:

cjferrer14@hotmail.com

Antes del sábado 13 de Diciembre a las 12 del mediodía.

En el cuerpo del correo debe identificarse a los miembros del grupo.



viernes, 28 de noviembre de 2025

03d.- Programación II - Esquema de Bombeo (MODIFICADO) - Trasmisor de nivel incluido

 Se incorporó la variable de nivel basado en la siguiente tabla de la verdad:


 


Tablas de la Verdad



Ajuste el programa anterior en incorpore las nuevas tablas de la verdad, los Switches deben salir del archivo de texto y deben moverse al programa.

jueves, 20 de noviembre de 2025

03c.- Programación II - Esquema de Bombeo - Simulación Clase Nro 3 - Actividad propuesta miércoles 26 de nov

Para mejorar el funcionamiento del sistema de bombeo industrial, en la clase del Miércoles 06 de Nov se estableció una modificación del esquema trabajado por el profesor, la modificación consiste en incorporar un "Switch de Alto Nivel"y "Una válvula de desvió de seguridad", el esquema quedaría de la siguiente forma:




El espíritu de este cambio es impedir que el tanque se desborde, el Switch de Alto Nivel informará al PLC cuando el nivel es demasiado alto (Alarma), entonces el PLC  a arrancará la bomba y procederá a abrir La válvula de desvió, el agua será desviada a las comunidades cercanas al tanque y a un sistema de riego de áreas verdes. La válvula de desvió se cerrará cuando el tanque presente bajo nivel o sea cuando se active el Switch de Bajo Nivel (Alarma).

El Switch de Alto Nivel se deberá simular en el archivo de texto Prueba.txt y La válvula de desvió será una variable interna del programa.

En consecuencia se requiere modificar las tablas de la verdad de la bomba y de la presión incorporando las variables nuevas, en la tabla de la verdad de la bomba se debe incorporar el nuevo Switch de Alto nivel y en  la tabla de la verdad de la presión se deberá agregar La nueva válvula de desvió. Tal como se detalla a continuación:





Basado en esto el el archivo de texto Prueba. TXT  quedaría de esta forma:




ARCHIVO PRUEBA.TXT 

          ON                                       ON                                   ABIERTA                               REMOTO

  Switch de Alto Nivel        Switch de Bajo Nivel            Válvula a la descarga                 Modo Bomba

(ON= Agua, Off=Alarma) (ON= Agua, Off=Alarma)   (ABIERTA / CERRADA)  (LOCAL /REMOTO)
Alarma= Por desbordarse        (Alarma=Por vaciarse)
                                              

Nota: En modo REMOTO el control de la bomba es del programa  en modo LOCAL el programa pierde el control de la   bomba 



Ustedes deberán modificar el programa anterior y el archivo de texto del profesor (re-ingeniería) o crear un programa nuevo (ingeniería) que simule y controle el esquema propuesto.

Éxito!!!!

03b.- Programación II - Esquema de Bombeo - Simulación Clase Nro 2

Basado en el siguientes esquema de Control



En la clase de hoy se elaboró un programa que simula el apagado y encendido de la bomba y el comportamiento de la presión a la descarga de la bomba.

Adicionalmente se elaboró un archivo de texto que simula: el Switch de Nivel (Interruptor de Bajo nivel),  la Válvula de servicios y Modo de Operación de la bomba (Local / Remoto).




Se indicó que tanto la Válvula como el Switch  lo manipularía el estudiante desde el archivo de texto y que el programa respondería basado en las tablas de la verdad para la Presión y la Bomba:






PROGRAMA 


/* PROGRAMA ELABORADO POR: CARLOS FERRER 
Control de nivel simple
Elaborado: Carlos Ferrer
Rev May 2025*/

#include<iostream> // Mostrar datos en pantalla
#include<fstream> // Leer y escribir en un archivo de texto
#include<windows.h> // Control de ejecución (tiempo de refrescamiento de pantalla)
using namespace std;

int main()
{
 string bomba="APAGADA";
 double presion=0;
 string pantalla="ON",texto_aux;
 int aux=1;
 
 
 
 /*Leemos los datos del archivo de texto prueba a través de la función
 conticinio (Puede ser cualquier nombre coloque conticinio porque me gusto la palabra)*/
 
 inicio:
 
 ifstream conticinio("C:\\Prueba\\prueba.txt"); 
  
 string sw_bajo_nivel;
 string valvula;
 string modobomba; 
  
 conticinio >>sw_bajo_nivel>>valvula>>modobomba; 
 
 //Verifico el modo de operación de la bomba
 
 if(modobomba=="Remoto" or modobomba=="remoto" or modobomba=="REMOTO")
  {
modobomba="REMOTO";
}
else
{
modobomba="LOCAL";
}
 
 //Verifico el estado del Switch de bajo nivel
 
 if(sw_bajo_nivel=="ON" or sw_bajo_nivel=="on" or sw_bajo_nivel=="On")
  {
sw_bajo_nivel="ON";
}

 else if(sw_bajo_nivel=="OFF" or sw_bajo_nivel=="off" or sw_bajo_nivel=="Off")
  {
sw_bajo_nivel="OFF";
}
 else 
  {
  modobomba="LOCAL";
  }
 //Verifico el estado de la válvula de servicio
 
 if(valvula=="ABIERTA" or valvula=="abierta" or valvula=="Abierta")
  {
valvula="ABIERTA";
}

 else if(valvula=="CERRADA" or valvula=="cerrada" or valvula=="Cerrada")
  {
valvula="CERRADA";
}
 else 
  {
  modobomba="LOCAL";
  }

 
 //CHEQUEO EL MODO DE OPERACIÓN DE LA BOMBA
 
 if (modobomba=="REMOTO" )
  {
  aux=0;
  }
 if (modobomba=="LOCAL" )
  {
  aux=1;
  }
 
 
 
 // HACEMOS TODOS LOS CÁLCULOS PARA EL MODO REMOTO AUTOMÁTICO
  
 if (aux==0)
  {
  
 // imprimimos los valores en pantalla para el modo Remoto
 
 
  if(pantalla=="ON")
  {
  system("cls");
  cout <<"La Presion= "<<presion<<endl;
  cout <<"Tu bomba esta= "<<bomba<<endl; 
  if(sw_bajo_nivel=="OFF")
  {
  texto_aux="ALARMA";
  }
else
  {
  texto_aux="NORMAL";
  }
  cout <<"El Switch de nivel= "<<texto_aux<<endl;
  cout <<"La valvula esta= "<<valvula<<endl<<endl;  
    cout <<"                               **** MODO AUTOMATICO REMOTO *****";
  pantalla ="OFF"; 
    }

//  Establecemos un tiempo de 1 de segundo para ver los cambios en la presión

    Sleep (1000);
    
    
// Simulamos la Presión    
    
    if (valvula=="CERRADA" and bomba=="ENCENDIDA")
    {
      presion=presion+3;
        pantalla ="ON";
    }
 
  if (valvula=="ABIERTA" and bomba=="APAGADA")
    {
      presion=presion-3;
        pantalla ="ON";
    }
 
     if (valvula=="ABIERTA" and bomba=="ENCENDIDA" and presion<32)
    {
      presion=presion+1;
        pantalla ="ON";
      }
 
      if (valvula=="ABIERTA" and bomba=="ENCENDIDA" and presion>32)
    {
      presion=presion-1;
        pantalla ="ON";
        }
 
 //impedimos que la presión de negativo
  
      if (presion<0)
    {
      presion=0;
        pantalla ="ON";
      }

    // Controlamos el encendido y apagado de la bomba
    
      if (sw_bajo_nivel=="OFF" and bomba=="ENCENDIDA")
    {
      bomba="APAGADA";
        pantalla ="ON";
     
  
      if (sw_bajo_nivel=="ON" and presion<20 and bomba=="APAGADA")
    {
      bomba="ENCENDIDA";
        pantalla ="ON";
      }  
      if (sw_bajo_nivel=="ON" and presion>40 and bomba=="ENCENDIDA")
    {
      bomba="APAGADA";
        pantalla ="ON";
     
  
   
  }
 
  // PRESENTAMOS LOS DATOS DEL MODO LOCAL
  
 if (aux==1)
  {
  
 // imprimimos los valores en pantalla para el modo Local
  
  if(pantalla=="ON")
  {
  system("cls");
    cout <<" **** MODO LOCAL - EL PROGRAMA NO CONTROLA LA BOMBA "<<endl; 
cout <<"O NO HAY COMUNICACIÓN CON EL ARCHIVO .TXT *****";
  pantalla ="OFF"; 
    }  
 
   }
 
 goto inicio;
 
}

PROGRAMA EN PYTHON



# PROGRAMA ELABORADO POR: CARLOS FERRER
# Control de nivel simple
# Elaborado: Carlos Ferrer
# Rev Nov 2024*/


import time # Biblioteca para dormir el programa 1 seg
import os # Biblioteca para limpiar pantalla

# Establecemos valores iniciales
os.system("cls")

bomba = "APAGADA" # Status Bomba
presion = 0    # Presión de descarga en psi
pantalla = "ON" # Actualización de Pantalla
texto_aux = "" # Variable de texto de la alarma del switch de bajo nivel
aux = 1      # Variable aux modo bomba

while True:
   
    with open("C:\\Prueba\\prueba.txt", "r") as conticinio:   # abrimos archivo
        linea=conticinio.readline() # leemos la 1ra linea
        datos = linea.split() # separamos las palabras en un arreglo
       
        # vaciamos los datos
        sw_bajo_nivel = datos[0]
        valvula = datos[1]
        modobomba = datos[2]
       
    # Verifico el modo de operación de la bomba
    if (modobomba == "remoto" or modobomba=="Remoto" or modobomba=="REMOTO"):
        modobomba = "REMOTO"
    else:
        modobomba = "LOCAL"

    # Verifico el estado del Switch de bajo nivel
    if (sw_bajo_nivel == "on" or sw_bajo_nivel == "On" or sw_bajo_nivel == "ON"):
        sw_bajo_nivel = "ON"
    elif (sw_bajo_nivel== "off" or sw_bajo_nivel== "Off" or sw_bajo_nivel== "OFF"):
        sw_bajo_nivel = "OFF"
    else:
        modobomba = "LOCAL"

    # Verifico el estado de la válvula de servicio
    if (valvula == "abierta" or valvula == "Abierta" or valvula == "ABIERTA"):
        valvula = "ABIERTA"
    elif (valvula == "cerrada" or valvula == "Cerrada" or valvula == "CERRADA"):
        valvula = "CERRADA"
    else:
        modobomba = "LOCAL"

    # CHEQUEO EL MODO DE OPERACIÓN DE LA BOMBA
    if modobomba == "REMOTO":
        aux = 0
    elif modobomba == "LOCAL":
        aux = 1
       
    # HACEMOS TODOS LOS CÁLCULOS PARA EL MODO REMOTO AUTOMÁTICO
    if aux == 0:
        # imprimimos los valores en pantalla para el modo Remoto
        if pantalla == "ON":
            os.system("cls")
            print(f"La Presion= {presion}")
            print(f"Tu bomba esta= {bomba}")
            texto_aux = "ALARMA" if sw_bajo_nivel == "OFF" else "NORMAL"
            print(f"El Switch de nivel= {texto_aux}")
            print(f"La valvula esta= {valvula}\n")
            print("**** MODO AUTOMATICO REMOTO *****")
            pantalla = "OFF"

        # Establecemos un tiempo de 1 de segundo para ver los cambios en la presión
        time.sleep(1)

        # Simulamos la Presión
        if valvula == "CERRADA" and bomba == "ENCENDIDA":
            presion += 3
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "APAGADA":
            presion -= 3
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "ENCENDIDA" and presion < 32:
            presion += 1
            pantalla = "ON"

        if valvula == "ABIERTA" and bomba == "ENCENDIDA" and presion > 32:
            presion -= 1
            pantalla = "ON"

        # impedimos que la presión sea negativa
        if presion < 0:
            presion = 0
            pantalla = "ON"

        # Controlamos el encendido y apagado de la bomba
        if sw_bajo_nivel == "OFF" and bomba == "ENCENDIDA":
            bomba = "APAGADA"
            pantalla = "ON"

        if sw_bajo_nivel == "ON" and presion < 20 and bomba == "APAGADA":
            bomba = "ENCENDIDA"
            pantalla = "ON"

        if sw_bajo_nivel == "ON" and presion > 40 and bomba == "ENCENDIDA":
            bomba = "APAGADA"
            pantalla = "ON"

    # PRESENTAMOS LOS DATOS DEL MODO LOCAL
    if aux == 1:
        # imprimimos los valores en pantalla para el modo Local
        if pantalla == "ON":
            print("**** MODO LOCAL - EL PROGRAMA NO CONTROLA LA BOMBA")
            print("O NO HAY COMUNICACIÓN CON EL ARCHIVO .TXT *****")
            pantalla = "OFF"




ARCHIVO PRUEBA.TXT

  OFF                                       ABIERTA                               REMOTO

 Switch de Nivel            Válvula a la descarga                 Modo Bomba

(ON= Agua, Off=Vacio)   (ABIERTA / CERRADA)  (LOCAL /REMOTO)

                                              

Nota: En modo REMOTO el control de la bomba es del programa  en modo LOCAL el programa pierde el control de la bomba


El Archivo de texto debe presentar la data en la primera línea de lo contrario no será leído por el programa.

Verifique que la ruta donde colocó el archivo de texto sea la indicada en el programa de lo contrario la data no será leída.

Para C++ Recuerde cambiar "\" por "\\" cuando declare la ruta dentro del programa.

Éxito