Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // lab1.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <time.h>
- #include <locale.h>
- using namespace std;
- void fill(double fvect[], int fn) { // заполнение одномерного массива случ знач
- int cur = 100; // сумма которых равна 1
- double s = 0;
- for (int i = 0; i < fn; i++) {
- if (i == fn - 1) fvect[i] = 1.0 - s;
- else {
- fvect[i] = rand() % cur / 100.0;
- cur -= fvect[i] * 100;
- s += fvect[i];
- }
- }
- }
- int setState(double fvect[]) {
- int i = -1;
- double r = rand() % 100 / 100.0;
- double s = 0;
- do {
- i++;
- s += fvect[i];
- } while (s <= r);
- return i;
- }
- int main()
- {
- setlocale(0, "Russian");
- int n;
- double s = 0;
- //cout << "Введите размерность n: ";
- //cin >> n;
- n = 4;
- double *p; // вектор нач сост
- srand((unsigned)time(NULL));
- p = new double[n];
- fill(p, n);
- cout << "Вектор:\n";
- for (int i = 0; i < n; i++) {
- s += p[i];
- printf_s("%.2f ", p[i]);
- }
- printf_s("Сумма = %.2f\n", s);
- double **t; // матрица переходов для дискр врем
- t = new double*[n];
- for (int i = 0; i < n; i++)
- t[i] = new double[n];
- for (int i = 0; i < n; i++)
- fill(t[i], n);
- cout << "\nМатрица:\n";
- for (int i = 0; i < n; i++) {
- s = 0;
- for (int j = 0; j < n; j++) {
- s += t[i][j];
- printf_s("%.2f ", t[i][j]);
- }
- printf_s("Сумма = %.2f\n", s);
- }
- int st = setState(p); // задание начального состояния
- int count = 20;
- cout << "Цепочка из " << count << " состояний:\n" << (st + 1);
- for (int i = 1; i < count; i++) {
- st = setState(t[st]);
- cout << " -> " << (st + 1);
- }
- cout << "\n\n";
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement