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

Классы?! - C++

Восстановить пароль Регистрация
 
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
25.03.2013, 03:13     Классы?! #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
 //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;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 03:13     Классы?!
Посмотрите здесь:

C++ Классы
Классы C++
Классы C++
C++ классы с++
Классы в С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VaJI
 Аватар для VaJI
7 / 5 / 1
Регистрация: 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;
 }
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 88
25.03.2013, 03:43     Классы?! #3
наверное нужно контролировать значения числа строк и столбцов на равенство нулю при задании функцией rand()
VaJI
 Аватар для VaJI
7 / 5 / 1
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 03:46     Классы?! #4
SDev, исправил уже, правда как могу)
C++
1
int stroka=rand()%9+1;
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
25.03.2013, 04:03  [ТС]     Классы?! #5
Спасибо. Вы мне очень помогли
Только одно я не понял. Объясните пожалуйста почему (в моем коде) программа не выполняла
Цитата Сообщение от Vahram1995 Посмотреть сообщение
matrica rectb(stroka,stolbec);
команду?
alsav22
5282 / 4801 / 442
Регистрация: 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];
...
Создавались новые локальные переменные, вместо того, чтобы использовать поля класса.
VaJI
 Аватар для VaJI
7 / 5 / 1
Регистрация: 24.03.2013
Сообщений: 40
25.03.2013, 04:13     Классы?! #7
Vahram1995, во первых были не правильно расставлены операторные скобки, поэтому косячил вывод..
во вторых вы забыли про такую штуку в рандоме как параметр этого рандома, при включении этой программы без добавления
C++
1
2
 #include <time.h>
srand(time(0));
у вас рандом будет генерить одни и те же значения
в-третьих то что как сказал SDev, возможен ранд = 0, это не возможно потому что матрица допустим с 0 строками или 0 столбцами есть пустота)))
На будущее выводите в консоль некоторые ключевые значения или пользуйтесь дебагером)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 04:15     Классы?! #8
Объект создавался, но поля не заполнялись. При выходе из программы вызывался деструктор, попытка освободить память через указатели, под которые память не выделялась.

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

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

Цитата Сообщение от VaJI Посмотреть сообщение
у меня CodeBlocks тоже проглатывал
Это уже Code::Blocks.
Миниатюры
Классы?!  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:17     Классы?! #15
Это Dev C++.
Миниатюры
Классы?!  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:17     Классы?! #16
Цитата Сообщение от Vahram1995 Посмотреть сообщение
A что делает команда setw(3)?
Ширину поля при выводе задаёт. Для красоты...
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
25.03.2013, 05:26  [ТС]     Классы?! #17
А
Цитата Сообщение от alsav22 Посмотреть сообщение
int f
и скобки
Цитата Сообщение от alsav22 Посмотреть сообщение
{matrica rect(stroka, stolbec);}
какую функцию выполняют?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 05:29     Классы?! #18
Цитата Сообщение от Vahram1995 Посмотреть сообщение
int f
Это к вам вопрос, просто скопироваел с кода в первом посте. А скобки уберите, это я при отладке делал и забыл убрать ( при выходе за скобки деструктор первого объекта вызывается).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 05:38     Классы?!
Еще ссылки по теме:

C++ Классы в c++
C++ Классы
C++ Классы

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

Или воспользуйтесь поиском по форуму:
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
25.03.2013, 05:38  [ТС]     Классы?! #19
СПАСИБО ВАМ БОЛЬШЕ. Вы мне очень помогли
Yandex
Объявления
25.03.2013, 05:38     Классы?!
Ответ Создать тему
Опции темы

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