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

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

Восстановить пароль Регистрация
 
S.l.a.y.e.R
0 / 0 / 0
Регистрация: 02.05.2009
Сообщений: 10
02.05.2009, 21:56     Генерация ПСП #1
Пожалуста, помогите. Задача состоит в том чтобы написать на С++ генератор псевдослучайных последовательностей по формуле:
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(также задаётся с клавиатуры по запросу программы). Больше не нужно.
Буду рад любой помощи. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2009, 21:56     Генерация ПСП
Посмотрите здесь:

C++ Необходимо разработать программу генерации ПСП
Генерация звука C++
генератор ПСП по методу Фибоначчи C++
Генерация чисел C++
Генерация ребуса. C++
C++ Генерация массива
Генерация программы C++
C++ генерация чисел
C++ генерация строк
C++ Генерация лабиринта
C++ Генерация комбинаций из n по m
Генерация C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
02.05.2009, 22:09     Генерация ПСП #2
Хмм.... она у тебя компилируется? А какой компилятор?
S.l.a.y.e.R
0 / 0 / 0
Регистрация: 02.05.2009
Сообщений: 10
03.05.2009, 14:15  [ТС]     Генерация ПСП #3
компилятор С++

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

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