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

Не хочет работать Rand - C++

Восстановить пароль Регистрация
 
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
14.03.2011, 21:43     Не хочет работать Rand #1
Здравствуйте, при выполнении лабораторной работы столкнулся с некоторыми трудностями:
При запуске программы она доходит до функции ran и останавливается

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
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
using namespace std;
void date(long **mas,int x, int y){ //a)
  mas = new long*[x];
 
  for (int i = 0; i < x; i++) {
    mas[i] = new long [y];
  }
 
}
void ran(long **mas,const int x,const int y){ //b)
  for(int i=0; i<x; i++)
     for(int j=0; j<y;j++)
       mas[i][j]=rand()%100;
  }
long **sum(long **mas1,long **mas2,int x1,int y1,int x2,int y2){ //
    long **mas=NULL;
    mas=new long *[x1];
    for (int r=0; r<x1; r++){
    mas[r]=new long [y1];
    }
  for(int i=0;i<x1;i++)
   for(int j=0;j<y1;j++)
   mas[i][j] = mas1[i][j] + mas2[i][j];
  return mas;
}
long **p(long **mas1,long **mas2,int x1,int y1,int x2,int y2){
    long **mas=NULL;
    mas=new long *[x1];
    for (int r=0; r<x1; r++){
    mas[r]=new long [y2];
    }
    for(int i=0;i<x1;i++)
     for(int j=0;j<y2;j++) {
       mas[i][j]=0;
      for (int k=0;k<y1;k++) mas[i][j]+=mas1[i][k]*mas2[k][j];
    }
   return mas;
}
void print(long **mas,int x,int y){
       for(int i=0; i<x; i++){
         for(int j=0; j<y; j++)
       cout<<mas[i][j]<<" ";
     cout<<endl;
}
}
 
 
void delet(long **mas,int x,int y){//d)
  mas = new long *[x];
    for (int i = 0; i < x; i++) {
      delete []mas[i];
  }
 delete []mas;
}
 
 
 
 
 
int main(){
    int n,m;
    long **A=NULL,**B =NULL,**C =NULL,**D =NULL;
    cin >>n;
    cin >>m;
    date(A,n,m);
    date(B,n,m);
    date(C,m,n);
    date(D,n,n);
 
    ran(A,n,m);
    ran(B,n,m);
    ran(C,m,n);
    ran(D,n,n);
    cout<<endl<<endl<<"Input MATRIX"<<endl<<endl;
    print(A,n,m);
    cout<< endl;
    print(B,n,m);
    cout<<endl;
    print(C,m,n);
    cout<<endl;
    print(D,n,n);
    cout<<endl;
 
 
 
 
    cout<<endl<<endl<<"Output MATRIX"<<endl<<endl;
    print(p(sum(p(A,B,n,m,m,n),p(C,C,n,n,n,n), n, n,n,n), sum(A,D, n, m,n,m),n,n,n,m),n,m);
    cout<<endl;
 
    cout<< endl;
 
    delet(A,n,m);
    delet(B,n,m);
    delet(C,m,n);
    delet(D,n,n);
    getch();
    return 0;
}
Вот само условие :
Задание. Написать функции для работы с двумерными матрицами целых чисел типа long.
а) динамическое выделение памяти под матрицу;
б) заполнение матрицы с помощью датчика псевдослучайных чисел;
в) сложение двух матриц;
г) умножение двух матриц;
д) освобождение динамически выделенной памяти;
е) печать матрицы в виде строк на экране.
В качестве параметров внутрь функций надо передавать двойные указатели на параметры – матрицы, а также размеры этих матриц.
В основной функции main должны быть объявлены двойные указатели (для хранения матриц), а затем при помощи вызовов приготовленных функций найти требуемый результат. Должны быть напечатаны исходные матрицы и результирующая матрица. Размеры матриц должны вводиться в качестве переменных в начале работы программы.

Вариант 1. ; A(n*m), B(m*n), C(n*n), D(n*m)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 21:43     Не хочет работать Rand
Посмотрите здесь:

Как работать с функцией rand() C++
пример из книги не хочет работать. C++
C++ strtok в си++ не хочет работать
не хочет работать код(((( C++
C++ Посогите с прогой работать не хочет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
14.03.2011, 22:28     Не хочет работать Rand #2
Можно несклько изменить фукцию date
C
1
2
3
4
5
6
7
8
long ** date(int x, int y){ //a)
    long **mas;
    mas = new long*[x];
    for (int i = 0; i < x; i++) {
        mas[i] = new long [y];
    }
    return mas;
}
И в main использвать так:
C
1
2
3
4
    A = date(n,m);
    B = date(n,m);
    C = date(m,n);
    D = date(n,n);
А передать таким обазом указатель на двумерный массив(которого еще не существует кстати) нельзя.
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
14.03.2011, 22:48  [ТС]     Не хочет работать Rand #3
Спасибо , теперь только она через некоторое время вылетает.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.03.2011, 02:06     Не хочет работать Rand #4
C++
1
2
3
4
5
6
7
8
void date(long ***p, int x, int y)
{
    long **mas = new long *[x];
 
    for (int i = 0; i < x; i++)
        mas[i] = new long [y];
    *p = mas; 
}
C++
1
date(&A, n, m);
в C++ можно ещё через ссылки
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
15.03.2011, 07:32  [ТС]     Не хочет работать Rand #5
Спасибо,столкнулся еще с одной проблемой , не правильное освобождение динамически выделенной памяти в этих строках:
C++
1
print(p(sum(p(A,B,n,m,m,n),p(C,C,n,n,n,n), n, n,n,n), sum(A,D, n, m,n,m),n,n,n,m),n,m);
Пробовал сделать еще один массив и вычислять через него, т.е. добавил эти строки:
C++
1
2
3
4
5
6
7
8
9
10
long **K=NULL;
       date(K,n,m);
         K=sum(p(A,B,n,m,m,n);//присвою значение К, значение суммы А и В
         //так как В нигде больше не встречается присвою значение суммы двух С
         B=p(C,C,n,n,n,n);
         C=p(K,B,n,n,n,n);// больше С нигде не встречается присвоим ей значение K и В
         // ну и так далее 
         K=sum(A,D, n, m,n,m);
         B=p(C,K,n,n,n,m);
       delet(K,n,m);//освобождение памяти в К
print(B, n,m);// выведем значение
Программа работает в таком случае через раз , запинаясь на
C++
1
B=p(C,K,n,n,n,m);
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.03.2011, 10:06     Не хочет работать Rand #6
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
#include <iostream>
#include <cstdlib>
#include <ctime>
    
int ** new_matrix(int rows, int columns){
    int ** m = new int * [ rows ];
    for ( int i = 0; i < rows; ++i )
        m[i] = new int [ columns ];
    return m;
}
 
int ** fill_matrix(int ** m, int rows, int columns){
    for ( int i = 0; i < rows; ++i )
        for ( int j = 0; j < columns; ++j )
            m[i][j] = rand () % 10;
    return m;
}
 
int ** dump_matrix(int ** m, int rows, int columns){
    for ( int i = 0; i < rows; ++i )
        for ( int j = 0; j < columns; ++j )
            std::cout << m[i][j] << ( j < columns - 1 ? ' ' : '\n' );
    return m;
}
 
void delete_matrix(int ** m, int rows){
    for ( int i = 0; i < rows; ++i )
        delete [] m[i];
    delete [] m;
}
 
int main(){
    int r = 4, c = 5;
    
    srand(time(NULL));
    delete_matrix(dump_matrix(fill_matrix(new_matrix(r, c), r, c), r, c), r); // гы :)
    
    std::cout << std::endl;
    return 0;
}
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
19.03.2011, 01:41  [ТС]     Не хочет работать Rand #7
Все всем огромное спасибо , разобрался и реализовал таким образом :
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
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
using namespace std;
long ** date(long **mas, int x, int y){ //a)
        mas = new long* [x];
        for (int i = 0; i < x; i++) 
                mas[i] = new long [y];
        for(int i=0;i<x;i++)
          for(int j=0;j<y;j++)
              mas[i][j] = 0;
        return mas;
}
void ran(long **mas,int x,int y){ //b)
  for(int i=0; i<x; i++)
     for(int j=0; j<y;j++)
           mas[i][j]=rand()%100;
  }
void delet(long **&mas,int x,int y){//d)
        for (int i = 0; i < x; i++) 
      delete [](mas[i]);
 delete []mas;
 mas=0;
}
void print(long **mas,int x,int y){
       for(int i=0; i<x; i++){
             for(int j=0; j<y; j++)
           cout<<mas[i][j]<<"\t";
         cout<<endl;
}
}
 
 
long **sum(long **mas1,long **mas2,int x1,int y1,int x2,int y2){ //
if((x1!=x2)||(y1!=y2)){
        cout << "Error 403 :D,PA3MEPHOCTb MATRIXS HE BEPHA";
    return 0;}
    long **mas=NULL;
    mas=date(mas,x1,y1);
    for(int i=0;i<x1;i++)
   for(int j=0;j<y1;j++)
   mas[i][j] = mas1[i][j] + mas2[i][j];
  return mas;
}
long** p(long **mas1,long **mas2,int x1,int y1,int x2,int y2){
    if(y1!=x2){
     cout<<"Error 404 :D,PA3MEPHOCTb MATRIXS HE BEPHA";
     return 0;
    }
        long **mas=NULL;
        mas=date(mas,x1,y2);
     for(int i=0;i<x1;i++)
     for(int j=0;j<y2;j++) 
      for (int k=0;k<y1;k++) 
          mas[i][j]+=mas1[i][k]*mas2[k][j];
   
     return mas;
}
 
 
 
int main(){
        int n,m;
        long **A=NULL,**B =NULL,**C =NULL,**D =NULL,**E=NULL,**F=NULL,**G=NULL,**H=NULL,**I=NULL, **J = NULL;
        cout <<"Введите размерности для матриц:\n\t\t\t\tn=";  
        cin >> n;
        cout << "\t\t\t\tm=";
        cin >>m;
        cout << endl;
        A = date(A,n,m);
        B = date(B,m,n);
        C = date(C,n,n);
        D = date(D,n,m);
 
        ran(A,n,m);
        ran(B,m,n);
        ran(C,n,n);
        ran(D,n,m);
        cout<<endl<<endl<<"Input MATRIX"<<endl<<endl;
        print(A,n,m);
        cout<< endl<<endl;
        print(B,m,n);
        cout<<endl<<endl;
        print(C,n,n);
        cout<<endl<<endl;
        print(D,n,m);
        cout<<endl<<endl;
        
        cout<<endl<<endl<<"Output MATRIX :"<<endl<<endl;
        cout<<"\n A*B: \n";
        E = p(A,B,n,m,m,n);
        if(!E){
        cout << "Sorry, but the further calculations are not possible. We stop program work...";
        return -3;} 
        print(E,n,n);
        getch();
 
        cout<<"\n C*C: \n";
        F = p(C,C,n,n,n,n);
        if(!F){
        cout << "Sorry, but the further calculations are not possible. We stop program work...";
        return -4;} 
        print(F,n,n);
        getch();
        
        cout<<"\n A*B + C*C: \n";
        G = sum(E,F,n,n,n,n);
        if(!G){
        cout << "Sorry, but the further calculations are not possible. We stop program work...";
        return -5;} 
        print(G,n,n);
        getch();
 
        cout<<"\n A + D: \n";
        H = sum(A,D,n,m,n,m);
        if(!H){
        cout << "Sorry, but the further calculations are not possible. We stop program work...";
        return -6;} 
        print(H,n,m);
        getch();
        
        cout<<"\n (A*B + C*C)*(A + D): \n";
        I = p(G,H,n,n,n,m);
        if(!I){
        cout << "Sorry, but the further calculations are not possible. We stop program work...";
        return -7;} 
        print(I,n,m);
        getch();
        
    
        delet(A,n,m);
        delet(B,m,n);
        delet(C,n,n);
        delet(D,n,m);
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2011, 02:03     Не хочет работать Rand
Еще ссылки по теме:

C++ Не хочет работать htonl
C++ Функция ну никак не хочет работать
Почему не хочет работать код? C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.03.2011, 02:03     Не хочет работать Rand #8
easybudda,

Не по теме:

C++
1
delete_matrix(dump_matrix(fill_matrix(new_matrix(r, c), r, c), r, c), r); // гы :)
Да, Вы, батенька, извращенец)))

Yandex
Объявления
19.03.2011, 02:03     Не хочет работать Rand
Ответ Создать тему
Опции темы

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