Mostrando postagens com marcador Computação. Mostrar todas as postagens
Mostrando postagens com marcador Computação. Mostrar todas as postagens

sábado, 17 de março de 2012

Condicional Otimizado de Programação Orientada a Objeto

Como vocês devem saber, nas linguagens modernas, o operador lógico condicional e (&&) avalia o primeiro termo da condição e se for falso já sai da condição sem avaliar as outras condições dentro da mesma expressão condicional e o operador lógico condicional ou (||) avalia o primeiro termo da condição e se for verdadeiro já entra na condição.

Em linguagens orientada a objetos, um objeto pode ser nulo, quando ele é nulo, você não pode chamar métodos.

Portanto, se você for verificar se um objeto não é nulo e se um método dele tem valor igual a alguma coisa, você pode fazer a verificação de null no início da expressão condicional, para não causar null pointer exception.

Por Exemplo:

Casa casa = pessoa.getCasa();

if(casa!=null && casa.hasPortaMadeira()){

casa.passarVerniz();

}

domingo, 5 de fevereiro de 2012

Problema da Alocação de Professores

Dada as seguintes tabelas:

- Tabela tipo 1: Curso(disciplina);
- Tabela tipo 2: Disponibilidade_Professor (disciplina, professor);
- Tabela tipo 3: Disponibilidade_Tempo (professor, hora);
- Tabela tipo 4: Disciplina[i]_Professor_Tempo(professor-horario, horario)


Como achar as possíveis soluções para o problema com operações de banco de dados?

Contribuição de Wellington:

----------------

"Esse problema é um problema clássico em computação conhecido como "Problema de Alocação" e tem aplicabilidade em vários

ramos da Economia. Ele não é trivial e acho que é um pouco difícil resolver só com BD. Tradicionalmente, é considerado

NP-difícil e é resolvido de forma aproximada com meta-heurísticas como algoritmos genéticos, busca tabu, recozimento

simulado. Ou, de maneira exata com PLI (programação linear inteira)."

Dá uma olhada nesses caras aqui, por exemplo. São problemas similares:

Nurse Scheduling Problem
Job Shop Scheduling

---------------

Minha solução usando banco de dados MySQL:


disciplinas_curso =

SELECT disciplina FROM Curso;

Da primeira a última disciplina de disciplinas_curso faça:

Disciplina[i]_Professor_Tempo =

SELECT concat(dt.professor,'-', dt.hora) as P_H, dt.hora
FROM Disponibilidade_Tempo dt, Disponibilidade_Professor dp
WHERE dp.professor=dt.professor
AND dp.disciplina = $disciplina_curso;

Vamos supor que o Curso tem 3 disciplinas, para resolver o problema, temos que fazer um produto cartesiano condicional:

Soluções =
SELECT d1.P_H, d2.P_H, d3.P_H
FROM Disciplina[1]_Professor_Tempo d1, Disciplina[2]_Professor_Tempo d2, Disciplina[3]_Professor_Tempo d3
WHERE d1.hora <> d2.hora
AND d1.hora <> d3.hora
AND d2.hora <> d3.hora

A Quantidade de verificações são Qtde_LinhasD1*Qtde_LinhasD2*Qtde_LinhasD3

Uma forma de diminuir o número de verificações é garantir que o produto cartesiano é feito de 2 em 2 tabelas de disciplinas, por exemplo produzir soluções1= Select de D1,D2 e Soluções2= Select de D3, D4. A solução final é

Soluçõesf=Select de Soluções1, Soluções2.

Com isso, a quantidade de verificações são: 2* (Qtde_LD1*QtdeLD2 + Qtde_LD3*QtdeLD4)

Espero que tenham gostado dessas soluções :-)

quarta-feira, 30 de novembro de 2011

AA EMERGÊNCIA SAMU

Mensagem do SAMU que está circulando por e-mail:

**SAMU INFORMA: UTILIDADE PÚBLICA IMPORTANTE **

As ambulâncias e emergências médicas perceberam que muitas vezes nos acidentes da estrada os feridos têm um celular consigo. No entanto, na hora de intervir com estes doentes, não sabem qual a pessoa a contatar na longa lista de telefones existentes no celular do acidentado.

Para tal, o SAMU lança a idéia de que todas as pessoas acrescentem na sua longa lista de contatos o NUMERO DA PESSOA a contatar em caso de emergência. Tal deverá ser feito da seguinte forma: **'AA Emergencia'** (as letras AA são para que apareça sempre este contato em primeiro lugar na lista de contatos).

É simples, não custa nada e pode ajudar muito ao SAMU ou quem nos acuda. Se lhe parecer correta a proposta que lhe fazemos, passe esta mensagem a todos os seus amigos, familiares e conhecidos.

É tão-somente mais um dado que registramos no nosso celular e que pode ser a nossa salvação. Por favor, não destrua esta mensagem! Reenvie-o a quem possa dar-lhe uma boa utilidade.
*
**JOSIANE TROCATTI **
**Coordenadora Administrativa **
**SAMU - Serviço de Atendimento Móvel de Urgência***

Olá pessoal, eu analisei essa mensagem, e sugiro uma solução alternativa, vejam só:

Criar Central telefônica automatizada do SAMU:

Geralmente as pessoas andam com documentos, o governo pode fazer um número de emergência que basta informar o RG da pessoa, que um sistema computacional automatizado informa telefone de parentes próximos.

Para evitar que um bandido simule ser do SAMU, o funcionário do SAMU deve digitar um código ao ligar para o número fixo de AA Emergência, que o identifica como sendo o autor da chamada, esse código é diferente para cada funcionário do SAMU, se um bandido usar o código, o funcionário do SAMU pode ser punido.

Isso pode ser feito com uma Central telefônica do SAMU.

quinta-feira, 13 de outubro de 2011

segunda-feira, 10 de outubro de 2011

Primeira Aula de Ciência da Computação

http://pt.wikipedia.org/wiki/Ci%C3%AAncia_da_computa%C3%A7%C3%A3o

Cada cientista da computação ou modela um sistema ou implementa um sistema, se ele implementar o sistema é um programador, cada programador escrever receitas que é interpretada por um computador para fazer alguma ação. Você constrói processos ou sistemas com receitas que fazem o que você quer.

O primeiro conceito de aprender é um algoritmo, procure na Wikipedia:

http://pt.wikipedia.org/wiki/Algoritmo

Cada algoritmo é uma receita, você pode criar uma receita para fazer um bolo, você precisa de material de entrada, como leite, chocolate, etc .. e criar um sistema que utiliza uma seqüência de ações, a saída é o bolo.

O algoritmo recebe dados de entrada que passar por algumas condições (seqüência de ações) para criar os dados de saída, você pode exibir a SaidaDeDados na tela do monitor.

Cada função é um algoritmo matemático.

Quando você resolve um problema matemático, é um algoritmo também, porque você define uma seqüência de ações ou etapas, que você precisa fazer para resolver um algoritmo.

Você pode encapsular uma receita em um método, é chamada de função caixa preta, por exemplo, uma função de caixa preta, é um sistema que você não vê, por exemplo, quando o cozinheiro faz um bolo com uma receita, se você não olhar para ele fazendo o bolo, é uma função de caixa preta, o que acontece é:

Bolo boloDeChocolate = fazerBolo(leite, chocolate, manteiga, etc ..);

fazerBolo é a função caixa preta que esconde o que acontece dos seus olhos, boloDeChocolate é o alimento produzido, os dados de saída, e o tipo de alimento é Bolo. fazerBolo é chamado de procedimento em Ciência da Computação.

Para fazer um procedimento, você precisa aprender primeiro lógica, a base da lógica é causa e consequência.

Lógica

Primeira coisa que você precisa aprender é lógica, o mundo em que vivemos (Terra) é um lugar lógico, não há mágica, é causa e consequência, as plantas crescem, porque eles têm os dados de entrada necessários: terra, água, CO2, o procedimento é chamado fotossíntese, os dados de saída é uma planta maior ou uma planta sobrevivente, mais O2, frutas.

Lógica booleana

A lógica booleana baseia-se em algo ser verdadeiro ou falso, você verifica se uma condição é válida (causa) e produz uma conseqüência.

Você deve ter ouvido. que os computadores são relativos a código binário, código binário é uma sequência de 0 e 1, código binário é a base da lógica booleana, porque zero representa falso e 1 representa verdadeiro.

A nossa base natural de contagem é a base decimal, isso quer dizer que aparece um zero a direita do ao completar um ciclo de 10 adições, a base binária é um ciclo de 2, e é a base utilizada no computador, vou dar um exemplo:







base bináriabase decimal
0000
0101
1002
1103
10004


"http://pt.wikipedia.org/wiki/%C3%81lgebra_booleana

Quando você trabalha com a lógica booleana existe uma tabela chamada Tabela Verdade, que representa o axioma de uma operação booleana, por exemplo, quando você diz: "uma linha é uma seqüência de pontos", é um axioma, um axioma é algo básico que é uma verdade irredutível, não há explicação por detrás dela, você não consegue prová-lo, axiomas são usados para construir sistemas.

variáveis booleanas: a, b
operação: e

Quando você diz quero um bolo bonito e gostoso, isso é uma intersecção entre dois conjuntos, o da beleza e o da gostosura.

Tabela Verdade







abresultadoo que acontece
000 se a é falso e b é falso, então o resultado(intersecção) entre eles é falso
010se a é falso e b é verdadeiro, então o resultado (intersecção) entre eles é falso, se eles não são iguais, não existe intersecção.
100se a é verdadeiro e b é falso, então o resultado (intersecção) entre eles é falso, se eles não são iguais, não existe intersecção.
111se a é verdadeiro e b é verdadeiro, então o resultado(intersecção) entre eles é verdadeiro.


Agora vou dar um exemplo do que isso significa:

Para comparação usamos o sinal == para igual, nós usamos != para diferente, para dar um valor para uma variável, usamos =, o tipo de variável está no lado esquerdo, Comentário é /////

/// Início do Código ///

/// Declaração de Variáveis ///

boolean faceBonita = falso;
boolean corpoBonito = verdadeiro;
boolean pessoaBonita;


/// Bloco de Código Um ///

//// se acontecer a causa produz a consequência ////

Se(faceBonita == verdadeiro e corpoBonito==verdadeiro){pessoaBonita=verdadeiro;}
senão se(faceBonita==falso e corpoBonito==verdadeiro){pessoaBonita=falso;}
senão se(faceBonita==verdadeiro e corpoBonito==falso){pessoaBonita=falso;}
senão se(faceBonita==falso e corpoBonito==falso){pessoaBonita=falso;}

/// Fim do bloco de código Um ///

/ / / Agora vamos escrever o mesmo bloco em uma forma menor, o negativo de (1,1,1) na tabela, é o resto da tabela {(1,0,0), (0,1,0 ), (1,1,0)}, isto é representado pelo símbolo senão sozinho:

Se(faceBonita == verdadeiro e corpoBonito == verdadeiro) {pessoaBonita = verdadeiro;}
senão {pessoaBonita = falso;}

////////// Fim do código ////////////

dados de entrada da receita é faceBonita e corpoBonito.
saída de dados da receita é pessoaBonita.

quinta-feira, 6 de outubro de 2011

Mosaico

Imaginei esse programa após minha irmã pediu para eu fazer um mosaico para ela.

Quando abrir um diretório somente de fotos, aparecerá no topo do diretório o botão "Mosaico".

Ao clicar em "Mosaico->Gerar Mosaico", as fotos aparecem em forma de ícones redimensionáveis, em tamanhos:

- De 1 icone, 4 icones(2x2), 9 icones (3x3);

- Todos os nomes das fotos desaparecem;

- Ao passar com o mouse em volta da foto (borda de 5mm) aparece um menu para aplicar efeito na foto, por exemplo: foto original, preto e branco, grafite, correção de brilho.

Após terminar a criação do mosaico, ir em "Mosaico->Salvar Mosaico", o mosaico ficará salvo no diretório de mosaicos do sistema.

Se quiser reabrir o Mosaico, é só ir em "Mosaico->Lista de Mosaicos do Diretório ->Mosaico 1" e o mosaico será aberto.

Após abrir um mosaico, Você pode ainda ir em Mosaico-> Exportar Imagem e pronto, sua imagem para por no Orkut, facebook, multiply, picasa está pronta.

Unstarred All Gmail

[ENGLISH]

My first idea was the shadow label, with one click, all unstarred messages would go to the shadow label, but i found a practical solution: An easy way to clean your e-mail, delete all e-mails in a label that are not your favorite e-mails, after that, your favorite e-mails in the folder will lose the star and the process to elect favorite e-mails begin again.

First: Select Unstarred All;
Second: Select all conversations in "Label";
Third: Click on Delete.

Here is the prototype:



[PORTUGUESE]

Minha primeira idéia era fazer um label sombra, com um clique, todas as mensagens que não são favoritas vão para o label sombra, mas eu achei uma solução prática: Um jeito fácil de limpar seu e-mail, é deletar todos os e-mails em um label que não são seus e-mails favoritos, depois disso, seus e-mails favoritos vão perder a estrela de favorito e o processo de eleger favoritos reinicia-se.

Primeiro: Selecione Unstarred All;
Segundo: Selecione todas conversas no "Label";
Terceiro: Clique em Delete.

quarta-feira, 5 de outubro de 2011

Computer Science First Class

This is a general site, you will see what is computer science:

http://en.wikipedia.org/wiki/Computer_science

Every computer scientist is a programmer, every programmer write recipes that is interpretaded by computer to do some action. You build process or systems with recipes that make what you want.

The first concept to learn is an algorithm, look in the Wikipedia:

http://en.wikipedia.org/wiki/Algorithm

Every algorithm is a recipe, you can create a recipe to make a cake, you need input stuff, like milk, chocolate, etc... and create a system using a sequence of actions, the output is the cake.

The algorithm receives input data that pass through some conditions(sequence of actions) to create output data, you can display the outputdata in the monitor screen.

Every mathematical function is an algorithm.

When you solve a mathematical problem, it is an algorithm too, because you define a sequence of actions or steps, that you need to do to solve an algorithm.


You can encapsulate a recipe in a method, it is call black box function, for example, a black box function, is a system that you don´t see, for example when the cooker make the cake with a recipe, if you dont look to him making the cake, it is a black box function, what happens is:

Cake chocolateCake = makeCake(milk, chocolater, butter, etc...);

makeCake is the blackBox function that hide what happens from your eyes, chocolateCake is the food produced, the output data, and the type of the food is Cake. makeCake is called procedure in Computer Science.


To make a procedure, you need to learn logic first, the basis of logic is cause and consequence.

Logic

First thing you need to learn is Logic, the World we live (Earth) is a logical place, there is no magic, it is cause and consequence, The plants grow, because they have the necessary input data: land, water, CO2, the procedure is called photosynthesis, the output data is a bigger plant or a surviving plant, more O2, fruits.

Boolean Logic

The boolean logic is based in true and false, you check if a condition is valid (cause) and produces a consequence.

You probabilly have heard, that computers is all about binary code, binary code is a sequence of 0 or 1. Binary code is the basis of Boolean Logic,
because zero represents false and one represents true.

http://en.wikipedia.org/wiki/Boolean_logic

When you work with boolean Logic there is a table called Truth Table, that represents the axiom of an boolean operation, for example, when you say: "a line is a sequence of dots", it is an axiom, an axiom is something basic that is truth by definition and you cannot prove, it is used to build systems.


boolean variables: a, b
operation: and

Truth table

abresultwhat happens
000if a is false and b is false, so the result (intersection) between them is false.
0 1 0 if a is false and b is true, so the result (intersection) between then is false, if they are not equal, there is no intersection.
1 0 0 if a is true and b is false, so the result (intersection) between then is false, if they are not equal, there is no intersection.
1 1 1 if a is true and b is true, so the result (intersection between them is true).


Now i will program what it means for example:

for comparition we use the == signal for equal, we use != for not equal, to give a value for a variable, we use =, the type of variable is in the left side, Comment is /////

//// Begin of Code //////

////// Declaration of variables //////

boolean beautifulFace = false;
boolean beautifulBody = true;
boolean beautifulPerson;

////// Block of Code One ///////

///////// Cause///////////////////////////////////////////////////// ////////////// Consequence ///////
if( beautifulFace == true and beautifulBody ==true) { beautifulPerson = true; }
else if( beautifulFace == false and beatifulBody == true) { beautifulPerson = false; }
else if(beautifulFace == true and beatifulBody == false) { beautifulPerson = false; }
else if(beautifulFace == false and beatifulBody == false) { beautifulPerson = false; }

////// End of Block of Code One ///////

/// Now we will write the same block in a smaller way, the negative of (1,1,1) in the table, is the rest of the table {(1,0,0), (0,1,0), (1,1,0)}, this is represented by the else alone symbol:

if( beautifulFace == true and beautifulBody ==true) { beautifulPerson = true; }
else {beautifulPerson = false;}

////////// End of Code ////////////

input data of the recipe is beautifulFace, beautifulBody.
output data of the recipe is beautifulPerson.

Novo Conceito de Desktop

Aos 7 anos de idade eu mexi num computador chamado MSX, era uma tela azul com letras brancas e era baseado em linha de comando, nem tinha interface gráfica.
Aos 9 anos de idade se não estou enganado, comecei a mexer com Windows 3.1, não existia Desktop (área de trabalho), era só janelas que abriam e fechavam.

Pois muito bem, essa semana tive uma idéia simples, acredito que o futuro é voltar ao conceito do Windows 3.1, com uma diferença, agora todos os diretórios serão áreas de trabalho, sempre apareceram do lado esquerdo o meu computador, a rede e a lixeira, e do lado direito o diretório em si, ambos em um fundo de imagem, cada diretório, poderá ter uma imagem diferente associada a ele, imagem essa totalmente configurável que poderá mudar.

Eu poderia ter patenteado isso, mas acho que quem merece ganhar dinheiro é quem faz!

Além disso, tudo que eu fiz foi unir a ideia do Windows 3.1 com a idéia do desktop Windows 95, foi simples assim, como diria Lavoisier:

"Nada se cria, nada se perde, tudo se transforma."

Boa sorte programadores!

Eu fiz um protótipo, olha que lindo, acho que a idéia vai pegar:

Palestra sobre o Mercado de Computação

O Palestrante foi meu colega de trabalho a alguns anos atrás:

Palestra sobre o mercado de Computação por Felipe Zampa

Comparação do mercado de linguagens:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

http://langpop.com/