Vous êtes sur la page 1sur 3

Licenciatura em Engenharia Informtica e de Computadores

Fundamentos de Programao
Projecto - Primeira Parte 25 de Outubro de 2011

Um nmero primo um nmero natural que apenas tem dois divisores. Por exemplo, 5 primo, pois apenas divisvel por 1 e por 5; por outro lado, 6 no primo pois 6 divisvel por 1, por 2, por 3 e por 6. O nmero 1 no primo, pois apenas tem um divisor, ele prprio. Os nmeros primos tm um papel essencial na teoria dos nmeros, expresso pelo teorema fundamental da aritmtica: qualquer inteiro positivo n pode ser escrito de uma forma nica, excepto para uma reordenao dos factores, como o produto de potncias de nmeros primos, os seus factores primos. Um mtodo simples, mas pouco eciente, para vericar se um nmero n primo, conhecido por mtodo das tentativas por diviso, consiste em testar se n um mltiplo de qualquer inteiro entre 2 e n. Existem algoritmos muito mais ecientes para testar se um nmero primo, mas no sero considerados neste projecto. O maior nmero primo conhecido em 2011 tem cerca de 13 milhes de algarismos. Muitas questes sobre nmeros primos continuam como problemas em aberto, por exemplo, a conjectura de Goldbach, que arma que qualquer inteiro par maior que 2 pode ser expresso como a soma de dois primos e a conjectura dos primos gmeos, que arma que existem innitos nmeros primos gmeos (pares de nmeros primos cuja diferena 2), que embora tenham sido formuladas h mais de um sculo, continuam por resolver. Os nmeros primos so utilizados em muitas aplicaes da informtica, por exemplo a criptograa de chave pblica que recorre diculdade de calcular os factores primos de nmeros muito grandes.

Teste de primalidade

Escreva um procedimento em Scheme, chamado primo?, que recebe como argumento um nmero inteiro positivo (vericando a sua entrada) e recorre ao mtodo das tentativas por diviso para determinar se o seu argumento ou no um nmero primo. Por exemplo: > (primo? 5) #t > (primo? 6) #f

Enumerao de primos

Em programao, um iterador um programa que percorre um conjunto de elementos. Podemos, por exemplo, pensar em iteradores que percorrem os inteiros positivos, os nmeros pares ou os nmeros primos. Uma das maneiras de criar iteradores recorrer a procedimentos conhecidos como geradores que geram os sucessivos elementos do conjunto. Por exemplo, os seguintes procedimentos geram, respectivamente os nmeros inteiros e os nmeros pares: (define (n-esimo-inteiro n) n) (define (n-esimo-par n) (* 2 n)) Estes procedimentos, a partir de um nmero inteiro arbitrrio, n, geram, respectivamente, o n-simo inteiro positivo (por acaso, igual ao prprio n) e o n-simo nmero par. evidente que os conceitos de iterador e de gerador so muito mais complexos do que aqui apresentados, mas as nossas denies servem para contextualizar o que se pretende com esta parte do projecto. Escreva um procedimento em Scheme, chamado n-esimo-primo, que recebe um inteiro positivo n (vericando a sua entrada) e que devolve o n-simo nmero primo. Utilize o procedimento primo?. Por exemplo: > (n-esimo-primo 5) 11 > (n-esimo-primo 45) 197

Classicao

A nota da primeira parte do projecto ser baseada nos seguintes aspectos: 1. Execuo correcta (70%). 2. Facilidade de leitura, nomeadamente utilizao de estrutura de blocos, utilizao adequada de nomes locais, nomes bem escolhidos, paragrafao correcta, qualidade (e no quantidade) dos comentrios1 (25%). 3. Estilo de programao (5%).
Todos os comentrios do seu programa devem ser feitos utilizando a opo Comment Out with Semicolons". Programas que utilizem a opo Comment Out with a Box ou caracteres acentuados sero penalizados com trs valores.
1

Os pesos das notas das trs partes na nota nal do projecto so os seguintes: 1. Primeira parte - 10%. 2. Segunda parte - 30%. 3. Terceira parte - 60%.

Condies de realizao e prazos

O vosso cheiro com o programa dever ter na primeira linha #lang scheme e na segunda linha (provide (all-defined-out)). Os nomes dos vossos procedimentos primo? e n-esimo-primo devem terminar com a identicao do vosso grupo. Por exemplo, o grupo 7 deve entregar procedimentos cujos nomes so, respectivamente, primo?-7 e n-esimo-primo-7. A primeira parte do projecto deve ser entregue at s 15:00 horas do dia 15 de Novembro de 2011, na Reprograa do DEI ou na portaria do Tagus (consoante o campus que corresponda ao grupo do projecto), e dever constar de uma listagem do cdigo numa fonte monospace. Projectos em atraso sero aceites at s 15:00 horas do dia 16 de Novembro, sendo penalizados com 1 valor. A partir das 15:00 horas do dia 16 de Novembro de 2011 no se aceitam quaisquer projectos, seja qual for o pretexto. A listagem do cdigo deve ser entregue agrafada, apresentando visivelmente o nmero do grupo e nmero e nome dos seus autores, na primeira pgina. Projectos que no sejam entregues nestas condies sero penalizados com trs valores. Para alm disto, a submisso do cdigo por via electrnica, atravs do sistema Fnix, obrigatria e dever ser feita nos mesmos prazos que a entrega do relatrio. Se o cdigo e o relatrio forem entregues em horas diferentes, o desconto ser o correspondente ao da ltima entrega. O cdigo do projecto deve estar contido num nico cheiro. Se durante o desenvolvimento usaram vrios cheiros devem, no nal, antes de submeter o cdigo, colocar todo o cdigo num nico cheiro, chamado FP1112-parte1-grupon.scm, em que n o nmero do grupo. Por exemplo, o cheiro do grupo no 5 dever chamar-se FP1112-parte1-grupo5.scm. O cheiro de cdigo deve conter em comentrio, na primeira linha, os nmeros e os nomes dos alunos do grupo, bem como o nmero do grupo. Durante o desenvolvimento do programa importante no se esquecer da Lei de Murphy: 1. Todos os problemas so mais difceis do que parecem; 2. Tudo demora mais tempo do que ns pensamos; 3. Se alguma coisa puder correr mal, ela vai correr mal, na pior das alturas possveis. Pode ou no haver uma discusso oral do trabalho e/ou uma demonstrao do funcionamento do programa (ser decidido caso a caso). Projectos iguais, ou muito semelhantes, sero considerados cpias. O corpo docente da cadeira ser o nico juiz do que se considera ou no copiar no projecto. 3

Vous aimerez peut-être aussi