IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Выписать слова в алфавитном порядке
volvo
сообщение 13.12.2010 20:04
Сообщение #21


Гость






Хм... Вот так, наверное:

var s: string;
// ...

CurrLine := 0;
while seekeof(f) do
begin
Inc(CurrLine);
ReadLn(f, s);
// тут - разбор строки s
end;
?
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 20:10
Сообщение #22


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Да! Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 21:12
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Вот то что получилось написать....
Implementation
Procedure IntInsert(var RootInt:TIntTree; x:TElem);
//Создание дерева целых чисел
Procedure CreateNode(var p:TIntTree; n:TElem);
//Дополнительная процедура, создающая и инициализирующая новый узел
begin
New(p);
p^.Info:=n;
p^.Left:=nil;
p^.Right:=nil
End;
Begin
if RootInt=nil Then CreateNode(RootInt,X) { создаем новый узел дерева }
else
with RootInt^ do
begin
if info<X then IntInsert(Right,X)
else
if info>X Then IntInsert(Left,X)
end;
End;


Procedure Insert(var root:TTree; X:T);
//Создание дерева
Procedure CreateNode(var p:TTree; n:T);
begin
New(p);
p^.Info:=n;
p^.Left:=nil;
p^.Right:=nil
End;
begin
if Root=nil Then CreateNode(Root, X)
else
with Root^ do
begin
if info.s<X.s then Insert(Right,X)
else
if info.s>X.s Then Insert(Left,X)
else
IntInsert(info.tree, n)
end;
end;

Procedure WordsInTree(var f:text);
var i,back:integer; a:string;
Begin
n:=0;
while not eof(f) do
begin
Inc(n);
ReadLn(f,s);
i:=1;
while(i<=length(s)) do
begin
while(i<=length(s)) and (s[i] in [',',' ']) do
inc(i);
if i<=length(s) then
begin
back:=i;
while(i<=length(s)) and not(s[i] in [',',' ']) do
inc(i);
a:=copy(s,back,i-back);
IntInsert(IntRoot,n);
X.s:=a;
Insert(Root,X);
end;
end;
end;
End;

Procedure Print(var Root:TTree);
var
i:integer;
Begin
if Root<>nil then
begin
print(Root^.Left);
writeln(Root^.Info.s);
print(Root^.Right)
end
End;




Но не работает.. При вызове процедур WordInTree и Print ничего печатается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2010 21:32
Сообщение #24


Гость






Цитата
При вызове процедур WordInTree и Print ничего печатается.
Неправда. Печатается. Не всё, но слова, выдранные из текста - печатаются. Номера строк - нет. Почему не всё? Потому, что заполняется дерево неправильно. Поправь, и будет выводиться то, что нужно.
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 21:36
Сообщение #25


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Цитата
Неправда. Печатается.

При запуске программы появляется пустая консоль и не более...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2010 21:40
Сообщение #26


Гость






Да? Ну, смотри, что у меня появляется:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 21:44
Сообщение #27


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Ну а у меня чистое окно! Использую Borland Delphi Enterprise v7.0 (Build 4.453). Собственно, на нём же и буду сдавать задачу..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2010 21:52
Сообщение #28


Гость






Значит, неправильно что-то описываешь. Поэтому всегда говорю: присоединяйте полный текст. Видишь, ты выложила часть, я дописал недостающее правильно, ты - нет. У меня отработало, у тебя - нет. Дельфи 2009/2010, кстати, тоже самое: список слов по алфавиту.
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 21:55
Сообщение #29


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Выкладываю:

ОСНОВНОЙ ПРОЕКТ:

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils,
Unit1 in 'Unit1.pas';
var Root:TTree; x:T;
f:text;

begin
assign(f,'input.txt');
reset(f);
WordsInTree(f);
Print(Root);
readln;
end.



МОДУЛЬ:


unit Unit1;

Interface
const
StrLength = 15;
type
TElem=integer;
TIntTree=^TNodeInt;
TNodeInt=record
Info:TElem;
Left,Right:TIntTree
end;

T=record
s:string[StrLength];
tree: TIntTree; { Это - тип "дерево целых" }
end;

TTree=^TNode;
TNode=record
info:T;
Left, Right: TTree; { Потомки }
end;

var n:integer;
s:string;
Root:TTree;
x:T;
IntRoot:TIntTree;

Procedure WordsInTree(var f:text);
Procedure Insert(var root:TTree; X:T);
Procedure IntInsert(var RootInt:TIntTree; x:TElem);
Procedure Print(var Root:TTree);

Implementation
Procedure IntInsert(var RootInt:TIntTree; x:TElem);
//Создание дерева целых чисел
Procedure CreateNode(var p:TIntTree; n:TElem);
//Дополнительная процедура, создающая и инициализирующая новый узел
begin
New(p);
p^.Info:=n;
p^.Left:=nil;
p^.Right:=nil
End;
Begin
if RootInt=nil Then CreateNode(RootInt,X) { создаем новый узел дерева }
else
with RootInt^ do
begin
if info<X then IntInsert(Right,X)
else
if info>X Then IntInsert(Left,X)
end;
End;


Procedure Insert(var root:TTree; X:T);
//Создание дерева
Procedure CreateNode(var p:TTree; n:T);
begin
New(p);
p^.Info:=n;
p^.Left:=nil;
p^.Right:=nil
End;
begin
if Root=nil Then CreateNode(Root, X)
else
with Root^ do
begin
if info.s<X.s then Insert(Right,X)
else
if info.s>X.s Then Insert(Left,X)
else
IntInsert(info.tree, n)
end;
end;

Procedure WordsInTree(var f:text);
var i,back:integer; a:string;
Begin
n:=0;
while not eof(f) do
begin
Inc(n);
ReadLn(f,s);
i:=1;
while(i<=length(s)) do
begin
while(i<=length(s)) and (s[i] in [',',' ']) do
inc(i);
if i<=length(s) then
begin
back:=i;
while(i<=length(s)) and not(s[i] in [',',' ']) do
inc(i);
a:=copy(s,back,i-back);
IntInsert(IntRoot,n);
X.s:=a;
Insert(Root,X);
end;
end;
end;
End;

Procedure Print(var Root:TTree);
var
i:integer;
Begin
if Root<>nil then
begin
print(Root^.Left);
writeln(Root^.Info.s);
print(Root^.Right)
end
End;


End.


Сообщение отредактировано: Даша - 13.12.2010 21:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2010 22:11
Сообщение #30


Гость






Ай-яй-яй smile.gif

Цитата
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas';
var
Root:TTree; x:T; // Вот эти 2 переменные - дублируются в модуле.
f:text;
begin
assign(f,'input.txt');
reset(f);
WordsInTree(f);
Print(Root);
readln;
end.
Но если дублирование переменной X - ни к чему страшному не приведет, то дублирование Root фатально для твоей программы: при добавлении в дерево используется та переменная, которая описана в модуле, а потом, при печати - компилятор подсовывает в Print ту переменную Root, которая описана в основной части программы (а она не изменялась, и по прежнему равна nil). И дерево, хоть оно и было создано, просто не отображается. Понимаешь причину? smile.gif Просто удали эти 2 описания из основной части, и увидишь разницу. Потом останется только правильно заполнять целочисленное дерево. Сейчас у тебя есть небольшая ошибка.
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 22:12
Сообщение #31


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Да, понимаю. Каждый раз просто печатаю "ничего" smile.gif

Добавлено через 17 мин.
Не могу сообразить с заполнением целочисленного дерева..

После строки:
a:=copy(s,back,i-back);

дописала:
IntInsert(X.Tree,n);

И в процедуре печати:
Procedure Print(var Root:TTree);
Begin
if Root<>nil then
begin
print(Root^.Left);
begin
write(Root^.Info.s,' ');
writeln(Root^.Info.Tree^.info);
end;
print(Root^.Right)
end
End;


Но безрезультатно..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2010 23:09
Сообщение #32


Гость






Цитата
После строки:
А зачем? smile.gif

Смотри: ты нашла очередное слово (s). В переменной (n) хранится номер файловой строки. Что нужно сделать, чтобы добавить слово вместе с номером строки в дерево? Нужно добавить их вместе!!! Почему ты добавляешь по отдельности?

Я сделал так: в процедуре CreateNode, которая создает новый узел дерева (не целочисленного, а со строками), после инициализации сроки, инициализируешь и поддерево:
Procedure CreateNode(var p:TTree; n:T);
begin
New(p);
p^.Info.s:=n.s;
p^.info.tree := nil;
IntInsert(p^.info.tree, Unit1.n); // На самом деле лучше поменять название переменной

p^.Left:=nil; p^.Right:=nil
End;
Что касается добавления номера строки, если слово уже есть в дереве - то оно уже правильно обрабатывается. Это будет работать. Это была хорошая новость smile.gif Теперь - плохая: для того, чтобы увидеть дерево номеров строк - придется написать еще одну процедуру, по аналогии с той, что у тебя уже есть. И вызвать ее правильно. А еще более плохая новость - это то, что тебе придется делать это совершенно самостоятельно, я не буду дописывать программу полностью. Точка. Я предупреждал выше. Удачи...
 К началу страницы 
+ Ответить 
Даша
сообщение 13.12.2010 23:14
Сообщение #33


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Женский

Репутация: -  1  +


Ну думаю с этим я смогу справиться smile.gif Огромное вам спасибо за помощь в решении данной задачи! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 23.01.2012 13:35
Сообщение #34


Гость






Помогите плиз с решение:
В данной строке найти самую длинную подстроку, состоя-щую из одинаковых символов. Надо в Turbo Pascal`е
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 10.09.2025 7:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"