ces-10 introduÇÃo À computaÇÃo capítulo x metodologia top-down com subprogramação
TRANSCRIPT
CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO
Capítulo XCapítulo X
Metodologia Top-down Metodologia Top-down com Subprogramaçãocom Subprogramação
Capítulo X – Metodologia Capítulo X – Metodologia Top-down com Top-down com
SubprogramaçãoSubprogramação
10.1 – Considerações iniciais10.1 – Considerações iniciais
10.2 – Contagem da ocorrência de 10.2 – Contagem da ocorrência de palavras em um textopalavras em um texto
10.1 – Considerações 10.1 – Considerações IniciaisIniciais
Recordando: a idéia básica da Recordando: a idéia básica da metodologiametodologia top-downtop-down é a é a decomposiçãodecomposição de uma tarefa de uma tarefa num conjunto de num conjunto de tarefas menorestarefas menores interligadas interligadas
Aquelas que ainda apresentarem certo grau de Aquelas que ainda apresentarem certo grau de complexidadecomplexidade também podem ser também podem ser decompostas da mesma maneiradecompostas da mesma maneira
Prossegue-se assim, até que se obtenha um Prossegue-se assim, até que se obtenha um conjunto de conjunto de tarefas triviaistarefas triviais interligadas interligadas
Nessa idéia, cada Nessa idéia, cada tarefatarefa suficientemente suficientemente complexacomplexa pode ser realizada por um pode ser realizada por um subprogramasubprograma específico específico
O O comandoscomandos desse subprograma se desse subprograma se constituem na constituem na decomposiçãodecomposição da mesma em da mesma em tarefas menorestarefas menores interligadas interligadas
O O tópicotópico a seguir ilustra a utilização dessa a seguir ilustra a utilização dessa metodologia auxiliada por metodologia auxiliada por subprogramaçãosubprogramação no desenvolvimento de um programa para: no desenvolvimento de um programa para:
Contagem da Contagem da ocorrência de palavrasocorrência de palavras em em um textoum texto
Capítulo X – Metodologia Capítulo X – Metodologia Top-down com Top-down com
SubprogramaçãoSubprogramação
10.1 – Considerações iniciais10.1 – Considerações iniciais
10.2 – Contagem da ocorrência de 10.2 – Contagem da ocorrência de palavras em um textopalavras em um texto
10.2 – Contagem da 10.2 – Contagem da Ocorrência de Palavras em Ocorrência de Palavras em
um Textoum Texto
Desenvolvimento de um programa para:Desenvolvimento de um programa para:
Ler o Ler o textotexto de um de um arquivo arquivo
Contar o Contar o número de ocorrênciasnúmero de ocorrências de cada de cada palavrapalavra desse texto desse texto
Gerar uma Gerar uma tabelatabela com essas com essas palavras em palavras em ordem alfabéticaordem alfabética ao lado de seus respectivos ao lado de seus respectivos números de ocorrênciasnúmeros de ocorrências
Exemplo: Exemplo: seja o seguinte texto no arquivo seja o seguinte texto no arquivo ctpalavras.datctpalavras.datvoce 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 tempoMontar a seguinte tabela:
1ª Etapa:1ª Etapa:
ContarPalavras {ContarPalavras {
Abrir o arquivo Abrir o arquivo ctpalavr.dat ctpalavr.dat para leitura;para leitura;
Inicializar com zero palavras a tabela a ser montada;Inicializar com zero palavras a tabela a ser montada;
Ler a 1ª palavra do arquivo;Ler a 1ª palavra do arquivo;
Enquanto não se chegar ao final do arquivo {Enquanto não se chegar ao final do arquivo {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
Ler a próxima palavra do arquivo;Ler a próxima palavra do arquivo;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
Abrir o arquivo ctpalavr.dat para leitura;Abrir o arquivo ctpalavr.dat para leitura;
Inicializar com zero palavras a tabela a ser montada;Inicializar com zero palavras a tabela a ser montada;
Ler a 1ª palavra do arquivo;Ler a 1ª palavra do arquivo;
Enquanto não se chegar ao final do arquivo {Enquanto não se chegar ao final do arquivo {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
Ler a próxima palavra do arquivo;Ler a próxima palavra do arquivo;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
Inicializar com zero palavras a tabela a ser montada;Inicializar com zero palavras a tabela a ser montada;
Ler a 1ª palavra do arquivo;Ler a 1ª palavra do arquivo;
Enquanto não se chegar ao final do arquivo {Enquanto não se chegar ao final do arquivo {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
Ler a próxima palavra do arquivo;Ler a próxima palavra do arquivo;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
file fl;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
Inicializar com zero palavras a tabela a ser montada;Inicializar com zero palavras a tabela a ser montada;
Ler a 1ª palavra do arquivo;Ler a 1ª palavra do arquivo;
Enquanto não se chegar ao final do arquivo {Enquanto não se chegar ao final do arquivo {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
Ler a próxima palavra do arquivo;Ler a próxima palavra do arquivo;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
file fl;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
Ler a 1ª palavra do arquivo;Ler a 1ª palavra do arquivo;
Enquanto não se chegar ao final do arquivo {Enquanto não se chegar ao final do arquivo {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
Ler a próxima palavra do arquivo;Ler a próxima palavra do arquivo;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
file fl; int ntab;entr_tab tabela[100];
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
Ler a 1ª palavra do arquivo;Ler a 1ª palavra do arquivo;
Enquanto não se chegar ao final do arquivo {Enquanto não se chegar ao final do arquivo {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
Ler a próxima palavra do arquivo;Ler a próxima palavra do arquivo;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
file fl; int ntab;entr_tab tabela[100];
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;} Juntar as
3 linhas num só cabeçalho de while
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
file fl; int ntab;entr_tab tabela[100];
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;} Juntar as
3 linhas num só cabeçalho de while
file fl; int ntab;entr_tab tabela[100];cadeia palavra;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
Procurar a palavra lida na tabela e sua posição;Procurar a palavra lida na tabela e sua posição;
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de Acrescentar ‘1’ ao seu número de ocorrências;ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria Inserir a palavra na posição em que deveria estar;estar;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl; int ntab;entr_tab tabela[100];cadeia palavra;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
posic = Posicao (palavra);posic = Posicao (palavra);
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de ocorrências;Acrescentar ‘1’ ao seu número de ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria estar;Inserir a palavra na posição em que deveria estar;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl; int ntab;entr_tab tabela[100];cadeia palavra;
file fl; int ntab, posic;entr_tab tabela[100];cadeia palavra;
Posicao retorna o índice onde palavra está ou deveria estar na tabela
>0 se estiver e <0 se não
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
posic = Posicao (palavra);posic = Posicao (palavra);
Se ela já estiver na tabelaSe ela já estiver na tabela
Acrescentar ‘1’ ao seu número de ocorrências;Acrescentar ‘1’ ao seu número de ocorrências;
SenãoSenão
Inserir a palavra na posição em que deveria estar;Inserir a palavra na posição em que deveria estar;
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl; int ntab, posic;entr_tab tabela[100];cadeia palavra;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
posic = Posicao (palavra);posic = Posicao (palavra);
if (posic > 0)if (posic > 0)
tabela[posic].n_ocorr++;tabela[posic].n_ocorr++;
elseelse
Inserir (palavra, -posic);Inserir (palavra, -posic);
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl; int ntab, posic;entr_tab tabela[100];cadeia palavra;
Inserir coloca a palavra na tabela mantendo a ordem alfabética
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
posic = Posicao (palavra);posic = Posicao (palavra);
if (posic > 0)if (posic > 0)
tabela[posic].n_ocorr++;tabela[posic].n_ocorr++;
elseelse
Inserir (palavra, -posic);Inserir (palavra, -posic);
}}
Mostrar a tabela no vídeo;Mostrar a tabela no vídeo;
}}
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl; int ntab, posic;entr_tab tabela[100];cadeia palavra;
2ª Etapa:2ª Etapa:
ContarPalavras {ContarPalavras {
fl = open (“ctpalavras.dat”, “read”);fl = open (“ctpalavras.dat”, “read”);
ntab = 0;ntab = 0;
while (readfile (fl, palavra) == 1) {while (readfile (fl, palavra) == 1) {
posic = Posicao (palavra);posic = Posicao (palavra);
if (posic > 0)if (posic > 0)
tabela[posic].n_ocorr++;tabela[posic].n_ocorr++;
elseelse
Inserir (palavra, -posic);Inserir (palavra, -posic);
}}
ExibirTabela ();ExibirTabela ();
}}
typedef char cadeia[31];struct entr_tab { cadeia nome; int n_ocorr;}
file fl; int ntab, posic;entr_tab tabela[100];cadeia palavra;
3ª Etapa:3ª Etapa: Desenvolvimento das funções Desenvolvimento das funções Posicao, Inserir e ExibirTabelaPosicao, Inserir e ExibirTabela
Função Posicao: Função Posicao: utiliza utiliza procura bináriaprocura binária pois pois a tabela está ordenadaa tabela está ordenada
Função Inserir: Função Inserir: desloca as palavras para desloca as palavras para baixo e insere a nova palavra em sua posição, baixo e insere a nova palavra em sua posição, mantendo a ordem alfabéticamantendo a ordem alfabética
Função ExibirTabela: Função ExibirTabela: escreve no vídeo a escreve no vídeo a tabela das palavras em formato de tabelatabela das palavras em formato de tabela
As variáveis As variáveis flfl,, tabela tabela e e ntabntab serão serão globaisglobais
3ª Etapa:3ª Etapa:int Posição (cadeia palavra) { 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;}
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);}
Inserir (cadeia palavra, 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;}
Ver o programa completo no livro-texto