Upload
jorge-oliveira
View
31
Download
5
Embed Size (px)
DESCRIPTION
Enuncioado da atps
Citation preview
Santo Andr, 11 de junho de 2013
CENTRO UNIVERSITRIO ANHANGUERA DE SANTO ANDR
Professor: Peter Rauer
Atividade Prtica Supervisionada
Cincia da Computao 3 Semestre
Programao Estruturada II
Andr Henrique
RA: 4200060619
Andrey Resende
RA: 4616913286
Fernando Lucas
RA: 4200060622
Jorge de Oliveira
RA: 4200060636
Leonardo Dombrauskas
RA: 4200060624
Michael Sousa
RA: 1299920396
Paulo Fernando
RA: 3708609304
Santo Andr/SP 2013
Andr Henrique
RA: 4200060619
Andrey Resende
RA: 4616913286
Fernando Lucas
RA: 4200060622
Jorge de Oliveira
RA: 4200060636
Leonardo Dombrauskas
RA: 4200060624
Michael Sousa
RA: 1299920396
Paulo Fernando
RA: 3708609304
ATIVIDADE COLABORATIVA: PROGRAMAO ESTRUTURADA II
Trabalho apresentado ao Centro
Universitrio Anhanguera de
Santo Andr, como requisito
para avaliao semestral da
disciplina de Programao
Estruturada II.
Orientador: Peter Rauer
Sumrio
1 Cdigo fonte completo da aplicao................................................................. 1
1.a - Cdigo fonte do arquivo mainCodeCount.c .................................................... 1
1.b - Cdigo fonte do arquivo libCodeCount.h ........................................................ 4
1.c - Cdigo fonte do arquivo libCodeCount.c ........................................................ 4
1.d - Cdigo fonte do arquivo teste.txt .................................................................... 7
2 Teste de cdigo................................................................................................10
1
1. Cdigo fonte completo da aplicao:
a. Cdigo fonte do Arquivo libCodeCount.c
#include
#include
#include
#include "libCodeCount.h"
#include "libCodeCount.c"
int main(int argc, char const *argv[])
{
// SETA AS CONFIGURACOES REGIONAIS DO PROGRAMA PARA PORTUGUES:
setlocale(LC_ALL, "Portuguese");
// SETA AS VARIVEIS DO PROGRAMA:
FILE *arquivo;
int linhas_totais, linhas_vazias, linhas_comentario, i, silent = 0, comment = 0;
/* SE SOMENTE FOR PASSADO UM PARMETRO, EXIBE ALGUMAS
INFORMACOES DO PROGRAMA E SAI DO MESMO */
if (argc == 1) {
printf("CodeCount - Software que conta o numero de linhas no arquivo.\n");
printf("mainCodeCount.exe arquivo [-h|--help] [-c|--comment] [-s|--
silent]\n\n");
printf("-h, --help Mostra a ajuda.\n");
printf("-c, --comment Mostra o numero de linhas comentadas.\n");
printf("-s, --silent Modo silencioso, no exibe resposta.\n\n");
system("PAUSE");
return 0;
}
2
/* ABRE O ARQUIVO COM PERMISSO DE LEITURA SOMENTE, SE O ARQUIVO
FOR NULL EXIBE MENSAGEM DE ERRO E SAI */
arquivo = fopen(argv[1],"r");
if (arquivo == NULL) {
printf("O Arquivo no foi encontrado ou no pode ser aberto para
leitura\n\n");
system("PAUSE");
return 0;
}
/* CHAMA A FUNCAO QUE CONTA AS LINHAS E PASSA COMO REFERENCIA
PARA AS VARIAVEIS J EXISTENTES */
ccRun(arquivo, &linhas_totais, &linhas_comentario, &linhas_vazias);
fclose(arquivo);//FECHA O ARQUIVO E LIBERA MEMRIA:
/* SE FOR PASSADO MAIS DE DOIS PARAMETROS, VARRE OS MESMOS DO
MAIN E VERIFICA SE FOI AMRCADA CADA UMA: */
for (i = 2; i < argc; i++) {
// SE FOR MARCADA A OPCAO SILENT SAI DO SOFTWARE:
if (strcmp(argv[i],"-s") == 0 || strcmp(argv[i],"--silent") == 0)
{
return 0;
}
// SE FOI CHAMADO OS COMENTRIOS, SETA A VAR COMMENT COMO 1:
if (strcmp(argv[i],"-c") == 0 || strcmp(argv[i],"--comment") == 0)
{
comment = 1;
}
3
// SE FOI CHAMADA A AJUDA INFORMA A AJUDA:
if (strcmp(argv[i],"-h") == 0 || strcmp(argv[i],"--help") == 0)
{
printf("Voc pediu ajuda. CodeCount - Conta o numero de linhas no
arquivo.\n");
printf("mainCodeCount.exe arquivo [-h|--help] [-c|--comment] [-s|--
silent]\n\n");
printf("-h, --help Mostra a ajuda.\n");
printf("-c, --comment Mostra o numero de linhas comentadas.\n");
printf("-s, --silent Modo silencioso, no exibe resposta.\n\n");
system("PAUSE");
return 0;
}
}
/* SE FOI CONFIRMADO QUE DEVE SER MOSTRADO OS COMENTRIOS, OS
MOSTRA */
if (comment == 1)
{
printf("Linhas totais: %d\nLinhas de comentrio:%d\nLinhas completamente
vazias:%d\n\n", linhas_totais, linhas_comentario, linhas_vazias);
}
else
{
printf("Linhas totais: %d\nLinhas completamente vazias:%d\n\n",
linhas_totais, linhas_vazias);
}
system("PAUSE");
return 0;
}
4
b. Cdigo fonte do arquivo libCodeCount.h
// PROTTIPO DA FUNCAO CCRUN:
void ccRun (FILE *arquivo, int *linhas_totais, int *linhas_comentario, int *linhas_vazias);
c. Cdigo fonte do arquivo libCodeCount.c
// FUNCAO QUE CONTA AS LINHAS:
void ccRun (FILE *arquivo, int *linhas_totais, int *linhas_comentario, int *linhas_vazias)
{
// VARS QUE A FUNCAO VAI UTILIZAR:
int caractere,ultimo,tamanho,comentario_longo = 0, primeiro_caractere = 1;
// SETA OS VALORES DAS VARS COMO 0;
*linhas_totais = 0;
*linhas_comentario = 0;
*linhas_vazias = 0;
// LOOP QUE VARRE O ARQUIVO J ABERTO:
do
{
ultimo = caractere;
caractere = fgetc(arquivo);
/*
AQUI CONTAMOS OS COMENTRIOS (SIMPLES E DE BLOCO):
*/
5
// PEGA COMENTRIO SIMPLES ( / / )
if(caractere == '/' && ultimo == '/' && comentario_longo == 0)
{
*linhas_comentario = *linhas_comentario + 1;
}
// PEGA O COMECO DOS COMENTARIOS DE BLOCO ( /* )
if(caractere == '*' && ultimo == '/' && comentario_longo == 0)
{
comentario_longo = 1;
}
/* PARA TODA LINHA DEPOIS QUE A VAR COMENTARIO_LONGO FOR SETADA COMO 1,
SER CONTADA COMO COMENTRIO */
if(caractere == '\n' && comentario_longo == 1)
{
*linhas_comentario = *linhas_comentario + 1;
}
// PEGA O FIM DOS COMENTARIOS DE BLOCO (*/)
if(caractere == '/' && ultimo == '*' && comentario_longo == 1)
{
comentario_longo = 0;
*linhas_comentario = *linhas_comentario + 1;
}
6
/*
AQUI CONTAMOS O TOTAL DE LINHAS E LINHAS VAZIAS:
*/
if(caractere == '\n')
{
*linhas_totais = *linhas_totais + 1;
}
// CONTA LINHA VAZIA:
if(caractere == '\n' && ultimo == '\n')
{
*linhas_vazias = *linhas_vazias + 1;
}
} while(caractere != EOF); //FIM DO LOOP QUE VARRE O ARQUIVO:
// CONTA + UMA LINHA:
*linhas_totais = *linhas_totais + 1;
}
7
d. Cdigo fonte do arquivo teste.txt
//------------------------------------------------------------------------------
// 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
//------------------------------------------------------------------------------
// 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
8
@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;
9
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);
}
//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);
}
}
}
//------------------------------------------------------------------------------
10
2. Teste de cdigo
Cenrio:
Netbook HP mini 310, Intel Atom Dual Core 1.66, 2 Gb Ram, 160 Gb de HD.
Windows 7 Starter 32 bits.
Diretrio do teste: C:\ATPS
11
Executando via linha de comando o arquivo compilado mainCodeCount.exe e passando via
parmetro o argumento c e o arquivo teste.txt
Resultado da operao:
Linhas totais: 79
Linhas de comentrios: 48
Linhas completamente vazias: 2
12
Acessando o prprio cdigo fonte do arquivo libCodeCount.h
Acessando o prprio cdigo fonte do arquivo libCodeCount.c