Cómo formular algoritmos: Estudio de caso 1 (repetición controlada por contador)

A fin de ilustrar cómo se desarrollan los algoritmos, resolveremos algunas variantes de un programa de promedios de clase. Considere el siguiente enunciado de programa:

Una clase de cinco alumnos hizo un examen. Las notas (enteros en el rango 0 a 100) correspondientes a este examen están a su disposición. Determine el promedio de la clase en este examen.

El promedio de la clase es igual a la suma de las notas dividida por el número de alumnos. El algoritmo para resolver este problema en una calculadora:

Debe introducir cada una de las calificaciones
Ejecutar el cálculo de promedio
Imprimir el resultado.

Utilicemos el seudocódigo, enlistemos las acciones a ejecutarse, y especifiquemos el orden en el cual estas acciones deberán ser ejecutadas. Utilizaremos repetición controlada por contador, para introducir las calificaciones una a la vez. Esta técnica utiliza una variable llamada contador para definir el número de veces que deberá ejecutarse un conjunto de enunciados. En este ejemplo, la repetición terminará cuando el contador exceda de 5.

El algoritmo en seudocódigo será


Set total to cero
Set contador to uno

While contador is menor o ihual que to cinco 
    Input la siguiente nota
    Add la nota al total
    Add uno al contador

Set El promedio de la clase es el total dividido entre 5 
Print El promedio de la clase

La repetición controlada por contador se conoce a menudo como repetición definida porque, antes de que se inicie la ejecución del ciclo, el número de repetición es conocido.

Las referencias en el algoritmo son a un total y a un contador. Un total es una variable, utilizada para acumular la suma de una serie de valores. Un contador es una variable, utilizada para contar en este caso  para contar el número de calificaciones capturadas. Por lo regular las variables utilizadas para almacenar totales, deberán ser inicializadas a cero antes de ser utilizadas en un programa; de lo contrario la suma incluiría el valor anterior almacenado en la posición en memoria de ese total. Las variables de contador se inicializan a cero o a uno, dependiendo en su uso. Una variable sin inicializar contiene un valor "basura" que es el valor almacenado por última vez, en la posición de memoria reservada para la misma.

Error

Si no se inicializa un contador o un total, los resultados de su programa probablemente estarán incorrectos. Esto es un ejemplo de un error lógico.

Tome nota

lnicialice contadores y totales.




Advierta que el cálculo de promedios incluido en el programa anterior produjo un resultado entero. De hecho, en este ejemplo, la suma de las calificaciones es 396, misma que al dividirse entre 5 debería resultar en 79.2, es decir, un número con un punto decimal. Veremos cómo enfrentar estos números (conocidos como números de punto flotante) en el siguiente post.


/*****************************************************************/
/*                                                               */
/*   CASIO fx-9860G SDK Library                                  */
/*                                                               */
/*   File name : swhile.c                                 */
/*                                                               */
/*   Copyright (c) 2006 CASIO COMPUTER CO., LTD.                 */
/*                                                               */
/*****************************************************************/
#include "fxlib.h"
#include "stdio.h"
#include "inout.h"


//****************************************************************************
//  AddIn_main (Sample program main function)
//
//  param   :   isAppli   : 1 = This application is launched by MAIN MENU.
//                        : 0 = This application is launched by a strip in eACT application.
//
//              OptionNum : Strip number (0~3)
//                         (This parameter is only used when isAppli parameter is 0.)
//
//  retval  :   1 = No error / 0 = Error
//
//****************************************************************************
int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key;
int counter, grade, total, average;
char sgrade[17], saverage[17];
    Bdisp_AllClr_DDVRAM();

/*fase de inicialización */
total = 0;
counter = 1;

/*fase de procesamiento */
    while (counter <= 5){
locate (1, counter);
Print((unsigned char*) "Digite nota: ");
Scan((unsigned char*) sgrade);
total = total + atoi(sgrade);
counter = counter + 1;
}

/*fase final */
average = total / 5;
sprintf(saverage, "El promedio es %d", average);
locate (1, counter);
Print((unsigned char*) saverage);

    while(1){
        GetKey(&key);
    }

    return 1;
}




//****************************************************************************
//**************                                              ****************
//**************                 Notice!                      ****************
//**************                                              ****************
//**************  Please do not change the following source.  ****************
//**************                                              ****************
//****************************************************************************


#pragma section _BR_Size
unsigned long BR_Size;
#pragma section


#pragma section _TOP

//****************************************************************************
//  InitializeSystem
//
//  param   :   isAppli   : 1 = Application / 0 = eActivity
//              OptionNum : Option Number (only eActivity)
//
//  retval  :   1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
    return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}

#pragma section



No hay comentarios:

Publicar un comentario