Trabalho Prático para Melhoria

Paradigmas de Programação II (PPII2006)
e
Programação Imperativa (PI2006)

Historial:

[Ano lectivo: 2004/2005 (rev.)] [2006-03-14]

Este documento descreve o único tema disponível para a realização do trabalho prático que os alunos a fazer melhoria às disciplinas em epígrafe poderão realizar como forma de obter uma avaliação global à disciplina.

Os assuntos referentes à organização do trabalho e à realização, entrega e avaliação do projecto, são descritos em documento próprio.


Índice

  1. Objectivos de formação e resultados de aprendizagem
    1. Tema: Processamento de Texto e Imagem
      1. Formato de Imagem PNM
        1. PBM: Portable BitMap Format
          1. PGM: Portable GrayMap Format
            1. PPM: Portable PixMap Format
            2. Leitura e Escrita de imagens PNM
              1. Processamento de Texto e Imagem
                1. Pautas musicais
                  1. Músicas populares

              Objectivos de formação e resultados de aprendizagem

              [Voltar ao índice]

              Este projecto tem como objectivos principais a formação genérica e específica de estudantes em fundamentos de computação na área da programação imperativa.

              Os objectivos de formação genérica incluem: (i) a pesquisa, análise e selecção de informação, (ii) o treino na resolução de problemas, (iii) o desenvolvimento da capacidade de análise, e (iv) o desenvolvimento da capacidade de comunicação escrita e oral.

              Os objectivos de formação específica incluem: (i) a análise da especificação e do problema, (ii) o desenvolvimento de algoritmos e consequente programação numa linguagem imperativa, (iii) a execução e realização de testes de conformidade.

              A avaliação dos resultados esperados de aprendizagem irão verificar se as/os estudantes conseguem demonstrar ter adquirido o seguinte conjunto de competências genéricas e específicas:

              Tema: Processamento de Texto e Imagem

              [Voltar ao índice]

              O tema escolhido para este projecto foi o processamento de texto e imagem.

              No contexto deste projecto, a aplicação irá gerar imagens no formato PNM (Portable aNyMap) que se descreve na secção seguinte.

              Formato de Imagem PNM

              [Voltar ao índice]

              O PNM é um formato de imagem muito simples, fácil de ler a partir de um ficheiro e também fácil de escrever para um ficheiro. Actualmente uma imagem PNM pode pertencer a uma de três famílias, abaixo explicadas: PBM, PGM e PPM. Cada família tem duas representações: uma textual e uma compactada.

              Embora não seja um requisito da especificação PNM, existe a convenção de que a imagem deve ser armazenada de cima para baixo e da esquerda para a direita. Cada pixel da imagem é armazenado num byte, valor 0 = preto, valor 255 = branco. Os componentes de cor são armazenados na ordem habitual RGB ("red", "green" and "blue"), um valor para o nível de vermelho, um valor para o nível de verde e um valor para o nível de azul.

              PBM: Portable BitMap Format

              [Voltar ao índice]

              Esta família corresponde a imagens contendo apenas duas cores, branco (1) e preto (0), normalmente designadas por bitmaps.

              A sua forma textual pode ser descrita da seguinte maneira:

              Um exemplo de uma imagem neste formato poderia ser:

              P1
              # PBM example 
              9 7
               0 0 0 0 0 0 0 0 0 
               0 1 1 1 1 0 0 1 0 
               0 1 0 0 1 0 0 1 0 
               0 1 1 1 1 0 0 1 0
               0 1 0 0 0 0 0 1 0
               0 1 0 0 0 0 0 1 0
               0 0 0 0 0 0 0 0 0
              

              Se analisar um pouco a imagem que esta representa um banner com fundo preto e letras a branco. Neste caso, a imagem contem a string "PI". Note também que, para este caso do banner, a primeira linha, a última linha, a primeira e última colunas são pretas e que entre duas letras há duas colunas pretas de separação.

              A sua forma compactada resulta da constatação de que um byte é uma sequência de 8 0's e 1's. Assim, um byte pode guardar 8 pixeis da imagem. A única alteração ao formato é o identificador que passa a: P4.

              A seguir apresenta-se o exemplo anterior agora compactado:

              P4
              # PBM example 
              9 7
              0 0
              121 0
              73 0
              121 0
              65 0
              65 0
              0 0 
              

              Note que, apenas para efeitos de visualização, introduziram-se espaços entre os valores da forma compactada. Nas formas compactadas PNM, não há espaços de separação entre os valores. A informação é guardada em ficheiro em bytes sequenciais.

              PGM: Portable GrayMap Format

              [Voltar ao índice]

              Esta família corresponde a imagens definidas com vários níveis de cinzento.

              A sua forma textual pode ser descrita da seguinte maneira:

              Um exemplo de uma imagem neste formato poderia ser:

              P2
              # PBM example 
              9 7
              15
               0 0 0 0 0 0 0 0 0 
               0 15 15 15 15 0 0 12 0 
               0 15 0 0 15 0 0 12 0 
               0 15 15 15 15 0 0 12 0
               0 15 0 0 0 0 0 12 0
               0 15 0 0 0 0 0 12 0
               0 0 0 0 0 0 0 0 0
              

              Se analisar um pouco a imagem que esta representa um banner com fundo preto e letras a branco. Neste caso, a imagem contém a string "PI". Note também que, para este caso do banner, a primeira linha, a última linha, a primeira e última colunas são pretas e que entre duas letras há duas colunas pretas de separação.

              A sua forma compactada resulta da eliminação dos espaços nas linhas da imagem e apenas para o caso em que MAX está no intervalo [0,255]. A única alteração ao formato é o identificador que passa a: P5.

              PPM: Portable PixMap Format

              [Voltar ao índice]

              Esta secção ficará em branco. Espera-se que os alunos "investiguem" e que a preencham um pouco à semelhança das outras.

              Nas secções seguintes descrevem-se as componentes do projecto e referem-se os requisitos que deverão ser implementados.

              Leitura e Escrita de imagens PNM

              [Voltar ao índice]

              Nesta fase, pretende-se que as/os estudantes executem as seguintes tarefas:

              Processamento de Texto e Imagem

              [Voltar ao índice]

              Pautas musicais

              [Voltar ao índice]

              Desenvolve uma aplicação para a geração automática de pautas musicais coloridas. O programa deverá aceitar um ficheiro de texto com a descrição textual de uma música e deverá gerar uma imagem P3 ou P6 com a respectiva pauta musical (deverás dar a hipótese do utilizador gerar um dos outros 4 tipos de imagem só que nesse caso a pauta será a preto e branco).

              Os requisitos para a aplicação são os seguintes:

              1. O desenho da pauta fica ao teu critério: espessura das linhas, dimensões das notas (investiga um pouco sobre os tipos de notas e de pausas musicais), ...
              2. Uma pauta é constituída por cinco linhas horizontais espaçadas uniformemente. As notas colocam-se sobre as linhas ou nos espaços entre elas.
              3. Uma música é constituída por uma lista de compassos. Cada compasso deverá ser separado do seguinte por uma linha vertical de espessura ligeiramente inferior à das linhas da pauta.
              4. A cor das notas não é livre e deverá seguir o seguinte esquema:
                Nota Musical Descrição Côr RGB em Hex
                C FF0000
                C# ou Db Dó sustenido ou Ré bemol FF3300
                D FF6600
                D# ou Eb Ré sustenido ou Mi bemol FFCC00
                E Mi FFFF33
                F 00FF00
                F# ou Gb Fá sustenido ou Sol bemol 00AA00
                G Sol 004400
                G# ou Ab Sol sustenido ou Lá bemol 0000FF
                A 330033
                A# ou Bb Lá sustenido ou Si bemol 990066
                B Si FF0066
                CM Dó maior FF0000

              5. O ficheiro de entrada, onde é descrita a música em forma textual, tem a seguinte estrutura:

              A seguir apresentam-se mais músicas para teste da aplicação final.

              Músicas populares

              [Voltar ao índice]