Saltar al contenido principal
LibreTexts Español

2.2: El Programa

  • Page ID
    83210
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Aquí está la especificación (primer intento) para el programa:

    El programa solicitará al usuario un valor de fuente de voltaje de CC, un valor nominal de resistencia y una tolerancia de resistencia. Luego imprimirá los valores de disipación de corriente y potencia basados en los valores nominales, mínimos y máximos aceptables de la resistencia.

    No está mal, pero tenemos que refinarlo. Primero, los programas de línea de comandos generalmente necesitan algún tipo de mensaje de inicio o impresión fuera de las direcciones. Recuerde que estos no son programas guiados por GUI con menús de Ayuda. En segundo lugar, siempre solicite valores de entrada que indiquen unidades esperadas. Si el programa espera ohmios pero el usuario escribe en kilo ohmios, va a haber problemas. A menos que haya una razón imperiosa para no hacerlo, siempre use unidades base (ohmios versus kilo ohmios por ejemplo).

    Aquí está nuestra especificación refinada:

    El programa primero dará las direcciones/explicaciones de uso apropiadas al usuario. El programa solicitará al usuario un valor de fuente de voltaje de CC en voltios, un valor nominal de resistencia en ohmios y una tolerancia de resistencia en porcentaje. Luego imprimirá los valores de corriente en amperios y disipación de potencia en vatios basados en los valores nominales, mínimos y máximos aceptables de la resistencia.

    Tenga en cuenta que hemos especificado la tolerancia como un porcentaje y no como un factor. Esto se debe a que el usuario típico estaría preparado para ingresar 10 por 10%, no 0.1. Puede utilizar esta especificación para crear un pseudo código o diagrama de flujo. Aquí hay un posible pseudo código:

    1. Imprime las instrucciones para el usuario.

    2. Indique al usuario el voltaje (en voltios) y obtenga valor.

    3. Indicar al usuario la resistencia (en ohmios) y obtener valor.

    4. Indicar al usuario la tolerancia (en porcentaje) y obtener valor.

    5. Determinar los valores de resistencia máxima y mínima.

    6. Calcular las corrientes en base a las tres resistencias.

    7. Calcular potencias en base a las tres resistencias.

    8. Imprimir un encabezado para los valores.

    9. Imprime los valores.

    Por supuesto, podría elegir un algoritmo alternativo o método de solución. Por ejemplo, es posible que prefiera imprimir el encabezado antes de los cálculos y luego imprimir valores después de cada cálculo. Es posible que prefiera cambiar el formato para que obtenga filas para cada resistencia en lugar de para la corriente y la potencia. Incluso puede elegir un enfoque completamente diferente usando bucles y/o matrices. Habrá mejoras y desventajas en cada enfoque. A menudo, la pregunta no es “¿Puedo resolver este problema?” sino más bien “¿Cuál es la manera más efectiva de resolver este problema?” Extiende un poco de previsión antes de comenzar a codificar.

    Con base en el pseudo código anterior, el siguiente programa debe ajustarse a la factura. Lo refinaremos más adelante. Tenga en cuenta el uso de double ya que lo más probable es que tengamos valores fraccionarios con los que tratar.

    #include <stdio.h>
    
    int main( void )
    {
          double v, tol;
          double rnom, rlow, rhigh;
          double inom, ilow, ihigh;
          double pnom, plow, phigh;
    
          printf(“This program determines current and power.\n”);
    
          printf(“Please enter the voltage source in volts.\n”);
          scanf(“%lf”, &v);
          printf(“Please enter the nominal resistance in ohms.\n”);
          scanf(“%lf”, &rnom);   
          printf(“Please enter the resistor tolerance in percent.\n”);
          scanf(“%lf”, &tol);    
    
          tol = tol/100.0;  /* turn tolerance into a factor */
          rlow = rnom – rnom*tol;
          rhigh = rnom + rnom*tol;
          inom = v/rnom;
          ihigh = v/rlow;
          ilow = v/rhigh;
    
          pnom = v * inom;
          plow = v * ilow;
          phigh = v * ihigh;
    
          printf(“Resistance (ohms)  Current (amps)  Power (watts)\n”);
          printf(“%lf     %lf      %lf\n”, rnom, inom, pnom );
          printf(“%lf     %lf      %lf\n”, rhigh, ilow, plow );
          printf(“%lf     %lf      %lf\n”, rlow, ihigh, phigh );
    }
    

    Una palabra de precaución aquí: Tenga en cuenta que la variable ihigh es la corriente más alta, no la corriente asociada con la resistencia más alta. Esto puede hacer que el código de impresión parezca incorrecto. ¡Este es un buen lugar para algunos comentarios! Además, las “direcciones” iniciales son escasas en el mejor de los casos. En cualquier caso, ingresa y construye el código anterior y verifica que funcione.

    Es posible que hayas notado que hay un poco de repetición en este código en forma de cálculos e impresiones. Puede ser más conveniente si creamos funciones para manejarlas. Por ejemplo, podríamos crear una función para calcular la corriente:

    double find_current( double voltage, double resistance )
    {
          double current;
    
          current = voltage/resistance;
          return( current );
    }
    

    También podrías hacer esto en un solo paso:

    double find_current( double voltage, double resistance )
    {
          return( voltage/resistance );
    }
    

    La actualización del programa produce lo siguiente:

    #include <stdio.h>
    
    double find_current( double voltage, double resistance )
    {
          return( voltage/resistance );
    }
    
    int main( void )
    {
          double v, tol;
          double rnom, rlow, rhigh;
          double inom, ilow, ihigh;
          double pnom, plow, phigh;
    
          printf(“This program determines current and power.\n”);
    
          printf(“Please enter the voltage source in volts.\n”);
          scanf(“%lf”, &v);
          printf(“Please enter the nominal resistance in ohms.\n”);
          scanf(“%lf”, &rnom);   
          printf(“Please enter the resistor tolerance in percent.\n”);
          scanf(“%lf”, &tol);    
    
          tol = tol/100.0;  /* turn tolerance into a factor */
          rlow = rnom – rnom*tol;
          rhigh = rnom + rnom*tol;
    
          inom = find_current( v, rnom );
          ihigh = find_current( v, rlow );
          ilow = find_current( v, rhigh );
    
          pnom = v * inom;
          plow = v * ilow;
          phigh = v * ihigh;
    
          printf(“Resistance (ohms)  Current (amps)  Power (watts)\n”);
          printf(“%lf     %lf      %lf\n”, rnom, inom, pnom );
          printf(“%lf     %lf      %lf\n”, rhigh, ilow, plow );
          printf(“%lf     %lf      %lf\n”, rlow, ihigh, phigh );
    }
    

    Esto no parece ser una gran mejora. De hecho, ¡simplemente parece más largo! Esto es cierto, pero extiende la idea un momento. ¿Y si el cálculo para corriente involucrara una docena de líneas de código en lugar de solo una? Este nuevo formato ahorraría un considerable espacio de código. Tenga en cuenta que esto no es solo cuestión de guardar algo de mecanografía, sino más bien de guardar la memoria utilizada por el ejecutable. Esto es particularmente importante cuando se utilizan sistemas integrados restringidos con solo una pequeña cantidad de memoria disponible.

    Tenga en cuenta que la nueva función se agregó antes de main (). Esto no es obligatorio. También podríamos haberlo agregado después de main (), pero en ese caso tendríamos que agregar un prototipo de función para que el compilador supiera qué esperar cuando viera la llamada a la función en main (). Se vería algo así:

    #include <stdio.h>
    
    /* this is the prototype so the compiler can do type checking */
    
    double find_current( double voltage, double resistance );
    
    int main( void )
    {
          ....
    }
    
    double find_current( double voltage, double resistance )
    {
          return( voltage/resistance );
    }
    

    Altere el programa para utilizar esta nueva función de cálculo de corriente y probarla. Una vez que esto esté completo, modifique el programa una vez más para usar una función para calcular la potencia y otra para imprimir los tres valores. Utilice la función de cálculo actual como guía. Pruebe esto con los siguientes valores: Fuente de 12 voltios con una resistencia de 100 ohmios, 5%. Por último, considere lo que podría salir mal con el programa. ¿Qué pasaría si nosotros el usuario ingresamos 0 para el valor de la resistencia? ¿Cómo pudiste sortear ese problema?


    This page titled 2.2: El Programa is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.