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

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

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

 
 Ответить  Открыть новую тему 
> Прога про текстовый файл, Пожалуйста, помогите кто-нибудь!!!
сообщение
Сообщение #1





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

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


Вот задали такую задачку:
В текстовом файле записаны слова. Определить, сколько раз встречается каждое слово и вывести в обратном порядке.
Прошу выслать код mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вобщем я бы делал так
Код

uses crt;
const n=10;{koli4estvo slow v faile}
var a:array[1..n] of string;
    i,k:byte;
    ch:char;
    log_f:text;
begin
clrscr;
assign(log_f,'1.txt');
reset(log_f);
repeat                           {w etih dwuh tsiklah iz slow v faile}
      inc(i);                    {sozdaetsya massiv strok}
      repeat
      read(Log_f,ch);
      a[i]:=a[i]+ch;
      until (ch=' ') or (ch=#26);
until eof(log_f);
for k:=i downto 1 do
    writeln(a[k]);
readkey
end.

Только слова в файле должны идти в одну строку через пробел.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Гость, а
Цитата(avaness @ 5.06.2006 19:33)
Определить, сколько раз встречается каждое слово
?

Взялся - так делай полностью... Кстати, в условии НИЧЕГО не сказано про то, как слова расположены в файле. Кто позволил тебе делать такое упрощение:
Цитата
слова в файле должны идти в одну строку через пробел
?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





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

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


Ага прошу прощенья.Значит по поводу того как расположены слова, это всё равно. А вот по поводу кол-ва слов
это я промахнулся unsure.gif постараюсь доделать rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Цитата(Egor @ 5.06.2006 23:57) *

Ага прошу прощенья.Значит по поводу того как расположены слова, это всё равно. А вот по поводу кол-ва слов
это я промахнулся unsure.gif постараюсь доделать rolleyes.gif

спасибо, что не оставили мою проблему без внимания!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


Цитата(avaness @ 6.06.2006 6:24) *

спасибо, что не оставили мою проблему без внимания!

не работает!!! mad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
В текстовом файле записаны слова. Определить, сколько раз встречается каждое слово и вывести в обратном порядке.

Ну если надо определить сколько раз встречается каждое слово, а не количиство разных слов, то вот...
uses crt;
type
mas= array[1..100] of string[25];
const path='d:\temp.dat';

procedure create_file(s:string);
var t:text;
temp:string;
begin
temp:='ab bc c c km b';
assign(t,s);
rewrite(t);
writeln(t,temp);
close(t);
end;

function take_array(s:string; var ar:mas):integer;
var f:text;
i:integer;
ch:char;
begin
assign(f,s);
reset(f);
i:=1;
while not eof(f) do
begin
read(f,ch);
if (ch=' ') or (ch=#13) then
inc(i)
else
ar[i]:=ar[i]+ch;
end;
close(f);
take_array:=i;
end;

procedure num_dif(ar:mas; n:integer);
var i,j,num:integer;
begin
num:=0;
for j:=1 to n do
begin
for i:=1 to n do
if ar[j]=ar[i] then inc(num);
writeln(j,' word ',num,' times - ',ar[j]);
num:=0;
end;
end;

procedure inverse(ar:mas; n:integer);
var i:integer;
begin
for i:=n downto 1 do
writeln(ar[i]);
end;

var ar:mas; num:integer;
begin
create_file(path);
num:=take_array(path,ar);
clrscr;
num_dif(ar,num);
readln;
clrscr;
inverse(ar,num);
readln;
end.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





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

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


Цитата(Bokul @ 7.06.2006 3:00)
Ну если надо определить сколько раз встречается каждое слово, а не количиство разных слов, то вот...

BOKUL, у меня к Вам есть некоторые вопросы по коду. Что это означает?
"const path='d:\temp.dat';"
"temp:='ab bc c c km b';"
"if (ch=' ') or (ch=#13) then
inc(i)
else
ar[i]:=ar[i]+ch;"

"procedure num_dif(ar:mas; n:integer);"(что она делает?)


а почему не выводит в обратнои порядке?


а, всё - догнал - работает!
тока не пойму - как убрать последнюю строку "8 word 1 times - " . То есть при выводе всех слов последняя строка не заполнена - она не нужна - как её удалить?

а если ещё и по частоте появления вывести, сильно муторно? если не трудно - черканите. буду очень признателен!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





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

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


комментарии бы не помешали мне...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





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

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


а как добавить процедуру, чтобы она выводила слова по частоте появления?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






avaness, ты знаешь, я тут вспомнил об одной программке, которую когда-то делал... По-моему, она очень даже подходит для твоего задания... Возможно, придется поменять некоторые символы, но в общем - очень похоже:

Частотный словарь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





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

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


volvo, я фигово шарю в этих кодах.
я ты не можешь доделать код, который прислал BOKUL?
то есть добавить процедуру выведения слов по частоте появления?
частотный словарь, который ты писал, оооочень сложный для меня. препод ни за что не поверит, что это моих рук работа...
пожалуйста, если сможешь - доделай код BOKULa
мне надо сдать прогу завтра в 8.30 утра.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
а как добавить процедуру, чтобы она выводила слова по частоте появления?

Пишешь процедуру и потом вызываешь ее в основной программе yes2.gif
Цитата
а если ещё и по частоте появления вывести, сильно муторно? если не трудно - черканите. буду очень признателен!

Лови...
procedure different(ar:mas; n:integer);
var i,j,k,num,sum:integer;
ar_buf:mas;
b:boolean;
begin
num:=0;
sum:=0;
for j:=1 to n do
begin
b:=false;
for k:=1 to num do
if ar[j]=ar_buf[k] then b:=true;
if b=false then
begin
for i:=j to n do
if ar[j]=ar[i] then inc(sum);
inc(num);
ar_buf[num]:=ar[j];
writeln(ar[j],' : ',sum,' times');
sum:=0;
end;
end;
end;

Цитата
мне надо сдать прогу завтра в 8.30 утра.

Успел?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14





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

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


успеть-то успел...
но прогу забраковал препод (типа - "не универсальная")
Мне теперь нужно сделать прогу с помощью бинарных деревьев. Прога уже почти готова. Надо только дописать процедуры, чтобы слова выводились по частоте появления. Принцип таков: надо из одного дерева скопировать данные в другое, а потом в другом дереве изменить критерий вывода (cnt) и потом вывести на экран.
Кто-нибудь в курсе – как это делать?
Мне надо к утру завтрашнего дня.
Код только надо чуть-чуть дописать, препод код, который я высылаю, посмотрел - всё нормально, только дописать надо процедурки.
(прога должна быть в консоли)

program  durilka;

{$APPTYPE CONSOLE}


type Droot=^doot;
doot = record
cnt:integer;
inf:string;
next:droot;
end;
PRoot=^Root;
Root = record
cnt:integer;
inf:string;
Left:PRoot;
Right:PRoot;
end;

Procedure Add(var Root:Proot;i:string);

begin
if Root<>nil then
with Root^ do
begin
if inf<i then Add(Right,i)
else
if inf>i then Add(Left,i)
else
if inf=i then
Inc(cnt);

end
else
begin
{добавляем новый узел}
New(Root);
with Root^ do
begin
Inf:=i;
cnt:=1;
Left:=Nil;
Right:=Nil;
end
end
end; {end procedure add}

{ процедура печати элементов дерева в порядке убывания значения }
Procedure Print(P:Proot);

begin
if P<>Nil then with P^ do
begin
{ обход справа налево}
Print(left);
writeln(inf, '(', cnt, ')');
print(right);
end;
end;


Procedure Delete(R:PRoot);
begin
if R<>Nil then begin
Delete(R^.right);
Delete(R^.left);
DisPose®
end;
end;


{программа}
var F:text;
Filename:string;
inf:string;
c:Proot;
tree2:Droot;
{Count:integer;}

begin



//write('input filename - ');readln(Filename);
Assign(f,'f.txt');
{$I-} reset(f); {$I+}
if IOResult<>0 then
begin
writeln('error!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
exit
end;
c:=Nil;
{заполняем дерево дв.поиска}
{write('Enter are word - ');
read(inf);
Count:=0;}
while not eof(f) do
begin
readln(f,inf);
Add(c,inf);


end;
{Writeln('Count');}
Close(f);
if c=Nil then
writeln('file is empty')
else
begin
writeln('####->4321->####');
Print©;
//******
//tree:=nil;

writeln;
Delete©;
end;
readln;
end.


Текстовый файл отдельно создавал. Его содержание:
Цитата
moloko
student
ogurec
moloko
salo
salo


Ну чё - кто-нибудь поможет мне?

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата(avaness @ 8.06.2006 13:31)
прогу забраковал препод (типа - "не универсальная")
Мне теперь нужно сделать прогу с помощью бинарных деревьев.
<...>
Ну чё - кто-нибудь поможет мне?

Ага... А завтра тебе твой препод скажет, что и это решение неуниверсально... Окажется, что надо через стеки реализовывать, например. Сейчас прям, будем десятки раз править... nea.gif Ты сразу ТОЧНОЕ задание давай, а уж потом, извини... "Коней на переправе не меняют" (С)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16





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

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


Цитата(volvo @ 8.06.2006 18:31) *

Ага... А завтра тебе твой препод скажет, что и это решение неуниверсально... Окажется, что надо через стеки реализовывать, например. Сейчас прям, будем десятки раз править... nea.gif Ты сразу ТОЧНОЕ задание давай, а уж потом, извини... "Коней на переправе не меняют" (С)

когда препод давал мне эту задачу - в условии НЕ БЫЛО указано - с помощью чего делать. И уж тем более не говорилось об УНИВЕРСАЛЬНОСТИ проги. Я сам в шоке.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




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