Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con programa

Estas en el tema de Ayuda con programa en el foro de C/C++ en Foros del Web. Hola a todos, estoy empezando en C y tengo un problema con este código en C de la uni. Creo que está bien codificado, pero ...
  #1 (permalink)  
Antiguo 08/11/2010, 14:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
Ayuda con programa

Hola a todos,

estoy empezando en C y tengo un problema con este código en C de la uni. Creo que está bien codificado, pero no consigo resolver el tema de la variable booleana. Creo que según la versión de C admite o no y hay que definirla con typedef enun {TRUE, FALSE} boolean, pero no consigo hacerlo, ruego me ayudéis. Ahora ya me funciona el programa después de algunos pormenores, pero cuando lo subo a la uni el corrector me da un fallo por el tema del boolean

In function 'checkCIF':
30: error: 'bool' undeclared (first use in this function)
30: error: (Each undeclared identifier is reported only once
30: error: for each function it appears in.)
30: error: expected ';' before 'bOk'
63: error: 'bOk' undeclared (first use in this function)

Gracias por la ayuda.

Código:
#include <stdio.h>

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

//typedef enum {TRUE, FALSE} boolean;

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()                                 /*Declaració de constants*/
{
    const char CONTROL_NUMBER = 'N';

    char firstChar, whiteSpace, typeControl;        /*Declaració de variables*/
    int number;
    int controlNumber, retControlNumber;
    char controlChar, retControlChar;
    bool bOk;


    printf("Introduïu la lletra inicial (a-z)\n");  /*Introducció de valors*/
    scanf("%c", &firstChar);
    getchar();
    printf("Introduïu el número de control (7 cifres)\n");
    scanf("%d", &number);
    getchar();
    printf("Introduïu un espai en blanc\n");        //Pot ser whiteSpace = ' ';
    scanf("%c", &whiteSpace);
    getchar();
    printf("Introduïu N si número o C si caràcter al dígit de control\n");
    scanf("%c", &typeControl);
    getchar();

    if(typeControl == CONTROL_NUMBER)
    {
        printf("Introduïu el número del dígit de control\n");
        scanf("%d", &controlNumber);
        getchar();
        printf("El CIF és: %c%d%c%c %d\n",firstChar,number,whiteSpace,typeControl,controlNumber);
    }else{
        printf("Introduïu el caràcter del dígit de control\n");
        scanf("%c", &controlChar);
        getchar();
        printf("El CIF és: %c%d%c%c %c\n",firstChar,number,whiteSpace,typeControl,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;
}

Última edición por ecaful2000; 08/11/2010 a las 15:10
  #2 (permalink)  
Antiguo 08/11/2010, 16:17
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
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;
}

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:41.