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

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

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

 
 Ответить  Открыть новую тему 
> Файлы, Помогите дорешать
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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


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


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


Новичок
*

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

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


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



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

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


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

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

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


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


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


ну... да

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

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

 





- Текстовая версия 28.09.2020 16:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name