Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
1

Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения

25.03.2013, 03:13. Показов 1265. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста. Не понимаю в чем ошибка программы???
Вот задание.
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.

Код
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
 //oop-class-1lab
 #include <iostream>
 #include <stdlib.h>
 #include <math.h>
 using namespace std;
 
 class matrica   //class
 {
     int a;
     int **y;
     public:
      matrica(int, int);
     ~matrica();
 };        
             
  matrica::matrica (int stroka, int stolbec)    //konstruktor
  {
       int a=stroka;
       int b=stolbec;
          int **y=new int *[a];
             for (stroka=0; stroka<a; stroka++)
             y[stroka]=new int [b];
       for (stroka=0; stroka<a; stroka++)
       {
           for (stolbec=0; stolbec<b; stolbec++)
            y[stroka][stolbec]=(stroka+1)*(stolbec+1);
            cout<<y[stroka][stolbec]<<"  ";
       }
            cout<<endl<<endl; 
          
             
  }   
  
  matrica::~matrica()         //distruktor
  {
         for(int stroka=0; stroka<a; stroka++)
         delete[]y[stroka];
         delete[]y;
  }
   
      
 int main(int f)   //f main
 {
     int stroka=rand()%10;
     int stolbec=rand()%10;
     matrica rect(stroka,stolbec);
       cout << "stroka = ";
       cin >> stroka;
       cout << endl;
       cout << "stolbec = ";
       cin >> stolbec;
       cout << endl; 
     matrica rectb(stroka,stolbec);
     system("pause");
     return 0;
 }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2013, 03:13
Ответы с готовыми решениями:

Составить описание класса, обеспечивающего представление матрицы произвольного размера
Помогите, пожалуйста, разобраться с вылетом программы Задание: Составить описание класса,...

Составить описание класса, обеспечивающего представление матрицы произвольного размера
вариант1 Условие задачи: Составить описание класса, обеспечивающего представление матрицы...

Составить описание класса, обеспечивающего представление матрицы произвольного размера
Составить описание класса, обеспечивающего представление матрицы произвольного размера с...

Класс: Составить описание класса, обеспечивающего представление матрицы произвольного размера...
помогите пожалуйста написать программу, только чтобы она была как можно проще очень срочно ...

18
7 / 5 / 5
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 03:39 2
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
 //oop-class-1lab
 #include <iostream>
 #include <stdlib.h>
 #include <time.h>
 #include <math.h>
 using namespace std;
 
 class matrica   //class
 {
     int a;
     int **y;
     public:
      matrica(int, int);
     ~matrica();
 };
 
  matrica::matrica (int stroka, int stolbec)    //konstruktor
  {
       int a=stroka;
       int b=stolbec;
          int **y=new int *[a];
             for (stroka=0; stroka<a; stroka++)
             y[stroka]=new int [b];
       for (stroka=0; stroka<a; stroka++)
       {
           for (stolbec=0; stolbec<b; stolbec++)
           {
                y[stroka][stolbec]=(stroka+1)*(stolbec+1);
                cout<<y[stroka][stolbec]<<"  ";
           }
           cout<<endl<<endl;
       }
            
 
 
  }
 
  matrica::~matrica()         //distruktor
  {
         for(int stroka=0; stroka<a; stroka++)
         delete [] y[stroka];
         delete [] y;
  }
 
 
 int main(int f)   //f main
 {
     srand(time(0));
     int stroka=rand()%9+1;
     int stolbec=rand()%9+1;
     cout << "znachenia stroki i stolbca = " << stroka << "    " << stolbec << endl;
     matrica rect(stroka,stolbec);
       cout << "stroka = ";
       cin >> stroka;
       cout << endl;
       cout << "stolbec = ";
       cin >> stolbec;
       cout << endl;
     matrica rectb(stroka,stolbec);
 
     system("pause");
     return 0;
 }
0
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
25.03.2013, 03:43 3
наверное нужно контролировать значения числа строк и столбцов на равенство нулю при задании функцией rand()
0
7 / 5 / 5
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 03:46 4
SDev, исправил уже, правда как могу)
C++
1
int stroka=rand()%9+1;
0
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
25.03.2013, 04:03  [ТС] 5
Спасибо. Вы мне очень помогли
Только одно я не понял. Объясните пожалуйста почему (в моем коде) программа не выполняла
Цитата Сообщение от Vahram1995 Посмотреть сообщение
matrica rectb(stroka,stolbec);
команду?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 04:08 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
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
//oop-class-1lab
 #include <iostream>
 #include <stdlib.h>
 #include <math.h>
 #include <ctime>
 #include <iomanip>
 using namespace std;
 
 class matrica   //class
 {
     int a;
     int **y;
     public:
      matrica(int, int);
     ~matrica();
 };        
             
matrica::matrica (int stroka, int stolbec)    //konstruktor
 {
       a = stroka;
       int b = stolbec;
       
       y = new int*[a];
       for (stroka = 0; stroka < a; stroka++)
            y[stroka] = new int[b];
       
       for (stroka = 0; stroka < a; stroka++)
       {
           for (stolbec=0; stolbec<b; stolbec++)
           {
                y[stroka][stolbec]=(stroka+1)*(stolbec+1);
                cout << setw(3) << y[stroka][stolbec] << "  ";
            }
            cout << endl;
       }
       cout << endl;
        
 }   
  
  matrica::~matrica()         //distruktor
  {
         for(int stroka = 0; stroka < a; stroka++)
                delete [] y[stroka];
         delete [] y;
  }
   
      
int main(int f)   //f main
{
    srand(time(NULL));
 
    int stroka  = rand() % 9 + 1;
    int stolbec = rand() % 9 + 1;
    
    {matrica rect(stroka, stolbec);}
    
    cout << "stroka = ";
    cin >> stroka;
    cout << endl;
    cout << "stolbec = ";
    cin >> stolbec;
    cout << endl; 
    
    matrica rectb(stroka, stolbec);
     
    system("pause");
    return 0;
 }
Добавлено через 2 минуты
Ошибка вот здесь была:
C++
1
2
3
4
5
6
7
...
 matrica::matrica (int stroka, int stolbec)    //konstruktor
  {
       int a=stroka;
 ...
       int **y=new int *[a];
...
Создавались новые локальные переменные, вместо того, чтобы использовать поля класса.
1
7 / 5 / 5
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 04:13 7
Vahram1995, во первых были не правильно расставлены операторные скобки, поэтому косячил вывод..
во вторых вы забыли про такую штуку в рандоме как параметр этого рандома, при включении этой программы без добавления
C++
1
2
 #include <time.h>
srand(time(0));
у вас рандом будет генерить одни и те же значения
в-третьих то что как сказал SDev, возможен ранд = 0, это не возможно потому что матрица допустим с 0 строками или 0 столбцами есть пустота)))
На будущее выводите в консоль некоторые ключевые значения или пользуйтесь дебагером)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 04:15 8
Объект создавался, но поля не заполнялись. При выходе из программы вызывался деструктор, попытка освободить память через указатели, под которые память не выделялась.

Добавлено через 1 минуту
VaJI, вы почитайте, что я пишу. Повторяете те же ошибки, что и ТС. Рандом - это мелочи.
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 04:24 9
VaJI, результат работы вашего кода.
Миниатюры
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения  
0
7 / 5 / 5
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 04:36 10
alsav22, все, понял)
0
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
25.03.2013, 04:36  [ТС] 11
А у меня оно заработало
Миниатюры
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения  
0
7 / 5 / 5
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 04:43 12
Vahram1995, слушай alsav22 и радио - будешь самым умным у меня CodeBlocks тоже проглатывал, но ошибка очень грубая.

Добавлено через 2 минуты
обрати внимание что ты заново создаешь переменные в конструкторе, которые уже объявлены в классе -> начинает косячить деструктор.
0
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
25.03.2013, 04:58  [ТС] 13
Цитата Сообщение от alsav22 Посмотреть сообщение
cout << setw(3) << y[stroka][stolbec] << " ";
A что делает команда setw(3)?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:12 14
Цитата Сообщение от Vahram1995 Посмотреть сообщение
А у меня оно заработало
Ошибка выскакивает после нажатия на любую клавишу (при выходе из программы).

Цитата Сообщение от VaJI Посмотреть сообщение
у меня CodeBlocks тоже проглатывал
Это уже Code::Blocks.
Миниатюры
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения  
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:17 15
Это Dev C++.
Миниатюры
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:17 16
Цитата Сообщение от Vahram1995 Посмотреть сообщение
A что делает команда setw(3)?
Ширину поля при выводе задаёт. Для красоты...
0
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
25.03.2013, 05:26  [ТС] 17
А
Цитата Сообщение от alsav22 Посмотреть сообщение
int f
и скобки
Цитата Сообщение от alsav22 Посмотреть сообщение
{matrica rect(stroka, stolbec);}
какую функцию выполняют?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:29 18
Цитата Сообщение от Vahram1995 Посмотреть сообщение
int f
Это к вам вопрос, просто скопироваел с кода в первом посте. А скобки уберите, это я при отладке делал и забыл убрать ( при выходе за скобки деструктор первого объекта вызывается).
1
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
25.03.2013, 05:38  [ТС] 19
СПАСИБО ВАМ БОЛЬШЕ. Вы мне очень помогли
0
25.03.2013, 05:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2013, 05:38
Помогаю со студенческими работами здесь

Составить описание класса, обеспечивающего представление матрицы произвольного размера
Условие задачи: Составить описание класса, обеспечивающего представление матрицы произвольного...

Представление матрицы произвольного размера с возможностью изменения числа строк и столбцов
Помогите!!! Дальше не знаю как!!! Разработать алгоритм и программу обеспечивающую представление...

Как сделать рамку PictureBox-а с возможностью изменения размера?
Как возможно сделать рамки примерно как тут? Хоть одну как сделать подскажите? Облазил весь гугел.

Динамический массив с возможностью изменения размера без потери данных
Есть ли в c# поддержка динамических массивов аналога: Mass:Array of String; SetLength(Mass,...

Создать класс матриц, обеспечивающий размещение матриц произвольного размера
Не знаю правильно ли вообще написана прога(по заданию имею ввиду), но она вообще не работает, не...

Матрицы произвольного размера.
Помогите пожалуйста написать программу, которая будет работать с матрицами произвольного размера....


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru