Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/11/2010, 16:17
ecaful2000
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda con programa SOLUCIONADO

Hola a todos,

ya he corregido los errores y todo OK. Pongo el código correcto.

Bueno, el puñetero corrector online de la uni me daba error porque faltaba un getchar() que es un System("PAUSE"); en Windows.

Un saludo.

Código:
#include <stdio.h>

const int PAR_EVEN = 1;
const int PAR_ODD = 2;

typedef enum {true, false} bool;

void checkCIF(void);
void getCIFControl(int number, int *retControlNumber, char *retControlChar);
int addsUp2Digits(int n);
int addsUpDigitsParam(int n, int param);

int main(void)
{
    checkCIF();
	return 0;
}


void checkCIF()
{
    const char CONTROL_NUMBER = 'N';
    char firstChar, whiteSpace, typeControl;
    int number;
    int controlNumber, retControlNumber;
    char controlChar, retControlChar;
    bool bOk = true;


    scanf("%c", &firstChar);
    scanf("%d", &number);
    scanf("%c", &whiteSpace);
    scanf("%c", &typeControl);
    getchar();

    if(typeControl == CONTROL_NUMBER)
    {
       scanf("%d", &controlNumber);
    }
    else
    {
        scanf("%c", &controlChar);
    }

    getCIFControl(number, &retControlNumber, &retControlChar);

   if(typeControl==CONTROL_NUMBER)
    {
        bOk = (controlNumber==retControlNumber);
    }else{
        bOk = (controlChar==retControlChar);

    }

    if(bOk)
    {
        printf("%c",'O');
        printf("%c",'K');
    }
    else
    {
        printf("%c",'K');
        printf("%c",'O');
    }
}


void getCIFControl(int number, int *retControlNumber, char *retControlChar)
{
   int sumEven, sumOdd, total;

   sumEven = addsUpDigitsParam(number, PAR_EVEN);
   sumOdd = addsUpDigitsParam(number, PAR_ODD);

   total = ((sumEven + sumOdd)%10);
   total = 10 - total;

   *retControlChar = (char)(64 + total);

   if(total == 10)
   {
       *retControlNumber = 0;
   }else{
       *retControlNumber = total;
   }
}




int addsUp2Digits(int n)
{
	return ((n/10)+(n%10));
}

int addsUpDigitsParam(int n, int param)
{
	int d, sum, i;
	i = 1;
	d = (n%10);
	sum = 0;

	while(n!=0)
	{
	    if(param==PAR_EVEN)
	    {
	        if(i%2==0)
	        {
	            sum = sum + d;
	        }
        }else{
            if(i%2!=0)
            {
                d = 2 * d;
                if(d>9)
                {
                    d = addsUp2Digits(d);
                }
                sum = sum + d;
            }
        }
        n = n/10;
        d = n%10;
        i = i + 1;
	}
	return sum;
}