atps - programação estruturada ii (1) (1)

15
Santo André, 11 de junho de 2013 CENTRO UNIVERSITÁRIO ANHANGUERA DE SANTO ANDRÉ Professor: Peter Rauer Atividade Prática Supervisionada Ciência da Computação 3º Semestre Programação 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

Upload: jorge-oliveira

Post on 16-Nov-2015

31 views

Category:

Documents


5 download

DESCRIPTION

Enuncioado da atps

TRANSCRIPT

  • 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

    [email protected]

    Andrey Resende

    RA: 4616913286

    [email protected]

    Fernando Lucas

    RA: 4200060622

    [email protected]

    Jorge de Oliveira

    RA: 4200060636

    [email protected]

    Leonardo Dombrauskas

    RA: 4200060624

    [email protected]

    Michael Sousa

    RA: 1299920396

    [email protected]

    Paulo Fernando

    RA: 3708609304

    [email protected]

    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