Старый 25.04.2006, 11:25   #1   
Moderator
 
Аватар для mexx
 
Сообщений: 2,261
Регистрация: 21.01.2004

mexx вне форума Не в сети
Unhappy Строки в паскале

Я только начинаю программировать. Пока знаю паскаль лишь в школьных рамках, так как сам ещё учусь в школе. Есть несколько задач, которые никак не могу решить. Помогите плз.
Вот:
1. Дана строка из цифр, надо найти и удалить повторяющиеся.
2. Надо удалить все нечетные слова из предложения, и перевернуть задом наперд четные.
Вот и все, помогите плз, надеюсь это не очень сложно для вас
  Ответить с цитированием
Старый 25.04.2006, 16:02   #2   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Это тебе на первое

Function MyDeletIdentic(s:AnsiString):AnsiString;
var
j, i:LongInt;
begin
if Length(s)>1 then begin
i:=0;
repeat
i:=i+1;
j:=i+1;
repeat
if S[i]=S[j] then begin
Delete(s,j,1);
j:=j-1;
end;
j:=j+1;
until j>Length(S);
Until i>=Length(S)-1;
end;
Result:=s;
end;
  Ответить с цитированием
Старый 25.04.2006, 18:58   #3   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Если не вполне понятно, то вот более понятный, ИМХО, вариант
Function MyDeleteIdentic(s:ShortString):ShortString;
var
MyArray:Array of Boolean;
i,j:LongInt;
begin

SetLength(MyArray,Length(S)+1);
For i:=1 to Length(MyArray)do
MyArray[i]:=True;

For i:=1 to Length(S)-1 do
For j:=i+1 to Length(S) do
if S[i]=S[j] then MyArray[j]:=False;

Result:='';
For i:=1 to Length(S) do
if MyArray[i] then begin
Result:=Result+S[i];
end;
end;
  Ответить с цитированием
Старый 25.04.2006, 18:59   #4   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
zalex, файнал релиз скоро?
  Ответить с цитированием
Старый 25.04.2006, 19:01   #5   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Всё зависит от полнготиы налитого стакана А вообще файнал релизы - это когда ошибки замечены. Я бы по большому счету сказал, что если ошибка и есть, то не того класса, что бы быть замеченной на какой нить лабораторке.
  Ответить с цитированием
Старый 25.04.2006, 19:13   #6   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
zalex, не дочитал задание, поэтому сначала не то решение написал.
вобщем сложность N^2 - это пара. сто пудов.

вот так можно сделать на пхп (паскаль позабыл уже за долгие годы):
Код:
function doIt($in_str) {
$flags = array();
$out = '';

for ($i = 0; $i < strlen($in_str); $i++) {
$ch = substr($in_str, $i, 1);
if (!isset($flags[$ch])) {
$out .= $ch;
$flags[$ch] = 1;
}
}

return $out;
}

echo doIt('123243234123151345432437568648567567');
  Ответить с цитированием
Старый 25.04.2006, 19:14   #7   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Вот вам файнл релиз. Имхо самый понятный.
Function MyDeleteIdentic(s:ShortString):ShortString;
var
MyArray:Array of Boolean;
i,j:LongInt;
begin

SetLength(MyArray,Length(S)+1);
For i:=1 to Length(MyArray)do
MyArray[i]:=True;

For i:=1 to Length(S)-1 do
if S[i] then begin
For j:=i+1 to Length(S) do
if S[i]=S[j] then MyArray[j]:=False;
end;

Result:='';
For i:=1 to Length(S) do
if MyArray[i] then begin
Result:=Result+S[i];
end;
end;
  Ответить с цитированием
Старый 25.04.2006, 19:15   #8   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
Цитата:
Сообщение от zalex
Вот вам файнл релиз. Имхо самый понятный.
Function MyDeleteIdentic(s:ShortString):ShortString;
var
MyArray:Array of Boolean;
i,j:LongInt;
begin

SetLength(MyArray,Length(S)+1);
For i:=1 to Length(MyArray)do
MyArray[i]:=True;

For i:=1 to Length(S)-1 do
if S[i] then begin
For j:=i+1 to Length(S) do
if S[i]=S[j] then MyArray[j]:=False;
end;

Result:='';
For i:=1 to Length(S) do
if MyArray[i] then begin
Result:=Result+S[i];
end;
end;
как об стенку горох..
  Ответить с цитированием
Старый 25.04.2006, 19:15   #9   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Что значит не дочитал задание?
А PHP то тут причем? А по поводу сложности - я запостил два варианта. ОДин быстрый, второй понятный, как всегда.
  Ответить с цитированием
Старый 25.04.2006, 19:17   #10   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
Цитата:
Сообщение от zalex
Что значит не дочитал задание?
я - не дочитал задание.
ты - не дочитал мой ответ.
  Ответить с цитированием
Старый 25.04.2006, 19:23   #11   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
Цитата:
Сообщение от zalex
ОДин быстрый, второй понятный, как всегда.
они оба медленные и непонятные =)
Цитата:
Сообщение от zalex
А PHP то тут причем?
воспринимай его как некий абстрактный язык, который как правило понятен программистам. как примеры в умных книжках про алгоритмы
  Ответить с цитированием
Старый 25.04.2006, 19:28   #12   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Цитата:
Сообщение от maximn
они оба медленные и непонятные =)
воспринимай его как некий абстрактный язык, который как правило понятен программистам. как примеры в умных книжках про алгоритмы
Вообще то у меня сложилось впечатление, что стоющие книжки _по алгоритмам приводят примеры на Паскале или Фортране.

Чего непонятного в последнем релизе - сначала помечаем одинаковые. Поиск одинаковых ищем со следующего, после текущего и до конца строки. ОТметив одинаковые, формируем новую строку (пустую) - к которой прибавляем только неполвторяющиеся.

В один цикл к сожалению сделать - не получилось.
  Ответить с цитированием
Старый 25.04.2006, 19:30   #13   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
Цитата:
Сообщение от zalex
сначала помечаем одинаковые. Поиск одинаковых ищем со следующего, после текущего и до конца строки
уже лучше, но все еще нелинейно =)
Цитата:
Сообщение от zalex
В один цикл к сожалению сделать - не получилось.
почему?
  Ответить с цитированием
Старый 25.04.2006, 19:34   #14   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
Цитата:
Сообщение от zalex
Вообще то у меня сложилось впечатление, что стоющие книжки _по алгоритмам приводят примеры на Паскале или Фортране.
я не пойму, тебе это принципиально? если я перепишу на сях - тебе будет понятнее?
  Ответить с цитированием
Старый 25.04.2006, 20:27   #15   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Цитата:
Сообщение от maximn
уже лучше, но все еще нелинейно =)
почему?
не придумал алгоритм Мож кто словами хоть скажет - как это сделать в одном цикле, без вложенный других циклов, за один проход.

По поводу линейности. О какой линейности идёт речь? Если о визуальной, то одно дело, если о линейности реализации - то ни в жизнь не получится эту задачу решить в один цикл и линейно.
Я не специалист в PHP , но, имхо, причина нелинейности твоего варианта - substr - как раз это и есть по сути второй цикл перебора. По крайней мере её аналог в Паскале - Pos, есть именно преребор в цикле, если верить содержимому модуля System.

По поводу языка реализации - да пофиг, если работает. Тут каждый кулик своё болото хвалит, и спортить принципиально не хочу.

ЗЫ По поводу [code] - действельно этих тэгов не хватает.
  Ответить с цитированием
Старый 25.04.2006, 20:50   #16   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
Цитата:
Сообщение от zalex
не придумал алгоритм Мож кто словами хоть скажет - как это сделать в одном цикле, без вложенный других циклов, за один проход.
да элементарно - я же всё написал.
если словами:
1. есть массив флагов - array[0..9], первоначально там нули
2. проходишь строку посимвольно и смотришь если в массиве флагов по данному символу (у нас по условию это цифра) стоит 0 значит этой цифры еще не было, соответственно добавляешь эту цифру в результат, а в массив флагов ставишь 1 для это цифры.
3. точка
  Ответить с цитированием
Старый 25.04.2006, 20:56   #17   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
кстати перечитал условие и твое решение - мы делали разные задачи =)
вот решение того что делал ты, словами:
1. результат = первому символу входной строки
2. посимвольно идем по входной строке
3. если последний символ выходной строки не равен текущему символу входной, добавляем этот символ в выходную строку.
4. точка

пысы. автор - напиши условие нормально, а не "своими словами"
  Ответить с цитированием
Старый 25.04.2006, 21:06   #18   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Цитата:
Сообщение от maximn
пысы. автор - напиши условие нормально, а не "своими словами"
Да, немешалобы выслушать автора )))))
  Ответить с цитированием
Старый 25.04.2006, 21:13   #19   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Что то вечер, и я уже ничего не соображаю. Теперь я попытаюсь сфлрмулировать, что же я делал.

1.Создал массив флагов. Каждый элемнт этого массива отвечает каждому символу входной строки. Инициализировал, что никакой символ не повторяется.

2. Для первого символа проверяю, есть ли такой же во входной строке. Каждый встреченный такой же помечаю в массиве флагов. Затем беру следующий. Если он уже помечен - пропускаю, ибо идентичные ему уже были ранее найдены, если не помечен - то делаю всё, как для первого символа, только не с начала, а с текущей позиции+1. И т.д.

3.Затем формирую выходную строку на основе массива флагов.
  Ответить с цитированием
Старый 25.04.2006, 21:40   #20   
Форумец
 
Аватар для Аид
 
Сообщений: 12,346
Регистрация: 28.07.2003

Аид вне форума Не в сети
Цитата:
Сообщение от mexx
1. Дана строка из цифр, надо найти и удалить повторяющиеся.
2. Надо удалить все нечетные слова из предложения, и перевернуть задом наперд четные.
пойди туда - не знаю куда, найди то - не знаю что.
это не условие задачи. цифры - целые, не целые, сколько их, они константы или их вводить надо?
про предложение понятно, прога в уме набросана, писать ее щас лееееееень
  Ответить с цитированием
Старый 25.04.2006, 22:00   #21   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Во понесло, блин, на тебе автор еще )

Function MyDelete3(s:ShortString):ShortString;
var i:Integer;
begin
Result:='';
For i:=1 to Length(S) do
if Pos(s[i],Result)=0 then Result:=Result+S[i];
end;

2 maximn - теперь алгоритм понятен
  Ответить с цитированием
Старый 25.04.2006, 22:59   #22   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Цитата:
Сообщение от Аид
пойди туда - не знаю куда, найди то - не знаю что.
это не условие задачи. цифры - целые, не целые, сколько их
3.14здос-бандос, е№ать мой лысый череп!
Их десять в десятичной системе!
  Ответить с цитированием
Старый 26.04.2006, 00:24   #23   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
И еще

Function MyDelete4(s:ShortString):ShortString;
var i,j:Integer;
MyArray:array [1..256]of Boolean;

begin

For i:=1 to Length(S) do
MyArray[i]:=True;

Result:='';
For i:=1 to Length(S) do
if MyArray[i] then begin
Result:=Result+S[i];
For j:=i+1 to Length(S) do
if S[i]=S[j] then MyArray[j]:=False;
end;
end;

Я думаю с первым вопросом достаточно. Второй желательно конкретизировать - какие разделители слов и т.д., что бы лишний код не писать.
  Ответить с цитированием
Старый 26.04.2006, 08:13   #24   
error #65535
 
Аватар для maximn
 
Сообщений: 5,240
Регистрация: 16.11.2003
Возраст: 24

maximn вне форума Не в сети
звонил автор - говорит что занят написанием диссертации, пока на форуме появиться не сможет
  Ответить с цитированием
Старый 26.04.2006, 09:59   #25   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Цитата:
Сообщение от maximn
звонил автор - говорит что занят написанием диссертации, пока на форуме появиться не сможет
Ну тогда тебе спасибо, я даже сам понял алгоритм
Автор, видимо ты обиделся, что предложено только 4 работающих варианта+вариант на РНР, но не обижайся - действительно, тут люди суровые и злые
  Ответить с цитированием
Старый 26.04.2006, 11:29   #26   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Вот тебе пятый вариант, благодарный автор
Function MyDelete5(s:ShortString):ShortString;
var i,j,k:Integer;
My:Array [1..256]of ShortInt;
begin


For i:=0 to 9 do
begin
k:=0;
For j:=1 to Length(S) do
if S[j]=IntToStr(i) then begin
k:=k+1;
My[j]:=k;
end;
end;

Result:='';
For i:=1 to Length(S) do
begin
if My[i]=1 then Result:=Result+s[i];
end;

end;
  Ответить с цитированием
Старый 26.04.2006, 14:26   #27   
Форумец
 
Аватар для zss_vrn
 
Сообщений: 2,045
Регистрация: 27.08.2003

zss_vrn вне форума Не в сети
mexx, Хоть бы что написал. Эвон, народ-то как распалился...
  Ответить с цитированием
Старый 26.04.2006, 18:48   #28   
Moderator
 
Аватар для mexx
 
Сообщений: 2,261
Регистрация: 21.01.2004

mexx вне форума Не в сети
Сорри, не мог зайти в нет. За варианты спасибо большое! Я примерно так и представлял себе, но мой вариант почему то не работал. Ещё раз извиняюсь за долгий ответ!
  Ответить с цитированием
Старый 26.04.2006, 19:05   #29   
Покинул БВФ
 
Аватар для zalex
 
Сообщений: 469
Регистрация: 28.06.2005

zalex вне форума Не в сети
Цитата:
Сообщение от zss_vrn
mexx, Хоть бы что написал. Эвон, народ-то как распалился...
Пока на работе сегодня сидел, еще один вариант придумал Автор, ты хоть что ли напиши - то это или нет, ибо на самом деле поставленные условия можно по-разному интерпретировать.
  Ответить с цитированием
Старый 27.04.2006, 14:10   #30   
Moderator
 
Аватар для mexx
 
Сообщений: 2,261
Регистрация: 21.01.2004

mexx вне форума Не в сети
Условия задачи написал так, как нам дают в школе. Конечно спасибо за помошь, вроде бы это то, но мы всеравно как-то не так делаем, без булеана и массивов.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind