domingo, 25 de fevereiro de 2007

Modelagem de dados DER 1

Os clientes da agência, armazenando o nome, o endereço (composto de logradouro, número, complemento, cidade, CEP e UF) e os telefones. Para as pessoas físicas, deve-se armazenar também o CPF e RG; e para as pessoas jurídicas, deve-se armazenar o CNPJ e o número de funcionários. Cada cliente recebe um código único ao ser cadastrado. Cada pessoa física pode possuir diversos cartões de crédito, cada qual com um número e uma bandeira (ex: MasterCard, Visa, etc). Os clientes adquirem diversos pacotes turísticos. Cada pacote é identificado por um código e possui uma descrição, data de saída, data de chegada, e valor. Um pacote é adquirido por vários clientes. Os pacotes são formados por diversos pontos turísticos, que podem se repetir em diferentes pacotes. Cada ponto turístico tem uma descrição e está localizado em uma cidade.

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.

Muitos historiadores acreditam que o lendário guerreiro Super Saiyajin, é o Super Saiyajin nível 4. Por isso a existência de Brolly causa muita controvérsia, já que este Super Saiyajin nasceu com uma descomunal força e em muitos livros é considerado o Super Saiyajin da lenda.
kamehamehaaaaaaaaaaaaaaaaaaa um dos desenhos que eu mais gosto... rsss

Ghost Rider


Não aguentei e tive que baixar a versão filmada... Na minha opinião, o filme é... assistível, mas enjoativo, antes do final eu já tinha perdido minha paciência, uma nota ? De 1 a 10 ... nota 6.5 porque eu tive um pouco de paciência para assistir até o final..
Como cada ponto de vista é a vista de um ponto, o que pode ser ruim para mim, pode ser bom para vocês, então não leve minha opinião muito a sério, assista ao filme e dê sua própria nota !
Bom filme pra vocês que ainda não viram...

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 //fflush(stdin) e
#include //pra pegar o tempo! clock();
#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 while (j>= 0 && p[i] != p[j])
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 "< cout<<"Tempo "< return i-m;
}
else{
cout<<"Falha! "<<(i)< cout<<"Numero de comparacoes "< cout<<"Tempo "< return 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)< cout<<"Numero de comparacoes "< cout<<"Tempo "< return i-m;
}
else{
cout<<"Falha!"<<(i)< cout<<"Numero de comparacoes "< cout<<"Tempo "< return i;
}
}

void initpula(char *p) {
int i, l = strlen(p);
cout<<"pula vetor..."< for(i = 0; i <= 52; i++)
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< i += (M-j > t) ? M-j : t;
if(i >= N){
cout<<"Combinacao nao encontrada! "< return N;
}
j = M-1;
}
comparacoes++;
}
final = clock();
cout<<"Combinacao comeca com "< cout<<"Numero de comparacoes "< cout<<"Tempo "< return i;
}

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


O P2P ou Peer-to-Peer é uma tecnologia para estabelecer uma espécie de rede de computadores virtual, onde cada estação possui capacidades e responsabilidades equivalentes. Difere da arquitetura cliente/servidor, no qual alguns computadores são dedicados a servirem dados a outros. Esta definição, porém, ainda é demasiado sucinta para representar todos os significados do termo Peer-to-Peer.

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.


Este foi um trabalho de faculdade na matéria Redes de Computadores, feito no final de ano de 2006.
Este software não tem qualquer tipo de garantia, e o autor não poderá ser responsabilizado por qualquer tipo de prejuízo causado pela sua execução ou distribuição do mesmo. A execução deste programa correrá por sua conta e risco. Este programa tem licença gratuita e pode ser distribuído livremente...

UPDATE 06/05/2007 - Novo Link p/ Download
Download - EA - SHARE (código fonte e executáveis em anexo)

Saiba mais sobre P2P(wikipédia)