Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
// Copyright (c) 2008 Pedro Quaresma, Coimbra, Portugal // Versão 2.0, Pedro Quaresma // versão 1.0, desenvolvida por Augusto Pinho // (sob supervisão de Pedro Quaresma) %{ #include /* os índices do vector vão coincidir com os valores da codificação dos caracteres, que no caso dos caracteres acentuados é ajustada de forma a não haver conflitos, 122+1+32 = 155, isto dado não se poderem considerar índices negativos. O gasto de memória que esta solução implica não é (muito) significativo. */ #define MAXCOD 155 int paraminuscula(char c) { /* A diferença entre letras maiúsculas e minúsculas é de 32, no caso das letras não acentuadas pode-se usar a função pré-definida tolower, no caso das letras acentuadas essa função não faz nada */ if (c >= -64 && c <= -36) return(c+32); else return(c); } %} double conta_inicial=0; double conta_final=0; double conta_inicialT=0; double conta_finalT=0; int i=0; int j=0; int k=0; int conta_digrama=0; int Inicial[MAXCOD]; int Final[MAXCOD]; char chI; char chF; /* ao colocar como "letra" o caracter '-' está-se a considerar as palavras do tipo ab-cd, em que "a" é a primeira letra, e "d" a última, sendo que "b" e "c" são letras no meio. É de notar que se considerou que: *) uma palavra do tipo "manda-chuva" conta como uma só palavra. *) o "-" não conta como letra. */ letras [a-zA-Z]|"á"|"à"|"ã"|"â"|"ç"|"é"|"è"|"ê"|"í"|"ì"|"ó"|"ò"|"õ"|"ô"|"ú"|"ù"|"ü"|"Á"|"À"|"Ã"|"Â"|"Ç"|"É"|"È"|"Ê"|"Í"|"Ì"|"Ó"|"Ò"|"Õ"|"Ô"|"Ú"|"Ù"|"Ü"|"-" %% {letras}{2,} { //Letras iniciais: // se o primeiro é diferente de - então if(yytext[0] != '-' ){ // se o numero for ocupar na tabela ASCII uma posição // negativa vou somar-lhe 123; if(yytext[0] < 0) { i =-1*paraminuscula(yytext[0])+123; Inicial[i]++; } else { i = tolower(yytext[0]); Inicial[i]++; } } // se o primeiro é igual a - então, considera-se que se está // no meio de uma palavra, caso do partir de uma palavra devido // à hifenização, como tal não se precede à contabilização //Letras finais j=yyleng; if(yytext[j-1] != '-') { // se o ultimo é diferente de - então if(yytext[j-1]<0) { k =-1*paraminuscula(yytext[j-1])+123; Final[k]++; } else { k = tolower(yytext[j-1]); Final[k]++; } } // se o último é igual a - então, considera-se que se está // no meio de uma palavra, caso do partir de uma palavra devido // à hifenização, como tal não se precede à contabilização if(yytext[j-1] == '-' && yyleng > 2) { if(yytext[j-2]<0) { k =-1*paraminuscula(yytext[j-2])+123; Final[k]++; } else { k = tolower(yytext[j-2]); Final[k]++; } } } .|\n %% main(int argc, char *argv[]) { // interface linha de comando // media char *ficheiroEntrada,*ficheiroSaida; FILE *fsai, *fopen(); if (argc<=2) { // valores de entrada insuficientes (2+1) printf("\nUtilização: curtas nome_ficheiro_entrada nome_ficheiro_saída\n\n"); return; } // obtêm os argumentos da linha de comando ficheiroEntrada=argv[1]; ficheiroSaida=argv[2]; printf ("\nFicheiro a Processar: %s\nFicheiro com resultados: %s\n\n",ficheiroEntrada,ficheiroSaida); if ((yyin = fopen(ficheiroEntrada,"r")) == NULL) { printf("Não foi possível abrir o ficheiro %s\n",ficheiroEntrada); } else if ((fsai = fopen(ficheiroSaida,"w")) == NULL) { printf("Não foi possível abrir para escrita o ficheiro %s\n",ficheiroSaida); } else { // processar yylex(); fprintf(fsai,"Letras Iniciais:\n"); //d2=conta_letra; // Conta número de letras iniciais: conta_inicial=0; for (i=0; i < MAXCOD; i++) { if(Inicial[i] != 0) { conta_inicial=conta_inicial+1; conta_inicialT=conta_inicialT+Inicial[i];} } for (i=0; i < MAXCOD; i++) { if(Inicial[i] != 0) { if (i>123) { chI=-1*(i-123); fprintf(fsai,"%c\t%0.6f \n",chI,(Inicial[i]/conta_inicialT)*100);} else { chI=i; fprintf(fsai,"%c\t%0.6f \n",chI,(Inicial[i]/conta_inicialT)*100);} } } fprintf(fsai,"\n\nLetras Finais: \n"); // Conta número de letras finais usadas: conta_final=0; conta_finalT=0; for (i=0; i < MAXCOD; i++) { if(Final[i] !=0) { conta_final=conta_final+1; conta_finalT=conta_finalT+Final[i]; } } for (i=0; i < MAXCOD; i++) { if(Final[i] !=0) { if (i>123) { chF=-1*(i-123); fprintf(fsai,"%c\t%0.6f \n",chF,(Final[i]/conta_finalT)*100); } else { chF=i; fprintf(fsai,"%c\t%0.6f \n",chF,(Final[i]/conta_finalT)*100); } } } } }