С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
S.l.a.y.e.R
0 / 0 / 0
Регистрация: 02.05.2009
Сообщений: 10
#1

Генерация ПСП - C++

02.05.2009, 21:56. Просмотров 809. Ответов 4
Метки нет (Все метки)

Пожалуста, помогите. Задача состоит в том чтобы написать на С++ генератор псевдослучайных последовательностей по формуле:
Y[i+1]=F*Y[i],
где F - матрица(любая невырожденная), Y - вектора.
Все вычисления должны быть по модулю 5 (элементы матрицы и векторов соответственно тоже - 0 1 2 3 4 ).
Нужно написать программу, которая реализует это умножение, причем циклическое, т.е. вектор-результат еще раз умножится на ту же матрицу и получится следующий вектор и т. д. Также нужно чтобы вычислялся период т.е. когда вектора-результаты начнут повторяться. И еще прорамма должна позволять выводить результат задаваемого умножения т.е. например результат после 15-го умножения (1 результат) или результат с 10-го до 16-го умножения (7 результатов).
Я пока только написал достаточно дилетантскую программу, которая только считает результат 1-го умножения. Вот она:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
 
int main(void) {
int c1;
int i, j, k;
randomize();
printf("vvedite rang matrici(2, 3 ili 4) - n: \n");
scanf("%d",&c1);
    switch(c1) {
 
case 2:
int S2=2;
int A2[2][2];
int B2[2][1];
int C2[2][1];
for(j=0; j<S2; j++){
for(k=0; k<1; k++){
B2[j][k]=random(5);}}
 
for(i=0; i<S2; i++){
for(j=0; j<S2; j++){
A2[i][j]=random(5);}}
printf("matica F: \n");
for(i=0; i<S2; i++){
for(j=0; j<S2; j++){
printf("%3d ",A2[i][j]);}
   printf("\n");
   printf("\n");}
 
    printf("\n");
printf("vector Y[i]: \n");
for(j=0; j<S2; j++){
for(k=0; k<1; k++){
printf("%3d ",B2[j][k]);}
   printf("\n");
   printf("\n");}
 
   printf("\n");
 
for(i=0; i<S2; i++){
for(k=0; k<1; k++){
C2[i][k]=0;
for(j=0; j<S2; j++){
C2[i][k]=(C2[i][j]+(A2[i][j]*B2[j][k])%5)%5;}}}
printf("vector Y[i+1]=F*Y[i]: \n");
for(i=0; i<S2; i++){
for(k=0; k<1; k++){
printf("%3d ",C2[i][k]);}
printf("\n");
printf("\n");}
break;
 
case 3:
int S3=3;
int A3[3][3];
int B3[3][1];
int C3[3][1];
for(j=0; j<S3; j++){
for(k=0; k<1; k++){
B3[j][k]=random(5);}}
 
for(i=0; i<S3; i++){
for(j=0; j<S3; j++){
A3[i][j]=random(5);}}
printf("matica F: \n");
for(i=0; i<S3; i++){
for(j=0; j<S3; j++){
printf("%3d ",A3[i][j]);}
   printf("\n");
   printf("\n");}
 
    printf("\n");
printf("vector Y[i]: \n");
for(j=0; j<S3; j++){
for(k=0; k<1; k++){
printf("%3d ",B3[j][k]);}
   printf("\n");
   printf("\n");}
 
   printf("\n");
 
for(i=0; i<S3; i++){
for(k=0; k<1; k++){
C3[i][k]=0;
for(j=0; j<S3; j++){
C3[i][k]=(C3[i][j]+(A3[i][j]*B3[j][k])%5)%5;}}}
printf("vector Y[i+1]=F*Y[i]: \n");
for(i=0; i<S3; i++){
for(k=0; k<1; k++){
printf("%3d ",C3[i][k]);}
printf("\n");
printf("\n");}
break;
    
case 4:
int S4=4;
int A4[4][4];
int B4[4][1];
int C4[4][1];
for(j=0; j<S4; j++){
for(k=0; k<1; k++){
B4[j][k]=random(5);}}
 
for(i=0; i<S4; i++){
for(j=0; j<S4; j++){
A4[i][j]=random(5);}}
printf("matica F: \n");
for(i=0; i<S4; i++){
for(j=0; j<S4; j++){
printf("%3d ",A4[i][j]);}
   printf("\n");
   printf("\n");}
 
    printf("\n");
printf("vector Y[i]: \n");
for(j=0; j<S4; j++){
for(k=0; k<1; k++){
printf("%3d ",B4[j][k]);}
   printf("\n");
   printf("\n");}
 
   printf("\n");
 
for(i=0; i<S4; i++){
for(k=0; k<1; k++){
C4[i][k]=0;
for(j=0; j<S4; j++){
C4[i][k]=(C4[i][j]+(A4[i][j]*B4[j][k])%5)%5;}}}
printf("vector Y[i+1]=F*Y[i]: \n");
for(i=0; i<S4; i++){
for(k=0; k<1; k++){
printf("%3d ",C4[i][k]);}
printf("\n");
printf("\n");}
break;
    //return 0;
}   return 0;}
Программа достаточно кривая, но она у меня работает. Я не знаю как задать чтоб умножало дальше и выводило только требуемые результаты(задаются с клавиатуры по запросу программы). Ранг матрицы - 2х2, 3х3, 4х4(также задаётся с клавиатуры по запросу программы). Больше не нужно.
Буду рад любой помощи. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2009, 21:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генерация ПСП (C++):

генератор ПСП по методу Фибоначчи - C++
Нужно реализовать генератор ПСП по методу Фибоначчи, используя полином 9D (16) = 1001 1101 (2) Имеем к примеру начальное...

Необходимо разработать программу генерации ПСП - C++
Прошу помочь. Кто учился на ЗС, ЗИ, Зм, в общем защитники инфы и те кто знаком с основами инф. Безопасности (криптографии) - Необходимо...

Генерация - C++
#include &quot;iostream&quot; #include &quot;ctime&quot; #include &quot;cstdlib&quot; using namespace std; int main(){ srand(time(NULL)); setlocale(LC_ALL,...

генерация строк - C++
подскажите плиз как сгенерировать строки????????? void karta(){ char...

Генерация чисел - C++
Вообщем мне нужно сгенерировать отрицательное вещественное число с 2 цифрами целой и 2 цифрами дробной части. Отрицательное ведь так...

Генерация чисел - C++
Доброго времени суток, не могли бы вы подсказать как выбрать рандомно число из двух чисел 2 и 4 и в диапозоне от 1 до 4 благодарю

4
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
02.05.2009, 22:09 #2
Хмм.... она у тебя компилируется? А какой компилятор?
0
S.l.a.y.e.R
0 / 0 / 0
Регистрация: 02.05.2009
Сообщений: 10
03.05.2009, 14:15  [ТС] #3
компилятор С++

Добавлено через 1 минуту 30 секунд
компилирует без ошибок и предупреждений
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
03.05.2009, 14:19 #4
Вот поэтому я и спрашиваю, какой компилятор. Ибо GCC 4.4.0, например, наотрез отказывается это компилировать:
=== Build finished: 12 errors, 0 warnings ===
0
S.l.a.y.e.R
0 / 0 / 0
Регистрация: 02.05.2009
Сообщений: 10
03.05.2009, 14:56  [ТС] #5
а где посмотреть какой именно у меня компилятор?
0
03.05.2009, 14:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2009, 14:56
Привет! Вот еще темы с ответами:

генерация чисел - C++
Скажите, пожалуйста, как сгенерировать случайным образом отрицательные числа?

Генерация ребуса. - C++
Ув. программисты, помогите составить алгоритм генерации ребуса следующего вида и проверки однозначности его решения (хотя бы вручную):

Генерация массива - C++
Что то не создает массив. // lab1.cpp: определяет точку входа для консольного приложения.и еще вопрос правильно ли я прописал чтобы...

Генерация массива - C++
Помогите, пожалуйста. :cry: Например, есть число 01х01у0. Возьмем для пример такое - 01110110 Вопрос: можно ли задать в программе...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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