Universidade Católica de Pelotas Centro Politécnico Bacharelado em Ciência da Computação Trabalho Final de Lógica para Computação Instruções: O trabalho deve ser feito em duplas. O resultado final deve ser enviado como um arquivo .pl para [email protected] até 15/07/2010, contendo o nome completo dos membros da equipe e o texto do programa fonte em SWI-Prolog com comentários descrevendo sua construção e operação. Em caso de dúvida, contate a lista: [email protected]. Questão Única: Selecionar um dos textos abaixo e representar sob a forma de um programa em SWI-Prolog. O programa deve permitir a instanciação de novos objetos (sob a forma de fatos) em tempo de execução e responder consultas sobre os objetos existentes. 1. Combustíveis Um combustível é qualquer substância que reage com o oxigênio (ou outro comburente) liberando energia na forma de calor, chamas e gases. Supõe a liberação da energia nele contida em forma de energia potencial a uma forma utilizável. Em geral se trata de algo susceptível de combustão mas há excepções que se explicam a seguir. Existem várias substâncias que estão ou podem ser usadas como combustível. Entre as sólidas incluem-se o carvão, a madeira e a turfa. O carvão é queimado em caldeiras para esquentar água, que pode vaporizar-se para mover máquinas a vapor, ou diretamente para produzir calor utilizável em usos térmicos (calefação). A turfa e a madeira são utilizadas principalmente para a calefação doméstica e industrial. A turfa foi utilizada para a geração de energia nas locomotivas, que utilizavam madeira como combustível, muito comum no passado. Entre os líquidos usados como combustível encontramos os de origem vegetal ou animal, como o álcool e o óleos vegetais de rícino e gorduras à partir do século XX surgem os combustíveis minerais, considerados fósseis, são os derivados do petróleo como óleo diesel, o querosene e a gasolina (ou nafta). Entre os combustíveis gasosos estão o gás natural ou os GLP (Gases Liquefeitos de Petróleo), representados pelo Propano e o Butano. As gasolinas e até os gases são utilizados para os motores de combustão interna. Nos corpos dos animais em geral, o combustível principal é constituído por carboidratos, lipídios e, em certas circusntâncias, as proteínas, que proporcionam energia para os músculos, o crescimento e os processos de renovação e regeneração célular. Por extensão se chamam também combustíveis às substâncias empregadas para produzir energia no reator nuclear no processo de fissão nuclear, embora este processo não seja de forma alguma uma combustão. Tampouco é um combustível, na acepção estrita do termo, o hidrogênio quando utilizado no processo de fusão nuclear, que proporciona grandes quantidades de energia, no que se fundem quatro átomos de hidrogênio para converter-se em um de hélio. Este meio de obter energia não foi dominado adequadamente pelo homem (mas que em sua forma mais violenta, é a bomba de hidrogênio, conhecida como Bomba H). No Universo é comum, posto que é a fonte de energia das estrelas. Os combustíveis fósseis são misturas de compostos orgânicos que se extraem do subsolo com o propósito de produzir energia por combustão. A origem desses compostos são seres vivos que morreram há milhões de anos. Consideram-se combustíveis fósseis o carvão, procedente de bosques do período carbonífero, o petróleo e o gás natural, procedente de outros organismos. 2. Satélites Artificiais Um satélite artificial é qualquer corpo feito pelo homem e colocado em órbita ao redor da Terra ou de qualquer outro planeta. Hoje em dia, ao contrário do que ocorria no início da história dos satélites artificiais, o termo satélite vem sendo usado praticamente como um sinônimo para "satélite artificial". O termo "satélite artificial" tem sido usado quando se quer distingui-los dos satélites naturais, como a Lua. Os satélitesartificiais podem ser: Biosatélites --- são satélites projetados para levar ao espaço organismos vivos para experimentação científica. Satélites miniaturizados --- são satélites com dimensões e massas reduzidas. Hoje, esses satélites são categorizados como minisatélites (500–200 kg), microsatélites (menos de 200 kg) e nanosatélites (menos de 10 kg). Satélites de energia solar --- são satélites que usam células solares para captar a energia solar e a convertem em um feixe de microondas, transmitido para grandes antenas na Terra por potentes transmissores a bordo do satélite. A energia captada pela antena pode então ser usada como uma fonte alternativa de energia. Estações espaciais --- são estruturas fabricadas pelo homem e projetadas para permitir que seres humanos possam viver no espaço exterior. Uma estação espacial difere de uma espaçonave. Ao contrário das espaçonaves, as estações espaciais não possuem capacidade de propulsão nem de aterrissagem. Por outro lado as estações espaciais são projetadas para permitir a permanência humana por médios períodos de tempo, que variam de semanas até alguns anos. Armas anti-satélites, --- por vezes chamados de satélites assassinos, são satélites projetados para destruir satélites "inimigos" e outros tipos de alvos em órbita. Tanto os Estados Unidos quanto a antiga URSS têm esses tipos de satélites. Satélites astronômicos--- são satélites usados para observações astronômicas, tanto no óptico, quanto em outras bandas do espectro eletromagnético. Satélites de comunicação --- são satélites estacionários utilizados em telecomunicação. Satélites do Sistema Global de Navegação (GPS) --- são satélites que enviam sinais de rádio a receptores móveis na Terra possibilitando a determinação precisa de sua localização geográfica. A recepção direta do sinal dos satélites GPS, combinada com uma eletrônica cada vez melhor, permite que o sistema GPS determine a posição com um erro de poucos metros, em tempo real. Satélites de reconhecimento --- são satélites projetados para observação da Terra ou antigos satélites de comunicação utilizados para fins militares ou de espionagem. Pouco se sabe sobre a capacidade real desses satélites, pois os países que os desenvolvem geralmente não divulgam informações sobre eles. Satélites de observação da Terra --- são satélites projetados para uso não-militar, para, por exemplo, monitoramento ambiental, meteorologia, mapeamento geográfico, etc. Satélites meteorológicos --- são satélites projetados essencialmente para monitorar o tempo e o clima na Terra. Os satélites artificiais ocupam diferentes órbitas e claro, que possuem diferentes características. Normalmente essas rotas são definidas em relação à Terra. A maioria dos satélites de telecomunicações são satélites geoestacionários, ou seja, eles ocupam uma órbita geoestacionária. Outras órbitas possíveis são: órbita terrestre baixa, órbita circular intermediária, órbita polar, órbita geossíncrona, órbita supersíncrona, órbita subsíncrona, órbita elíptica, órbita de transferência de Hohmann, órbita heliossíncrona, órbita de transferência lunar e órbita de calunia eliptica. 3. Linguagens de Programação Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. O conjunto de palavras (tokens), compostos de acordo com essas regras, constituem o código fonte de um software. Esse código fonte é depois traduzido para código de máquina, que é executado pelo processador. Uma das principais metas das linguagens de programação é permitir que programadores tenham uma maior produtividade, permitindo expressar suas intenções mais facilmente do que quando comparado com a linguagem que um computador entende nativamente (código de máquina). Assim, linguagens de programação são projetadas para adotar uma sintaxe de nível mais alto, que pode ser mais facilmente entendida por programadores humanos. Linguagens de programação são ferramentas importantes para que programadores e engenheiros de software possam escrever programas mais organizados e com maior rapidez. Linguagens de programação também tornam os programas menos dependentes de computadores ou ambientes computacionais específicos (propriedade chamada de portabilidade). Isto acontece porque programas escritos em linguagens de programação são traduzidos para o código de máquina do computador no qual será executado em vez de ser diretamente executado. Uma meta ambiciosa do Fortran, uma das primeiras linguagens de programação, era esta independência da máquina onde seria executada. Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretação, que juntas podem ser chamadas de tradução. Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar (ou rodar, como se diz no jargão da computação) o programa, então diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C. Se o texto do programa é traduzido à medida que vai sendo executado, como em Javascript, Python ou Perl, num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas são também geralmente mais flexíveis, já que podem interagir com o ambiente mais facilmente. Embora haja essa distinção entre linguagens interpretadas e compiladas, as coisas nem sempre são tão simples. Há linguagens compiladas para um código de máquina de uma máquina virtual (sendo esta máquina virtual apenas mais um software, que emula a máquina virtual sendo executado em uma máquina real), como o Java. E também há outras formas de interpretar em que os códigos-fontes, ao invés de serem interpretados linha-a-linha, têm blocos "compilados" para a memória, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como JIT. Como exemplo, podemos citar a linguagem Java. Nela, um compilador traduz o código java para o código intermediário (e portável) da JVM. As JVMs originais interpretavam esse código, de acordo com o código de máquina do computador hospedeiro, porém atualmente elas compilam, segundo a técnica JIT o código JVM para código hospedeiro. A tradução é tipicamente feita em várias fases, sendo as mais comuns a Análise léxica, a Análise sintática ou Parsing, a Geração de código e a Otimização. Em compiladores também é comum a Geração de código intermediário.