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

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

Войти
Регистрация
Восстановить пароль
 
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
#1

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

14.03.2011, 21:43. Просмотров 591. Ответов 7
Метки нет (Все метки)

Здравствуйте, при выполнении лабораторной работы столкнулся с некоторыми трудностями:
При запуске программы она доходит до функции 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++
Помогите сделать так, чтобы rand() каждый раз выкидывал неповторяющиеся значения.

Не хочет работать - C++
#include&lt;time.h&gt; #include&lt;stdlib.h&gt; using namespace std; int main() { setlocale(0, &quot;&quot;); int a; int n; int i, j,count =...

Макрос не хочет работать - C++
Привет всем! У меня не компилируется проект, ошибка, мб кто-то подскажет что не так, т.к. задача простая, но от чего-то у меня она не...

не хочет работать код(((( - C++
#include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;limits.h&gt; #include &lt;locale.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; ...

strtok в си++ не хочет работать - C++
надо разбить строку на лексеммы, но почему-то не идет дело, не подскажете почему? У меня MasString содержит строки: Best scores: 1)...

Не хочет работать htonl - C++
На одной машине собирает проект нормально. На другой выдает ошибку error LNK2001: unresolved external symbol __imp__htonl@4 ругается...

Почему не хочет работать код? - C++
Если динамическое выделение памяти, то работать не хочет. #include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; int main()...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
4820 / 3240 / 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
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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++
Вот функция void OPEN_USER_COMMAND(System::String^ PolzCom) { System::String^ Temp = &quot;PrgBase\\&quot;; ...

Не хочет работать erase с remove_if - C++
Здравствуйте, у меня есть такой код: ships.erase(std::remove_if(ships.begin(), ships.end(), (Ship &amp; ship) { ship.isDead(); }),...

Не хочет работать cin.getline - C++
cin.getline(comp.processor, 50); Должно работать до энтера (в другом вижуале нормально работает), а в 2015 не работает без трех...

Посогите с прогой работать не хочет - C++
#include &quot;stdafx.h&quot; #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; #include &lt;stdlib.h&gt; void fmas(float q, int n, float a,...

пример из книги не хочет работать. - C++
Купил недавно книгу &quot;Освой самостоятельно с++ за 21 день&quot;. и наткнулся на проблему. программа, набранная из книги не работает. ...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
Ответ Создать тему
Опции темы

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