Помогите решить задачу на курсовую которую нужно было сдать сегодня....
Дан текстовый файл, необходимо отсортировать слова по алфавиту посчитать количество слов и вывести результат в другой файл. Вот мои наработки:
Код:
program sortnames;
type
ptrNameList = ^nameList;
nameList = record
name:String;
next:ptrNameList;
end;
var firstElement,element,lastElement:ptrNameList;
f,g:text;
nameString:String;
k:integer;
function firstElementGreaterThanSecond(element1,element2:ptrNameList):boolean;
begin
firstElementGreaterThanSecond := (element1^.name > element2^.name);
end;
procedure switchElementsContent(element1,element2:ptrNameList);
var temp:String;
begin
temp := element1^.name;
element1^.name := element2^.name;
element2^.name := temp;
end;
procedure printList;
var element:ptrNameList;
begin
element := firstElement;
while (element<>nil) do
begin
writeln(element^.name);
element := element^.next;
end;
writeln('конец списка');
end;
begin
{ Чтение списка }
firstElement := nil;
Assign (f, 'c:\1.txt');
reset (f);
while not eof(f) do
begin
readln(f,nameString);
if (firstElement = nil) then
begin
new(element);
firstElement := element;
end
else
begin
new(element^.next);
element := element^.next;
end; { end if }
element^.name := nameString;
element^.next := nil;
end; { end while }
close(f);
{ Сортировка методом пузырька }
element := firstElement;
{ Найдем последний элемент }
while (element<>nil) do
element := element^.next;
lastElement := element;
while (firstElement<>lastElement) do
begin
element := firstElement;
while (element^.next<>lastElement) do
begin
if firstElementGreaterThanSecond(element,element^.next) then
switchElementsContent(element,element^.next);
element := element^.next;
end;
lastElement := element;
end;
Reset(f); {открываем первый файл для чтения}
Assign(g, 'c:\2.txt'); {устанавливаем связь второй файловой переменной с физическим файлом}
Rewrite(g); {открываем второй файл для записи}
While not eof(f) do
Begin
Readln(f,nameString);{считываем очередную строку из первого файла}
Writeln(g,nameString); {записываем во второй файл строки, удовлетворяющие условию}
end;
close (f);
close (G);
end;
function kolslov(st: string): byte;
const
razdel = ['.', ','];
var
k, d: integer;
begin
d := 0;
repeat
inc(d);
if st[d] in razdel then
begin
delete(st, d, 1);
insert(' ', st, d);
end;
until d > length(st);
st := ' ' + st + ' ';//для корректной обработки абзацев
while pos(' ', st) > 0 do delete(st, pos(' ', st), 1);
d := pos(' ', st);
k := -1;//количество слов на 1 меньше кол-ва пробелов
while d > 0 do
kolslov := k
end;
var
t: text;
slov: longint;
filname, s: string;
begin
write('File = '); readln(filname);
assign(t, filname);
reset(t);
while not eof(t) do
begin
readln(t, s);{читаем строку}
inc(slov, kolslov(s)); //3 или 5 пробелов также считаем признаком абзаца
end;
end.