You are on page 1of 10

ATIVIDADES PRTICAS

SUPERVISIONADAS

CST em Anlise e Desenvolvimento de Sistemas
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:
Favorecer a aprendizagem.
Estimular a corresponsabilidade do aluno pelo aprendizado eficiente e
eficaz.
Promover o estudo, a convivncia e o trabalho em grupo.
Desenvolver os estudos independentes, sistemticos e o autoaprendizado.
Oferecer diferentes ambientes de aprendizagem.
Auxiliar no desenvolvimento das competncias requeridas pelas Diretrizes
Curriculares Nacionais dos Cursos de Graduao.
Promover a aplicao da teoria e conceitos para a soluo de problemas
prticos relativos profisso.
Direcionar o estudante para a busca do raciocnio crtico e a emancipao
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:
Marcelo Augusto Cicogna
Faculdade Anhanguera de Valinhos
Jeanne Dobgenski
Anhanguera Educacional Ltda
Jaqueline Brigladori Pugliesi
Faculdade Anhanguera de Valinhos
CST em Anlise e Desenvolvimento de Sistemas 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.
Compreender tecnologias relacionadas comunicao e processamento de dados e
informaes.
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.
Entregar seus nomes, RAs e e-mails ao professor da disciplina.
Observar, no decorrer das etapas, as indicaes: Aluno e Equipe.
Padronizao
O material escrito solicitado nesta atividade deve ser produzido de acordo com as
normas da ABNT
1
, com o seguinte padro:
Em papel branco, formato A4.
Com margens esquerda e superior de 3cm, direita e inferior de 2cm.
Fonte Times New Roman tamanho 12, cor preta.
Espaamento de 1,5 entre linhas.
Se houver citaes com mais de trs linhas, devem ser em fonte tamanho 10, com
um recuo de 4cm da margem esquerda e espaamento simples entre linhas.
Com capa, contendo:
Nome de sua Unidade de Ensino, Curso e Disciplina.
Nome e RA de cada participante.
Ttulo da atividade.
Nome do professor da disciplina.
Cidade e data da entrega, apresentao ou publicao.


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.

1
Consultar o Manual para Elaborao de Trabalhos Acadmicos. Unianhanguera. Disponvel em:
<http://www.unianhanguera.edu.br/anhanguera/bibliotecas/normas_bibliograficas/index.html>.
CST em Anlise e Desenvolvimento de Sistemas 2 Srie Programao Estruturada II

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

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;
}

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).

CST em Anlise e Desenvolvimento de Sistemas 2 Srie Programao Estruturada II

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

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;
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; //Ser necessrio um tratamento.
}
//Caso contrrio, tentar inserir na sub-rvore a esquerda (recursivo).
else
binTreeInsertNode(pNode->esq, pData);
CST em Anlise e Desenvolvimento de Sistemas 2 Srie Programao Estruturada II

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

}
//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.


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




CST em Anlise e Desenvolvimento de Sistemas 2 Srie Programao Estruturada II

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

ETAPA 1 (tempo para realizao: 5 horas)

Aula tema: 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.
CST em Anlise e Desenvolvimento de Sistemas 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)

Aula tema: Ponteiros e sua aplicao. Registros. Uso avanado de vetores e matrizes.

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):
CST em Anlise e Desenvolvimento de Sistemas 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" ) != NULL);
}
printf("Code Count - Programmer's Tool\n");
printf(" Version 1.1 - 2009\n\n");

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)

Aula tema: Ponteiros e sua aplicao. Arquivos: Uso avanado de vetores e matrizes.

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.
CST em Anlise e Desenvolvimento de Sistemas 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.



CST em Anlise e Desenvolvimento de Sistemas 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)

Aula tema: Arquivos. Uso avanado de vetores e matrizes.

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. 1 ed. So Paulo: Pearson, 2007.