Programa que simula el sistema QMATIC, según el comentario enviado por un usuario del blog www.aprendoencasa.com proponiendo el usuario el siguiente ejercicio para resolver.

Se ha de tener en cuenta que muchas veces la forma de solucionar un programa no es única y por lo tanto puede y debe de haber personas que difieran en la forma de expresar la solución del mismo.




La práctica resuelta que se plantea consiste en la entrega de un ticket con una numeración para la atención al cliente tomando en cuenta si es Cliente (que posea cuenta en un banco por ejemplo) o que NO sea Cliente del Banco.

Para ello la  numeración debe partir para los Clientes del 101 al 199 y para los No Clientes del 301 al 399.

El orden de atención al cliente se ha de efectuar de la siguiente manera:

1 – Debe existir una opción en el menú para seleccionar si el usuario es Cliente o No Cliente.

2 – Además el menú contara con una opción para el cajero, siendo este pulsado para saber cuál de los clientes será atendido, tomando en cuenta los siguientes criterios:

a – Si existen más de diez (10) No Clientes y menos de cinco (5) Clientes se atenderán a dos (2) No Clientes y a un Cliente.

b – Si existen más de quince (15) Clientes y menos de ocho (8) No Clientes el procedimiento es: por cada tres (3) Clientes se atiende a un No Cliente.

c – Y de no encontrarse dentro de estas condiciones se atenderá a            uno de cada tipo, es decir, por cada Cliente a un No Cliente.

se ha de tener en cuenta que a veces el programa dará la sensación de que se esta equivocando al dar el ticket correspondiente a un cliente o no, esto es debido a que el usuario no ha especificado si cuando los valores correspondientes a clientes y no clientes determinan la inicialización de los correspondientes contadores o en su lugar se mantienen para mantener el orden independientemente del cambio de condicional.

/*
Programa que simula el sistema QMATIC, segun el comentario
enviado por un usuario del blog www.aprendoencasa.com
proponiendo el usuario el siguiente ejercicio para resolver.

se ha de tener en cuenta que muchas veces la forma de solucionar un
programa no es unica y por lo tanto puede y debe de haber personas
que difieran en la forma de expresar la solucion del mismo.

el programa consiste en la entrega de un ticket con una numeración para la 
atención al cliente tomando en cuenta si es Cliente (que posea cuenta en
un banco por ejemplo) o que NO sea Cliente del Banco.

Para ello la numeración debe partir para los Clientes del 101 al 199 
y para los No Clientes del 301 al 399.

El orden de atención al cliente se ha de efectuar de la siguiente manera:

1 - Debe existir una opción en el menú para seleccionar si el usuario 
es Cliente o No Cliente.

2 - Además el menú contara con una opción para el cajero, siendo este pulsado
para saber cuál de los clientes será atendido, tomando en cuenta los 
siguientes criterios:
           
           a - Si existen más de diez (10) No Clientes y menos de
            cinco (5) Clientes se atenderán a dos (2) No Clientes 
            y a un Cliente.
           b - Si existen más de quince (15) Clientes y menos de
            ocho (8) No Clientes el procedimiento es: 
            por cada tres (3) Clientes se atiende a un No Cliente.
           c - Y de no encontrarse dentro de estas condiciones se atenderá a
            uno de cada tipo, es decir, por cada Cliente a un No Cliente.

se ha de tener en cuenta que a veces el programa dara la sensacion de que
se esta equivocando al dar el ticket corespondiente a un cliente o no, esto
es debido a que el usuario no ha especificado si cuando los valores
correspondientes a clientes y no clientes determinan la inicializacion de
los correspondientes contadores o en su lugar se mantienen para mantener el
orden indendientemente del cambio de condicional.

*/

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int SiCliente=0;
    int NoCliente=0;
    
    int NumeracionSiCliente=101;
    int NumeracionNoCliente=301;
    
    int opcion=0;
    
    
    int CuantosClientes=0;
    int CuantosNoClientes=0;
    
    do {
        printf("\n1.- Si Cliente");
        printf("\n2.- No Cliente");
        printf("\n3.- CAJERO");
        printf("\n0.- Salir");
        printf("\n-------------------------------------------------------------");
        printf("\nNo Clientes : %d * Si Clientes : %d",NoCliente,SiCliente);
        printf("\nNumeracion Si Clientes: %d",NumeracionSiCliente);
        printf("\nNumeracion No Clientes: %d",NumeracionNoCliente); 
        printf("\n-------------------------------------------------------------\n");
        scanf(" %d",&opcion);
        switch(opcion) {
          case 1:
               SiCliente++;
          break;
          case 2:
               NoCliente++;
          break;
          case 3:
               // Si existe algun tipo de cliente se da numero al cajero
               if(SiCliente>0 || NoCliente>0) {
                 // Se comprueba primera condicion
                 if(SiCliente>15 && NoCliente<8) {
                   if(CuantosClientes>3) {
                     // Se visualiza un no cliente
                     printf("No Cliente No. %d",NumeracionNoCliente++);
                     CuantosClientes=0;
                     NoCliente--;
                   } else {
                     // Se han de visualizar tres clientes
                     printf("Si Cliente No. %d",NumeracionSiCliente++);
                     CuantosClientes++;
                     SiCliente--;     
                   }
                   // Segunda condicion
                 } else if(SiCliente<5 && NoCliente>10) {
                   if(CuantosNoClientes>2) {
                      // Se visualiza un cliente
                      printf("Si Cliente No. %d",NumeracionSiCliente++);
                      CuantosNoClientes=0;
                      SiCliente--;                           
                   } else {
                     // Se han de visualizar dos no clientes
                     printf("No Cliente No. %d",NumeracionNoCliente++);
                     CuantosNoClientes++;
                     NoCliente--;     
                   }         
                 } else {
                   // Cualquier otra condicion se ha de visualizar un cliente
                   // y un no cliente
                   if(SiCliente>0 && NoCliente>0) {
                     if(CuantosClientes>1) {
                       // se visualiza un no cliente
                       printf("No Cliente No. %d",NumeracionNoCliente++);
                       CuantosClientes=0;
                       NoCliente--;
                     } else {
                       // se visualiza un cliente
                       printf("Si Cliente No. %d",NumeracionSiCliente++);
                       CuantosClientes++;
                       SiCliente--;     
                     }
                   } else if(SiCliente==0 && NoCliente>0) {
                      // Se visualiza un no cliente
                       printf("No Cliente No. %d",NumeracionNoCliente++);
                       CuantosClientes=0;
                       NoCliente--;
                   } else if(SiCliente>0 && NoCliente==0) {
                       // se visualiza un cliente
                       printf("Si Cliente No. %d",NumeracionSiCliente++);
                       CuantosClientes++;
                       SiCliente--;     
                   }
                 }
                 if(NumeracionNoCliente>399) NumeracionNoCliente=301;
                 if(NumeracionSiCliente>199) NumeracionSiCliente=101;
                 if(NoCliente<0) NoCliente=0;
                 if(SiCliente<0) SiCliente=0;
               } 
          break;
        }
    } while(opcion!=0);
    
    
  
  system("PAUSE");	
  return 0;
}

El resultado de la ejecución del programa ha de ser similar al que se muestra a continuación.

Gracias por vuestra visita y un saludo universal!!!