Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Agosto 21, 2008, 08:02:07
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: programa ke lee palabras reservadas de pascal 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: programa ke lee palabras reservadas de pascal  (Leído 506 veces)
wiker
Recien Llegado
*
Desconectado Desconectado

Mensajes: 14


Ver Perfil Email
« en: Octubre 18, 2007, 06:29:24 »

bueno a ki les dejo el codigo de un programa que lee palabras reservadas de pascal y devuelve el numero de veces que se repite una palabra reservada de un archivo, se aceptan sugerencias para ir mejorando este programa.......


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <ctype.h>

enum PALid{
    P_AND,
    P_NINGUNO,
    P_BEGIN,
    P_END,
    P_ARRAY,
    P_MOD,
    P_INTERFACE,
    P_PROGRAM,
    P_LABEL,
    P_VAR,
    P_OBJECT,
    P_PACKED,
    P_RECORD,
    P_REPEAT,
    P_SELF,
    P_THEN,
    P_TO,
    P_TYPE,
    P_IF,
    P_ELSE,
    P_STRING,
};
static struct
{
    char    *codigo;
    enum PALid id;
}
lista_dpalabras[]=
{
    {"Else",      P_ELSE},
    {"If",        P_IF},
    {"And",       P_AND},
    {"Object",    P_OBJECT},
    {"Packed",    P_PACKED},
    {"Record",    P_RECORD},
    {"Repeat",    P_REPEAT},
    {"Self",       P_SELF},
    {"String",     P_STRING},
    {"Then",       P_THEN},
    {"To",         P_TO},
    {"Type",       P_TYPE},
    {"Begin",      P_BEGIN},
    {"End",        P_END},
    {"Array",      P_ARRAY},
    {"Mod",        P_MOD},
    {"Interface",  P_INTERFACE},
    {"Program",    P_PROGRAM},
    {"Label",      P_LABEL},
    {"Var",        P_VAR},
    {NULL,           P_NINGUNO}
};

char texto[128];
int itexto=0, c;
char nomArchi[13];

int cif=-1, cels=0, cvar=-1,cty=0,cto=0,cthe=0,cstri=0,celf=0,crep=0;
int crek=0, cpro=0,cpak=0,cob=0,cmod=0,clab=0,cfas=0,cen=0;
int carr=0, cand=0, cb=0;

int main(){
    clrscr();
    int  i;
     char  etiqueta[100];
    FILE  *archivo;
    enum PALid codigo;

    clrscr();
   printf("\nIntroduce nombre del archivo: ");
   cin.getline(nomArchi,13);

    archivo=fopen(nomArchi, "r"); /* Abre el archivo para lectura */
    if (archivo == NULL)
    {
   printf("El archivo no existe...\n");
   exit(0);
    }
    else  {
   do
   {
      c=fscanf(archivo,"%s",etiqueta);
      if(c!=EOF){
      codigo=P_NINGUNO;
      for(i=0; lista_dpalabras.codigo!=NULL; i++)
      {
          if(stricmp(etiqueta,lista_dpalabras.codigo)==0)
          {
         codigo=lista_dpalabras.id;
         break;
          }
      }
      switch (codigo)
      {
          case P_NINGUNO:
          break;
          case P_BEGIN:
          cb++;
          break;
          case P_END:
          cen++;
          break;
          case P_ARRAY:
          carr++;
          break;
          case P_MOD:
          cmod++;
          break;
          case P_INTERFACE:
          cfas++;
          break;
          case P_PROGRAM:
          cpro++;
          break;
          case P_LABEL:
          clab++;
          break;
          case P_VAR:
          cvar++;
          break;
          case P_AND:
          cand++;
          break;
          case P_IF:
          cif++;
          break;
          case P_OBJECT:
          cob++;
          break;
          case P_PACKED:
          cpak++;
          break;
          case P_ELSE:
          cels++;
          break;
          case P_RECORD:
          crek++;
          break;
          case P_REPEAT:
          crep++;
          break;
          case P_SELF:
          celf++;
          break;
          case P_STRING:
          cstri++;
          break;
          case P_THEN:
          cthe++;
          break;
          case P_TO:
          cto++;
          break;
          case P_TYPE:
          cty++;
          break;
      }
   }
   } while(c!=EOF);
    }
    printf("\n And %d",cand);
    printf("\n Array %d",carr);
    printf("\n Begin %d",cb);
    printf("\n End %d",cen);
    printf("\n Interfce %d",cfas);
    printf("\n Label %d",clab);
    printf("\n Mod %d",cmod);
    printf("\n If %d",cif);
    printf("\n Object %d",cob);
    printf("\n Else %d",cels);
    printf("\n Packet %d",cpak);
    printf("\n Program %d",cpro);
    printf("\n Record %d",crek);
    printf("\n Repeat %d",crep);
    printf("\n Self %d",celf);
    printf("\n String %d",cstri);
    printf("\n Then %d",cthe);
    printf("\n To %d",cto);
    printf("\n Type %d",cty);
    printf("\n Var %d",cvar);

    fclose(archivo);
    getch();
    return 0;
}
En línea
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #1 en: Octubre 20, 2007, 04:38:44 »

Buenas

Me parece que quedaria mejor algo como esto... (se aceptan criticas)

PD: Cabe la aclaracion de que no lo probe asi que lo mas probable es que no funcione... es solo una idea

Código:
#include <stdio.h>
#include <string.h>

struct{
    char                *codigo;
    int                   count;
} words[]= {{"Else", 0}, {"If", 0}, {"And", 0}, {"Object", 0}, {"Packed", 0},
            {"Record", 0}, {"Repeat", 0}, {"Self", 0}, {"String", 0}, {"Then", 0},
            {"To", 0}, {"Type", 0}, {"Begin", 0}, {"End", 0}, {"Array", 0}, {"Mod", 0},
            {"Interface", 0}, {"Program",  0}, {"Label", 0}, {"Var", 0}, {NULL, 0} };

int main(int argc, char *argv[])
{
    char         line[100];
    FILE         *f;
    int            i, j;


    if(argc != 2){
       printf("Error de parametros\n");
       return 1;
    }

    if((f = fopen(argv[1], "r")) == NULL){
       printf("Error al abrir archivo %s\n", argv[1]);
       return 1;
    }

     while(!feof(f)){
          fgets(line, 100, f);
          for(i = 0; i < strlen(line); ++i){
               for(j = 0; words[j].codigo; ++j)
                  if(strncmp(line + i, words[j].codigo , strlen(words[j].codigo)) == 0)
                       words[j].count++;
          }

     }
     
    for(i = 0; words[i].codigo; ++i){
         printf("%s se repitio %d\n", words[i].codigo, words[i].count);
   }
    return 0;
}



En línea

Connoisseurs of C semantics find C++ inferior to ++C

Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: programa ke lee palabras reservadas de pascal « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC