Anda di halaman 1dari 21

ATIVIDADES PRTICAS SUPERVISIONADAS

Cincia da Computao 2 Srie Programao Estruturada II

A atividade prtica supervisionada (ATPS) um procedimento metodolgico de ensino-aprendizagem desenvolvido por meio de um conjunto de etapas programadas e supervisionadas e que tem por objetivos:

eficaz. er o estudo, a convivncia e o trabalho em grupo.

Curriculares Nacionais dos Cursos de Graduao.

prticos relativos profisso.

intelectual. Para atingir estes objetivos a ATPS prope um desafio e indica os passos a serem percorridos ao longo do semestre para a sua soluo. A sua participao nesta proposta essencial para que adquira as competncias e habilidades requeridas na sua atuao profissional. Aproveite esta oportunidade de estudar e aprender com desafios da vida

profissional. AUTORIA: Jaqueline Brigladori Pugliesi Faculdade Anhanguera de Valinhos Jeanne Dobgenski Anhanguea Educacional Ltda Marcelo Augusto Cicogna Faculdade Anhanguera de Valinhos Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 2 de 10

COMPETNCIAS E HABILIDADES

Ao concluir as etapas propostas neste desafio voc ter desenvolvido as competncias e habilidades descritas a seguir.

validar e gerenciar qualquer projeto de software.

necessidades passveis de soluo via computao.

Produo Acadmica Relatrios parciais, com os resultados das pesquisas e atividades realizadas. Participao

Esta atividade ser, em parte, desenvolvida individualmente pelo aluno e, em parte, pelo grupo. Para tanto, os alunos devero: Organizar-se, previamente, em equipes de participantes conforme orientao do professor. -mails ao professor da disciplina.

Padronizao O material escrito solicitado nesta atividade deve ser produzido de acordo com as normas da ABNT1, com o seguinte padro:

Roman tamanho 12, cor preta.

um recuo de 4cm da margem esquerda e espaamento simples entre linhas.

sua Unidade de Ensino, Curso e Disciplina.

1 Consultar o Manual para Elaborao de Trabalhos Acadmicos. Unianhanguera. Disponvel em: <http://www.unianhanguera.edu.br/anhanguera/bibliotecas/normas_bibliograficas/index.htm l>. Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 3 de 10

DESAFIO

Muitos programas de computador do tipo Console so utilizados todos os dias. Para a plataforma Linux, esta uma afirmao quase que incorporada estrutura do prprio Sistema Operacional (SO). No SO Windows, os aplicativos de console, que so simples em interface, mas que desempenham tarefas muitas vezes sofisticadas, no so to comuns experincia tpica de uso do sistema. Por exemplo, pode-se citar desde programas de linha de comando como ipconfig que auxilia na visualizao das configuraes de rede de um PC, at programas como o taskkill que auxiliam o usurio a eliminar processos ativos na memria do computador. O objetivo desta atividade motivar o aluno a adquirir experincia com o ciclo completo de desenvolvimento de um pequeno aplicativo de linha de comando (Console). Este ciclo utilizar os conceitos apresentados na disciplina de algoritmos; apresentar um

exemplo de organizao e de documentao de cdigo fonte; exigir uma organizao funcional do cdigo baseado em estruturas modulares; por fim, o aluno implementar um software de linha de comando com opes de parmetros na chamada do programa. Esta tarefa dever ser implementada utilizando-se a Linguagem C. Sugere-se como compilador e interface de desenvolvimento o Code::Blocks. Disponvel em: <http://www/codeblocks.org>. Acesso em: 11 set. 2011.

O Problema Esta atividade concentra esforos no desenvolvimento de um programa que permita contar linhas de cdigo fonte desenvolvida em Linguagem C ou C++. A estrutura sugerida permitir a sua adequao para outras linguagens. A escolha deste tema por se tratar de um problema de simples entendimento, deixando espao para que o aluno concentre o desenvolvimento de suas habilidades no entendimento e prtica do ciclo de criao e implementao do aplicativo. A contagem de linhas de um arquivo texto pode ser facilmente desenvolvida em poucas linhas de cdigo, conforme apresentado no exemplo da Listagem 1.

Listagem 1. Exemplo de programa em Linguagem C para contagem de linhas de um arquivo.

#include <stdio.h>

int main () { FILE * pFile; int c;

int n = 0; pFile = fopen ("ArquivoTexto.txt", "r"); if (pFile !=NULL) { do { //DO c = fgetc(pFile); if (c == '\n') n++; } //DO while (c != EOF); fclose(pFile); printf("Nmero de linhas = %d.\n", n); } return 0; }

Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 4 de 10

O Desafio Partido do exemplo anterior de contagem simples de linhas de um arquivo texto, o desafio desta tarefa tem incio ao se querer determinar o nmero de linhas do cdigo que so comentrios formatados segundo a sintaxe da Linguagem C/C++. A sintaxe prev dois tipos de comentrios: linha nica comeando com os caracteres // (barra, barra); e comentrios multi-linhas comeando com /* (barra, asterisco) e com trmino determinado por */ (asterisco, barra).

Para uma viso de um problema real, considerar o exemplo de cdigo fonte escrito em C apresentado na Listagem 2. Observar os vrios trechos com comentrios para ajudar a documentao do cdigo-fonte.

Listagem 2. Exemplo real de cdigo fonte com vrios comentrios.

//-----------------------------------------------------------------------------// Exemplo de Cabealho // // Neste tipo de comentrio, faz-se uma breve apresentao do contedo do // mdulo em linguagem C. O cdigo apresentado a seguir um extrato de // desenvolvimento criado para a disciplina de Classificao e Pesquisa. // Pede-se ao leitor identificar os tipos de linhas com comentrios, em // especial a diferenciao de comentrios de uma ou de vrias linhas. // // Autor: Marcelo Augusto Cicogna. // Revises: // 22/11/2005: Criao do mdulo. // 01/11/2006: Expanso do mdulo em funo da lista de exerccios. //-----------------------------------------------------------------------------#include "TBinTree.h"

#include <stdio.h> //-----------------------------------------------------------------------------// Funces de manipulao do tipo TBinTree.

//-----------------------------------------------------------------------------TBinTree* binTreeCreate(TData* pData) /** Funo para criao de uma nova rvore binria. necessrio fornecer um valor para o primeiro n. @param pData varivel do tipo TData para compor o n raz (root). @return ponteiro para uma rvore binria. @see BinTree.#dataCopy dataCopy()

@version 1.01 @author Marcelo Augusto Cicogna */ { TBinTree* binTree = malloc(sizeof(TBinTree)); if (binTree != NULL) { //Alocao do node raz. TNodeBin* pNode = nodeCreate(); //Copia no novo n o valor data passado como parmetro. dataCopy(pNode->pData, pData); //Associa o novo n ao root da rvore binria. binTree->root = pNode; } return (binTree); } //-----------------------------------------------------------------------------void binTreeInsertNode(TNodeBin* pNode, TData* pData) /** Funo para insero de um novo n em uma rvore binria.

Funo recursiva por meio do parmetro pNode. @param pNode ponteiro para um n da rvore binria. @param pData ponteiro para uma varivel do tipo TData a ser inserida. @return No h retorno @see BinTree.#dataCopy dataCopy()

@version 1.01 @author Marcelo Augusto Cicogna */ { TNodeBin* pNodeAux; Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 5 de 10

if (pNode != NULL) { //Se for para inserir do lado esquerdo. if ( dataComp(pData, pNode->pData, 0) < 0 ) { //Inserir se o arco esquerdo for nulo. if (pNode->esq == NULL) { pNodeAux = nodeCreate(); //Este um exemplo de comentrio

dataCopy(pNodeAux->pData, pData); //que ocorre junto com cdigo. pNode->esq = pNodeAux; } //Caso contrrio, tentar inserir na sub-rvore a esquerda (recursivo). else //Ser necessrio um tratamento.

binTreeInsertNode(pNode->esq, pData); } //Se for para inserir do lado direito. else { //Inserir se o arco direito for nulo. if (pNode->dir == NULL) { pNodeAux = nodeCreate(); dataCopy(pNodeAux->pData, pData); pNode->dir = pNodeAux; } //Caso contrrio, tentar inserir na sub-rvore a direita (recursivo). else binTreeInsertNode(pNode->dir, pData); } } } //------------------------------------------------------------------------------

Como resultado a ser conquistado, espera-se poder utilizar um aplicativo auxiliar para contar as linhas do arquivo Exemplo.c (ou de outro que o aluno achar conveniente durante a fase de testes). Ver um exemplo do provvel funcionamento de tal programa.

Figura 1. Exemplo de uso e funcionamento do contador de linhas de cdigo fonte.

Notar que o programa CodeCount possui um parmetro c ou -comment que

permite ao usurio decidir a contagem, ou no, das linhas com comentrios. Vale lembrar que no arquivo Exemplo.c, existe uma linha vazia entre os dois #include. Alm disso, as linhas que terminam um comentrio multi-linhas com */ no so contadas como linhas em branco, mas tambm no so contadas como linhas de comentrio. Permite-se aos alunos e professores encontrarem outras regras de contagem. Esta atividade adotou algumas regras, mas elas no precisam ser as nicas durante a fase de desenvolvimento.

Equipe As etapas descritas a seguir devem ser realizadas em grupos de at quatro alunos.

Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 6 de 10

Objetivo do Desafio Adquirir experincia com o ciclo completo de desenvolvimento de um pequeno aplicativo de linha de comando (Console).

ETAPA 1 (tempo para realizao: 5 horas)

Modularizao: uso de funes. Passagem de parmetros: por valor. Modularizao: uso de funes. Passagem de parmetros: por referncia.

Esta atividade importante para voc compreender os requisitos do problema e determinar uma organizao inicial do cdigo fonte que permita o desenvolvimento de uma soluo. Para realiz-la importante seguir os passos descritos.

PASSOS

Passo 1 (Aluno) Ler atentamente o desafio e os conceitos de contagem de linhas. Identificar os dois tipos principais de comentrios possveis em linguagem C: comentrio de uma linha apenas, que comea com //; e comentrios multi-linhas determinado por /* e */.

Passo 2 (Equipe) Analisar o problema e fazer sugestes de como organizar o cdigo em uma funo principal (main) e outra funo que far a contagem das linhas dado como parmetro o nome do arquivo a ser pesquisado. Pode-se chamar esta funo de ccRun.

Observao: ao utilizar o prefixo cc (de Code Count), ou qualquer outro que o aluno achar conveniente, facilita-se a integrao do cdigo desenvolvido nesta tarefa com outras que o programador venha a achar necessrio no futuro. Como guia para alunos e professores, os autores deste desafio determinaram dois mdulos para a soluo do problema. O mdulo principal foi denominado MainCodeCount e um mdulo auxiliar com funes de auxlio ao principal chamado LibCodeCount. Ao mesmo tempo, foram projetadas

duas funes, conforme a orientao anterior. Os cabealhos e os nomes dos arquivos os quais contero o cdigo fonte so apresentados na Figura 2.

Arquivo MainCodeCount.c int main(int argc, char *argv[]) {... }

Arquivo LibCodeCount.h void ccRun(char* file, int* nLines, int* nLinesComment, int* nLinesEmpty, int noComment, int silent);

Arquivo LibCodeCount.c void ccRun(char* file, int* nLines, int* nLinesComment, int* nLinesEmpty, int noComment, int silent); {... } Figura 2. Exemplo de uso e funcionamento do contador de linhas de cdigo fonte. Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 7 de 10

Passo 3 (Equipe) Estudar a modularizao proposta. importante que seu cdigo siga a organizao sugerida nesta atividade, ou seja, que possua pelo menos dois mdulos: um principal e outro auxiliar.

No ser aceito na avaliao desta etapa a apresentao de apenas um arquivo de cdigo fonte (arquivo.c).

Passo 4 (Equipe) Entregar o cdigo fonte formado por dois mdulos que contenham a funo principal e uma funo auxiliar para o clculo do nmero de linhas, considerando as opes fornecidas nesta etapa.

ETAPA 2 (tempo para realizao: 5 horas)

Esta atividade importante para voc entender a passagem de parmetros para um programa escrito em linguagem C. Para realiz-la importante seguir os passos descritos.

PASSOS

Passo 1 (Aluno) Pesquisar a utilizao dos argumentos argc e argv passados como parmetros da funo principal main() de um programa escrito em linguagem C.

Passo 2 (Equipe) Elaborar uma funo principal que aceite os seguintes parmetros:

Parmetro obrigatrio.

Nome do arquivo. O primeiro parmetro ser o nome de um arquivo a ser pesquisado o nmero de linhas.

Parmetros opcionais. -h (-help) opo para apresentar uma explicao do uso do programa CodeCount. -c (-comment) opo para contar o nmero de linhas de comentrios. -s (-silent) opo para no apresentar resultados na tela de comando (prompt).

Para auxlio dos alunos, apresenta-se um exemplo na Listagem 3 de como criar o parmetro s. Neste exemplo ser possvel notar o uso dos argumentos argc e argv. Vale lembrar que a posio zero do vetor argv possui sempre o nome do programa, neste caso CodeCount. Como se trata de criar uma forma de implementar os parmetros opcionais, o loop pelo arquivo argv comea na posio 2, uma vez que a posio 1 foi reservada para conter o nome do arquivo a ser pesquisado. Assim, a chamada do programa (o smbolo > representa a linha de comando, ou prompt do sistema operacional): Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 8 de 10

> CodeCount Exemplo.c c

Teria os seguintes argumentos passados para a funo principal: argc = 3 argv*0+ = CodeCount argv*1+ = Exemplo.c

argv*2+ = -c

Listagem 3. Exemplo de funo principal com gerenciamento de parmetros.

int main(int argc, char *argv[]) { int i, silent; int nLines, nLinesComment, nLinesEmpty, count; silent = 0; nLines = 0;

for (i=2; i<argc; i++) { silent = silent || (strstr(argv[i], "-silent" ) != NULL); silent = silent || (strstr(argv[i], "-s" } printf("Code Count - Programmer's Tool\n"); printf(" Version 1.1 - 2009\n\n"); ) != NULL);

if (!silent) { printf(" counting for \"%s\"...\n", argv[1]); }

ccRun(argv[1], &nLines, &nLinesComment, &nLinesEmpty, noCom, silent);

Notar que o exemplo testa se o usurio passou a verso curta do parmetro -s ou a verso normal -silent.

Passo 3 (Equipe) Entregar o cdigo fonte, em complemento ao que foi entregue na etapa anterior, que apresente uma funo principal capaz de processar os parmetros e opes estabelecidos nesta etapa.

ETAPA 3 (tempo para realizao: 5 horas)

Esta atividade importante para voc determinar a verso final do programa capaz de contar linhas e comentrios, bem como utilizar a passagem de parmetros projetada na etapa anterior. Para realiz-la importante seguir os passos descritos.

PASSOS

Passo 1 (Aluno) Ler o texto e fazer as atividades a seguir. Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna Pg. 9 de 10

Nesta etapa, ser necessrio entender o contedo de um arquivo texto e elaborar uma estratgia para a contagem de linhas, principalmente focando o problema de contagem de linhas com comentrios. Por exemplo, a leitura de um arquivo texto pode ser interpretada como o percurso por um vetor de caracteres. Como ilustrao desta ideia, veja o arquivo abaixo:

Arquivo Segunda linha fim

A leitura deste arquivo no disco pode ter uma representao da seguinte forma:

A r q u i v o \n S e g u n d a l i n h a \n f i m EOF

Notar que as linhas tm o caractere especial \n para delimitar o seu fim, bem como o final do arquivo encontrado quando se processa a informao EOF (End Of File). A ideia para a contagem de linhas, conforme visto na Etapa 1, baseia-se na contagem dos caracteres \n de um arquivo texto. Ao mesmo tempo, a contagem de linhas com comentrios pode fazer uso da mesma estratgia. Por exemplo, o uso de variveis auxiliares, pode-se determinar a ocorrncia dos caracteres \\, indicando que esta linha um comentrio e que, portanto, ao encontrar um caractere \n esta linha deva ser contada como comentrio. O mesmo vale para comentrios multi-linhas. Ao se identificar os caracteres /* todos os caracteres \n encontrados antes da ocorrncia de */ devero ser contabilizados como linhas de comentrio.

Passo 2 (Equipe) Desenvolver um algoritmo que baseado na leitura caractere a caractere de um arquivo texto, contabilize o nmero de linhas total, o nmero de linhas de comentrio simples e o nmero de linhas de comentrio multi-linhas. Por exemplo, considerar o arquivo:

// Este um comentrio de uma linha s. for (i = 0; i < 10; i++) { /* Este um comentrio de duas linhas. O trmino ocorre na prxima linha. */ printf(Valor de i %d, i); //Um comentrio aqui no deve ser computado. }

Este arquivo possui 8 linhas. Uma linha do tipo comentrio simples, iniciado com //. Duas linhas possuem comentrio multi-linhas. Neste caso, no foi contabilizada a linha com o */, mas os alunos podem encontrar outra regra. importante notar que o comentrio apresentado aps o comando printf no deve ser contabilizado, uma vez que a mesma linha possui cdigo.

Cincia da Computao 2 Srie Programao Estruturada II

Jaqueline Brigladori Pugliesi, Jeanne Dobgenski, Marcelo Augusto Cicogna

Pg. 10 de 10

Passo 3 (Equipe) Entregar o cdigo fonte, em complemento ao que foi entregue na etapa anterior, que apresente uma funo principal capaz de contabilizar o nmero de linhas total de um arquivo de cdigo fonte em linguagem C. Em complemento, o programa deve tambm contabilizar o nmero de linhas com comentrios simples, multi-linhas e o nmero de linhas em branco (sem comentrios e/ou instrues de cdigo).

ETAPA 4 (tempo para realizao: 5 horas)

Esta atividade importante para voc validar o programa desenvolvido. Para realiz-la importante seguir os passos descritos.

PASSOS

Passo 1 (Equipe) Criar trs tipos de arquivos de cdigo fonte escritos em Linguagem C. Por exemplo, criar um arquivo com poucos comentrios, fceis de serem identificados. Os outros dois arquivos podem possuir um numero maior de combinaes e linhas de comentrios. Veja, por exemplo, o cdigo apresentado na Listagem 2.

Passo 2 (Equipe) Demonstrar o uso do programa desenvolvido, bem como os resultados obtidos. Ter como

objetivo apresentar ao usurio um documento simples que demonstre que seu programa funciona bem e que determina os resultados esperados.

Passo 3 (Equipe) Entregar um relatrio simples que apresente o funcionamento do programa e que demonstre os resultados apontados neste desafio. importante explorar vrios tipos de arquivos de cdigo fonte, validando a contagem de comentrios inseridos no cdigo fonte destes arquivos.

Livro Texto da Disciplina

MIZRAHI, Victorine Viviane. Treinamento em linguagem C. 2 ed. So Paulo: Pearson, 2008.