вопрос по алгоритмизации

Тема в разделе "WASM.BEGINNERS", создана пользователем someone, 13 июл 2007.

  1. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    вот у меня есть структурка, в ней 10 елементов.
    мне нужно задать этим элементам значения от 1 до 10 в случайном порядке
    первая моя мысль была построить свич-кейсами полное дерево
    вторая мысль "х***ясе этож **** в общем много"
    можете предложить какой-нибудь вариант алгоритма под эту весч (либо словесно, либо на асм, си, делфи можно и на других языках, если в них это не будет делаться одной командой :) )
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ну например
    x = (7*i+9) mod 10 + 1
     
  3. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Очень тупо, но вроде работает.

    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4.  
    5. typedef struct _some_struct
    6. {
    7.     int a[10];
    8. }some_struct;
    9.  
    10. int main(int argc, char* argv[])
    11. {
    12.     srand(GetTickCount());
    13.  
    14.     DWORD mask=0;
    15.     int pos;
    16.     some_struct str;
    17.     for (int i=0;i<10;++i)
    18.     {
    19.         while(1)
    20.         {
    21.             pos=rand()%10;
    22.             if (((1<<pos) & mask)==0)
    23.             {
    24.                 mask|=1<<pos;
    25.                 break;
    26.             }
    27.         }
    28.         str.a[pos]=i+1;
    29.     }
    30.  
    31.     for (int j=0;j<10;++j)
    32.     {
    33.         printf("str.a[%d]=%d\r\n", j, str.a[j]);
    34.     }
    35.  
    36.     return 0;
    37. }
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
  5. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    someone
    интересно зачем?
    http://algolist.manual.ru/maths/generator/index.php - тоже неплохой линк.
    А чем вас не устраивает rand()?
     
  6. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    1-е
    в структуре не массив значений.
    в ней 10 отдельных элементов.

    2-е
    генератор случайных чисел - это совсем другое (?) имхо

    3-е rand меня вполне устраивает, но мне необходимо случайным образом упорядочить числа от 1 до 10 (т.е. присвоить эти числа 10 отдельным переменным в случайном порядке)
    даже с использованием rand я не знаю как это сделать
    с массивом я думаю проблем не было бы а так....
     
  7. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    а может попытаться представить это в виде массива?
    буду копать в эту сторону, но вопрос остается актуальным

    блин осталось 2 дня до сдачи проэкта ):
     
  8. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    спасибо за это, если все-таки смогу привести структуру свою к массиву, сделаю, или, как вариант, попробую переделать код.
    здесь более приемлимой будет структура
    Код (Text):
    1. typedef struct _some_struct0
    2. {
    3.          int a;
    4. }some_struct0;
    5. typedef struct _some_struct1
    6. {
    7.          int a;
    8. }some_struct1;
    9. typedef struct _some_struct2
    10. {
    11.          int a;
    12. }some_struct2;
    13. typedef struct _some_struct3
    14. {
    15.          int a;
    16. }some_struct3;
    17. typedef struct _some_struct4
    18. {
    19.          int a;
    20. }some_struct4;
    21. typedef struct _some_struct5
    22. {
    23.          int a;
    24. }some_struct5;
    25. typedef struct _some_struct6
    26. {
    27.          int a;
    28. }some_struct6;
    29. typedef struct _some_struct7
    30. {
    31.          int a;
    32. }some_struct7;
    33. typedef struct _some_struct8
    34. {
    35.          int a;
    36. }some_struct8;
    37. typedef struct _some_struct9
    38. {
    39.          int a;
    40. }some_struct9;
    41. typedef struct _some_struct
    42. {
    43.     some_struct0 a0;
    44.     some_struct1 a1;
    45.     some_struct2 a2;
    46.     some_struct3 a3;
    47.     some_struct4 a4;
    48.     some_struct5 a5;
    49.     some_struct6 a6;
    50.     some_struct7 a7;
    51.     some_struct8 a8;
    52.     some_struct9 a9;
    53.  
    54. }some_struct;
     
  9. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    someone

    Простейший вариант:

    Код (Text):
    1. int main(int argc, char* argv[])
    2. {
    3.     srand(GetTickCount());
    4.  
    5.     int i,j,m,a[] = {1,2,3,4,5,6,7,8,9,10};
    6.  
    7.     for(i=0;i<9;i++) {
    8.         m = i + rand()%(10-i);
    9.         j = a[i];
    10.         a[i] = a[m];
    11.         a[m] = j;
    12.     }
    13.  
    14.     for (j=0;j<10;++j) {
    15.         printf("a[%d]=%d\r\n", j, a[j]);
    16.     }
    17.  
    18.     return 0;
    19. }
    на примере массива. Точно так же будет работать и на любой другой упорядоченной структуре - проходишь и меняешь местами элементы на случайно выбранных местах.

    P.S. Поправил, теперь вроде правильно. Knuth'a уже забывать стал :dntknw:
     
  10. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    someone
    Вопрос поставлен оочень размыто, поэтому никто ничего не понял. Про кучу структур выше - вообще ужос. Зачем это вообще нужно?
     
  11. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    о
    все, мысль пришла как это сделать.
    всем спаибо
    отдельный респект для roman_pro
    где этот код взял? или сам придумал?
     
  12. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Ну дык создать массив на 10 элементов, заполнить его необходимой перестановкой, а затем уже скопировать в структуру.
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Все же очень просто. Берешь массив с числами от 1 до 10. n=10
    Берешь число i = rand % n
    Из массива выкидываешь число. (просто сдвигаешь часть массива на 1 позицию)
    уменьшаем n на 1. И снова получаем случайное число.