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

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

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

 
 Ответить  Открыть новую тему 
> Файлы, Помогите дорешать
Mavra
сообщение 22.04.2007 21:26
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский
Реальное имя: Анна

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


Задача: Перепишите в новый файл первую из строк, содержащих наибольшее число слов.

пробовала решить... но что-то не получается....


 program Project2;
uses
SysUtils;

const E='F:\Documents and Settings\Àííà\Ðàáî÷èé ñòîë\file.txt';

type
TWords = array[1 .. 100] of string[100];
TDelimiter = set of Char;
var F,F1:Text;
i,count:Word;
words:TWords;
a,l,k,max:byte;
s:string;


function GetWords(s: string; var mas: TWords; delimiters: TDelimiter): Byte;
var i, p: Byte;
begin

for i := 1 to Length(s) do
if s[i] in delimiters then s[i] := #32;


repeat
p := Pos(' ', s);
if p > 0 then Delete(s, p, 1);
until p = 0;


if s[1] = ' ' then
Delete(s, 1, 1);


If s[Length(s)] = ' ' then
Delete(s, Length(s), 1);

i := 0;

repeat
p := Pos(' ', s); Inc(i);
if p > 0 then begin
mas[i] := Copy(s, 1, Pred(p)); Delete(s, 1, p)
end
else mas[i] := s;
until p = 0;

GetWords := i;
end;

begin
Assign(F,E);
{$I-} Reset(F); {$I+}
If IOResult <> 0 Then
Writeln('Fajl ne moget byt otkryt...')
Else
Begin
max:=1;

k:=1;
while not Eof(F) do
begin
readln(F,s[k]);
count:=GetWords(s,words,[]);
if count>max then
begin
max:=count;
l:=k;
end;
Inc(k);
end;
a:=k;
Rewrite(F1);
for i:=1 to a do
begin
count:=GetWords(s[i],words,[]);
if max=count then
writeln(F1,s[i]);
end;
Close(F);
Close(F1);
End;
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 22.04.2007 21:34
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Судя по всему слова в строке могут разделяться только пробелами (любое количество) ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 22.04.2007 22:19
Сообщение #3


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


В общем если да, то вот smile.gif

var
max_count: Integer = 0;
result_string: String;

procedure DelSpace(var s: String);
var
p: Byte;
begin
p := pos(' ', s);
if p <> 0 then repeat
delete(s, p, 1);
p := pos(' ', s);
until p = 0;
end;

function Count(s: String): Byte;
var
p: Byte;
begin
if Length(s) = 0 then Count := 0 else begin
p := Pos(' ', s);
if p = 0 then Count := 1 else
Count := 1 + Count(Copy(s, p + 1, 255));
end;
end;

procedure GetMaxWordString(var f: Text);
var
s: String;
_count: Byte;
begin
if not(eof(f)) then begin
readln(f, s);
DelSpace(s);
_count := Count(s);
if _count > max_count then max_count := _count;
if not eof(f) then GetMaxWordString(f);
end;

if _count = max_count then result_string := s;
end;

var
f, g: Text;

begin
assign(f, 'text.txt'); reset(f);
assign(g, 'new_text.txt'); rewrite(g);
GetMaxWordString(f);
writeln(g, result_string);
close(f); close(g);
end.


Тестовый файл:


Прикрепленные файлы
Прикрепленный файл  text.txt ( 137 байт ) Кол-во скачиваний: 145


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Mavra
сообщение 23.04.2007 7:12
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский
Реальное имя: Анна

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


klem4,спасибо!) Я только начинаю учиться, так что не все понимаю.... объясни пожайлуйста, что в этой строке делает ноль?
var
max_count: Integer = 0;



и еще... как можно просмотреть результат потом?

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 23.04.2007 7:29
Сообщение #5


Помощник капитана
****

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

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


Рискну ответить за него smile.gif - обнуление счетчика.


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 23.04.2007 8:13
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата
и еще... как можно просмотреть результат потом?


blink.gif Открыть файл new_text.txt ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Mavra
сообщение 23.04.2007 9:04
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Женский
Реальное имя: Анна

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


ну... да

Добавлено через 7 мин.
все поняла) спасибо!)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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