Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 21:32   #1
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
Восклицание Арифметическая прогрессия,строка

Пожалуйста, помогите с решением задачи на Паскале!
Задача: Найти в строке набор слов (без перестановок слов), длины которых образуют арифметическую прогрессию.
Какие здесь возникают вопросы...
1) найти нужно будет самый большой набор слов из строки, который будет образовывать эту прогрессию
2) вывести его на экран
Например:
Я сам буду чистить картофелну
вывод = буду чистить картофелну (4-7-10)
первые два слова тоже образуют прогрессию, но она уже будет малой, (1-2) = длина меньше, состоит из 2 слов

const znaki=[',','.',';','!','?',':',' '];
var s,vs:string;
i,n,m:integer;
a:array[1..100] of string;
b:array[1..100] of integer;
flag:boolean;

procedure vipisslova (s:string);
begin
i:=0;n:=0;
flag:=false;
repeat
inc(i);
if (flag and (s[i]in znaki)) then begin
inc(n);
a[n]:=vs;
vs:='';
flag:=false;
end;
if (not(s[i]in znaki)) then begin
vs:=vs+s[i];
flag:=true;=======процедура для слов, записи слов в массив
end;
until i>length(s);
if flag then begin
inc(n);
a[n]:=vs;
end;
end;

procedure vipisbukva (s:string);
m:=0;
flag:=false;
repeat
inc(i)
if (s[i] in znaki) and flag then
begin
m=m+1;
b[m]=0;
end;
end;
else
begin
flag:=true;
b[m]=b[m]+1;
length (slovo):= length (slovo) + length s[i];
end;
until i>length(stroka)

я смутно понял алгоритм...
1) как понимаю выпишем все слова и занесем в массив
2) к каждому такому слову найдем количество букв и занесем во второй массив
3) смотрим разность между b[2]-b[1];=d';
сверяем, если на каком то шаге у нас b[n+1]-b[n]<>d тогда
соответственно этому массиву ставим в соответствие массив слов = присвоим макс
на этом месте берем элемент b[n+1]
смотрим у него разность с последующим элементом и так до конца
если найдем большую послдеовательность = присвоим макс
ну и в конце выводим этот макс на экран)))
Подскажите люди добрые, может я что не так делаю?

Последний раз редактировалось Lodyr; 15.12.2009 в 22:04.
Lodyr вне форума Ответить с цитированием
Старый 15.12.2009, 21:59   #2
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
Восклицание Строка.Арифметич прогрессия.

Пожалуйста, помогите с решением задачи на Паскале!
Задача: Найти в строке набор слов (без перестановок слов), длины которых образуют арифметическую прогрессию.
Какие здесь возникают вопросы...
1) найти нужно будет самый большой набор слов из строки, который будет образовывать эту прогрессию
2) вывести его на экран
Например:
Я сам буду чистить картофелну
вывод = буду чистить картофелну (4-7-10)
первые два слова тоже образуют прогрессию, но она уже будет малой, (1-2) = длина меньше, состоит из 2 слов

const znaki=[',','.',';','!','?',':',' '];
var s,vs:string;
i,n,m:integer;
a:array[1..100] of string;
b:array[1..100] of integer;
flag:boolean;

procedure vipisslova (s:string);
begin
i:=0;n:=0;
flag:=false;
repeat
inc(i);
if (flag and (s[i]in znaki)) then begin
inc(n);
a[n]:=vs;
vs:='';
flag:=false;
end;
if (not(s[i]in znaki)) then begin
vs:=vs+s[i];
flag:=true;=======процедура для слов, записи слов в массив
end;
until i>length(s);
if flag then begin
inc(n);
a[n]:=vs;
end;
end;

procedure vipisbukva (s:string);
m:=0;
flag:=false;
repeat
inc(i)
if (s[i] in znaki) and flag then
begin
m=m+1;
b[m]=0;
end;
end;
else
begin
flag:=true;
b[m]=b[m]+1;
length (slovo):= length (slovo) + length s[i];
end;
until i>length(stroka)

я смутно понял алгоритм...
1) как понимаю выпишем все слова и занесем в массив
2) к каждому такому слову найдем количество букв и занесем во второй массив
3) смотрим разность между b[2]-b[1];=d';
сверяем, если на каком то шаге у нас b[n+1]-b[n]<>d тогда
соответственно этому массиву ставим в соответствие массив слов = присвоим макс
на этом месте берем элемент b[n+1]
смотрим у него разность с последующим элементом и так до конца
если найдем большую послдеовательность = присвоим макс
ну и в конце выводим этот макс на экран)))
Подскажите люди добрые, может я что не так делаю?

Последний раз редактировалось Lodyr; 15.12.2009 в 22:28.
Lodyr вне форума Ответить с цитированием
Старый 16.12.2009, 07:39   #3
Lodyr
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 69
По умолчанию

подскажите пожалуйста, как составить правильно программу?
Lodyr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не знаю что это, вирус или нет? Slavik Безопасность, Шифрование 7 23.09.2009 13:21
правильно решена или нет?? durachok) Помощь студентам 1 27.12.2008 08:23
правильно или нет FreeZZZ Паскаль, Turbo Pascal, PascalABC.NET 9 26.12.2008 09:39
решена правильно или нет??? durachok) Паскаль, Turbo Pascal, PascalABC.NET 3 25.12.2008 15:24
Посоветуйте ,правильно или нет Михаил Юрьевич Общие вопросы Delphi 2 14.06.2008 22:02