CES-10 INTRODUÇÃO À
COMPUTAÇÃO
Capítulo X
Metodologia Top-down com
Subprogramação
Capítulo X – Metodologia Topdown 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 metodologia top-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 Topdown 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

Exemplo: seja o seguinte texto no arquivo ctpalavras.dat
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
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;
}
file fl;
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;
}
file fl;
Mostrar a tabela no vídeo;
}
typedef char cadeia[31];
struct entr_tab {
ContarPalavras {
cadeia nome; int n_ocorr;
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;
}
file fl; int ntab;
Mostrar a tabela no vídeo;
entr_tab tabela[100];
}
2ª Etapa:
typedef char cadeia[31];
struct entr_tab {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
Juntar as 3
Ler a 1ª palavra do arquivo;
linhas num
Enquanto não se chegar ao final do arquivo {
só cabeçalho
Procurar a palavra lida na tabela e sua posição; de while
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;
}
file fl; int ntab;
Mostrar a tabela no vídeo;
entr_tab tabela[100];
}
2ª Etapa:
typedef char cadeia[31];
struct entr_tab {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
Juntar as 3
linhas num
while (readfile (fl, palavra) == 1) {
só cabeçalho
Procurar a palavra lida na tabela e sua posição; de while
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;
2ª Etapa:
}
Mostrar a tabela no vídeo;
}
file
file fl;
fl; int
int ntab;
ntab;
entr_tab
entr_tab tabela[100];
tabela[100];
cadeia palavra;
typedef char cadeia[31];
struct entr_tab {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
2ª Etapa:
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 {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
Posicao retorna o índice
onde palavra está ou
while (readfile (fl, palavra) == 1) {
deveria estar na tabela
posic = Posicao (palavra);
>0 se estiver e <0 se nã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;
2ª Etapa:
}
Mostrar a tabela no vídeo;
}
file fl; int ntab,
ntab; posic;
entr_tab tabela[100];
cadeia palavra;
typedef char cadeia[31];
struct entr_tab {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
2ª Etapa:
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 {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
2ª Etapa:
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 {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
2ª Etapa:
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 {
ContarPalavras {
cadeia nome; int n_ocorr;
fl = open (“ctpalavras.dat”, “read”); }
ntab = 0;
2ª Etapa:
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ções Posicao, 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
3ª Etapa:
int Posição (cadeia palavra) {
int inf, sup, med, posic; logic achou;
achou = FALSE; inf = 1; sup = ntab;
Ver o programa
while (! achou && sup >= inf) {
med = (inf + sup) / 2;
completo no
if (palavra == tabela[med].nome)
livro-texto
achou = TRUE;
else if (palavra < tabela[med].nome)
sup = med – 1;
else inf = med + 1;
}
Inserir (cadeia palavra, int posic) {
if (achou) posic = med;
int i;
else posic = - inf;
ntab++;
return posic;
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);
}
Download

CES-10 Teoria Cap 10