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
// 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_digramas=0;
double conta_digramasT=0;
int i=0;
int j=0;
int l=0;
int m=0;
int k=0;
int Letr2 [MAXCOD][MAXCOD];
char ch1;
char ch2;
letras [a-zA-Z]|"á"|"à"|"ã"|"â"|"ç"|"é"|"è"|"ê"|"í"|"ì"|"ó"|"ò"|"õ"|"ô"|"ú"|"ù"|"ü"|"Á"|"À"|"Ã"|"Â"|"Ç"|"É"|"È"|"Ê"|"Í"|"Ì"|"Ó"|"Ò"|"Õ"|"Ô"|"Ú"|"Ù"|"Ü"
%%
{letras}{2} {
unput(yytext[1]);
if(yytext[0]<0)
i =-1*paraminuscula(yytext[0])+123;
else
i=tolower(yytext[0]);
if(yytext[1]<0)
j =-1*paraminuscula(yytext[1])+123;
else
j=tolower(yytext[1]);
Letr2[i][j]=Letr2[i][j]+1;
}
.|\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: digramas 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();
// contar número de digramas diferentes:
conta_digramas=0;
conta_digramasT=0;
for (i=0; i < MAXCOD; i++)
for(j=0;j < MAXCOD; j++){
if(Letr2[i][j] != 0)
conta_digramas=conta_digramas+1; // conta digramas diferentes
conta_digramasT=conta_digramasT+Letr2[i][j];
}
for (i=0; i < MAXCOD; i++)
for(j=0;j < MAXCOD; j++) {
if(Letr2[i][j]!=0) {
if (i>123)
k=-1*(i-123);
else
k=i;
if (j>123)
l=-1*(j-123);
else
l=j;
fprintf(fsai,"%c%c\t%0.6f \n",k,l,(Letr2[i][j]/conta_digramasT)*100);
}
}
}
}