Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Алгоритм] Алгоритм замены символов, Заменяющие символы в массиве 
:(
    Опции темы
kovalenko123
Дата 31.1.2011, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Всем привет! Не знаю в эту категорию надо ли писать вроде на первый взгляд задача простая и решается с помощью 
Код

if

 но практика показала что не все так просто. Случайный образом генерировать 6 переменныx и сравнивать их при этом использовать систему заменяющих чисел то есть число 1 к примеру заменяет 2 вот код кот сразу пришел на ум после показал преподу он сказал что это фигня и к тому же работать не будет хотя я тестировал и все работало...  сначала сделал для 3 чисел думал сейчас с один норм сделаю потом просто прокопирую код на все случаи потом 4 вот тут начались проблемы...

вот коды
для 3 чисел
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  s1, s2, s3, RS, i: integer;
begin
  memo1.Clear;
  RS := 1;//replace
  Randomize;
  s1 := random(3);
  s2 := random(3);
  s3 := random(3);

  if ((s1 = RS) or (s2 = RS) or (s3 = RS)) then
    if (
      ((s1 = RS) or (s1 = s2) or (s2 = s3) or (s1 = s3)) and
      ((s2 = RS) or (s1 = s2) or (s2 = s3) or (s1 = s3)) and
      ((s3 = RS) or (s1 = s2) or (s2 = s3) or (s1 = s3))
      ) then begin
      Memo3.Lines.Add(inttostr(s1) + ' ' + inttostr(s2) + ' ' + inttostr(s3) + '->> 3 символа');
      Memo3.Lines.Add('');
    end else begin
      Memo3.Lines.Add(inttostr(s1) + ' ' + inttostr(s2) + ' ' + inttostr(s3) + '->> Совпадений нет');
      Memo3.Lines.Add('');
    end;
  memo1.Lines.Add(inttostr(s1));
  memo1.Lines.Add(inttostr(s2));
  memo1.Lines.Add(inttostr(s3));
 // end;
end;



вот для 4 чисел он ужасный  я думал щас этот сделаю все остальные по такому же принципу но нет ..
он рабочий но препод сказал что нет 
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  s1, s2, s3, s4, RS, i: integer;
begin
  memo1.Clear;
  RS := 1;//replace
 // for i := 0 to 20 do begin
  Randomize;
  s1 := random(3);
  s2 := random(3);
  s3 := random(3);
  s4 := random(3);

  if ((s1 = RS) or (s2 = RS) or (s3 = RS) or (s4 = RS)) then
    if (
      ((s1 = RS) or (s1 = s2) or (s1 = s3) or (s1 = s4) or ((s2 = RS) and (s3 = RS) and (s4 = RS))) and
      ((s2 = RS) or (s2 = s1) or (s2 = s3) or (s2 = s4) or ((s1 = RS) and (s3 = RS) and (s4 = RS))) and
      ((s3 = RS) or (s3 = s1) or (s3 = s2) or (s3 = s4) or ((s1 = RS) and (s2 = RS) and (s4 = RS))) and
      ((s4 = RS) or (s4 = s1) or (s4 = s2) or (s4 = s3) or ((s1 = RS) and (s2 = RS) and (s4 = RS)))
      )
      then begin
      Memo3.Lines.Add(inttostr(s1) + ' ' + inttostr(s2) + ' ' + inttostr(s3) + ' ' + inttostr(s4) + '->> 4 символа');
      Memo3.Lines.Add('');
      Label2.Visible := true;
      Label1.Visible := false;
    end else begin
      Memo3.Lines.Add(inttostr(s1) + ' ' + inttostr(s2) + ' ' + inttostr(s3) + ' ' + inttostr(s4) + '->> Совпадений нет');
      Memo3.Lines.Add('');
      Label1.Visible := true;
      Label2.Visible := false;
    end;


Вот для 5 чисел он ужасный и неработает 
Код

procedure TForm1.Button6Click(Sender: TObject);
var
  s1, s2, s3, s4, s5, RS, i: integer;
begin
  memo1.Clear;
  RS := 1;//replace
 // for i := 0 to 20 do begin
  Randomize;
  s1 := random(3);
  s2 := random(3);
  s3 := random(3);
  s4 := random(3);
  s5 := random(3);
  if ((s1 = RS) or (s2 = RS) or (s3 = RS) or (s4 = RS) or (s5 = RS)) then
    if (
      ((s1 = Rs) or (s1 = s2) or (s1 = s3) or (s1 = s4) or (s1 = s5) and ((s2 = RS) or (s3 = RS) or (s4 = RS) or (s5 = RS))) and
      ((s2 = RS) or (s2 = s1) or (s2 = s3) or (s2 = s4) or (s4 = s5) and ((s1 = RS) or (s3 = RS) or (s4 = RS) or (s5 = RS))) and
      ((s3 = RS) or (s3 = s1) or (s3 = s2) or (s3 = s4) or (s3 = s5) and ((s1 = RS) or (s2 = RS) or (s4 = RS) or (s5 = RS))) and
      ((s4 = RS) or (s4 = s1) or (s4 = s2) or (s4 = s3) or (s4 = s5) and ((s1 = RS) or (s2 = RS) or (s3 = RS) or (s5 = RS))) and
      ((s5 = RS) or (s5 = s1) or (s5 = s2) or (s5 = s3) or (s5 = s4) and ((s1 = RS) or (s2 = RS) or (s3 = RS) or (s4 = RS)))
      )
      then begin
      Memo3.Lines.Add(inttostr(s1) + ' ' + inttostr(s2) + ' ' + inttostr(s3) + ' ' + inttostr(s4) + ' ' + inttostr(s5) + '->> 5 символов');
      Memo3.Lines.Add('');
      Label2.Visible := true;
      Label1.Visible := false;
    end else begin
      Memo3.Lines.Add(inttostr(s1) + ' ' + inttostr(s2) + ' ' + inttostr(s3) + ' ' + inttostr(s4) + ' ' + inttostr(s5) + '->> Совпадений нет');
      Memo3.Lines.Add('');
      Label1.Visible := true;
      Label2.Visible := false;
    end;


для 6 пока не делал потому как еще с 5 не закончил ( Кто нить помогите плиз может быть какой то другой есть способ 
PM MAIL ICQ   Вверх
skyboy
Дата 31.1.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(kovalenko123 @  31.1.2011,  20:46 Найти цитируемый пост)
лучайный образом генерировать 6 переменныx и сравнивать их при этом использовать систему заменяющих чисел то есть число 1 к примеру заменяет 2

че заменить-то? все определенные цифры в числе?
даже по коду мне лично мало что понятно.
PM MAIL   Вверх
_Y_
Дата 31.1.2011, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Я не опознал что за язык у Вас. Я бы сделал карту замены и каждое вновь сгенерированное число использовал бы в качестве ключа этой карты:
1. Создаем карту замены, в которой каждому ключу соответствует значение. Ключ - то что надо заменить, значение - чем заменять.
2. Генерируем величину S.
3. Проверяем имеется ли у карты ключ  S. Если нет, идем к пункту 5.
4. Заменяем величину S значением, полученным из карты и соответствующим данному ключу.
5. Используем полученную величину так, как хотим.
6. Проверяем не надоело ли генерировать величины. Если нет, идем к пункту 2.
7. Сдаем работу, получаем пряник.




--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
DarkProg
Дата 1.2.2011, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Цитата(_Y_ @  31.1.2011,  23:31 Найти цитируемый пост)
Я не опознал что за язык у Вас.

Это Delphi ;)




--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
kovalenko123
Дата 1.2.2011, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



skyboy, 
Цитата

че заменить-то? все определенные цифры в числе?

генерируем 5 чисел от 1 до 3 возьмем число 1 как число которое заменяет другие одинаковые числа у меня это переменная RS

вот сгенерировалось 1 2 2 2 2 это тоже самое что  2 2 2 2 2 тоесть число 1 заменило 2 и вот оно может выпасть в любом месте в середине в конце . мой алгоритм такой

Код

RS := 1;//replace
  Randomize;
  s1 := random(3);
  s2 := random(3);
  s3 := random(3);
  s4 := random(3);
  s5 := random(3);
 if ((s1 = RS) or (s2 = RS) or (s3 = RS) or (s4 = RS) or (s5 = RS)) then
    if (

После генерации смотрю есть ли где нибудь символ замены 
В задании сказано что те случаи когда символ замены не выпадет, в мемо заполнять не надо поэтому нужен такое отфильтровывающий код

в общем если по простому сказать : если числа одинаковы и в них есть заменяющий символ то надо записывать в мемо







PM MAIL ICQ   Вверх
Akina
Дата 1.2.2011, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



 smile 
Цитата(skyboy @  31.1.2011,  23:55 Найти цитируемый пост)
даже по коду мне лично мало что понятно. 

А я думал - это у меня к вечеру мозг совсем склеился... ан нет!


kovalenko123, до сих пор совершенно непонятно, что же нужно сделать...
Давайте так - вот то самое задание, которое выдано преподавателем, скопируйте сюда символ в символ, без каких-либо изменений и дополнений.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kovalenko123
Дата 1.2.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Используя генерацию случайных чисел разработать алгоритм сравнения этих чисел с последующей заменой. 
То есть Введя универсальное число которое заменяет совпавшие числа. 
По памяти восстановил оно сейчас на квартире лежит только вечером смогу добратся.

Он мне по простому объяснил имея 6 рандомных переменных от 1 до 3,  сравнивать их они должны быть одинаковыми при этом если выпадет символ замены к примеру 1 то все равно записывать в мемо а если нет то не записывать 

Примеры 

выпало 0 2 2 2 1 1 Записывать не будем потому что 0 есть , еслибы его небыло а была 1ница то записали в мемо бы

1 0 1 0 1 0 все совпали 0 и заменяющий символ 1 пишем в мемо

2 0 0 2 2 0 вообще ничего не делаем тут нет заменяющего символа 

сравнивать числа в общем используя заменяющие символы

Добавлено через 2 минуты и 39 секунд
Еще такой вариант пришел в голову записывать сгенерированные числа в статичный массив выкидывать от туда заменяющий символ и смотреть совпадают ли они только как реализовать выкидывание из массива не знаю
PM MAIL ICQ   Вверх
Akina
Дата 1.2.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Ничего не понял всё равно... но пока получается так - если после удаления элементов, равных "замещающему числу", все оставшиеся элементы равны, и было хотя бы одно удаление - вывести исходную последовательность, иначе ничего не выводить.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kovalenko123
Дата 1.2.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Цитата

но пока получается так - если после удаления элементов, равных "замещающему числу", все оставшиеся элементы равны, и было хотя бы одно удаление - вывести исходную последовательность, иначе ничего не выводить. 


Ну это как вариант только что пришел без ифоф ну вообще давайте еще раз распишу я наверно не так объясняю опыта в этих делах нет 

Числовая последовательность генерируется из случайных чисел от 1 до 3
Код

random(3);

Потом она сравнивается эта последовательность чтобы 1 число было равно 2 ,2 число равно 3тьему, 3тье 4ртому и 4ртое пятому.
Если выпал на каком то числе к примеру на втором заменяющее число тут оно равно 1 то все считать что оно равно всем остальным и в итоге получим (выпали 0)

0 1 0 0 0 

Это одно и тоже что и 
0 0 0 0 0  


PM MAIL ICQ   Вверх
Akina
Дата 1.2.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Ну и в чём проблема тогда? 
Бежишь по последовательности (или по массиву) и подсчитываешь количество элементов с каждым из значений. Если в результате для одного из не-заменителей получен ноль - последовательность тебя устраивает. Иначе нет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kovalenko123
Дата 1.2.2011, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



А вообще как Вам такое решение задачи? 

вот начал но по прежнему не знаю как сделать подобную проверку
Код


    arraytest: array[1..5] of integer;

procedure TForm1.Button1Click(Sender: TObject);
 var
 i:integer;
begin
 Randomize;
  arraytest[1]:=  Random(3);
  arraytest[2]:=  Random(3);
  arraytest[3]:=  Random(3);
  arraytest[4]:=  Random(3);
  arraytest[5]:=  Random(3);

  for i:=1 to 5 do begin

  end;

end;


PM MAIL ICQ   Вверх
kovalenko123
Дата 1.2.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Код

procedure TForm1.Button1Click(Sender: TObject);
 var
 i:integer;
 bool:boolean;
begin
 Randomize;
  arraytest[1]:=  Random(3);
  arraytest[2]:=  Random(3);
  arraytest[3]:=  Random(3);
  arraytest[4]:=  Random(3);
  arraytest[5]:=  Random(3);

  for i:=1 to 5 do begin
    if ((arraytest[i] = arraytest[i+1]) or (arraytest[i]=1)) then
    bool:=true
    else bool:=false;
    end;

Никак не могу додумать что же тут написать грамотного

   memo1.Lines.Add(inttostr(arraytest[1]));
   memo1.Lines.Add(inttostr(arraytest[2]));
   memo1.Lines.Add(inttostr(arraytest[3]));
   memo1.Lines.Add(inttostr(arraytest[4]));
   memo1.Lines.Add(inttostr(arraytest[5]));

   Edit1.Text:= BoolToStr(bool);

 end;

PM MAIL ICQ   Вверх
Akina
Дата 1.2.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Посмотри на алголисте сортировку подсчётом. Возьми только прямой ход. А потом тупо проверяй полученный массив количеств.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kovalenko123
Дата 1.2.2011, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



НЕ разобрался я с той сортировкой вот такую нашел 
Код

procedure TForm1.Button3Click(Sender: TObject);
const
  SIZE = 5;
var

  k: integer;
  i: integer;
  changed: boolean;
  buf: integer;
  t:integer;
begin
  for i := 1 to SIZE do begin
    t:= Random(3);
    if (t = 1) then continue;
     a[i] := t;
    memo1.Lines.Add(inttostr(a[i]));
    end;
  repeat
    Changed := FALSE;
    for k := 1 to Length(a) - 1 do
      if a[k] > a[k + 1] then
      begin
        buf := a[k]; a[k] := a[k + 1]; a[k + 1] := buf;
        changed := TRUE;
      end;
    for i := 1 to Length(a) do
    memo2.Lines.Add(inttostr(a[i]));
  until
    not changed;
end;


Она упорядочивает символы типо ASC ) от 0 до ... вот потом подумал упорядочу да не буду записывать символ замены тоесть 1 и сравню все  ключи массива но чтото и это не получается
PM MAIL ICQ   Вверх
kovalenko123
Дата 2.2.2011, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Ребята натолкните более детально на мысль плиз
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.