
domingo, 25 de fevereiro de 2007
Modelagem de dados DER 1

Modelagem de dados DER 2

Projetar um Diagrama Entidade-Relacionamento para um sistema de gestão de campeonatos de F1(Fórmula 1). O sistema necessita manter, no mínimo, as seguintes informações:
Os campeonatos disputados, registrando o ano do campeonato, a data de inicio e a data de termino. Os autódromos onde são realizadas as corridas, registrando o nome do autódromo, o país, a data de inauguração, e a extensão (em quilômetros).
As corridas (grande-prêmios) disputadas, armazenando a data da corrida, o horário de início, o
horário de término, e o número de voltas disputadas. Cada corrida pertence a um campeonato e é disputada em um autódromo. Os pilotos participantes de um campeonato, armazenando o nome do piloto, a data de nascimento e o país de origem. Cada piloto estará vinculado a uma equipe durante um ou mais campeonatos. Um piloto não poderã correr por duas ou mais equipes em um mesmo campeonato. As equipes de fórmula 1, registrando o nome da equipe, a data de fundação e o país de origem. A classificação dos pilotos em uma corrida, registrando a posição final e o número de pontos obtidos. Também deve ser registrada a classificação de treino (posição de largada) para cada piloto em umacorrida.
quarta-feira, 21 de fevereiro de 2007
Broly - O lendário Sayajin
A história de Brolly começa com ele compartilhando o mesmo lugar de nascimento que Son Goku e daí o ódio mortal de Brolly por ele. O choro de Goku o irritava e aparentemente fez com que Brolly enlouquecesse. Apesar disto sabemos pouco desta etapa da vida de Brolly. Quase todos os saiyajins morreram perante o ataque de Freeza ao planeta Vegeta. Brolly foi um dos poucos que sobreviveu, junto de Paragus, seu pai, graça ao seu enorme poder ele conseguiu vagar no espaço e se proteger da explosão.
Paragus possuia uma enorme sede de vingança, porque, antes da explosão do planeta Vegeta, o Rei Vegeta, ordenou que matassem Paragus e seu filho Brolly, temendo o poder de Brolly. Paragus argumentou que Brolly seria o único que poderia enfrentar Freeza, mas de nada adiantou e os dois foram gravemente feridos. Para se vingar, Paragus, arquiteta um plano para atrair Vegeta, filho do Rei, para um planeta que está para se chocar com um meteoro. Só que não só Vegeta mas Trunks, Gohan, Mestre Kame, Goku e outros vão para o planeta ajudar Vegeta. Paragus possuia um aparelho que controlava o poder de Brolly, que nem mesmo o próprio Brolly detinha controle sobre o seu poder. Sendo capaz de destruir uma gálaxia inteira, como ele o fez.
Ao ver Goku, Brolly se desencadearia por completo. Não mais, seu pai, Paragus, conseguindo o controla-lo. E Brolly se transforma no Lendário Super Saiyajin. Com essa forma, ele derrota facilmente Trunks, Gohan e Goku. Piccolo chega no momento que ele mataria Gohan que estava agonizando junto com Trunks e Goku que estava morrendo. Com a chegada de Piccolo uma nova batalha começa, mas não muito diferente da primeira, Piccolo antes de ser derrotado por Brolly, mexe com orgulho de Vegeta, fazendo-o entrar no campo de Batalha.
Um a um todos foram sendo vencido facilmente por Brolly, Piccolo, Gohan, Trunks e Vegeta caíram perante o Lendário Super Saiyajin. Somente Goku, manteve-se de pé, muito debilitado e não conseguia manter uma luta com Brolly, que o atacava brutalmente. Goku diante dessa situação, pediu para os guerreiros que foram vencido por Brolly, dessem a ele, a energia que eles possuiam, para assim, poder enfrentar o Brolly. Piccollo, Gohan e Trunks, prontamente doam suas energias para Goku mas Vegeta se recusa a passar sua energia. Após relutar um pouco, Vegeta acaba cedendo e passando sua energia para Goku.
Goku conseguiu reunir o poder de todos os seus amigos em um só golpe, repelindo o ataque de Brolly e o ferindo pela primeira vez gravemente. Não tendo mais tempo, Goku reuni todos os seus amigos, e os sobrevivente do planeta e os teletransporta para a nave em que Piccolo veio. Poucos segundos depois o planeta explode, mas Brolly também consegue fugir em sua nave, mesmo estando gravemente ferido. Brolly ficou vagando no espaço até que chegou a terra. Seu poder incrívelmente alto, permitiu-o uma vida recuperação de todos os seus fermentos da luta anterior com Goku...
Nada haveria de desperta-lo do seu sono profundo, exceto a voz de Goten, que ele imediatamente reconheceu como a de Kakarotto (nome verdadeiro de Goku). O despertar do imenso poder de Brolly teve que ser combatido pelas forças de Goten e Trunks que não conseguiram fazer frente ao Brolly, que se quer precisou usar sua forma de Lendário Super Saiyajin para derrota-los. Gohan, ao sentir o KI de Brolly, vai imediatamente ao campo de batalha, onde Goten e Trunks já haviam sido derrotados por Brolly.
Uma nova batalha se inicia, agora lutando contra Gohan, Brolly usa sua forma de Lendário Super Saiyajin e Gohan não deixa por menos usando sua forma de Super Saiyajin 2. Mesmo estando como Super Saiyajin 2, Gohan não consegue deter Brolly é após lutar contra ele é vencido novamente, sendo salvo por Kurillin.
Goten, que havia reunidos as 7 esferas do dragão junto com Trunks, vendo o esforço heróico do irmão para salva-los pede, indiretamente, as esferas do dragão que os ajudem, e ele é atendido. Shei-Long, trás Goku, para o campo de batalha. Fazendo um triplo Kamehameha, Goku Super Saiyajin, Goten Super Saiyajin e Gohan Super Saiyajin 2, conseguem repelir o ataque de Brolly e joga-lo contra o Sol. Finalmente derrotando e matando um dos mais poderosos guerreiros que apareceu.
Ghost Rider

segunda-feira, 12 de fevereiro de 2007
Busca de Padrões

A busca de padrões (amplamente utilizada na informática) consiste em dado um conjunto de caracteres de tamanho n (que alguns chamam de “texto”) e outro conjunto menor ou igual chamado de padrão (com tamanho m). Assim, é realizada a procura no texto da posição (se ocorrer) referente ao padrão dado. Mais precisamente, queremos achar o índice o qual inicia o padrão no texto. Se for o caso, podemos verificar o texto todo para busca de múltiplas ocorrências. O funcionamento da busca de padrão é simples, se o primeiro caractere é idêntico à um referente no texto, todos os sucessores devem ser idênticos também, até finalizar o padrão. Caso ocorra que um caractere não seja igual, desloca-se o padrão em um caractere até chegar ao fim do texto ou encontrar o padrão.
Algoritmos
#include
#include
#include
#include
#define TAM 1000
//variaveis globais para manipulacao das funcoes abaixo
int comparacoes = 0 ;
int pula[53];
int proximo[11]; //vetor pro KMP proximos valores
//---------------------------------------------------------------------//
//PUC MINAS - SÃO GABRIEL
//Alunos - André Gouvêa Horst
//Data - 4/06/2005
//Programa - varios metodos de reconhecimento de padrão
//---------------------------------------------------------------------//
void pulaKMP(char *p){
int i = 0, j, m = strlen(p);
j = proximo[0] =-1;
while(i
j = proximo[j];
i++;
j++;
if(p[i]==p[j])
proximo[i] = proximo[j];
else
proximo[i] = j;
}
for (i = 0; i < m; i++)
cout<<"proximo ["<}
int kmp(char *p, char *a){
int i, j, m = strlen(p), n = strlen(a);
comparacoes = 0;
pulaKMP(p);
int final;
int inicio = clock();
for(i = 0, j = 0; j < m && i < n; i++, j++){
cout<<"Comprarando "< cout<<"Numero de comparacoes "<
}
else{
cout<<"Falha! "<<(i)<
}
}
int forcaBruta(char *p, char *a){
int i = 0, j = 0, n = 0, m = 0;
comparacoes = 0;
n = strlen(a);
m = strlen(p);
int final;
int inicio = clock();
for(i = 0, j = 0; j < m && i < n; i=i, j=j){
cout< if (a[i]!= p[j]) {
comparacoes++;
i = i-(j-1);
j = 0;
}
else{
comparacoes++;
i++;
j++;
}
}
final = clock();
if(j == m){
cout<<"Comparacao comeca com "<<(i-m)<
}
else{
cout<<"Falha!"<<(i)<
}
}
void initpula(char *p) {
int i, l = strlen(p);
cout<<"pula vetor..."<
pula[i] = l;
for(i = 0; i <= l - 1; i++){
cout<<"pula["<
pula[p[i]-65]= l - 1 - i;
}
cout<
int boyerMoore(char *p, char *a){
int i, j, t, M = strlen(p), N = strlen(a);
initpula(p);
int final;
int inicio = clock();
for(i = M-1, j = M-1; j >= 0; i--, j--){
while(a[i] != p[j]){
comparacoes++;
cout< t = pula[a[i]-65];
cout<<" pulando="" valores="" "<
if(i >= N){
cout<<"Combinacao nao encontrada! "<
}
j = M-1;
}
comparacoes++;
}
final = clock();
cout<<"Combinacao comeca com "< cout<<"Numero de comparacoes "<
}
void main(){
//variaveis com textos default para textes do programa
char t1[] = "CACACAU";
char p1[] = "CACAU";
char t2[] = "GCATCGCAGAGAGTATACAGTACG";
char p2[] = "GCAGAGAG";
char t3[] = "ABACAABADCABACABAABB";
char p3[] = "ABACAB";
//variavel para entrada de dados a partir do teclado
char t[TAM], p[TAM];
int opcao = 0; //para controlar o menu
while(1){
cout<<"\nDigite os valores para testar\n";
cout<<"\n(1) - Texto = CACACAU e Padrao = CACAU ";
cout<<"\n(2) - Texto = GCATCGCAGAGAGTATACAGTACG e Padrao = GCAGAGAG ";
cout<<"\n(3) - Texto = ABACAABADCABACABAABB e Padrao = ABACAB ";
cout<<"\n(4) - Valores digitados a partir do teclado ";
cout<<"\n(5) - Sair do programa ";
cout<<"\n\nEscolha uma opcao ?\b";
cin>>opcao;
if(opcao == 1){
cout<<"\n\n# BOYER-MOORE #\n\n";
boyerMoore(p1,t1);
cout<<"\n\n# KMP #\n\n";
kmp(p1,t1);
cout<<"\n\n# FORCA-BRUTA #\n\n";
forcaBruta(p1,t1);
}
if(opcao == 2){
cout<<"\n\n# BOYER-MOORE #\n\n";
boyerMoore(p2,t2);
cout<<"\n\n# KMP #\n\n";
kmp(p2,t2);
cout<<"\n\n# FORCA-BRUTA #\n\n";
forcaBruta(p2,t2);
}
if(opcao == 3){
cout<<"\n\n# BOYER-MOORE #\n\n";
boyerMoore(p3,t3);
cout<<"\n\n# KMP #\n\n";
kmp(p3,t3);
cout<<"\n\n# FORCA-BRUTA #\n\n";
forcaBruta(p3,t3);
}
if(opcao == 4){
cout<<"digite a sequencia de texto ";
fflush(stdin);
gets(t);
cout<<"digite a sequencia a ser procurada";
fflush(stdin);
gets(p);
if(strlen(t) <= strlen(t)){
int v1=strlen(t),v2=strlen(p);
cout<<"\nTexto nao pode ser maior que o padrao de busca! ";
while(v1 <= v2 ){
cout<<"digite a sequencia de texto ";
fflush(stdin);
gets(t);
cout<<"digite a sequencia a ser procurada";
fflush(stdin);
gets(p);
v1=strlen(t);
v2=strlen(p);
}
}
cout<<"\n\n# BOYER-MOORE #\n\n";
boyerMoore(p,t);
cout<<"\n\n# KMP #\n\n";
kmp(p,t);
cout<<"\n\n# FORCA-BRUTA #\n\n";
forcaBruta(p,t);
}
if(opcao == 5)
exit(1); //força a saida!
} //fim while do menu
} //fim do programa principal
Analise dos algoritmos
Força Bruta
O algoritmo apresentado não é eficiente, pois não usufruiu de nenhuma otimização no processamento dos caracteres. Sua complexidade de tempo é O((n-m+1)*m).
Boyer – Moore
A análise do algoritmo de Boyer- depende apenas do padrão e do alfabeto em questão. A complexidade de tempo e de espaço do BM para esta fase é O(m+c). O pior caso do algoritmo é O(n+M) onde r é igual ao número total de casamentos, o que torna o algoritmo ineficiente quando o número de casamentos é grande. O melhor caso e o caso médio para o algoritmo é O(n/m), ou seja, um resultado muito bom!
KMP
A complexidade do KMP é O(n) + O(m) . Quando se tem textos onde é difícil encontrar palavras que possuem caracteres repetidos, sufixo igual ao prefixo, a complexidade do KMP aproxima-se à do Força-Bruta O(mxn).
domingo, 11 de fevereiro de 2007
P2P

EA-Share é um programa de comunicação peer-to-peer como o Napster. A idéia é disponibilizar a lista de arquivos locais em um servidor para que todos os clientes possam pesquisá-los. Porém a transferência de arquivos é feita entre cada usuário diretamente sem a passagem dos dados pelo servidor.
O servidor é implementado em Unix e os clientes em Windows . Para isso ele deve fazer o controle das conexões TCP/IP ativas e tratar eventuais desconexões. Deve ser implementado um protocolo simples de mensagens, entrada e saída de usuários. Toda busca de arquivos efetuada por um cliente, é pesquisada nos arquivos do servidor e o cliente deve receber o resultado da busca contendo o número IP dos demais clientes que possuem o arquivo requisitado. A transferência é feita diretamente entre os clientes.