Upload
bruno-santos-de-souza
View
212
Download
0
Embed Size (px)
Citation preview
Taboão da Serra
CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E
DESENVOLVIMENTO DE SISTEMAS
Programação Estruturada II
Equipe dos Acadêmicos:
Huilha dos Santos Fernandes RA: 7377582342
Jorge da Silva Santos RA: 7980706890
Milton Batista Santos RA: 9975719911
Samuel Teixeira de Lima RA: 7373572039
Tutor Presencial: Eduardo Galego
Taboão da Serra/ SP
Abril / 2014
Sumário
1ª Etapa 1º Passo .............................................................................................. 5
1ª Etapa 2º Passo .............................................................................................. 5
1ª Etapa 3º Passo .............................……………………................................. 5
a. Arquivo: CodeCount.cpp..................................................................................5
b. Arquivo: LibCodeCount.c................................................................................ 8
2ª Etapa 1º Passo................................................................................................9
2ª Etapa 2º Passo........................................................................................... 9
2ª Etapa 3º Passo..............................................................................................10
a. Arquivo: CodeCount.cpp................................................................................10
b. Arquivo: LibCodeCount.c...............................................................................13
Conclusão....................................................................................................... 15
Bibliografia........................................................................................................ 15
4
1ª Etapa 1° Passo
Leitura para entendimento da solicitação do ATPS, com a identificação dos dois principais tipos de comentários disponíveis na linguagem C. Os principais tipos de comentário são o // que indica comentário em uma única linha e /* */ que permite realizar comentários com múltiplas linhas.
2° Passo
Para a solução do problema proposto será criado dois módulos. O arquivo principal é o CodeCout.cpp que contém o modulo toda a rotina de contagem das linhas do arquivo. Esta modulo realiza a leitura do arquivo informado para analisa. Após realizada a análise é chamada a função ccRun que esta contida no arquivo LibCodeCount.c, passando alguns parâmetro necessários para realização da rotina. A função ccRun é responsável por receber os dados passados por paramentos, pelo modulo principal, formatá-los e exibir as informações ao usuário.
1ª Etapa 3° Passo
Aqui temo os códigos fontes dos arquivos gerados no desenvolvimento desta etapa.
a: Arquivo: CodeCount.cpp
#include #include #include //Inclui o arquivo que contém as funções de Calculo de número 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");
5
//Verifica se o arquivo foi aberto. if(pFile != NULL) { car1 = fgetc(pFile); /*Irá verificar todos os caracteres do arquivo, para localizar // --> Comentário de linha. /* e * / --> Comentério em bloco e contar todas as linhas do comentário. \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 afirmação for //verdadeira e o próximo caracter for = * será iniciado o //processo de contagem das linhas do comentário em bloco. if(car1== '/'){ car2 = fgetc(pFile); //Conta as linhas dos comentários em bloco. if(car2 == '*'){ do{ do{ car1 = fgetc(pFile); if(car1 == '\n' && car1 != car2) { //Conta as linhas do bloco de comentário. nLinesComment++; //Contagem de linhas do arquivo. nLines++; } //Se for encontrado um \n no bloco de comentário, //o mesmo não é contado como comentário e sim //como linha em branco. else if(car1 == '\n' && car2 == '\n') { nLinesEmpty++; } car2 = car1; } while(car1 != '*');
6
car1 = fgetc(pFile); //Até que seja encontrado */ a rotina de contagem de //linhas no bloco de comentário 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 função que irá exibri os contadores das linhas. ccRun(argv[1],nLines,nLinesComment,nLinesEmpty); } //Se o arquivo não foi encontrado é informado ao usuário. else { printf("\nNao foi possivel abrir o arquivo %s.\n\n",argv[1]); } }
1ª Etapa 3° Passo
b: Arquivo: LibCodeCount.c
#include #include void ccRun(char *file,int nLines,int nLinesComment, int nLinesEmpty) { float porcentagem;
7
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 : %d\n",nLinesComment); printf(" Porcentagem de comenarios : %.02f \%\n",porcentagem); printf(" Numero de linhas vazias : %d\n\n",nLinesEmpty); }
2ª Etapa 1° Passo
A função main() pode ter parâmetros formais. Mas o programador não pode escolher quais serão eles. A declaração mais completa que se pode ter para a função main() é: int main (int argc,char *argv[]); Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado. O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 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 parâmetros 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 alterações nos dois módulos para atender as novas solicitações onde além do nome do arquivo que é um parâmetro obrigatório, estão sendo disponibilizados mais três parâmetros opcionais que permitem ao usuário selecionar como as informações serão passadas e também disponibiliza um help para utilização do sistema. Essas opções serão passadas por paramento ao modulo secundário que teve que ser alterado para receber os mesmos e processa-los corretamente para atender a solicitação do usuário.
2ª Etapa 3° Passo
8
Aqui temos os códigos fontes dos arquivos alterados no desenvolvimento desta etapa.
a: Arquivo: CodeCount.cpp
#include #include #include //Inclui o arquivo que contém as funções de Calculo de número de linhas #include "LibCodeCount.c"
int main(int argc, char *argv[]) { FILE *pFile; char car1, car2; int i,nLines = 0,nLinesComment = 0,nLinesEmpty = 0,noComment = 0,silent = 0,help = 0; for(i=2;i Comentário de linha. /* e * / --> Comentério em bloco e contar todas as linhas do comentário. \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 afirmação for //verdadeira e o próximo caracter for = * será iniciado o //processo de contagem das linhas do comentário em bloco. if(car1== '/'){ car2 = fgetc(pFile); //Conta as linhas dos comentários em bloco. if(car2 == '*'){ do{ do{ car1 = fgetc(pFile); if(car1 == '\n' && car1 != car2) { //Conta as linhas do bloco de comentário. nLinesComment++;
9
//Contagem de linhas do arquivo. nLines++; } //Se for encontrado um \n no bloco de comentário, //o mesmo não é contado como comentário 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 comentário 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 função que irá exibri os contadores das linhas. ccRun(argv[1],nLines,nLinesComment,nLinesEmpty,noComment,silent); } //Se o arquivo não foi encontrado é informado ao usuário. else { printf("\nNao foi possivel abrir o arquivo %s.\n\n",argv[1]);
10
} } else { printf("\n\n Este programa foi desenvolvido para contar as linhas"); 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 não 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
b: Arquivo: LibCodeCount.cpp
#include #include #include void ccRun(char *file,int nLines,int nLinesComment, int nLinesEmpty, int noComment, int silent)
11
{ 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 não 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 usuário 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"); } }
12
Conclusão
Para a realização desta ATPS nos utilizamos e consolidamos todos os
conhecimentos adquiridos em aula.
Foram utilizadas as passagens de informações entre módulos por
parâmetro, utilizamos também os argumentos argc e argv[] para identificarmos
as solicitações do usuário.
Outro ponto importante consolidado com este trabalho foi a
manipulação de arquivos, pois tivemos que realizar leitura e escrita nos
mesmos.
Bibliografia:
http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c790.html
13