15
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

Programação estruturada2

Embed Size (px)

Citation preview

Page 1: Programação estruturada2

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

Page 2: Programação estruturada2

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

Page 3: Programação estruturada2

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

Page 4: Programação estruturada2

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

Page 5: Programação estruturada2

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

Page 6: Programação estruturada2

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

Page 7: Programação estruturada2

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

Page 8: Programação estruturada2

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

Page 9: Programação estruturada2

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

Page 10: Programação estruturada2

{ 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

Page 11: Programação estruturada2

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