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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2009, 13:11   #1
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию Генерация кода Грея

Помогите написать генерацию кода грея с задаваемой глубиной генерации.
Статья про код грея есть на википедии. Заранее спасибо.

Последний раз редактировалось Merkator; 25.01.2009 в 13:45. Причина: Добавка условия
Merkator вне форума Ответить с цитированием
Старый 25.01.2009, 18:09   #2
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию Вот, парень, написал :) В общем числа от 1 до 5 - больше не берет, ибо длины строк не хватает

Код:
program gray;
var
 count : byte;
 str1,str2,str3 : string;
 i,l,m : byte;
 k,x : word;
begin

  assign (input,'grayIn.txt');
  assign (output,'grayOut.txt');
  reset (input);
  rewrite (output);

  readln (count);
  close(input);

  str3:='01';
  for i:=2 to count do
  begin
    if i=2 then
    begin
      str1:='01';
      str2:='10';
    end;
    x:=length(str1);
    l:=1;
    for m:=1 to i-1 do l:=2*l;
    k:=0;
    repeat
      inc (k,i);
      insert ('0',str1,k-i+1);
      insert ('1',str2,k-i+1);
    until k=x+l;
    str3:=str1+str2;
    str1:=str3;
    str2:='';
    k:=length(str1);
    repeat
      str2:=str2+copy(str1,k-i+1,i);
      dec(k,i)
    until k=0
    end;

  k:=1;
  for i:=1 to count do k:=k*2;
  for i:=1 to k do
  begin
    str1:=copy(str3,1,count);
    delete (str3,1,count);
    writeln (str1)
  end;

  close(output);
end.
можно сделать больше, но сейчас времени нет

Последний раз редактировалось capta1n; 25.01.2009 в 18:12.
capta1n вне форума Ответить с цитированием
Старый 27.01.2009, 21:10   #3
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

спасибо!
отзыв оставил!
Merkator вне форума Ответить с цитированием
Старый 27.01.2009, 23:57   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

работает вроде да?? очень интересная задача, не то что эти дурацкие массивы - задолбали уже
capta1n вне форума Ответить с цитированием
Старый 28.01.2009, 20:51   #5
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

он берет 7 символов а дальше никак.
можешь объяснить алгоритм? а я его немного подкорректирую чтоб работал до 15.

Последний раз редактировалось Merkator; 28.01.2009 в 20:55.
Merkator вне форума Ответить с цитированием
Старый 29.01.2009, 00:46   #6
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

постараюсь объяснить в кратце - строка в паскале максимум может содержать 255 символов - в процессе выполнения очередного цикла строки становятся больше, причем похоже в экспоненциальной форме роста - поэтому когда дело доходит до 6 порядка, выполняется внутри так много циклов, что строка, когторая отвечается за одну половину кода грея начинает увеличиваться до 255 символов + еще символы, в общем переходит за грань, поэтому паскаль стопит - я могу доработать программу, чтобы она могла захватывать больше, а насчет алгоритма - так он описан между прочим Вами самое первое сообщение
capta1n вне форума Ответить с цитированием
Старый 08.01.2012, 01:19   #7
tempkis
Новичок
Джуниор
 
Регистрация: 08.01.2012
Сообщений: 1
По умолчанию

Код:
void GGen (int n, int A[]) //  n - размер кода 
{
    for (i=0; i<n; i++) A[i] = 0;
    i = 0;
    do {
        for (j=0; j<n; j++) printf(" %1d", A[j]); //вывод текущего подмножества
        i++; p = 0; j = i;
        while ( (j & 1) == 0) { j = j/2; p++; }
        if ( p < n ) A[p] = !A[p]; // инвертирование бита p
        printf(" - i=%2d j=%2d p=%2d", i, j, p); //отладочная информация
        printf("\n"); getch();
        } while ( p < n);
}
tempkis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация заголовка MAcK Фриланс 3 06.11.2008 11:59
Генерация звука N!ckeL Общие вопросы Delphi 1 19.06.2008 09:19
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51
генерация паролей ozhjog Общие вопросы Delphi 3 02.07.2007 08:20