CBSE Clase 11 | Metodologías de resolución de problemas

Proceso de resolución de problemas

El proceso de resolución de problemas es una actividad que tiene como ingredientes la especificación del programa y el plato servido es un programa correcto. Esta actividad consta de cuatro pasos:
1. Entender el problema:Para resolver cualquier problema, es muy importante comprender primero el problema. ¿Cuál es la salida deseada del código y cómo se puede generar esa salida? La necesidad obvia y esencial de generar la salida es una entrada. La entrada puede ser singular o puede ser un conjunto de entradas. Se debe trazar una relación adecuada entre la entrada y la salida para resolver el problema de manera eficiente. El conjunto de entrada debe ser completo y suficiente para dibujar la salida. Significa que todas las entradas necesarias requeridas para calcular la salida deben estar presentes en el momento del cálculo. Sin embargo, debe tenerse en cuenta que el programador debe asegurarse de que el número mínimo de entradas esté allí. Cualquier entrada irrelevante solo aumenta el tamaño y la sobrecarga de memoria del programa.Por lo tanto, identificar el número mínimo de insumos necesarios para la producción es un elemento crucial para comprender el problema.

2. Elaboración del plan: Una vez que se ha entendido un problema, se debe diseñar un plan de acción adecuado para resolverlo. A esto se le llama idear el plan. Este paso generalmente implica calcular el resultado del conjunto dado de entradas. Utiliza la relación trazada entre entradas y salidas en el paso anterior. La complejidad de este paso depende de la complejidad del problema en cuestión.

3. Ejecutar el plan: Una vez que se ha definido el plan, debe seguir la trayectoria de acción mientras se asegura la integridad del plan en varios puntos de control. Si se encuentra alguna inconsistencia en el medio, el plan necesita ser revisado.

4. Evaluación: El resultado final así obtenido debe ser evaluado y verificado para ver si el problema ha sido resuelto satisfactoriamente.

Metodología de resolución de problemas (La solución para el problema)

La metodología para resolver un problema se define como la solución más eficiente al problema. Aunque puede haber múltiples formas de romper una nuez, pero una metodología es aquella en la que la nuez se rompe en el menor tiempo posible y con el mínimo esfuerzo. Claramente, nunca se puede usar un mazo para romper una nuez. Bajo la metodología de resolución de problemas, veremos una solución paso a paso para un problema. Estos pasos se parecen mucho al ciclo de vida del software . Un ciclo de vida de software implica varias etapas en el ciclo de vida de un programa. Cualquier programador principiante puede utilizar estos pasos para resolver un problema de la manera más eficiente posible. Los varios pasos de este ciclo son los siguientes:

Solución paso a paso para un problema (Ciclo de vida del software)
1. Definición/Especificación del problema: Un programa de computadora es básicamente una solución en lenguaje de máquina para un problema de la vida real. Porque los programas generalmente se hacen para resolver los problemas pragmáticos del mundo exterior. Para resolver el problema, es muy necesario definir el problema para obtener su comprensión adecuada. Por ejemplo, supongamos que se nos pide que escribamos un código para «Calcular el promedio de tres números». En este caso, una definición adecuada del problema incluirá preguntas como:
«¿Qué significa exactamente el promedio?»
«¿Cómo calcular el promedio?»

Una vez que se plantean preguntas como estas, ayuda a formular la solución del problema de una mejor manera. Una vez que se ha definido un problema, se enumeran las especificaciones del programa. Las especificaciones del problema describen lo que debe hacer el programa para el problema. Definitivamente debe incluir:

    APORTE :

¿Cuál es el conjunto de entrada del programa?

    PRODUCCIÓN :

¿Cuál es la salida deseada del programa y en qué forma se desea la salida?

2. Análisis del problema (desglose de la solución en pasos simples): este paso para resolver el problema sigue un enfoque modular para romper la nuez. El problema se divide en subproblemas para que sea más fácil diseñar una solución a estos subproblemas. Las soluciones de todas estas partes individuales se fusionan para obtener la solución final del problema original. Es como el enfoque de dividir y fusionar.

Enfoque modular para la programación:

El proceso de dividir un gran problema en subproblemas y luego tratar estas partes individuales como funciones diferentes se denomina programación modular. Cada función se comporta independientemente de otra y hay una comunicación interfuncional mínima. Hay dos métodos para implementar la programación modular:

  1. Diseño de arriba hacia abajo: en este método, el problema original se divide en subpartes. Estas subpartes se dividen aún más. La string continúa hasta que obtenemos la subparte fundamental del problema que no se puede dividir más. Luego dibujamos una solución para cada una de estas partes fundamentales.
  2. Diseño ascendente: en este estilo de programación, una aplicación se escribe utilizando las primitivas preexistentes del lenguaje de programación. Estas primitivas luego se fusionan con características más complicadas, hasta que se escribe la aplicación. Este estilo es justo lo contrario del estilo de diseño de arriba hacia abajo.

3. Diseño de problemas: El diseño de un problema se puede representar en cualquiera de las dos formas:

  1. Algoritmo :
  2. El conjunto de instrucciones escritas para formular la solución de un problema se denomina algoritmo. Estas instrucciones, cuando se siguen para escribir el código, producen el resultado deseado. Los pasos involucrados en el algoritmo generalmente están escritos en inglés o en cualquier idioma coloquial que sea más fácil para el programador comprender lo que necesita el código.
    Tengamos un ejemplo mundano preparando el té de la mañana y escribamos un algoritmo para el mismo.
    PASO 1 : COMENZAR
    PASO 2 : Verter agua en una cacerola.
    PASO 3: Ponga la sartén en el quemador de gas.
    PASO 4: Encienda el quemador de gas.
    PASO 5: Poner azúcar en la sartén.
    PASO 6: Poner las hojas de té en la sartén.
    PASO 7: Vierta la leche en la sartén.
    PASO 8: Filtrar el té preparado en la taza.
    PASO 9: Sírvelo a los demás y diviértete.
    PASO 10: PARAR

    Las formas de ejecutar cualquier programa son de tres categorías:

  • Sentencias de secuencia
    Aquí, todas las instrucciones se ejecutan en una secuencia, es decir, una tras otra, hasta que se ejecuta el programa.
  • Sentencias de selección
    Como es evidente por el nombre, en este tipo de sentencias no se ejecuta todo el conjunto de instrucciones. Hay que hacer una selección. Se ejecuta un número seleccionado de instrucciones en función de alguna condición. Si la condición se cumple, se ejecuta una parte del conjunto de instrucciones; de lo contrario, se ejecuta otra parte del conjunto. Dado que se debe realizar esta selección fuera del conjunto de instrucciones, este tipo de instrucciones se denominan instrucciones de selección.
  • Sentencias de iteración o de bucle
    Como el propio nombre indica, aquí un conjunto particular de instrucciones se ejecuta varias veces. Este conjunto de instrucciones continúa ejecutándose en un bucle hasta que finaliza una condición particular. Estos tipos de instrucciones también se denominan sentencias de iteración.

    Las tres formas de ejecutar un programa explicadas anteriormente también se denominan «estructura de control», ya que determinan y controlan el flujo de ejecución en un conjunto de declaraciones.

Identificación de las operaciones aritméticas y lógicas requeridas para la solución:
Mientras se escribe el algoritmo para un problema, también se suelen identificar las operaciones aritméticas y lógicas requeridas para la solución. Ayudan a escribir el código de una manera más fácil porque el orden correcto de los símbolos aritméticos y lógicos es necesario para determinar la salida correcta. Y cuando todo esto se ha hecho en el paso de escritura del algoritmo, hace que la tarea de codificación sea más fluida.

  • Diagrama de flujo : los diagramas de flujo son una representación esquemática del algoritmo. Utiliza algunos símbolos para ilustrar el inicio y el final de un programa junto con el flujo de instrucciones involucradas en el programa.
  • 4. Codificación: una vez que se forma un algoritmo, no se puede ejecutar en la computadora. Por lo tanto, en este paso, este algoritmo debe traducirse a la sintaxis de un lenguaje de programación particular. Este proceso a menudo se denomina «codificación». La codificación es uno de los pasos más importantes del ciclo de vida del software. No solo es un desafío encontrar una solución a un problema, sino que escribir código optimizado para una solución es mucho más desafiante.

    Escribir código para optimizar el tiempo de ejecución y el almacenamiento de memoria:
    un programador escribe código en su computadora local. Ahora, supongamos que escribe un código que tarda 5 horas en ejecutarse. Ahora, estas 5 horas de tiempo son en realidad el tiempo de inactividad para el programador. No solo lleva más tiempo, sino que también utiliza los recursos durante ese tiempo. Uno de los recursos informáticos más preciados es la memoria. Se espera que un programa grande utilice más memoria. Sin embargo, la utilización de la memoria no es una falla, pero si un programa utiliza tiempo o memoria innecesarios, entonces es una falla de codificación. El código optimizado puede ahorrar tiempo y memoria. Por ejemplo, como se discutió anteriormente, al usar el número mínimo de entradas para calcular la salida, uno puede ahorrar la utilización de memoria innecesaria. Todas estas técnicas son muy necesarias para ser implementadas para escribir código optimizado. El mundo pragmático da reverencia no solo a la solución del problema sino a la solución optimizada. Este arte de escribir el código optimizado también se llama ‘programación competitiva’.

    5. Prueba y depuración del programa: la prueba del programa implica ejecutar todas y cada una de las instrucciones del código y verificar la validez de la salida mediante una entrada de muestra. Al probar un programa, también se puede verificar si hay un error en el programa. Si se detecta un error, se realiza la depuración del programa. Es un proceso para localizar la instrucción que está causando un error en el programa y luego rectificarlo. Hay diferentes tipos de error en un programa:
    (i) Error de sintaxis
    Cada lenguaje de programación tiene su propio conjunto de reglas y construcciones que deben seguirse para formar un programa válido en ese lenguaje en particular. Si en algún lugar de todo el código se infringe este conjunto de reglas, se produce un error de sintaxis.
    Tome un ejemplo en lenguaje C

    #include <stdio.h>
    void main()
    {
        char ans[50];
        printf("how are you?")
            gets(ans);
        printf("\ngood to see that you are %s", ans);
    }
    

    En el programa anterior, el error de sintaxis está en la primera instrucción printf ya que la instrucción printf no termina con ‘;’. Ahora, hasta que ya menos que no se rectifique este error, el programa no se ejecutará.

    Una vez que se rectifica el error, se obtiene el resultado deseado. Supongamos que la entrada es ‘buena’, entonces la salida es:
    Salida:

    how are you
    good to see that you are good
    

    (ii) Error lógico
    Un error causado por la implementación de una lógica incorrecta en el programa se denomina error lógico. Por lo general, se detectan durante el tiempo de ejecución.
    Tome un ejemplo en lenguaje C:

    #include <stdio.h>
    void main()
    {
        int n = 11, i;
        for (i = n; i <= 10; i++)
            printf("%d\n", i);
    }
    

    En el código anterior, el bucle ‘for’ no se ejecutará ya que n se ha inicializado con el valor de 11, mientras que el bucle ‘for’ solo puede imprimir valores menores o iguales a 10. Dicho código dará como resultado una salida incorrecta y por lo tanto, errores como estos se denominan errores lógicos.
    Una vez que se rectifica el error, se obtiene el resultado deseado. Supongamos que n se inicializa con el valor ‘5’, entonces la salida es:
    Salida:

    5
    6
    7
    8
    9
    10
    

    (iii) Error
    de tiempo de ejecución Cualquier error que provoque la finalización inusual del programa se denomina error de tiempo de ejecución. Se detectan en el tiempo de ejecución.
    Algunos ejemplos comunes de errores de tiempo de ejecución son:
    Ejemplo 1:

    #include <stdio.h>
    void main()
    {
        int a, b, c;
        printf("enter the value of a and b");
        scanf("%d%d", &a, &b);
        c = a / b;
        printf("The quotient when a is divided by b is %d\n", c);
    }
    

    Si durante el tiempo de ejecución, el usuario da el valor de entrada para B como 0, entonces el programa termina abruptamente, lo que genera un error de tiempo de ejecución. La salida que aparece es:
    Salida:

    NO OUTPUT
    Floating Point Exception
    

    Ejemplo 2:
    Si durante la ejecución de un programa, se intenta abrir un archivo inexistente, es decir, un archivo que no está presente en el disco duro, también se produce un error de tiempo de ejecución.

    6. Documentación: La documentación del programa implica:

    1. Definición del problema
    2. Diseño de problemas
    3. Documentación de la prueba realizada
    4. Historia del desarrollo del programa.
    5. Manual de usuario

      Un usuario utiliza un manual de usuario para conocer los datos de entrada, procesamiento y salida de un programa.

    7. Mantenimiento del programa: una vez que se ha formado un programa, para garantizar su longevidad, el mantenimiento es imprescindible. El mantenimiento de un programa tiene sus propios costos asociados, que también pueden exceder el costo de desarrollo del programa en algunos casos. El mantenimiento de un programa implica lo siguiente:

    1. Detección y Eliminación de errores no detectados en el programa existente.
    2. Modificación del programa actual para mejorar su desempeño y
      adaptabilidad.
    3. Mejora de la interfaz de usuario
    4. Enriquecer el programa con nuevas capacidades.
    5. Actualización de la documentación.

    Estructura de control: control condicional y bucle (finito e infinito)

    Hay códigos que generalmente implican declaraciones en bucle. Las declaraciones en bucle son declaraciones en las que la instrucción o un conjunto de instrucciones se ejecuta varias veces hasta que se satisface una condición particular. El bucle while, el bucle for, el bucle do while, etc. forman la base de dicha estructura de bucle. Estas declaraciones también se denominan estructura de control porque determinan o controlan el flujo de instrucciones en un programa. Estas estructuras en bucle son de dos tipos:

    1. Control condicional (bucle finito)
      En este bucle, el bucle se ejecuta un número finito de veces. Una vez que se cumple una condición particular, el ciclo se termina.
      Tome un ejemplo en lenguaje C:

      #include <stdio.h>
      void main()
      {
          int n = 1, i;
          for (i = n; i <= 10; i++)
              printf("%d\n", i);
      }

      En el programa anterior, el ciclo ‘for’ se ejecuta solo hasta que el valor de i sea menor o igual a 10. Tan pronto como el valor de i sea mayor que 10, el ciclo while finaliza.
      Producción:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10  //loop gets terminated
      
    2. Bucles
      infinitos La estructura de control de bucles infinitos es justo lo contrario de la estructura de control de bucles finitos. Aquí, la condición para terminar el ciclo nunca se cumple y, por lo tanto, el ciclo se ejecuta infinitamente.
      Tome un ejemplo en lenguaje C:

      #include <stdio.h>
      void main()
      {
          int n = 1;
          while (n <= 10)
              printf("%d\n", n);
      }

      En el código anterior, uno puede ver fácilmente que el valor de n no se incrementa. En tal caso, el valor de n siempre será 1 y, por lo tanto, el ciclo while nunca se ejecutará. Este bucle se llama bucle infinito.
      Producción:

      1
      1
      1
      1
      1
      1
      ..
      ..
      .. //loop never terminates
      

    Publicación traducida automáticamente

    Artículo escrito por vivek5252 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *