Vous êtes sur la page 1sur 27

FACNET

TECNOLOGIA EM ANLISE DE DESENVOLVIMENTO DE SISTEMAS

PROGRAMAO ESTRUTURADA II

TUTOR PRESENCIAL ROGERIO LOPES

MOACIR CARLOS KURMANN RA 6056521811


PATRICIA DE FATIMA ALVES RA 7599629077
RAUL DIEGO DE QUEIROZ OLIVEIRA RA 6571257245
CLEIDE APARECIDA DE OLIVEIRA RA 6790428143

TAGUATINGA/DF
2014
1

SUMRIO
SUMRIO................................................................................................................ 2
1 ANALISE DO PROBLEMA...................................................................................... 3
1.1 Mdulo principal............................................................................................... 3
1.2 Mdulo auxiliar................................................................................................ 4
1.3 Herader (cabealho)........................................................................................... 5
1.4 Cdigo fonte por dois mdulos: Funo principal e funo auxiliar.................................7
2 FUNO PRINCIPAL............................................................................................. 8
2.1 Parmetros opcionais........................................................................................... 9
2.1.1 Comando silent......................................................................................... 10
2.1.2 Comando comment..................................................................................... 10
2.1.3 Comando help........................................................................................... 10
2.2 Parmetro obrigatrio....................................................................................... 11
3 DESENVOLVENDO ALGORITMO.........................................................................12
3.1 Funes Auxiliares: parse_linha e isempty.............................................................12
3.2 Funo ccRun: contabilizando o nmero de linhas....................................................14
4 DEMONSTRANDO O PROGRAMA E OS RESULTADOS OBTIDOS..............................19
4.1 Demonstrao 01............................................................................................. 19
4.2 Demonstrao 02............................................................................................. 20
4.3 Demonstrao 03............................................................................................. 24
4.4 Acesso ao contedo.......................................................................................... 27
REFERNCIAS........................................................................................................ 28

1 ANALISE DO PROBLEMA
Iniciamos nossa atividade prtica supervisionada analisando o problema proposto,
aps discutirmos entre os membros de nosso grupo de trabalhos acadmicos, distribumos as
tarefas levantadas no decorrer da anliseda seguinte maneira: Configurao de ambiente de
desenvolvimento,

estruturao

de

arquivos,

criao

dos

prottipos

das

funes,

desenvolvimento da funo main, desenvolvimento da funo que efetua a contagem de


linhas, insero de comentrios no cdigo e documentao da atividade prtica
supervisionada.
Abaixo, podemos observar a estrutura de arquivos que foi montada em nosso ambiente
de desenvolvimento.

Figura 1.0: Arquivos.

Observem que foram criados 3 (trs) arquivos, sendo 2 (dois) arquivos com a extenso
.c e 1 (um) arquivo de cabealho header com a extenso .h, no terceiro arquivo
apresentado na Figura 1.0 iremos criar a funo main, que a funo responsvel pela
execuo do nosso programa que ir contar as linhas, no primeiro arquivo apresentado na
figura ns iremos desenvolver a funo que ir efetuar a contagem e distribuio de
caracterstica das linhas, j no arquivo LibCodeCount.h que nosso arquivo de cabealho,
ele ir receber parmetros e os prottipos das funes.

1.1 Mdulo principal


Iniciamos o nosso mdulo principal fazendo as chamadas das bibliotecas que iremos
utilizar no decorrer do projeto, sendo algumas dessas bibliotecas so primordiais para receber
comandos de entrada e sada.
Na figura abaixo podemos ver as bibliotecas que foram utilizadas no mdulo principal
da atividade pratica supervisionada.

Figura 1.1: Bibliotecas utilizadas no mdulo principal.

As duas primeiras bibliotecas stdio.h e stdlib.h, j foram mencionadas nas tele


aulas da instituio de ensino, alm dessas duas bibliotecas tambm inclumos a biblioteca
string.h, essa biblioteca responsvel por fornecer funes para manipulao de cadeia de
caracteres e regies de memria, utilizaremos algumas dessas funes no desenvolvimento da
nossa funo main, o outro include foi no nosso arquivo de cabealho, veremos mais sobre
esse arquivo no captulo 1.3 desta documentao da atividade prtica supervisionada.
O mdulo principal contm 1 (uma) funo, essa funo a main, responsvel pela
execuo do programa contador de linhas, observamos na figura abaixo o incio da funo.

Figura 1.2: Funo main do mdulo principal.

A estrutura do nosso mdulo principal consiste em includes de bibliotecas e na funo


main, nos prximos captulos iremos apresentar o desenvolvimento da funo main do
mdulo principal.

1.2 Mdulo auxiliar


Nosso mdulo auxiliar inicia com a incluso das bibliotecas que sero utilizadas no
decorrer das funes contidas nesse mdulo. Observem na Figura 1.3 as bibliotecas
utilizadas para o desenvolvimento deste mdulo.

Figura 1.3: Bibliotecas utilizadas no mdulo auxiliar.

Na incluso de bibliotecas do mdulo auxiliar tivemos que utilizar a biblioteca


ctype.h, essa biblioteca contm declaraes para manipulao de caracteres. Usada quando
se trabalha com diferentes idiomas e alfabetos.
Para esse mdulo auxiliar definimos o tamanho mximo do buffer da linha que ser
lida pelo programa, na figura abaixo demonstramos essa definio.

Figura 1.4: Definio do tamanho mximo do buffer da linha a ser lida.

Conforme solicitado em nossa atividade prtica supervisionada, criamos a funo que


ir efetuar a contagem das linhas.

Figura 1.5: Funo que efetua a contagem das linhas.

Observem que nesta funo que ir efetuar a contagem de linhas ns declaramos


variveis como booleanas, iremos explicar no captulo 1.3 como foi feito para utilizarmos esse
tipo de declarao. Nos prximos captulos desta atividade prtica supervisionada iremos
demonstrar o decorrer do desenvolvimento deste mdulo auxiliar.

1.3 Herader (cabealho)


No arquivo de cabealho criamos um enum para enumerar os tipos de linhas que
foram solicitados na atividade prtica supervisionada, aps levantarmos todos os tipos de
linhas que foi solicitado chegamos a seguinte estrutura de enumerao.

Figura 1.6: Enumera os possveis tipos de linhas.

Na numerao linhaNeutra armazenamos as linhas que esto com cdigo ou esto


com comentrios mltiplas linhas aberto, na numerao linhaIniciouComentario
parametrizamos as linhas que abrem o comentrio mltiplo e identificamos o fechamento do
comentrio mltiplo com a numerao do linhaFinalizouComentario, para contar os
comentrios de linhas mltiplas mas que so fechados na mesma linha em que abriram
utilizamos

enumerao

linhaComentario,

por

fim

utilizamos

linhaComentarioSimples para parametrizar as linhas que recebem comentrio de linha


simples, conhecidos como //.
Para utilizar o parmetro BOOL em variveis que queremos trabalhar como booleanas
criamos as seguintes definies.

Figura 1.7: Criando definies de variveis booleanas.

Na figura acima definimos que o tipo BOOL inteiro e logo aps definimos que todas
as variveis que forem TRUE sero 1 (um) e todas que foram declaradas como FALSE
tero o atributo de 0 (zero). Com isso temos a possibilidade de trabalhar com tipos de
variveis booleanas.
Para finalizar nosso arquivo header declaramos os prottipos das funes, inserimos
funes que retornem inteiros e que no necessitariam de declarao apenas para fins
acadmicos e para melhor entendimento do cdigo por parte de outros alunos.
6

Figura 1.8: Declarao dos prottipos das funes.

Com isso finalizamos as declaraes e definies em nosso arquivo de cabealho que


ser utilizado para o desenvolvimento do problema solicitado na atividade prtica
supervisionada.

1.4 Cdigo fonte por dois mdulos: Funo principal e funo auxiliar
Neste captulo iremos mostrar a estrutura inicial do cdigo fonte dos mdulos
LibCodeCount.c e MainCodeCount.c.
Cdigo do mdulo principal:

Figura 1.9: Cdigo inicial do mdulo principal.

Cdigo do mdulo auxiliar:

Figura 2.0: Cdigo inicial do mdulo auxiliar.

Nos prximos passos de nossa atividade prtica supervisionada iremos comear a


trabalhar nesses dois mdulos e iniciar a contagem e tratamento das linhas.

2 FUNO PRINCIPAL
Para nossa funo principal (main) o primeiro passo foi fazer um levantamento de
quais variveis iriamos utilizar e que tipo de variveis, aps um longo tempo analisando o
algoritmo para resoluo do problema chegamos a seguinte relao de variveis.

Figura 2.1: Variveis da funo main.

Aps termos declarado nossas variveis, observem que utilizamos tipos de variveis
booleanas, conforme explicadas no terceiro pargrafo do captulo 1.3, temos a varivel do tipo
inteira com o nome de ret, essa varivel ir receber o retorno da chamada da funo
auxiliar, que a funo que efetuar a contagem das linhas, as demais variveis do tipo inteiro
8

iro armazenar a quantidade de linhas contadas de cada tipo existente, exceto a varivel
inteira com o nome de i, essa varivel ser utilizada no lao que ir fazer o tratamento dos
parmetros opcionais.

2.1 Parmetros opcionais


Para esse trabalho foram passados 3 (trs) parmetros opcionais, no caso do nosso
grupo de estudos resolvemos aplicar todas as opes sugeridas na atividade prtica
supervisionada, so comandos que executam aes diferentes dentro da aplicao assim que
ela chamada para execuo.
Para tratarmos as opes de comandos do nosso programa contador de linhas
utilizamos tivemos que utilizar uma funo condicional if, ele faz a verificao se foi
recebido mais de 2 (dois) parmetros no ato de execuo do programa contador de linhas,
caso tenha recebido esse valor ele entra na condio demonstrada na Figura 2.1, pode-se
observar que dentro do comando condicional temos um lao, esse lao serve para tratar mais
de 1 (um) parmetro caso tenha sido informado, logo aps tratamos cada parmetro com uma
funo condicional if transformamos a varivel que armazena o parmetro como FALSE
ou TRUE.

Figura 2.1: Tratamento dos parmetros opcionais.

Pode-se observar que o programa contador de linhas trata o recebimento dos


parmetros com 2 (opes) para cada parmetro, como exemplo o caso do parmetro silent
ele pode ser chamado utilizando o comando --silent ou -s, ambos iro surtir o mesmo
efeito ao executar o software, isso tambm serve para o parmetro comment e help.

2.1.1 Comando silent


O comando silent faz com que o programa contador de linhas no mostre a
descrio de cada linha que ele est lendo, ele faz o ato de silenciar o programa contador de
linhas durante sua execuo, para mostrar uma base de como isso ocorre teremos que publicar
um trecho de cdigo da funo auxiliar que veremos em captulos posteriores.

Figura 2.2: Demonstrao de cdigo do comando silent.

Alm de mostrar a frase Verificando a linha... ele complementa com o nmero da


linha que est sendo contada e fala qual o tipo de linha, caso se trate de uma linha de cdigo
ele retorna como linha neutra. Na execuo do programa contador de linhas ir ficar mais
claro como ser feito o funcionamento deste comando.

2.1.2 Comando comment


Comando comment apresenta ao usurio o resultado da contagem das linhas que
contm comentrios, mostra o total de linhas com comentrios multi-linhas e a quantidade de
linhas que contenham comentrios simples //.

Figura 2.3: Demonstrao de cdigo do comando comment.

Observem que na Figura 2,3 temos uma funo condicional if que verifica se a
varivel comment est com o atributo de verdadeiro TRUE, caso estej ele executa o
contedo de dentro do bloco da funo condicional.

2.1.3 Comando help


Comando de ajuda ao usurio, caso esse parmetro seja passado pelo usurio, o
programa contador de linhas vai ignorar a execuo de contagem das linhas e vai apresentar
para o usurio uma tela com a sintaxe de como o usurio dever executar o programa.

10

Figura 2.4: Demonstrao de cdigo do comando help.

Na Figura 2.4 podemos ter uma noo de como apresentado na tela as mensagens
de ajuda, e o programa tambm apresenta a sua verso e o ano que foi desenvolvido, para fins
acadmicos colocamos o ano de 2013.

Figura 2.5: Execuo do parmetro help (Executado em Linux Console).

Podemos observar que na Figura2.5 o programa contador de linhas foi executado e


passou como parmetro obrigatrio o nome do arquivo para a contagem das linhas
LibCodeCount.c, mas ao invz de efetuar a contagem das linhas o programa reconheceu o
parmetro -h e ignorou a contagem de linhas, com isso foi apresentado ao usurio a tela de
ajuda do programa.

2.2 Parmetro obrigatrio


Como parmetro obrigatrio do programa contador de linhas o nome do arquivo que
ser aberto e lido pelo programa, para isso a funo main faz a chamada da funo ccRun
e armazena o retorno da funo na varivel ret conforme falado em captulos anteriores.

Figura 2.6: Chamada da funo ccRun.

11

Aps a execuo da funo o nosso sistema utiliza a funo condicional if para


verificar o retorno, e caso o retorno seja meno que 0 (zero) o programa contador de linhas
mostra para o usurio a mensagem Erro!, com isso o parmetro do arquivo que ser lido se
torna obrigatrio.

Figura 2.7: Verificao do retorno da funo ccRun.

E por final em nossa funo principal apresentamos a quantidade de linhas gerais e a


quantidade de linhas vazias, as vazias so linhas que no apresentam cdigo e nem
comentrios.

Figura 2.8: Apresentao das quantidade de linhas na funo main.

Com isso nossa funo principal main se encerra com a execuo dos parmetros
opcionais e parmetro obrigatrio, nos prximos captulos iremos mostrar como foi
desenvolvido o algoritmo que efetua a contagem e classificao das linhas.

3 DESENVOLVENDO ALGORITMO
No desenvolvimento do mdulo auxiliar do algoritmo que ir fazer a contagem das
linhas utilizamos 3 (trs) funes, uma das funes ir fazer o trabalho de identificar em meio
as strings a classificao de cada linha, a outra funo servir para identificar as linhas que
esto vazias e por ltimo a funo ccRun, essa funo a que efetua a contagem das linhas
para retornar a funo principal main os valores contados.
A misso interagir as 3 (trs) funes para que a funo ccRun apenas retorne a
contagem das linhas.

3.1 Funes Auxiliares: parse_linha e isempty


Iniciaremos falando sobre a funo parse, essa funo de grande importncia no
projeto, pois essa funo que ir fazer a varredura nas linhas e retornar o tipo de linha que
12

foi identificado, para isso utilizamos uma funo de uma das bibliotecas importadas, a funo
strstr() faz a varredura na linha e verifica se encontrou algum valor que foi passado na
funo condicional if, caso a funo encontre o trecho solicitado pela funo condicional
retornado

tipo

da

linhaIniciouComentario,

linha,

esto

classificadas

linhaFinalizouComentario,

como

linhaComentario,

linhaComentarioSimples

linhaNeutra.

Figura 2.9: Funo Parser.

Os valores retornados pela funo parse_linha sero utilizados na funo ccRun


para efetuar a contagem, pois cada linha j foi identificada na funo parse_linha.
Como o programa contador de linhas verifica as linhas como string, essa funo faz
a varredura na linha e verifica se existe algum caractere, toda linha se inicia com o parmetro
de verdadeiro (TRUE) para linha vazia, essa funo verifica se contm algum caractere
diferente de espaos em branco, caso exista algum caractere ele retorna para o local onde
chamou a funo o valor de falso (FALSE).
Para isso essa funo recebeu como parmetro a linha em que o programa contador de
linhas est executando, aps isso declarado uma varivel i do tipo inteira e com o valor
padro atribuido de 0 (zero), em seguida abrimos uma funo condicional if, esse if verifica
se o parmetro enviado para a funo diferente de uma string, caso seja diferente ele vai
dar o retorno de verdadeiro (TRUE), mas se existir uma string ele continua percorrendo a
funo, em seguida foi utilizado um lao (while), esse lao percorre toda a string, e com
13

isso cada caractere comparado em outra funo condicional if, essa funo condicional
faz a verificao se o caracter que ela est analisando diferente de um espao em branco,
caso encontre esse espao em branco no caractere percorrido dentro da string ele retorna
como falso (FALSE).

Figura 3.0: Funo isempty.

Agora que temos a verificao das linhas separado em funes, basta utilizarmos em
nossa funo ccRun a chamada das funes para que elas faam as verificaes de tipo de
linhas em que estamos percorrendo na leitura do arquivo que ser aberto.

3.2 Funo ccRun: contabilizando o nmero de linhas


Iniciamos nossa funo ccRun do mdulo auxiliar recebendo os parmetros que a
funo ir trabalhar, o primeiro passo a ser feito foi identificar as variveis que sero
utilizadas no decorrer da funo.

Figura 3.1: Incio da funo ccRun.

14

Aps feito a declarao das variveis o prximo passo ser abrir o arquivo que ser
feito a anlise e contagem das linhas, para isso utilizamos a varivel pf, e utilizamos a
funo fopen() passando o nome do arquivo e o parmetro r, esse parmetro nos permite
fazer a leitura do arquivo.
Em seguida utilizamos uma funo condicional if para verificar se o arquivo foi
aberto com sucesso, caso tenha ocorrido algum problema nossa funo ir retornar o valor
para o local de onde foi chamada a funo -1.

Figura 3.2: Abertura do arquivo.

Essa parte da funo muito importante, pois no lao while apresentado na


Figura 3.3 que recebemos cada linha e efetuamos a contagem, tambm dentro deste lao
que verificado o parmetro opcional silent que foi explicado em captulo anterior, aps
feito isso chamamos a funo parse_linha e armazenamos o retorno da funo em uma
varivel com o nome tipo, essa varivel ir percorrer um comando switch para efetuar a
contagem dos tipos de linhas.

Figura 3.3: Lao de contagem das linhas.

Observem na Figura 3.4 que iniciamos o comando switch recebendo o tipo da


linha para efetuar a contagem dos tipos de linhas que estamos percorrendo dentro do arquivo
que foi aberto pelo programa contador de linhas.
15

Na Figura 3.4 mostramos a entrada no case linhaNeutra, dentro deste case


anlisamos se foi passado o parmetro silent e se existe um comentrio multi-linhas aberto,
caso esteja com esses dois parmetros falsos (FALSE) ele imprime na tela Linha Neutra se
existir um comentrio multi-linhas aberto como verdadeiro (TRUE) ele imprime na tela a
frase Linha de Comentario Multi-linhas e incrementa a contagem de comentrio multilinhas.

Figura 3.4: Comando switch com case linhaNeutra.

No case linhaComentario o programa contador de linhas verifica se recebeu o


parmetro silent, caso esteja falso (FALSE) ele imprime na tela Linha de Comentario
Multi-linhas e dentro deste mesmo case incrementado a contagem de comentrio multilinhas.

Figura 3.5: Comando switch com case linhaComentario.

No case linhaIniciouComentario o programa contador de linhas verifica se recebeu o


parmetro silent, caso esteja falso (FALSE) ele imprime na tela Linha Iniciando
Comentario Multi-linhas e altera o valor da varivel comentario_aberto como verdadeiro
(TRUE), em seguida incrementa a contagem de comentarios multi-linhas.
16

Figura 3.6: Comando switch com case linhaIniciouComentario.

No case linhaIniciouComentario o programa contador de linhas verifica se recebeu o


parmetro silent, caso esteja falso (FALSE) ele imprime na tela Linha Finalizando
Comentario Multi-linhas e altera o valor da varivel comentario_aberto como verdadeiro
(FALSE), em seguida incrementa a contagem de comentarios multi-linhas.

Figura 3.7: Comando switch com case linhaFinalizouComentario.

Na Figura 3.8 observamos o case linhaComentarioSimples, neste case feito a


verificao se o parmetro silent est com o valor falso (FALSE), caso esteja impresso na
tela a mensagem Linha De Comentario Simples, e em seguida incrementado a contagem
de comentrios de linha simples.

Figura 3.8: Comando switch com case linhaComentarioSimples.

17

Em nosso comando switch na opo default fazemos a verificao se o parmetro


silent foi passado, caso esteja como falso (FALSE), ele imprime na tela a mensagem Linha
Desconhecida, logo aps o comando default fechamos o nosso comando switch.

Figura 3.8: Comando switch com default.

Aps o comando switch utilizamos a funo isempty que foi explicada


anteriormente para efetuar a contagem das linhas vazias, para isso utilizamos uma funo
condicional if para chamar a funo isempty, se a nossa funo retornar verdadeiro
(TRUE) incrementamos a contagem de linhas vazias.

Figura 3.9: Contagem linhas vazias e linhas totais.

Nesta etapa a funo ccRun retorna a quantidade de linhas que foi contato e
armazenado em suas respectivas variveis.

Figura 4.0: Retorna a contagem das linhas.

18

Com isso finalizamos o que foi solicitado na atividade prtica supervisionada, nos
demais captulos deste trabalho acadmico iremos demonstrar o programa contador de linhas
funcionando em 3 (trs) exemplos.

4 DEMONSTRANDO O PROGRAMA E OS RESULTADOS


OBTIDOS
Aps concluir o que foi solicitado na atividade prtica supervisionada, vamos colocar
o programa contador de linhas para funcionar, e para que isso acontea de uma maneira
abrangente, criamos 3 (trs) arquivos com multiplos comentrios.

4.1 Demonstrao 01
Nesta demonstrao iremos utilizar um cdigo simples feito na linguagem C.

Figura 4.1: Cdigo fonte Exemplo 01.

Abaixo a figura com o cdigo sendo executado sem parmetros opcionais.

Figura 4.2: Execuo do exemplo 01.

19

Executando o programa contador de linhas com o parmetro opcional comment

Figura 4.3: Execuo do exemplo 01 com o parmetro opcional -c.

Executando o programa contador de linhas com o parmetro opcional silent

Figura 4.4: Execuo do exemplo 01 com o parmetro opcional -s.

Executando o programa contador de linhas com os parmetros opcionais comment e


silent

Figura 4.5: Execuo do exemplo 01 com o parmetro opcional -s e -c.

4.2 Demonstrao 02
Para o exemplo 02 continuamos utilizando um cdigo fonte em linguagem C, porm
com mais linhas e mais comentrios.
20

Figura 4.6: Cdigo fonte Exemplo 02.

Abaixo a figura com o cdigo sendo executado sem parmetros opcionais.

21

Figura 4.7: Execuo do exemplo 02.

22

Executando o programa contador de linhas com o parmetro opcional comment

Figura 4.8: Execuo do exemplo 02 com o parmetro opcional -c.

Executando o programa contador de linhas com o parmetro opcional silent

Figura 4.9: Execuo do exemplo 02 com o parmetro opcional -s.

23

Executando o programa contador de linhas com os parmetros opcionais comment e


silent

Figura 5.0: Execuo do exemplo 02 com o parmetro opcional -s e -c.

4.3 Demonstrao 03
Para o exemplo 03 utilizando um cdigo fonte em linguagem C++.

Figura 5.1: Cdigo fonte Exemplo 03.

Abaixo a figura com o cdigo sendo executado sem parmetros opcionais.


24

Figura 5.2: Execuo do exemplo 03.

25

Executando o programa contador de linhas com o parmetro opcional comment

Figura 5.3: Execuo do exemplo 03 com o parmetro opcional -c.

Executando o programa contador de linhas com o parmetro opcional silent

Figura 5.4: Execuo do exemplo 03 com o parmetro opcional -s.

Executando o programa contador de linhas com os parmetros opcionais comment e


silent

Figura 5.5: Execuo do exemplo 03 com o parmetro opcional -s e -c.

4.4 Acesso ao contedo


Todo o contedo deste trabalho est compartilhado no seguinte link:
https://drive.google.com/folderview?id=0Bwqj-4HAQiqUeC1IZ2lmcldHMW8&usp=sharing

26

REFERNCIAS
Pesquisado em http://pt.wikipedia.org/wiki/Biblioteca_padr%C3%A3o_do_C 27 de
Abril de 2014
Pesquisado em http://www.tiexpert.net/programacao/c/include.php 10 de Abril de
2014
Pesquisado em http://www.cprogressivo.net/2013/03/Aprenda-a-usar-todas-asfuncoes-da-biblioteca-string-h-em-C.html 12 de Abril de 2014

Pesquisado em http://linguagemc.com.br/a-biblioteca-string-h/ 20 de Abril de 2014


Pesquisado em http://www.cplusplus.com/reference/cstring/ 21 de Abril de 2014

27