Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
1

Не хочет работать Rand

14.03.2011, 21:43. Просмотров 644. Ответов 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)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 21:43
Ответы с готовыми решениями:

Как работать с функцией rand()
Помогите сделать так, чтобы rand() каждый раз выкидывал неповторяющиеся...

Не хочет работать
#include&lt;time.h&gt; #include&lt;stdlib.h&gt; using namespace std; int main() {...

Не хочет работать htonl
На одной машине собирает проект нормально. На другой выдает ошибку error...

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

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

7
uggway
219 / 133 / 48
Регистрация: 12.04.2010
Сообщений: 248
14.03.2011, 22:28 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);
А передать таким обазом указатель на двумерный массив(которого еще не существует кстати) нельзя.
1
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
14.03.2011, 22:48  [ТС] 3
Спасибо , теперь только она через некоторое время вылетает.
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
15.03.2011, 02:06 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++ можно ещё через ссылки
1
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
15.03.2011, 07:32  [ТС] 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);
0
easybudda
Модератор
Эксперт CЭксперт С++
10105 / 6014 / 1507
Регистрация: 25.07.2009
Сообщений: 11,402
15.03.2011, 10:06 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;
}
2
sasha2x
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 7
19.03.2011, 01:41  [ТС] 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;
}
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.03.2011, 02:03 8
easybudda,

Не по теме:

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

1
19.03.2011, 02:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2011, 02:03

Код не хочет работать
Не могу понять,почему не работает. Помогите пожалуйста #include &lt;string&gt;...

strtok в си++ не хочет работать
надо разбить строку на лексеммы, но почему-то не идет дело, не подскажете...

Посогите с прогой работать не хочет
#include &quot;stdafx.h&quot; #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt;...


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

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

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