Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2014, 21:03   #1
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
Вопрос В середине программы срабатывает конструктор, но не должен. Изза этого неправильная реализация программы

Вобще задание звучит так:
Перегрузка операторов.
ЗАДАНИЕ: М2 = М1-V - из М1 удалить строки, сумма элементов которых больше суммы элементов В. где V-массив, М1 и М2-матрицы.
а бок в том, что почему-то начинает работать конструктор после вывода и нахождения строк матриц и изза этого выводится неправильное решение .. непойму Где намудрила , и как правильно убрать этот конструктор из середины проги, чтоб все работало.
помогите разобраться пожалуйста
Код:
#include<stdio.h>
#include<iostream>/*zagolovochnij fajl s klassami, funktsijami i peremennimi dlja organizacii vvoda-vivoda v jazike programmirovaniya C++*/
#include <stdlib.h>
using namespace std;/*ob'javlenie prostranstva imen  std.*/

class massiv
        { float *a; int stroka; int n;
         public: float sum1;
         massiv();
         void vvod();/*vvod elementov*/
         void vivod();
         void sum_el();
         void vivod_stroka();
         
         ~massiv(){delete[]a; puts("rabotal destryktor\n");}    /*{puts("rabotal destryktor massiva\n")*/;
         };
 //==============================================//        
  massiv::massiv()
    {printf("\nvvedite razmer massiva n: ");
     scanf("%d",&n);
     puts("\nrabotal konstruktor massiva\n");    
    }  
    
//==============================================//    
  void massiv::vvod()/*vvod elementov*/
    {a=new float[n];
     for(int i=0;i<n;i++)
      {*(a+i)=rand() % 101 - 50;printf("%3.2f ", *(a+i));
      }/*ot -50 do 50  ili  rand() % 201 - 100 ot -100 do 100 */
    } 
  
//==============================================//        
  void massiv::sum_el()
    {sum1=0;/*snachala summa v stroke=0*/
     for(int i=0;i<n;i++)/*idem po strokam*/
      {sum1+=*(a+i);}/*summiruyem yeye elementy*/
    }
//==============================================//       
  void massiv::vivod_stroka()
    {printf("\nsumma elementov massiva= %3.2f",sum1); printf("\n");}

//========================================//==============================================//======//  


class matrica
        { float *x; int n,m; 
          public:
          float sum2; int stroka; float *b;int kol_str;
          matrica(); 
          void vvod();
          void vivod(); 
          void sum_el();
          void vivod_stroka();
          
          matrica operator-(massiv &mas);
           void reshenie();
          ~matrica(){delete[]x; puts("rabotal destryktor matrici\n");}                
        };
//==============================================//     
  matrica::matrica()
    {printf("\nvvedite razmernost n*m: ");
     scanf("%d %d",&n,&m);
     puts("\nrabotal konstruktor matrici\n");    
    } 
//==============================================//    
  void matrica:: vvod()    
    {
    x=new float [n*m]; 
     for(int i=0;i<n;i++)
     for(int j=0;j<m;j++)
      *(x+i*m+j)=rand() % 101 - 50;
    }
//==============================================//
  void matrica::vivod()/*vivodit matrici na ekran*/
    {printf("\nmatrica:\n"); 
     for(int i=0; i<n; i++)
     {for(int j=0;j<m;j++)
       cout<<*(x+i*m+j)<< " ";cout << "\n";}
    }
//==============================================//    
  void matrica::sum_el()
    { kol_str=0;
      for(int i=0;i<n;i++)/*idem po strokam*/
      {sum2=0;/*snachala summa v stroke=0*/
      for(int j=0;j<m;j++)/*idem po stroke*/
       sum2+=*(x+i*m+j);/*summiruyem ee elementy*/
      stroka=i+1; kol_str++;
      printf("\nsumma= %3.2f v stroke %d ",sum2, stroka); }printf("\n");
      printf("koli4estvo strok novoj matrici = %d",kol_str);printf("\n");
    } 
 /*----------------------------------------------------------------*/
matrica matrica::operator-(massiv &p)
{
    matrica rez;
 
    printf("Rabotaet minus\n");
    rez.x=new float [kol_str*m];/*Videlim pamjat' dlja rezyltiryjywej  matrici*/
    if (sum2<p.sum1)        /*esli summi strok po matrice men'we summi massiva*/
    {for (int i=0; i<kol_str; i++)  /*zapiwem stroki v rezyltiryjywyjy  matricy*/
     for(int j=0;j<m;j++)
  rez.x=(x+i*m+j);
     }
     return rez;
}

void matrica::reshenie()/*vivod rezyltiryjywej  matrici na ekran*/
{for(int i=0;i<n;i++)
  {cout<<"\n" ;
   for(int j=0;j<m;j++) 
    cout<< *(x+i*m+j) <<"  "; 
  }
} 


int main()
{
massiv V;
V.vvod();
V.sum_el();
V.vivod_stroka();
system("pause");  
  
matrica A;
A.vvod();
A.vivod();
A.sum_el();

matrica rez = A - V;
rez.reshenie(); 

printf("\n");
system("pause"); 
}

Последний раз редактировалось lisica198808; 30.04.2014 в 21:06.
lisica198808 вне форума Ответить с цитированием
Старый 30.04.2014, 22:06   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Просто убери запрос размерности матрицы из конструктора. Я уже писал об этом в http://programmersforum.ru/showpost....07&postcount=8
Son Of Pain вне форума Ответить с цитированием
Старый 01.05.2014, 08:00   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ничего не хочу сказать плохого, но не поймите меня правильно. Из-за, пишется через дефис .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неправильная работа программы... fkty Помощь студентам 4 05.06.2013 16:20
Не срабатывает макрос запуска программы Nicolas_46 Microsoft Office Excel 17 16.02.2013 17:31
Функционал программы должен быть реализован как класс, размещенный в отдельном модуле. Сейвс Помощь студентам 0 29.02.2012 10:12
где можно взять исходник этого программы gabiboi БД в Delphi 16 06.02.2012 10:42
неправильная работа программы на delphi руслан1993 Помощь студентам 0 28.05.2011 12:13