Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bacekk
2 / 2 / 0
Регистрация: 30.11.2010
Сообщений: 89
#1

Марковский процесс (графический вывод) - C++

26.12.2011, 23:16. Просмотров 565. Ответов 0
Метки нет (Все метки)

У меня было задание реализовать Марковский процесс. Я сделал это следующим образом: у нас есть матрица вероятностей перехода из одного состояния в другое 10x10. Сумма элементов в каждой строке не должно превышать 1. Лучше заполнить всю матрицу элементами равными 0.1, так лучше будет работать рандом состояний. Как работает: мы генерируем число x с помощью функции rand от 0 до 100, засовываем этот х в подпрограмму для ГСЧ от 0 до 1. Мы условились, что в начальный момент времени состояние равно нулю (t=0, i=0). Получаем число z (от 0 до 1), так как состояние равно 0, идем в "нулевую" строчку матрицы и сравниваем z c первым элементом в строке, если z больше первого элемента строки, то мы прибавляем к первому элементу второй, и проверяем, если опять z больше чем сумма, то идем к третьему элементу, если в какой-то момент времени z стало меньше суммы, то мы записываем следующее состояние, как номер столбца, в котором сумма элементов строки больше чем z.
На следующем шаге мы перейдем в строчку с номером этого столбца. И повторяем действия для уже другого z. Таких поисков он делает 100. Вот так работает программа.
Код программы:
Код
 #include <stdlib.h>
 #include <stdio.h>
 #include <conio.h>
 #include <time.h>
 #include <math.h>
 
 #define N 10           
 #define M 100          
 
     float rnd();
 
 main()
 {
   FILE *f, *g;
   float x,y;
   int i,j,t;
   float z,p[N][N],s[N],pp,sp;
 
     f=fopen("C:\\TC\\BIN\\ver.dat","r");
     g=fopen("C:\\TC\\BIN\\rez.dat","w");
 
   for (i=0; i<N; i++)
    {
     for (j=0; j<N-1; j++)
      {
       fscanf(f," %f ",&pp);
       p[i][j]=pp;
      }
     fscanf(f," %f \n",&pp);
     p[i][N-1]=pp;
    }
 
   for (i=0; i<N; i++)
     s[i]=i;
 
  fprintf(g," Markovskij process: \n");
  fprintf(g," ------------------- \n");
 
  t=0;
  i=0;
 
  fprintf(g," t=%d i=%d \n",t,i);
 
  srand(time(NULL)); 
 
  x=rand()%101;
 
  for (t=1; t<=M; t++)
   {
     z=rnd(x);
     x=z*65539;
     sp=0;
 
     for (j=0; i<N; j++)
      {
        sp=sp+p[i][j];
 
        if (z<sp)
         {
          i=s[j];
          break;
         }
      }
 
  fprintf(g," t=%d i=%d \n",t,i);
  fprintf(g,"z=%f",z);
 
  }
 }
 
   float rnd(x)
   float x;
    {
     float y,z1;
 
     y=25175*x+13847;
     y=fmod(y,65539);
     z1=y*1.5255773063e-5;
     x=y;
     return(z1);
   }
ver.dat:
Код
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
rez.dat:
Код
 Markovskij process: 
 ------------------- 
 t=0 i=0 
 t=1 i=2 
z=0.709210 t=2 i=8 
z=0.582984 t=3 i=9 
z=0.835833 t=4 i=8 
z=0.314055 t=5 i=9 
z=0.554486 t=6 i=8 
z=0.404873 t=7 i=9 
z=0.887764 t=8 i=8 
z=0.668218 t=9 i=9 
z=0.602878 t=10 i=8 
z=0.654732 t=11 i=9 
z=0.089201 t=12 i=8 
z=0.833835 t=13 i=9 
z=0.000000 t=14 i=8 
z=0.211247 t=15 i=9 
z=0.346337 t=16 i=8 
z=0.234619 t=17 i=9 
z=0.732918 t=18 i=8 
z=0.418969 t=19 i=9 
z=0.764116 t=20 i=8 
z=0.830219 t=21 i=9 
z=0.978627 t=22 i=8 
z=0.155380 t=23 i=9 
z=0.903798 t=24 i=8 
z=0.319715 t=25 i=9 
z=0.042182 t=26 i=8 
z=0.148378 t=27 i=9 
z=0.618454 t=28 i=8 
z=0.785199 t=29 i=9 
z=0.606737 t=30 i=8 
z=0.825063 t=31 i=9 
z=0.164381 t=32 i=8 
z=0.501884 t=33 i=9 
z=0.150102 t=34 i=0 
z=0.017926 t=35 i=1 
z=0.486522 t=36 i=4 
z=0.399213 t=37 i=1 
z=0.400220 t=38 i=6 
z=0.748616 t=39 i=4 
z=0.619598 t=40 i=2 
z=0.590551 t=41 i=8 
z=0.332072 t=42 i=9 
z=0.133885 t=43 i=8 
z=0.757693 t=44 i=9 
z=0.138507 t=45 i=8 
z=0.128682 t=46 i=9 
z=0.791759 t=47 i=8 
z=0.753452 t=48 i=9 
z=0.367969 t=49 i=8 
z=0.836550 t=50 i=9 
z=0.364003 t=51 i=9 
z=0.979771 t=52 i=9 
z=0.958627 t=53 i=8 
z=0.645151 t=54 i=9 
z=0.896017 t=55 i=8 
z=0.447803 t=56 i=9 
z=0.643992 t=57 i=8 
z=0.708905 t=58 i=9 
z=0.901647 t=59 i=8 
z=0.165968 t=60 i=9 
z=0.444401 t=61 i=9 
z=0.998445 t=62 i=0 
z=0.052480 t=63 i=1 
z=0.391722 t=64 i=7 
z=0.824803 t=65 i=6 
z=0.635311 t=66 i=2 
z=0.176021 t=67 i=8 
z=0.542663 t=68 i=9 
z=0.755359 t=69 i=8 
z=0.377489 t=70 i=9 
z=0.493601 t=71 i=8 
z=0.604891 t=72 i=9 
z=0.353629 t=73 i=8 
z=0.815970 t=74 i=9 
z=0.264688 t=75 i=8 
z=0.723169 t=76 i=9 
z=0.000580 t=77 i=8 
z=0.805592 t=78 i=9 
z=0.979665 t=79 i=8 
z=0.271354 t=80 i=9 
z=0.559261 t=81 i=8 
z=0.617111 t=82 i=9 
z=0.986911 t=83 i=8 
z=0.702391 t=84 i=9 
z=0.905247 t=85 i=8 
z=0.804300 t=86 i=9 
z=0.453890 t=87 i=8 
z=0.885964 t=88 i=9 
z=0.348076 t=89 i=0 
z=0.017803 t=90 i=1 
z=0.414011 t=91 i=7 
z=0.942654 t=92 i=5 
z=0.530764 t=93 i=2 
z=0.186151 t=94 i=8 
z=0.561260 t=95 i=9 
z=0.928237 t=96 i=8 
z=0.590337 t=97 i=9 
z=0.954294 t=98 i=8 
z=0.572030 t=99 i=9 
z=0.078064 t=100 i=8 
z=0.467330
Вот, а весь вопрос заключается в том, как мне сделать так, чтобы выводился в файл графический вариант i(t), ну то есть график по идее. Мне сегодня преподаватель сказал сделать так, а я не знаю как это сделать. Помогите пожалуйста.
P.S. Программа сделана в Turbo C.

Добавлено через 8 минут
Помогите или скиньте ссылочку на этот вопрос, очень нужно, найти не могу, перерыл весь сайт.

Добавлено через 1 час 24 минуты
Помогите пожалуйста, хотя бы ссылкой на материал..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 23:16     Марковский процесс (графический вывод)
Посмотрите здесь:

Марковский процесс (разобраться в коде) - C++
Задание было: реализовать Марковский процесс на языке С. Теория: Имеется некоторая система, она может находиться в нескольких...

Графический вывод информации - C++
Мне надо написать программу, которая имитирует изменение температуры. Я не хочу изменять температуру просто &quot;переменная++&quot; , мне...

Процесс А инициализирует массив случайными значениями и записывает их в файл, а затем запускает процесс Б - C++
В универ нужно сделать лабу по выше указанной теме. Мне не нужно чтобы за меня делали - нужен просто совет. Для начала: Задание:...

Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему? - C++
Друзья! Вот код A.exe, суть которого просто стать родительским для B.exe и висеть в системе. #include &lt;stdio.h&gt; #include &lt;windows.h&gt;...

Графический интерфейс - C++
Привет,подскажите как в visual studio написать простенькую програмку с граф.интерфейсом? В консоле не интересно,хотелось бы как обычная...

Графический режим - C++
Помогите пожалуйста хочу научится программировать в графическом режиме я использую Microsoft Visual Studio 2008 напишите пожалуйста...

Графический интерфейс - C++
Помогите пожалуйста.Написал задачку об обедающих философов, а выводить, кроме как в консоле, не умею. Нужен графический интерфейс, что ...

Графический интерфейс. С++ - C++
Добрый день! Хочу сделать графический интерфейс для этого кода. #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;string.h&gt; ...

Графический режим С++ - C++
помогите построить четирехугольную пирамиду в графическом режиме

Графический интерфейс - C++
Здравствуйте! Решил начать изучать с++, но разработка программ, которые будут работать в консоли, не очень привлекательна. И тут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru