Sie sind auf Seite 1von 11

1o Trabalho de ED

Turma A
Revisao de CB
Prof. Jose Carlos L. Ralha
entregar em dois dias

Resumo
Para descobrir o que voces realmente aprenderam em CB e para que voces tenham uma ideia do
que vem por a nas minhas aulas, implementem o problema a seguir usando alocaca o dinamica
de memoria, structs e vetores.

Contador de Palavras

Neste trabalho, vamos contar palavras. Para isso, voce deve abrir um arquivo texto e realizar a
leitura a partir desse arquivo texto.
Para ser bem realista, o arquivo texto pode estar escrito em qualquer lngua ocidental exceto grego
e espanhol.
A seguir mostramos um trecho de um arquivo texto em ingles (excerpt from the Winds of Winter
com a remoca o dos possessivos).
She woke with a gasp, not knowing who she was, or where.

The smell of blood was heavy in her nostril or was that her nightmare,
lingering? She had dreamed of wolves again, of running through some
dark pine forest with a great pack at her hells, hard on the scent of
prey.
Half-light filled the room, grey and gloomy. Shivering, she sat up in
bed and ran a hand across her scalp. Stubble bristled against her
palm. I need to shave before Izembaro sees. Mercy, I am Mercy, and
tonight I will be raped and murdered. Her true name was Mercedene,
but Mercy was all anyone ever called her.
Except in dreams. She took a breath to quiet the howling in her heart,
trying to remember more of what she had dreamt, but most of it had
gone already.
There had been blood in it, though, and a full moon
overhead, and a tree that watched her as she ran.
She had fastened the shutters back so the morning sun might wake
her. But there was no sun outside the window of Mercy little room,
only a wall of shifting grey fog. The air had grown chilly and a good
thing, else she might have slept all day. It would be just like Mercy
to sleep through her own rape.
Para o texto exemplificado, o programa deve apresentar a seguinte sada a qual facilita a observaca o
da ordem lexicografica.
Contador de palavras: Resultado em ordem alfab
etica
Palavras iniciadas com a letra a: 37
a: 12
across: 2
again: 1
against: 1
air: 1
all: 2
already: 1
am: 1
and: 9
2

anyone: 1
arch: 1
arches: 1
around: 1
as: 2
at: 1
Palavras iniciadas com a letra b: 27
back: 1
bare: 1
be: 2
bed: 1
been: 1
before: 1
below: 1
beneath: 2
blanket: 1
blood: 2
boat: 1
braavos: 1
breath: 1
bridge: 3
bristled: 1
building: 1
buildings: 1
but: 4
by: 1
Palavras iniciadas com a letra c: 10
called: 2
canal: 2
central: 1
chilly: 1
cobbled: 1
could: 1
covered: 1
coverlet: 1

Palavras iniciadas com a letra d: 6


dark: 1
day: 1
down: 1
dreamed: 1
dreams: 1
dreamt: 1
Palavras iniciadas com a letra e: 5
else: 1
emerged: 1
end: 1
ever: 1
except: 1
Palavras iniciadas com a letra f: 9
far: 1
fastened: 1
few: 1
filled: 1
floor: 1
fog: 2
forest: 1
full: 1
Palavras iniciadas com a letra g: 11
gasp: 1
gloomy: 1
gone: 1
good: 1
gooseprickles: 1
great: 1
green: 1
grey: 2
greyness: 1
grown: 1
Palavras iniciadas com a letra h: 34
4

had: 7
half: 1
hand: 1
hard: 1
have: 1
heard: 1
heart: 1
heavy: 1
hells: 1
her: 16
his: 1
hour: 1
howling: 1
Palavras iniciadas com a letra i: 15
i: 3
in: 7
it: 4
izembaro: 1
Palavras iniciadas com a letra j: 1
just: 1
Palavras iniciadas com a letra k: 1
knowing: 1
Palavras iniciadas com a letra l: 9
legs: 1
light: 1
lights: 1
like: 2
lingering: 1
little: 2
lost: 1
Palavras iniciadas com a letra m: 16
man: 1
mercedene: 1
5

mercy: 6
might: 2
moon: 1
more: 1
morning: 1
mossy: 1
most: 1
murdered: 1
Palavras iniciadas com a letra n: 7
naked: 1
name: 1
need: 1
nightmare: 1
no: 1
nostril: 1
not: 1
Palavras iniciadas com a letra o: 21
of: 12
on: 1
only: 2
onward: 1
or: 2
outside: 1
overhead: 1
own: 1
Palavras iniciadas com a letra p: 8
pack: 1
padded: 1
palm: 1
pine: 1
plank: 1
pole: 1
prey: 1
pushing: 1

Palavras iniciadas com a letra q: 1


quiet: 1
Palavras iniciadas com a letra r: 10
ran: 3
rape: 1
raped: 1
remained: 1
remember: 1
room: 2
running: 1
Palavras iniciadas com a letra s: 37
sat: 1
scalp: 1
scent: 1
see: 1
sees: 1
serpent: 1
shave: 1
she: 12
shifting: 1
shivering: 1
shutters: 1
sleep: 1
slept: 1
smell: 1
snake: 2
so: 1
soft: 1
some: 1
splash: 1
stone: 1
stood: 1
street: 1
stubble: 1
sun: 2

Palavras iniciadas com a letra t: 47


tail: 1
that: 3
the: 22
there: 2
thing: 1
though: 1
threw: 1
through: 2
to: 7
tonight: 1
took: 1
tree: 1
true: 1
trying: 1
twisted: 1
two: 1
Palavras iniciadas com a letra u: 3
unwound: 1
up: 1
uplifted: 1
Palavras iniciadas com a letra v: 2
vague: 1
vanished: 1
Palavras iniciadas com a letra w: 25
wake: 1
wall: 1
was: 7
watched: 1
water: 1
what: 2
where: 1
who: 2
will: 1
window: 2
8

with: 3
woke: 1
wolves: 1
would: 1
Total de Palavras: 368

Especificaco es
A leitura e feita a partir de um arquivo texto de entrada denominado texto.txt.
Vamos armazenar apenas as palavras em letras minusculas. As palavras iniciadas com letras
maiusculas, ou incluindo maiusculas, devem ser convertidas para minusculas. Exemplo:
Winterfell deve ser transformada em winterfell.
Nao esquecam de tratar os sinais de pontuaca o. Exemplo: Jon, the warg, deve ser tratado
como se estivesse escrito jon the warg.
O arquivo de entrada texto.txt fornecido por mim nao pode ser alterado. Esse mesmo
arquivo sera usado por mim na verificaca o/correca o de seu programa.
A razao para esta imposica o e simples: eu quero saber quem sabe usar o scanf e
seu irmao fscanf. Meu palpite e que ninguem sabe usar! Exemplo: como voce
le uma palavra tal como warg, eliminando a vrgula? O mesmo com os demais
smbolos de pontuaca o.
E expressamente proibido o uso da funca o getchar();.
getchar() is for newbies. Only for newbies!
Para cada palavra lida, armazene-a em ordem lexicografica em uma lista simplesmente encadeada aberta.
Para cada letra, imprima o total de palavras que iniciam por essa letra e em seguida cada
palavra e sua frequencia.
As palavras devem ser impressas em ordem lexicografica.
Ao final, imprima o total de palavras do texto;
9

As estruturas de dados sao dadas por


struct wnode {
int howmany; / / n u m e r o d e o c o r r e n c i a s d a p a l a v r a n o
char *word; / / p a l a v r a
struct wnode *next; / / p o n t e i r o p a r a o p r o x i m o n o d o
};

texto

wnode

const int TAM = 26;


struct dicnode {
int tam; / / t a m a n h o d a l i s t a d e
struct wnode *list; / / p o n t e i r o
};

/*

estrutura
todas

as

do

vetor

palavras

alfab
e tico :
dever
ao

ser

palavras
para

lista

a ==0;

b ==1;

convertidas

de

palavras

etc
para

min
u sculas .

*/

struct dicnode dict[TAM];


No campo word de struct wnode armazenamos a string sem desperdcio de espaco. Em
outras palavras, nada de superdimensionar um array de caracteres! Nao esqueca que em C
uma string e terminada por \0 que ocupa uma posica o.
O codigo tem que ser portavel;
Nao e permitido o uso de #include <windows.h>
Nao e permitido o uso de #include <conio.h>
Nao e permitido o uso do getch();
Nao e permitido o uso de system(. . . );
Nao e permitido o uso de #include "filename.c"
Notem a extensao: isso e uma enorme asneira que so faz atrapalhar as questoes de
projeto/modularidade de um sistema de software.
Erros de compilaca o sao inadmissveis.
Nao e permitido o uso de variaveis globais exceto por dict e TAM.
10

Criterios de Correca o
O programa tem que seguir a especificaca o fornecida.
O programa tem que compilar em qualquer Sistema Operacional, incluindo qualquer versao
de Unix tais como o Mac OS X, FreeBSD, Solaris, Linux, etc.
O programa tem que estar documentado.
Para cada funca o, descreva o papel dos parametros e o que a funca o retorna.
Comente os trechos de programa nao triviais.

11

Das könnte Ihnen auch gefallen