Programa Lex para comprobar números perfectos

Lex es un programa de computadora que genera analizadores léxicos y fue escrito por Mike Lesk y Eric Schmidt. Lex lee un flujo de entrada que especifica el analizador léxico y genera el código fuente que implementa el lexer en el lenguaje de programación C.

Descripción: Número perfecto , entero positivo que es igual a la suma de sus divisores propios, por ejemplo: 6 = 1+2+3.

Ejemplos:

Input: 3
Output: 3 is not perfect number

Input: 6
Output: 6 is perfect number 

Implementación:

/*Lex program to check perfect numbers*/
  
%
{
#include <string.h>
    void check(char*);
    %
}
  
/*Rule Section*/
% %
        [0 - 9]
    + check(yytext);
% % int main()
{
    // the input stream pointer
    extern FILE* yyin;
  
    // open a file handle to a particular file
    yyin = fopen("num", "r");
  
    // The function that starts the analysis
    yylex();
    return 0;
}
void check(char* a)
{
    int len = strlen(a), i, num = 0;
  
    for (i = 0; i < len; i++)
        num = num * 10 + (a[i] - '0');
  
    int x = 0, temp = num;
    for (i = 1; i < num; i++) {
        if (num % i == 0)
            x = x + i;
    }
    if (x == temp)
        printf("%d is perfect number \n", num);
  
    else
        printf("%d is not perfect number \n", num);
}

Producción:

Publicación traducida automáticamente

Artículo escrito por thakur_aman 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 *