220 likes | 302 Views
CES-10 INTRODUÇÃO À COMPUTAÇÃO. Capítulo X Metodologia Top-down com Subprogramação. Capítulo X – Metodologia Top-down com Subprogramação. 10.1 – Considerações iniciais 10.2 – Contagem da ocorrência de palavras em um texto. 10.1 – Considerações Iniciais.
E N D
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo X Metodologia Top-down com Subprogramação
Capítulo X – Metodologia Top-down com Subprogramação 10.1 – Considerações iniciais 10.2 – Contagem da ocorrência de palavras em um texto
10.1 – Considerações Iniciais • Recordando: a idéia básica da metodologiatop-down é a decomposição de uma tarefa num conjunto de tarefas menores interligadas • Aquelas que ainda apresentarem certo grau de complexidade também podem ser decompostas da mesma maneira • Prossegue-se assim, até que se obtenha um conjunto de tarefas triviais interligadas
Nessa idéia, cada tarefa suficientemente complexa pode ser realizada por um subprograma específico • O comandos desse subprograma se constituem na decomposição da mesma em tarefas menores interligadas • O tópico a seguir ilustra a utilização dessa metodologia auxiliada por subprogramação no desenvolvimento de um programa para: • Contagem da ocorrência de palavras em um texto
Capítulo X – Metodologia Top-down com Subprogramação 10.1 – Considerações iniciais 10.2 – Contagem da ocorrência de palavras em um texto
10.2 – Contagem da Ocorrência de Palavras em um Texto Desenvolvimento de um programa para: • Ler o texto de um arquivo • Contar o número de ocorrências de cada palavra desse texto • Gerar uma tabela com essas palavras em ordem alfabética ao lado de seus respectivos números de ocorrências
voce pode enganar algumas pessoas em todo o tempo e todas as pessoas em algum tempo mas nao pode enganar todas as pessoas em todo o tempo • Exemplo: seja o seguinte texto no arquivo ctpalavras.dat Montar a seguinte tabela:
1ª Etapa: ContarPalavras { Abrir o arquivo ctpalavr.dat para leitura; Inicializar com zero palavras a tabela a ser montada; Ler a 1ª palavra do arquivo; Enquanto não se chegar ao final do arquivo { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; Ler a próxima palavra do arquivo; } Mostrar a tabela no vídeo; }
2ª Etapa: ContarPalavras { Abrir o arquivo ctpalavr.dat para leitura; Inicializar com zero palavras a tabela a ser montada; Ler a 1ª palavra do arquivo; Enquanto não se chegar ao final do arquivo { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; Ler a próxima palavra do arquivo; } Mostrar a tabela no vídeo; }
2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); Inicializar com zero palavras a tabela a ser montada; Ler a 1ª palavra do arquivo; Enquanto não se chegar ao final do arquivo { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; Ler a próxima palavra do arquivo; } Mostrar a tabela no vídeo; } file fl;
2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); Inicializar com zero palavras a tabela a ser montada; Ler a 1ª palavra do arquivo; Enquanto não se chegar ao final do arquivo { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; Ler a próxima palavra do arquivo; } Mostrar a tabela no vídeo; } file fl;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; Ler a 1ª palavra do arquivo; Enquanto não se chegar ao final do arquivo { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; Ler a próxima palavra do arquivo; } Mostrar a tabela no vídeo; } file fl; int ntab; entr_tab tabela[100]; file fl;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; Ler a 1ª palavra do arquivo; Enquanto não se chegar ao final do arquivo { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; Ler a próxima palavra do arquivo; } Mostrar a tabela no vídeo; } Juntar as 3 linhas num só cabeçalho de while file fl;int ntab; entr_tab tabela[100];
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; } Mostrar a tabela no vídeo; } Juntar as 3 linhas num só cabeçalho de while file fl;int ntab; entr_tab tabela[100]; cadeia palavra; file fl;int ntab; entr_tab tabela[100];
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { Procurar a palavra lida na tabela e sua posição; Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; } Mostrar a tabela no vídeo; } file fl;int ntab; entr_tab tabela[100]; cadeia palavra;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { posic = Posicao (palavra); Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; } Mostrar a tabela no vídeo; } Posicao retorna o índice onde palavra está ou deveria estar na tabela >0 se estiver e <0 se não file fl;int ntab; entr_tab tabela[100]; cadeia palavra; file fl;int ntab, posic; entr_tab tabela[100]; cadeia palavra;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { posic = Posicao (palavra); Se ela já estiver na tabela Acrescentar ‘1’ ao seu número de ocorrências; Senão Inserir a palavra na posição em que deveria estar; } Mostrar a tabela no vídeo; } file fl;int ntab, posic; entr_tab tabela[100]; cadeia palavra;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { posic = Posicao (palavra); if (posic > 0) tabela[posic].n_ocorr++; else Inserir (palavra, -posic); } Mostrar a tabela no vídeo; } Inserir coloca a palavra na tabela mantendo a ordem alfabética file fl;int ntab, posic; entr_tab tabela[100]; cadeia palavra;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { posic = Posicao (palavra); if (posic > 0) tabela[posic].n_ocorr++; else Inserir (palavra, -posic); } Mostrar a tabela no vídeo; } file fl;int ntab, posic; entr_tab tabela[100]; cadeia palavra;
typedef char cadeia[31]; struct entr_tab { cadeia nome; int n_ocorr; } 2ª Etapa: ContarPalavras { fl = open (“ctpalavras.dat”, “read”); ntab = 0; while (readfile (fl, palavra) == 1) { posic = Posicao (palavra); if (posic > 0) tabela[posic].n_ocorr++; else Inserir (palavra, -posic); } ExibirTabela (); } file fl;int ntab, posic; entr_tab tabela[100]; cadeia palavra;
3ª Etapa: Desenvolvimento das funçõesPosicao, Inserir e ExibirTabela • Função Posicao: utiliza procura binária pois a tabela está ordenada • Função Inserir: desloca as palavras para baixo e insere a nova palavra em sua posição, mantendo a ordem alfabética • Função ExibirTabela: escreve no vídeo a tabela das palavras em formato de tabela • As variáveis fl, tabela e ntab serão globais
int Posição (cadeiapalavra) { int inf, sup, med, posic; logic achou; achou = FALSE; inf = 1; sup = ntab; while (! achou && sup >= inf) { med = (inf + sup) / 2; if (palavra == tabela[med].nome) achou = TRUE; else if (palavra < tabela[med].nome) sup = med – 1; else inf = med + 1; } if (achou) posic = med; else posic = - inf; return posic; } Ver o programa completo no livro-texto 3ª Etapa: Inserir (cadeiapalavra, int posic) { int i; ntab++; for (i = ntab; i > posic; i--) tabela[i] = tabela[i-1]; tabela[posic].nome = palavra; tabela[posic].n_ocorr = 1; } ExibirTabela () { int i; write (“Palavra”, “|”, “Num. de ocorr”); write (“\n”, “--------------------------------------------------”); for (i = 1; i <= ntab; i++) write (“\n”, tabela[i].nome, “|”, tabela[i].n_ocorr); }