Ferramentas do usuário

Ferramentas do site


prog2:planilha_ascii

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
prog2:planilha_ascii [2019/03/13 15:16]
maziero [Requisitos do código-fonte]
prog2:planilha_ascii [2019/04/09 13:35] (atual)
maziero
Linha 1: Linha 1:
 +====== Planilha ASCII ======
 +
 +Este projeto consiste em construir uma planilha eletrônica em modo texto, usando a biblioteca //NCurses// para a gestão do terminal. A interface da planilha deve ser similar à figura abaixo:
 +
 +{{planilha.png?​nolink |}}
 +
 +===== Funcionalidades =====
 +
 +  * ler e escrever arquivos em formato [[https://​en.wikipedia.org/​wiki/​Comma-separated_values|CSV]] (deve ser capaz de ler/​escrever arquivos simples compatíveis com o //​LibreOffice Calc// ou //Microsoft Excel//);
 +  * suportar matrizes de até 100 linhas × 26 colunas (a tela deve "​deslizar"​ na horizontal e vertical para mostrar parte visível da planilha);
 +  * cada coluna da planilha ocupa 8 caracteres na tela; 
 +  * implementar corte/​cópia/​cola de grupos de células contíguas;
 +  * ser capaz de calcular fórmulas simples;
 +  * se adaptar às dimensões do terminal ao iniciar.
 +
 +===== Formato CSV =====
 +
 +  * campos delimitados por vírgula
 +  * linhas delimitadas por //enter// (\n)
 +  * campos representados por valores textuais (não em binário)
 +  * qualquer valor/campo pode ser envolto por aspas duplas (")
 +  * campos contendo vírgulas devem ser envoltos por aspas duplas
 +  * números reais usam ponto "​."​ para a parte fracionária
 +  * cada campo pode ter até 255 caracteres (mostrar até 8 na tela)
 +  * ignorar campos contendo "​\n"​ ou aspas como parte do valor
 +
 +===== Valores nas células =====
 +
 +  * números inteiros e reais, positivos e negativos
 +  * strings
 +  * fórmulas simples: strings no formato ''​= A op B'',​ onde A e B são números ou referências de células e ''​op''​ é uma operação algébrica simples (+, -, *, /).
 +
 +Células podem ser referenciadas usando suas coordenadas:​ por exemplo, a string A5 referencia o valor da célula na coluna A e linha 5.
 +
 +===== Controles =====
 +
 +  * Setas (←↑↓→):​ mover cursor (para selecionar a célula ativa)
 +  * Enter: editar a célula corrente (selecionada)
 +  * Arquivos:
 +    * ^S : salvar arquivo corrente
 +    * ^R: ler novo arquivo
 +  * Cortar/​Copiar/​colar:​
 +    * ^space : fixar âncora (define um retângulo junto com o cursor)
 +    * ^C: copiar retângulo para o //​clipboard//​
 +    * ^X: cortar retângulo para o //​clipboard//​
 +    * ^V: colar conteúdo do //​clipboard//​ a partir da posição do cursor
 +  * ^Q: encerrar o programa (//quit//); ** perguntar se deseja salvar antes!**
 +
 +===== Forma de chamada =====
 +
 +  * ''​texcel''​ : abre uma planilha em branco (sem nome)
 +  * ''​texcel arq1.csv'':​ abre o arquivo ''​arq1.csv''​
 +
 +===== Requisitos do código-fonte =====
 +
 +  * Ser escrito em C padrão C99
 +    * não gerar //​warnings//​ ao usar flags ''​-Wall'' ​
 +    * o executável deve se chamar ''​texcel''​ (de //Text Excel//)
 +  * ser estruturado em vários arquivos. Por exemplo:
 +     * ''​texcel.c''​ (programa principal)
 +     * ''​csvfile.c'',​ ''​csvfile.h''​ (lê/​escreve arquivos CSV)
 +     * ''​formula.c'',​ ''​formula.h''​ (funções para analisar e calcular fórmulas)
 +     * ...
 +  * Ter um Makefile:
 +     * alvos ''​all'',​ ''​clean''​ e ''​purge''​
 +     * compilação e ligação devem ser separadas
 +  * Ler e calcular estes arquivos de teste:
 +    * {{gastos_pessoais.csv|}}
 +    * {{substancias.csv|}}
 +    * {{notas-algebra.csv|}}
 +    * {{filtros_de_agua.csv|}}
 +
 +===== Material de apoio =====
 +
 +Ncurses:
 +
 +  * [[http://​tldp.org/​HOWTO/​NCURSES-Programming-HOWTO/​|Ncurses Programming Howto]] (leia **com atenção** a seção sobre inicialização)
 +  * [[http://​invisible-island.net/​ncurses/​ncurses-intro.html|Writing Programs with Ncurses]]
 +  * [[http://​hughm.cs.ukzn.ac.za/​~murrellh/​os/​notes/​ncurses.html|Ncurses Programming Guide]]
 +  * Exemplos do ncurses no Linux, em ''/​usr/​lib/​ncurses/​examples/''​ (pacote ''​ncurses-examples''​)
 +  * [[http://​invisible-island.net/​ncurses/​ncurses-examples.html|Código-fonte]] do pacote ''​ncurses-examples''​ disponível no Debian e derivados (Ubuntu, Mint, etc).
 +
 +Instalação da biblioteca NCurses no Linux (Ubuntu, Debian, Mint):
 +
 +  sudo apt-get install libncurses-dev
 +
 +O código de inicialização da biblioteca NCurses, com as configurações necessárias para este projeto, é o seguinte:
 +
 +<code c>
 +  initscr () ; // inicializa a biblioteca ncurses
 +  raw () ; // permite tratar teclas de controle (^C, ^Z, etc)
 +  keypad (stdscr, TRUE) ; // habilita leitura de teclas de setas, Fn, etc
 +  noecho () ; // não escreve as teclas lidas na tela
 +  curs_set (0) ; // esconde o cursor do terminal
 +</​code>​
 +
 +Projetos similares a este:
 +
 +  * [[http://​www.linuxjournal.com/​article/​10699|Linux SC]]
 +  * [[https://​www.syntax-k.de/​projekte/​teapot|Teapot table editor]]
 +  * ... (existem outros)
  
prog2/planilha_ascii.txt · Última modificação: 2019/04/09 13:35 por maziero