Você está na página 1de 6

1 Etapa 1 Passo Leitura para entendimento da solicitao do ATPS, com a identificao dos dois principais tipos de comentrios disponveis

na linguagem C. Os principais tipos de comentrio so o // que indica comentrio em uma nica linha e /* */ que permite realizar comentrios com multiplas linhas. 1 Etapa 2 Passo Para a soluo do problema proposto sero criados dois modulos. O arquivo principal o CodeCout.cpp que contm o modulo toda a rotina de contagem das linhas do arquivo. Esta modulo realiza a leitura do arquivo informado para analiza. Aps realizada a anlise chamada a funo ccRun que esta continda no arquivo LibCodeCount.c, passando alguns parametra necessrios para realizao da rotina. A funo ccRun responsvel por receber os dados passados por paramentros, pelo modulo principal, formatalos e exibir as informaes ao usurio. 1 Etapa 3 Passo Aqui temo os cdigos fontes dos arquivos gerados no desenvolvimento desta etapa. Arquivo: CodeCount.cpp
#include #include #include //Inclui o arquivo que contm as funes de Calculo de nmero de linhas #include "LibCodeCount.c" int main(int argc, char *argv[]) { FILE *pFile; char car1, car2; int nLines = 0, nLinesComment = 0, nLinesEmpty = 0; //Abro o arquivo para verificar se o mesmo existe. pFile = fopen(argv[1],"r"); //Verifica se o arquivo foi aberto. if(pFile != NULL) { car1 = fgetc(pFile); /*Ir verificar todos os caracteres do arquivo, para localizar // --> Comentrio de linha. /* e * / --> Comentrio em bloco e contar todas as linhas do comentrio. \n --> Quebra de linha, indica que a linha terminou. */ while (car1 != EOF){ //Se encontrar um \n conta uma linha em branco. if(car1 =='\n') { nLines++; } //Verifica se o caracter atual /, se esta afirmao for //verdadeira e o prximo caracter for = * ser iniciado o //processo de contagem das linhas do comentrio em bloco. if(car1== '/'){ car2 = fgetc(pFile); //Conta as linhas dos comentrios em bloco. if(car2 == '*'){ do{

do{ car1 = fgetc(pFile); if(car1 == '\n' && car1 != car2) { //Conta as linhas do bloco de comentrio. nLinesComment++; //Contagem de linhas do arquivo. nLines++; } //Se for encontrado um \n no bloco de comentrio, //o mesmo no contado como comentrio e sim //como linha em branco. else if(car1 == '\n' && car2 == '\n') { nLinesEmpty++; } car2 = car1; } while(car1 != '*'); car1 = fgetc(pFile); //At que seja encontrado */ a rotina de contagem de //linhas no bloco de comentrio ser execultada. } while(car1 != '/'); } //Conta os comentarios de uma unica linha if(car1 =='/' && car2 =='/') { nLinesComment++; } } car2 = fgetc(pFile); //Conta as linhas em branco if(car2 =='\n' && car1 == '\n') { nLinesEmpty++; nLines++; } car1 = car2; } //Fecho o arquivo. fclose(pFile); //Chamada para a funo que ir exibri os contadores das linhas. ccRun(argv[1],nLines,nLinesComment,nLinesEmpty); } //Se o arquivo no foi encontrado informado ao usurio. else { printf("\nNao foi possivel abrir o arquivo %s.\n\n",argv[1]); } }

1 Etapa 3 Passo Arquivo: LibCodeCount.c


#include #include void ccRun(char *file,int nLines,int nLinesComment, int nLinesEmpty) { float porcentagem; printf("\nCode Count - Programer's Tool"); printf("\n Version 1.0 2011\n"); printf("\n\n Contagem para "%s"...\n",file); printf(" Numero de linhas : %d\n",nLines);

porcentagem = (nLines * nLinesComment)/100; printf(" Numero de linhas com comentarios printf(" Porcentagem de comenarios printf(" Numero de linhas vazias }

: %d\n",nLinesComment); : %.02f \%\n",porcentagem); : %d\n\n",nLinesEmpty);

2 Etapa 1 Passo A funo main() pode ter parmetros formais. Mas o programador no pode escolher quais sero eles. A declarao mais completa que se pode ter para a funo main() : int main (int argc,char *argv[]); Os parmetros argc e argv do ao programador acesso linha de comando com a qual o programa foi chamado. O argc (argument count) um inteiro e possui o nmero de argumentos com os quais a funo main() foi chamada na linha de comando. Ele , no mnimo 1, pois o nome do programa contado como sendo o primeiro argumento. O argv (argument values) um ponteiro para uma matriz de strings. Cada string desta matriz um dos parmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como j foi dito, considerado o primeiro argumento). para saber quantos elementos temos em argv que temos argc. 2 Etapa 2 Passo Foram realizadas alteraes nos dois modulos para atender as novas solicitaes onde alm do nome do arquivo que um paramentro obrigatrio, esto sendo disponibilizados mais trs parametros opcionais que permitem ao usurio selecionar como as informaes sero passadas e tambm disponibiliza um help para utilizao do sistema. Essas opes sero passadas por paramento ao modulo secundrio que teve que ser alterado para receber os mesmos e processa-los corretamente para atender a solicitao do usurio. 2 Etapa 3 Passo Aqui temo os cdigos fontes dos arquivos alterados no desenvolvimento desta etapa. Arquivo: CodeCount.cpp
#include #include #include //Inclui o arquivo que contm as funes de Calculo de nmero de linhas #include "LibCodeCount.c" int main(int argc, char *argv[]) { FILE *pFile; char car1, car2; int i,nLines = 0,nLinesComment = 0,nLinesEmpty 0,help = 0; for(i=2;i Comentrio de linha. /* e * / --> Comentrio em bloco e comentrio. \n --> Quebra de linha, indica que */ while (car1 != EOF){ //Se encontrar um \n conta uma if(car1 =='\n') { nLines++; }

= 0,noComment = 0,silent = contar todas as linhas do a linha terminou. linha em branco.

//Verifica se o caracter atual /, se esta afirmao for //verdadeira e o prximo caracter for = * ser iniciado o //processo de contagem das linhas do comentrio em bloco. if(car1== '/'){ car2 = fgetc(pFile); //Conta as linhas dos comentrios em bloco. if(car2 == '*'){ do{ do{ car1 = fgetc(pFile); if(car1 == '\n' && car1 != car2) { //Conta as linhas do bloco de comentrio. nLinesComment++; //Contagem de linhas do arquivo. nLines++; } //Se comentrio, //o mesmo no contado como comentrio e sim //como linha em branco. else if(car1 == '\n' && car2 == '\n') { nLinesEmpty++; } car2 = car1; } while(car1 != '*'); car1 = fgetc(pFile); //At que seja encontrado */ a rotina de contagem de //linhas no bloco de comentrio ser execultada. } while(car1 != '/'); } //Conta os comentarios de uma unica linha if(car1 =='/' && car2 =='/') { nLinesComment++; } } car2 = fgetc(pFile); //Conta as linhas em branco if(car2 =='\n' && car1 == '\n') { nLinesEmpty++; nLines++; } car1 = car2; } //Fecho o arquivo. fclose(pFile); //Chamada para a funo que ir exibri os contadores das linhas. ccRun(argv[1],nLines,nLinesComment,nLinesEmpty,noComment,silent); } //Se o arquivo no foi encontrado informado ao usurio. else { printf("\nNao foi possivel abrir o arquivo %s.\n\n",argv[1]); } } else { for encontrado um \n no bloco de

printf("\n\n linhas");

Este

programa

foi

desenvolvido

para

contar

as

printf("\n de um codigo fonte desenvolvido em C, ele aponta o"); printf("\n total de linhas, linhas em branco e comentarios."); printf("\n\n"); printf("\n --------------HELP------------"); printf("\n\n"); printf("\n Para utilizar o programa deve informar os seguintes parametros:"); printf("\n\n Obrigatorio "CodeCount ""); printf("\n onde no paramentro deve conter o caminho e o nome do"); printf("\n arquivo a ser analizado."); printf("\n"); printf("\n Exemplo: CodeCount Listagem2.cpp"); printf("\n"); printf("\n Opcionais:"); printf("\n -c ou -comment"); printf("\n Para no exibir a contagem das linhas de comentarios"); printf("\n"); printf("\n Exemplo: CodeCount Listagem2.cpp -c"); printf("\n"); printf("\n -s ou -silent"); printf("\n Nao sera exibido na tela o resultado."); printf("\n O resultado ser exibido no arquivo "CodeCount_Result.txt""); printf("\n"); printf("\n -h ou -help"); printf("\n Exibe este help do sistema"); printf("\n\n"); } }

2 Etapa 3 Passo Arquivo: LibCodeCount.cpp


#include #include #include void ccRun(char *file,int nLines,int nLinesComment, int nLinesEmpty, int noComment, int silent) { float porcentagem; printf("\nCode Count - Programer's Tool"); printf("\n Version 1.0 2011\n"); if(silent == 0) { printf("\n\n Contagem para "%s"...\n",file); printf(" Numero de linhas : %d\n",nLines); if(noComment == 0) { porcentagem = (nLines * nLinesComment)/100; printf(" Numero de linhas com comentarios : %d\n",nLinesComment); printf(" Porcentagem de comenarios : %.02f \%\n",porcentagem); } printf(" Numero de linhas vazias : %d\n\n",nLinesEmpty); } else { FILE *pFile; //Abre o arquivo, se no existir cria um novo. pFile = fopen("CodeCount_Result.txt","w");

//Escrevendo no Arquivo. fprintf(pFile,"\nCode Count - Programer's Tool"); fprintf(pFile,"\n Version 1.0 2011\n"); fprintf(pFile,"\n\n Contagem para "%s"...\n",file); fprintf(pFile," Numero de linhas : %d\n",nLines); if(noComment == 0) { porcentagem = (nLines * nLinesComment)/100; fprintf(pFile," Numero de linhas com comentarios : %d\n",nLinesComment); fprintf(pFile," Porcentagem de comenarios : %.02f \%\n",porcentagem); } fprintf(pFile," Numero de linhas vazias : %d\n\n",nLinesEmpty); fclose(pFile); //Informando ao usurio que o arquivo foi criado. printf("\n\nFoi gerado o arquivo CodeCount_Result.txt"); printf("\nno diretorio do sistema com o resultado da contagem.\n"); } }

Concluso Para a realizao deste ATPS utilizamos todos os conhecimentos adquiridos em aula, com isso consolidamos todos os nossos connhecimentos. Foram utilizadas as passagens de informaes entre modulos por paramentro, utilizamos tambm os argumentos argc e argv[] para identificarmos as solicitaes do usurio. Outro ponto importante consolidado com este trabalho foi a manipulao de arquivos, pois tivemos que realizar leitura e escrita nos mesmos.

Você também pode gostar