Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tolleds

Exercicio em C -- "PhotoCommand"

Recommended Posts

Boa Tarde,

Meus professores passaram um trabalho contendo uma série de exercícios... mas um deles eu não tenho a menor idéia de como começar, porque eles nunca passaram um exercício parecido com esse, e eles não passaram muitas coisas na aula relacionada a este exercício.

 

Eu gostaria que alguém me ajudasse me indicando alguns passos a seguir, me dando idéias gerais sobre o que fazer, para que eu possa entender um pouco e tentar fazer o programa. Eu só consegui entender que tem que usar matriz pra fazer isso, mas nuinca ouvi falar sobre os comandos para geração de imagens...a verdade é que eu não entendi nada do que tem que fazer.

(Desculpem-me, comecei o curso a dois meses, sei muita pouca coisa =/)

 

 

O Exercício é:

 

Neste exercício vocês vão desenvolver o PhotoCommand, um editor gráfico de modo texto,
que gera figuras do tipo bitmap. As figuras bitmap (aquelas com terminação .bmp, que os
Windows antigos usavam muito) são figuras onde cada byte representa a cor de um pixel.
Vocês irão desenvolver um programa, em um arquivo com o nome “photocommand.c”
que, dado um conjunto de comandos para a geração de uma ou mais imagens, gere na saída as
imagens desejadas.
Formato da entrada e da saída:
O PhotoCommand irá receber como entrada um conjunto de comandos, lidos a partir do
teclado. Cada comando é definido como na tabela abaixo:
Comando Funcionamento:
  • I C L -- Gera uma nova imagem com C colunas e L linhas.
  • Z -- Zera a imagem, ou seja, gera uma imagem onde todos os pontos possuem a cor branca (cor ‘O’).
  • C X Y C -- Colore o pixel (X,Y) com a cor C.
  • V X Y1 Y2 C -- Gera uma linha vertical, partindo do ponto (X,Y1), e indo até o ponto (X,Y2). A cor da linha será C.
  • H X1 X2 Y C -- Gera uma linha horizontal, partindo do ponto (X1,Y), e undo até o ponto (X2,Y). A cor da linha será C.
  • R X1 Y1 X2 Y2 C -- Desenha um retângulo, de cor C, delimitado pelos pontos definidos por (X1,Y1) e (X2,Y2)
  • S NOME -- Salva o arquivo (no nosso caso, imprime o arquivo na tela) com o nome dado. O nome tem um limite do tipo MSDOS: até 8 caracteres para o nome, até 3 caracteres para extensão de arquivo.
  • F -- Fecha a sessão de edição.
Para simplificar a programação, assumam que a imagem pode ter no máximo 250 linhas
ou 250 colunas. O seu programa deve ser “esperto”, ou seja, deve ignorar comandos inválidos
(comandos com letras diferentes das definidas acima). O seu programa não deve imprimir
nenhuma mensagem de erro quando um comando inválido for digitado, somente ignorar a
linha de entrada. Vocês podem assumir que os comandos, quando forem válidos, sempre
estarão corretos (número correto de parâmetros, e valores de parâmetros que não ultrapassam
a figura).
Um exemplo de entrada segue abaixo:
I 5 6
C 2 3 A
S one.bmp
G 2 3 J
R 1 1 5 6 J
V 2 3 4 W
H 3 4 2 Z
S two.bmp
F
A cada comando S NOME, imprima o nome do arquivo <NOME> e o conteúdo da
imagem, ambos na tela. Não é preciso efetivamente gravar em arquivos neste trabalho.
Como exemplo, a saída para a entrada acima seria a seguinte. Atenção: não testem o seu
programa somente com este conjunto de entradas e saídas, pois este teste é bem
simples...
one.bmp
OOOOO OOOOO
OAOOO
OOOOO
OOOOO
OOOOO
two.bmp
JJJJJ
JJZZJ
JWJJJ
JWJJJ
JJJJJ
JJJJJ

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

O seu programa deve ser “esperto”, ou seja, deve ignorar comandos inválidos (comandos com letras diferentes das definidas acima).

 

P/ mim essa é a parte mais complicada. Algumas maneiras de fazer:

- Criar toda uma lógica de processamento desses comandos do zero.

- [se vc utiliza Linux] Usar expressões regulares p/ fazer o parsing dos comandos.

- Utilizar uma biblioteca de terceiros p/ fazer o parsing (os sistemas que implementam o padrão POSIX possuem a getopt em unistd.h)

 

Tenho dúvidas sobre a especificação em alguns pontos:

- É possível digitar o comando de criação de imagens mais de uma vez? Se sim, devo supor que estou utilizando alocação dinâmica de memória, mas o exercício não deixa isso claro. Por exemplo:

I 5 6

C 2 3 A
I 10 26

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perguntei essa parte de repetir o comando de criação de imagens para o professor e ele disse que pode repeti-lo.

 

Isis, o meu problema maior esta sendo em como começar o programa, por exemplo, como que eu faço para receber como entrada algum dos comandos... quero dizer, eu não estou sabendo como (desculpa a expressão...eu nao sei como falar) aplicar o comando scanf pra receber os seguintes comandos exigidos no exercício.

 

A lógica de ignorar comandos inválidos eu estou montando no caderno nos horarios livre de aula...amanha de noite digito aqui... mas sera que tem como vc me ajudar com esse probleminha que citei no paragrafo acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como são comandos heterogêneos, eu usaria fgets p/ ler a entrada toda como uma string e passaria isso p/ uma função de processamento que vai fazer o parsing e após isso, chamar os métodos que vão realizar as ações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como são comandos heterogêneos, eu usaria fgets p/ ler a entrada toda como uma string e passaria isso p/ uma função de processamento que vai fazer o parsing e após isso, chamar os métodos que vão realizar as ações.

 

Hmmm entendi....vou tentar aqui....muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.