Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите решить (http://forum.oszone.net/showthread.php?t=93303)

elektra192 01-11-2007 21:50 671124

Помогите решить
 
Задание:
1.Дано класс,покажите,как прибавить дружескую функцию fr(),которая получает один параметр типа myclass и возвращает true,если значение num отрицательное,и false-в другом случае.
class myclass{
int num;
public:
myclass(int x){num=x}
};
Определите другую дружескую функцию,которая использует результат функции fr().Покажите использование.
2.Написать програму,в которой создать два класса plane и helicopter.При чем оба имееют как закрытую переменную скорость и грузоподьемность.Проверьте эти переменные и выведите результаты сравнения в виде строк.
3.Создать два класса матрица и вектор.Определить конструкторы,деструкторы.Определить функцию умножения вектора на матрицу как дружескую.Определить дружескую функцию умножения матрицы на матрицу.Определить дружескую функцию умножения числа на матрицу.Продемонстрировать роботу функций в програме.

Drongo 03-11-2007 21:25 672165

Значит 2-я задача готова... 1-ю тоже, но нужно откоментировать - откоментирую выложу... Завтра...))))))

Код:

// Программа Задачи №2, о Вертолёте и Планере---------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

class Helicopter{ // Класс Helicopter
public:
  Helicopter(int, int); // Конструктор Helicopter'a
  void Print() const { cout<<" Speed Helicopter: "<<Speed<<"\n"<<" Cargo Helicopter: "<<Cargo<<endl; };// Печать
private:
  int Speed;  // Скорость Вертолёта
  int Cargo;  // Грузоподъёмность Вертолёта
};
// -------------------------------------------------------------------------
class Planer{ // Класс Planer
public:
  Planer(int, int); // Конструктор Planer'a
  void Print() const { cout<<" Speed Planer: "<<Speed<<"\n"<<" Cargo Planer: "<<Cargo<<endl; };// Печать
private:
  int Speed; // Скорость Планера
  int Cargo; // Грузоподъёмность Планера
};

// Конструктор Helicopter----------------------------------------------------
Helicopter::Helicopter(int spd, int crg)
{
  Speed = (spd > 0) ? spd : 230;
  Cargo = (crg > 0) ? crg : 2000;
  cout<<" Inizialization... 'Helicopter'\n";
}
// Конструктор Planer---------------------------------------------------------
Planer::Planer(int spd, int crg)
{
  Speed = (spd > 0) ? spd : 230;
  Cargo = (crg > 0) ? crg : 1535;
  cout<<" Inizialization... 'Planer'\n\n";
}
// Выполнение программы------------------------------------------------------
int main()
{
  int z;
  Helicopter hel(21, 500); // Объект класса Helicopter, со своими значениями
  Planer plnr(53, 458);    // Объект класса Planer, со своими значениями

  hel.Print(); // Вывод данных объекта класса Helicopter
  cout<<endl;  // Пустая строка, для читабельности
  plnr.Print(); // Вывод данных объекта класса Planer

  cin>>z;
  return 0;
}
//-------------------------------------------------------------------


elektra192 04-11-2007 00:24 672242

Спасибо...каким компилятором можна компилировать???и если можна файл выложы.... :) :)

Drongo 04-11-2007 17:28 672542

Borland C++ Builder 6 делал...

Drongo 05-11-2007 18:58 673118

Вот 1 задача, а вот о Матрицах, сам бы хотел увидеть правильное решение, особенно об умножении Вектора на Матрицу... И описание класса Вектор... Тем не менее я попробую решить,
Умножение Матрицы на Матрицу
Умножение Матрицы на Число

А вы раскритикуйте мой код, хотя я и сам понимаю что решил по-дилетантски, но я пробую решить, только в этом вопросе нет соответсвующих знаний, в следующий раз я выложу половину решения 3-го задания...


Код:

Код:

// Программа Задачи №1, о Функциях друзьях----------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

class MyClass{ // Класс MyClass
  friend bool fr(const MyClass &mClass); // Функция друг, принимает ссылку на объект класс MyClass
  friend void printResult(const MyClass &mClass); // Функция друг, принимает ссылку на объект класс MyClass
public:
  MyClass(int x) { num = x; }; // Конструктор
private:
  int num; // Число....
};

// Булевая функция, если число положительное вернуть - true, если отрицательное - false-------
bool fr(const MyClass &mClass)
{
  return (mClass.num > 0) ? true : false;
}
// Печать результата, используя результат функции fr(const MyClass & mClass)--------------------------
void printResult(const MyClass &mClass)
{
  if(true == fr(mClass.num)) // явное сравнение с возвращаемым результатом - true
    cout<<" Num: "<<mClass.num<<".  Number Positiv"<<endl;
  else if(false == fr(mClass.num)) // явное сравнение с возвращаемым результатом - false
    cout<<" Num: "<<mClass.num<<".  Number Negativ"<<endl;
}
// Выполнение программы-------------------------------------------------------------------------
int main()
{
  int z;
  MyClass MC_1(-8); // Объект с отрицательным аргументом
  MyClass MC_2(10); // Объект с положительным аргументом

  printResult(MC_1); // Вызов функции проверки для объекта MC_1
  printResult(MC_2); // Вызов функции проверки для объекта MC_2

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


Drongo 06-11-2007 17:57 673722

Решил часть 3-й задачи... Пожалуйста, раскритикуйте мой код... Приму любые дельные замечания..
Кроме того хочу узнать, посоветуйте, как решается данная задачка, если можно попунктно, например: шаг 1... шаг 2... шаг 3... и т.д... от чего отталкиваться, приму любые ссылки. Но больше всего хочу узнать, как определить класс "Вектор" и умножить Вектор на Матрицу... Очень бы хотелось увидеть код, выполняющий это умножение, а не сухое определение Вектора... Поскольку считаю для себя проблему в том, что я не могу определить класс "Вектор"... Передаю файл, который у меня получился... Так что критикуйте, как пожелает сердце, ведь в споре рождается истина, всем благодарен, за советы и помощь, кто откликнется!
Код:

//---------------------------------------------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip>
using std::setw;

class Matrix{ // Класс Matrix
  // Дружеская функция умножения Матрицы на Матрицу
  friend void MultiplicationMatrix(Matrix &mMatrix);
  // Дружеская функция умножения Матрицы на Число
  friend void NumberMultiplicationMatrix(Matrix &mMatrix, int);
public:
  Matrix(int height = 1, int width = 1); // Конструктор с аргументами по умолчанию
  void setMatrix(int height, int width); // Установка размера матрицы
  void UserFromKeyboards(); // Ввод данных с клавиатуры
  void PrintTwoMatrix(); // Печать Значений Матриц
  ~Matrix(); // Деструктор
private:
  int *Matrix_1; // Указатель на целое (Первая Матрица)
  int *Matrix_2; // Указатель на целое (Вторая Матрица)
  int SizeMatrix; // Размер Матрицы
  int row; // Сколько строк в Матрице
  int column;  // Сколько столбцов в Матрице
};
// Конструктор--------------------------------------------------------------
Matrix::Matrix(int height, int width)
{
  setMatrix(height, width);
}
// Установка размера Матрицы------------------------------------------------
void Matrix::setMatrix(int h, int w)
{
  SizeMatrix = h * w;
}
// Ввод данных с клавиатуры-------------------------------------------------
void Matrix::UserFromKeyboards()
{
  int counter_1 = 1,
  counter_2 = 1;

  cout<<" Enter size Column: ";
  cin>>column;                // Столбцы
  cout<<" Enter size Row: ";
  cin>>row;                    // Строки

  setMatrix(row, column); // Определение размера Матрицы ( row * column )
  Matrix_1 = new int[SizeMatrix]; // Матрица 1 в виде одномерного массива
  Matrix_2 = new int[SizeMatrix]; // Матрица 2 в виде одномерного массива

  // Циклический ввод в 1-ю Матрицу
  for(int i = 0; i < SizeMatrix; i++){
      cout<<" Enter value in 'Matrix_1', position "<<counter_1++<<" Value: ";
      cin>>Matrix_1[i];
    }

  cout<<endl; // Пустая строка (для читабельности)

  // Циклический ввод в 2-ю Матрицу
  for(int j = 0; j < SizeMatrix; j++){
      cout<<" Enter value in 'Matrix_2', position "<<counter_2++<<" Value: ";
      cin>>Matrix_2[j];
    }
}
// Вывод элементов обоих Матриц на экран------------------------------------
void Matrix::PrintTwoMatrix()
{
  int control_1 = 0, // Для вывода знака '|' в начале 1-й Матрицы
      control_2 = 0, // Для вывода знака '|' в начале 2-й Матрицы
      counColumn_1 = column, // Для вывода знака '|' в конце 1-й Матрицы
      counColumn_2 = column; // Для вывода знака '|' в конце 2-й Матрицы
     
  // Вывод на экран 1-й Матрицы
  for(int j = 0; j < SizeMatrix; j++){
      if(control_1 == 0){
        cout<<'|';
        control_1++;
      }
      cout<<setw(7)<<Matrix_1[j];
      if(j == counColumn_1-1){
        counColumn_1 += column;
        cout<<'|';
        control_1 = 0;
        cout<<endl;
      }
    }

  cout<<"\n\n";  // Пару пустых строк (для читабельности)

  // Вывод на экран 2-й Матрицы
  for(int jj = 0; jj < SizeMatrix; jj++){
      if(control_2 == 0){
        cout<<'|';
        control_2++;
      }
      cout<<setw(7)<<Matrix_2[jj];
      if(jj == counColumn_2-1){
        counColumn_2 += column;
        cout<<'|';
        control_2 = 0;
        cout<<endl;
      }
    }
}
// Деструктор---------------------------------------------------------------
Matrix::~Matrix()
{
  cout<<"Destructor"<<endl;
}
// Дружеская функция умножения Матрицы на Матрицу. В качестве---------------
// хранения результатов используется 2-я Матрица----------------------------
void MultiplicationMatrix(Matrix &mMatrix)
{
  int control = 0,
      counColumn = mMatrix.column;

  // Умножение Матрицы на Матрицу.
  // Циклическое умножение элемента 1-й Матрицы на элемент 2-й Матрицы
  for(int i = 0; i < mMatrix.SizeMatrix; i++)
      mMatrix.Matrix_2[i] *= mMatrix.Matrix_1[i];// * mMatrix.Matrix_2[i];

  cout<<"\n\n Result Multiplication...\n\n";

  // Вывод результата умножения Матрицы на Матрицу
  for(int j = 0; j < mMatrix.SizeMatrix; j++){
      if(control == 0){
        cout<<'|';
        control++;
      }
      cout<<setw(7)<<mMatrix.Matrix_2[j];
      if(j == counColumn-1){
        counColumn += mMatrix.column;
        cout<<'|';
        control = 0;
        cout<<endl;
      }
    }
}
// Дружеская функция умножения Матрицы на Число. В качестве------------------
// хранения результатов используется 2-я Матрица-----------------------------
void NumberMultiplicationMatrix(Matrix &mMatrix, int number)
{
  int control = 0,
      counColumn = mMatrix.column;

  // Умножение Матрицы на Число.
  // Циклическое умножение элемента 1-й Матрицы на элемент 2-й Матрицы
  for(int i = 0; i < mMatrix.SizeMatrix; i++)
      mMatrix.Matrix_2[i] = number * mMatrix.Matrix_1[i];

  cout<<"\n\n Result Multiplication Number "<<number<<" 'Matrix_1'\n\n";

  // Вывод результата умножения Матрицы на Число
  for(int j = 0; j < mMatrix.SizeMatrix; j++){
      if(control == 0){
        cout<<'|';
        control++;
      }
      cout<<setw(7)<<mMatrix.Matrix_2[j];
      if(j == counColumn-1){
        counColumn += mMatrix.column;
        cout<<'|';
        control = 0;
        cout<<endl;
      }
    }
}
// Выполнение программы------------------------------------------------------
int main()
{
  int z, num;
  Matrix matrx_1;

  matrx_1.UserFromKeyboards(); // Ввод
  matrx_1.PrintTwoMatrix();    // Печать

  MultiplicationMatrix(matrx_1); // Функция умножения Матрицы на Матрицу
 
  // Предложение ввести Число на которое будет умножена 1-я Матрица
  cout<<"\n\n Enter Number Multiplication Matrix: ";
  cin>>num;
  cout<<endl;
  NumberMultiplicationMatrix(matrx_1, num); // Функция умножения Матрицы на Число

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


Drongo 06-11-2007 18:02 673729

Решённая задача о Матрицах (Код)
и
Или так

Drongo 06-11-2007 18:03 673730

Ребята, я чего то не могу отправить файл, нажал прикрепить, он загрузился, а дальше что делать - незнаю... Подскажите??

Drongo 14-11-2007 20:43 678926

Хлопцы, здоров! Вот тут в Сети нашёл, файл по Матрице и Вектору, но чего-то не доганяю... Там
Код:

#include
- пустые, вы б не могли, сказать какие нужно подключить?! И ещё, похоже там есть, в этой проге какая то синктактическая ошибка, но найти я её не могу... Если кто может помочь в этом буду рад, мне б разобраться в этом, очень хочу решить тую задачу... Файл прикрепляю, гляньте если не будет трудно... Подскажите великодушно :dont-know :dont-know

Drongo 14-11-2007 20:45 678927

Ещё один код решения Матрицы (Расскрыть код) :yes:
читать дальше »
Код:

// файл tmatr.cpp
#include <iostream.h>
//#include    // для setmem()
//#include
//#include

typedef unsigned char dim;

template  class Matrix {
typedef Matrix Vector;
private:
  VARTYPE *matr;      // указатель на массив матрицы
  dim m,n;      // размеры матрицы
public:

// конструкторы и деструкторы:
  Matrix() { matr=(VARTYPE*)0; m=n=0; }
  Matrix(dim,dim=1); // Обычный конструктор
  Matrix(const Matrix&); // Конструктор копирования
  ~Matrix() { delete [ ]matr; }

// доступ к элементам матрицы
  dim size_row() { return m; }  // число строк
  dim size_col() { return n; }  // число столбцов
  VARTYPE& operator() (dim x) const { return (*this)(x,0); } // элементу

// перегруженные операции и функции:
  Matrix& operator=(const Matrix&);
  Matrix& operator=(const VARTYPE&);
  Matrix operator^(int);  // возведение в степень
  Matrix operator!();      // транспонирование

  VARTYPE determ();  // определитель матрицы
  VARTYPE vmodul();  // модуль вектора

  Matrix& Gauss(dim,dim); // преобразование по Гауссу
                      // (для получ. обратной и единичной матрицы)
                      // (для получ. верхнетреугольной матрицы)
  Matrix  minor(dim,dim);  // возвращает указ. минор матрицы
  Vector  line(dim i)      // возвращает вектор-строку матрицы
        { return extract(1,n,i,0); }
  Vector  column(dim j)    // возвращает вектор-столбец матрицы
        { return extract(m,1,0,j); }
  VARTYPE& operator() (dim,dim) const;                  // доступ к
Matrix& operator<<=(const Matrix &A) { return newsize(A.m,A.n)=A;
}
                                  // безусловное приравнивание матриц
  Matrix& insert(const Matrix&, dim=0, dim=0); // вставить частьматрицы
  Matrix extract(dim, dim, dim=0, dim=0);          // извлечьчасть матрицы
  Matrix& newsize(dim, dim=1);                // установитьновые размеры
  void swap_line(dim, dim);                            //обмен строкамиматрицы
  void swap_column(dim, dim);                          // обмен столбцамиматрицы

  friend Matrix operator+(const Matrix&,const Matrix&);    //A-B
  friend Matrix operator-(const Matrix&,const Matrix&);    //A-B
  friend Matrix operator*(const Matrix&,const Matrix&);    //A*B
  friend Matrix operator*(const double&,const Matrix&);  //k*A
  friend Matrix operator*(const Matrix&, const double&); //A*k
  friend ostream& operator<<(ostream&,Matrix&);
                        // потоковый вывод матрицы
  friend int operator>>(istream&,Matrix&);
                        // потоковый ввод существ. матрицы
                        // 0 - без. ошибок, 1 - была ошибка

  dim read(ifstream&);      // файловое чтение и запись матрицы
  dim write(ofstream&);    // в ее внутреннем, двоичном представлении.
  friend VARTYPE operator %(const Matrix&,const Matrix&);

  //Функция ошибок
  void ERROR_MATRIX(dim) const;
};
// Реализация класса матриц
template
Matrix::Matrix(dim M, dim N)
 {
    m=M;
    n=N;
    matr=new VARTYPE[m*n];
    if(!matr) ERROR_MATRIX(1);
    setmem(matr,sizeof(VARTYPE)*m*n,0);
 }

template
Matrix::Matrix(const Matrix &M_Obj)  //Конструктор копирования
 {
  m=M_Obj.m;
  n=M_Obj.n;
  matr=new VARTYPE[m*n];
  if(!matr) ERROR_MATRIX(1);
  movmem(M_Obj.matr, matr, sizeof(VARTYPE)*m*n);
 }
template
Matrix& Matrix::operator=(const Matrix &M_Obj)
 {
  m=M_Obj.m;
  n=M_Obj.n;
  matr=new VARTYPE[m*n];
  if(!matr) ERROR_MATRIX(1);
  movmem(M_Obj.matr,matr,sizeof(VARTYPE)*m*n);
  return *this;
 }
//Диагональ?
template
Matrix& Matrix::operator=(const VARTYPE &f)
 {
  for(int i=0,j;i
Matrix Matrix::operator^(int q) // Степень
 {
  if (q>0)
      {
      for(Matrix M=*this; q>1; q--)
        M=M*(*this);
      return M;
      }
  if (q!=-1) ERROR_MATRIX(3);
  // вычисление обратной метoдом преобразований Гаусса
  if (n!=m)  ERROR_MATRIX(4);
  Matrix M(m,2*n);
  M.insert(*this);
  for(int i=0;i
Matrix Matrix::operator!()  // Транспозиция
 { Matrix A(n,m);
  for(int i=0, j; i
VARTYPE Matrix::determ() // рекурсивно находит определитель матрицы
 {
  if (n!=m) ERROR_MATRIX(4);

  if (n==1)
      return (*this)(0,0);

  for(int i=0; i M;
      M <<= *this;
      VARTYPE d=M(i,0)*(i%2?-1:1);
      return d*M.Gauss(i,0).minor(i,0).determ();
      }
  return 0.0;
 }
template
VARTYPE Matrix::vmodul()      // Модуль вектора
 {
  VARTYPE d=0;
  if (n!=1) ERROR_MATRIX(9);
  static Matrix M;
  M <<= *this;
  for(int i=0; i
Matrix& Matrix::Gauss(dim M, dim N)
 {
  Matrix& A=*this;
  if (!A(M,N))  ERROR_MATRIX(5);

  for(int i=0,j;i
Matrix Matrix::minor(dim M, dim N)    // возвращ. матрицу без
 {                                                // строки y и столбца x
    Matrix A(m-1,n-1);
    for(int i=0,in=0,j,jn;i  // вставка
Matrix& Matrix::insert(const Matrix &A, dim M, dim N)
 {
  if (M+A.m>m || N+A.n>n)  ERROR_MATRIX(6);
  for(int i=0, j; i  // извлечение
Matrix Matrix::extract(dim LM, dim LN, dim M, dim N)
 {
    if (M+LM>m || N+LN>n)  ERROR_MATRIX(7);
    Matrix A(LM,LN);
    for(int i=0, j; i
VARTYPE& Matrix::operator() (dim M, dim N) const
 { return *(matr+n*M+N); }

template
Matrix operator+(const Matrix &A, const
Matrix&B)
 {
  Matrix C=A;
  for(int i=0,j; i
Matrix operator-(const Matrix &A, const Matrix &B)
 {
  Matrix C=A;
  for(int i=0, j; i
Matrix operator*(const Matrix &A,const Matrix &B)
{
  Matrix C(A.m,B.n);

  if (A.n!=B.m)
  {
    if(A.m==3 && A.n==1 && B.m==3 && B.n==1)
    {
      C(0)=A(1)*B(2)-A(2)*B(1);
      C(1)=A(2)*B(0)-A(0)*B(2);
      C(2)=A(0)*B(1)-A(1)*B(0);
    }
    else
      A.ERROR_MATRIX(2);
  }
  else
  {
    for(int i=0,j,k;i//умножение числа на матрицу
Matrix operator*(const double &f,const Matrix &A)
 {
  Matrix B=A;
  for(int i=0,j;i// умножение матрицы на число
Matrix operator*(const Matrix &A, const double &f)
 {
  Matrix B=A;
  for(int i=0,j;i
Matrix& Matrix::newsize(dim M, dim N)
 { delete [] matr;
  m=M;
  n=N;
  if (N && M) { matr=new VARTYPE[m*n];
  if (!matr) ERROR_MATRIX(1);
      setmem(matr,sizeof(VARTYPE)*m*n,0); }
    else { m=n=0; matr=(VARTYPE*)0; }
  return *this;
 }

template
ostream& operator<<(ostream &out,Matrix &A)
 { for(int i=0,j;i
int operator>>(istream &inp,Matrix &A)
 { for(int i=0,j;i>A(i,j)) ) return 1;
  return 0;
 }
template
void Matrix::swap_line(dim L1, dim L2)
 {
  if (L1==L2)
    return;
  double b;
  for(int j=0;j
void Matrix::swap_column(dim C1, dim C2)
 {
  if (C1==C2)
    return;
  double b;
  for(int i=0;i
dim Matrix::read(ifstream &finp)
 { (finp.get(m)).get(n); delete []matr; matr=new VARTYPE[m*n];
      if(!matr) ERROR_MATRIX(1);
  setmem(matr,sizeof(VARTYPE)*m*n,0);
  finp.read((char *)matr,sizeof(VARTYPE)*m*n); return finp.fail();
 }
template
dim Matrix::write(ofstream &fout)
 { (fout.put(m)).put(n);
  (fout.write((char *)matr,sizeof(VARTYPE)*m*n))<
VARTYPE operator%(const Matrix &A, const Matrix&B)
 {
  if(A.n!=1 || B.n!=1) A.ERROR_MATRIX(9);
  if(A.m!=B.m) A.ERROR_MATRIX(0);
  VARTYPE scalarmul = 0;
  for(int i=0; i
void Matrix::ERROR_MATRIX(dim E) const
 { static char *message[] = {
      "Матрицы должны иметь одинаковую размерность",        //0
      "Не выделена память!",                                //1
      "Матрицы не согласованы для умножения",                //2
      "Степень должна быть больше нуля или -1",              //3
      "Матрица должна быть квадратной",                      //4
      "Нулевой ведущий элемент в преобразовании Гаусса",          //5
      "Вставка невозможна из-за перекрытия базовой матрицы", //6
      "Извлекаемая матрица выходит за границы базовой",      //7
      "Выход за границы. Попытка доступа к несущ. элементу", //8
      "Это не вектор!"};                                    //9
  cerr<<"ERROR: "<< message[E] << endl; exit(1);
 }
//----------------------------------------------------------------------------
                //  Демонстративно - тестирующая программа:
#include <iostream.h>
//#include
//#include
//#include "tmatr.cpp"
int main()
{
int z;
  clrscr();
  Matrix A(3,3), B(3,3), C(3,3);
  Matrix V(3),X(3),H(3),U(3);
  double d;
  A(0,0)=1.1; A(0,1)=2.2; A(0,2)=3.3;
  A(1,0)=2.4; A(1,1)=1.1; A(1,2)=4.4;
  A(2,0)=1.3; A(2,1)=2.1; A(2,2)=4.1;

  B(0,0)=2; B(0,1)=7; B(0,2)=2;
  B(1,0)=4; B(1,1)=8; B(1,2)=1;
  B(2,0)=6; B(2,1)=4; B(2,2)=1;

  V(0)=2.1; V(1)=3.31; V(2)=1.4;
  H(0)=1.1; H(1)=2.1; H(2)=3.1;

//******************************
  C = A + B;
  cout<<"A:\n"< D(3,3), E(3,3);

  D(0,0) = 1; D(0,1) = 2; D(0,2) = 3;
  D(1,0) = 2; D(1,1) = 5; D(1,2) = 6;
  D(2,0) = 7; D(2,1) = 3; D(2,2) = 9;

  ofstream fout("test.mtr");
  if(!fout){
      cout<<"file not open\n";
      return 1;
    }
  D.write(fout);
  fout.close();

  ifstream fin("test.mtr");
  if(!fin){
      cout<<"file not open\n";
      return 1;
    }

  E.read(fin);  //й су«їtЎ«ј уїсС

  cout<<"D:\n";
  cout<<"Finish!";
  cin>>z;
//-------------------------------------------------------------------------


Drongo 26-11-2007 19:27 685717

Таки решил, посмотрите пожалуйста код и расскритикуйте...
Код:

//3-я Задача... Создать два класса Матрица и Вектор.
// Определить конструкторы, деструкторы.
// Определить функцию умножения вектора на матрицу как дружескую.
// Определить дружескую функцию умножения матрицы на матрицу.
// Определить дружескую функцию умножения числа на матрицу.
// Продемонстрировать работу функций в програме.
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip.h>
using std::setw;

//******************************Класс Вектор***********************************/
class Vector{ // Класс Вектор
  friend class Matrix; // класс Вектор друг класса Матрица
  // Дружеская функция умножения Вектора на Матрицу. Принимает Матрицу, Вектор
  // на который умножается и Вектор, где будет храниться результат умножения
  friend void MultiplyVectorMatrix(Matrix &mMatrix, Vector &Vec2, Vector &Vec1);
public:
  Vector(int size = 1);      // конструктор по умолчанию
  void setSizeVector(int size); // Установка размера Вектора
  void setOrientationVector(); // Установка Вектора-столбца или Вектора-Строки. В столбец или в строку...
  void UserFromKeyboardsVector(); // Ввод значений Вектора с клавиатуры 
  bool getOrientationVector() { return Orient; }; // Возвращение ориентации Вектора
  int getSizeVector() { return SizeVector; }; // Возвращение размера Вектора 
  int &elementVector(int index) { return Vector[index]; } // Индексация. Для доступа к элементу Вектора
  void PrintVector(); // Печать значений Вектора
  ~Vector();        // деструктор
private:
  int *Vector;      // Указатель на целое.
  int  SizeVector;  // Размер Вектора
  bool Orient;      // Ориентация Вектора. true - Вертикально, false - Горизонатально...
};
//*******************************Класс Матрица*********************************/
class Matrix{ // Класс Matrix
  // Дружеская функция умножения Матрицы на Матрицу
  friend void MultiplicationMatrix(Matrix &mMatrix1, Matrix &mMatrix2, Matrix &mMatrix3);
  // Дружеская функция умножения Матрицы на Число
  friend void NumberMultiplicationMatrix(Matrix &mMatrix3, Matrix &mMatrix, int);
public:
  Matrix(int height = 1, int width = 1); // Конструктор с аргументами по умолчанию
  void setMatrix(int height, int width); // Установка размера матрицы
  void UserFromKeyboardsMatrix(); // Ввод данных Матрицы с клавиатуры
  int &elementMatrix(int index) { return Matrix[index]; } // Индексация. Для доступа к элементу Матрицы
  int getSizeMatrix() { return SizeMatrix; }; // Получить размер Матрицы
  int getSizeRow()    { return row; };  // Получить количество строк Матрицы
  int getSizeColumn() { return column; }; // Получить количество столбцов Матрицы
  void PrintMatrix(); // Печать Значений Матриц
  ~Matrix(); // Деструктор
private:
  int *Matrix; // Указатель на целое
  int SizeMatrix; // Размер Матрицы
  int row; // Сколько строк в Матрице
  int column;  // Сколько столбцов в Матрице
};
/*****************************************************************************/
// РЕАЛИЗАЦИЯ КЛАССА Matrix
/*****************************************************************************/
// Конструктор Матрицы--------------------------------------------------------
Matrix::Matrix(int height, int width)
{
  setMatrix(height, width);
}
// Установка размера Матрицы--------------------------------------------------
void Matrix::setMatrix(int h, int w)
{
  SizeMatrix = h * w;
  row = h;
  column = w;

  Matrix = new int [SizeMatrix];
  // Инициализация Матрицы нулями
  for(int i = 0; i < SizeMatrix; i++)
      Matrix[i] = 0;
}
// Ввод данных с клавиатуры, для Матрицы--------------------------------------
void Matrix::UserFromKeyboardsMatrix()
{
  int counter = 1; // Счётчик вводимого элемента Матрицы...
  static int countMatrix = 1;

  // Циклический ввод в Матрицу
  for(int i = 0; i < SizeMatrix; i++){
      cout<<" Enter value in "<<countMatrix<<" 'Matrix', position "<<counter++<<" Value: ";
      cin>>Matrix[i];
    }
    countMatrix++;
}
// Вывод элементов Матрицы на экран-------------------------------------------
void Matrix::PrintMatrix()
{
  int control = 0, // Для вывода знака '|' в начале Матрицы
      counColumn = column - 1; // Для вывода знака '|' в конце Матрицы

  cout<<"\n";  // Пару пустых строк (для читабельности)

  // Вывод на экран Матрицы
  for(int j = 0; j < SizeMatrix; j++){
      if(control == 0){
        cout<<'|';
        control++;
      }
      cout<<setw(7)<<Matrix[j];
      if(j == counColumn){
        counColumn += column;
        cout<<'|';
        control = 0;
        cout<<endl;
      }
    }
  // Вывод на экран символа '-' на всю ширину консоли, для читабельности...
  for(int i = 0; i < 80; i++)
      cout<<'-';
}
// Деструктор Матрицы---------------------------------------------------------
Matrix::~Matrix()
{
  delete[] Matrix;
  cout<<"Destructor"<<endl;
}
// Дружеская функция класса Matrix, умножения Матрицы на Матрицу. В качестве--
// хранения результатов используется 3-я Матрица------------------------------
void MultiplicationMatrix(Matrix &mMatrix1, Matrix &mMatrix2, Matrix &mMatrix3)
{
  // Умножение Матрицы на Матрицу.
  // Циклическое умножение элемента 1-й Матрицы на элемент 2-й Матрицы
  for(int i = 0; i < mMatrix3.getSizeMatrix(); i++)
      mMatrix3.Matrix[i] = mMatrix1.Matrix[i] * mMatrix2.Matrix[i];

  cout<<"\n Result Multiplication...\n";
}
// Дружеская функция класса Matrix, умножения Матрицы на Число. В качестве----
// хранения результатов используется 3-я Матрица------------------------------
void NumberMultiplicationMatrix(Matrix &mMatrix3, Matrix &mMatrix, int number)
{
  // Умножение Матрицы на Число.
  // Циклическое умножение элемента 1-й Матрицы на элемент 2-й Матрицы
  for(int i = 0; i < mMatrix3.getSizeMatrix(); i++)
      mMatrix3.Matrix[i] = number * mMatrix.Matrix[i];

  cout<<"\n Result Multiplication Number "<<"'"<<number<<"' to"<<" 'Matrix'\n";
}
/*****************************************************************************/
/*****************************************************************************/
// РЕАЛИЗАЦИЯ КЛАССА Vector 
/*****************************************************************************/
/*****************************************************************************/
// Дружеская функция класса Vector, умножения Матрицы на Вектор. В качестве---
// хранения результатов используется 2-ой Вектор------------------------------
void MultiplyVectorMatrix(Matrix &mMatrix1, Vector &Vec2, Vector &Vec1)
{
  int iMat = 0,
      jMat = 0;

  if(Vec1.Orient){ // Умножение Вектора-столбца на Матрицу
    for(int i = 0; i < Vec1.getSizeVector(); i++){
        jMat += mMatrix1.getSizeColumn();
        for(; iMat < jMat; iMat++)
          Vec2.Vector[i] += mMatrix1.elementMatrix(iMat) * Vec1.Vector[i];
      }
    cout<<" Result Multiply Vector-Column to a Matrix..."<<endl;
    }
  else if(!Vec1.Orient){ // Умножение Вектора-строки на Матрицу
    for(int i = 0; i < mMatrix1.getSizeRow(); i++){
        jMat += mMatrix1.getSizeColumn();
        for(int j = 0; iMat < jMat; iMat++, j++)
          Vec2.Vector[i] += mMatrix1.elementMatrix(iMat) * Vec1.Vector[j];
      }
    cout<<" Result Multiply Vector-String to a Matrix..."<<endl;
    }
}
// Деструктор Вектора---------------------------------------------------------
Vector::~Vector()
{
    delete[] Vector;
    cout<<" Dectructor Vector"<<endl;
}
// Ввод данных с клавиатуры для Вектора---------------------------------------
void Vector::UserFromKeyboardsVector()
{
  int counter = 1; // Счётчик вводимого элемента Вектора...

  // Циклический ввод в Вектор
  for(int i = 0; i < SizeVector; i++){
      cout<<" Enter value in 'Vector', position "<<counter++<<" Value: ";
      cin>>Vector[i];
    }
}
// Конструктор Вектора--------------------------------------------------------
Vector::Vector(int size)
{
  setSizeVector(size); // Функция установки размера Вектора
}
// Установка размера Вектора--------------------------------------------------
void Vector::setSizeVector(int size)
{
  SizeVector = (size >= 0) ? size : 1;
  // Выделение Вектора под заданный размер и инициализация нулями...
  Vector = new int[size];
  for(int i = 0; i < size; i++)
      Vector[i] = 0;
}
// Вывод элементов Вектора на экран-------------------------------------------
void Vector::PrintVector()
{
    cout<<"\n";
    if(!getOrientationVector()){
      cout<<"| ";
      for(int a = 0; a < SizeVector; a++){
        cout<<setw(7)<<Vector[a];
        if(a == SizeVector - 1)
            cout<<"|";
        }
      cout<<"\n\n Vector-String"<<endl;
    }
    else if(getOrientationVector()) {
      for(int i = 0; i < SizeVector; i++){
        cout<<"| "<<setw(7)<<Vector[i]<<"|"<<endl;
        }
      cout<<"\n Vector-Column"<<endl;
    }

    for(int j = 0; j < 80; j++)
      cout<<'-';
}
// Установка ориентации Вектора. Вертикаль - true, Горизонталь - false--------
// 1 - Ветрикально, 2 - Горизонтально-----------------------------------------
void Vector::setOrientationVector()
{
    int orientation;
    cout<<" Enter number '1' Vector-Stolbez or number '2' Vector-Stroka [1/2]: ";
    cin>>orientation;
    // Проверка, чтобы введённое число было или 1 или 2...
    while(orientation <= 0 || orientation >= 3){
      cout<<" Enter number '1' Vector-Stolbez or number '2' Vector-Stroka [1/2]: ";
      cin>>orientation;
    }

    if(orientation == 1)
        Orient = true;  // Вертикаль - true
    else if(orientation == 2)
        Orient = false; // Горизонталь - false
}
// Демонстрация программы. Тестирование========================================
int main()
{
  int feature, // Выбор умножаемой Матрицы, 1-я или 2-я
      num,  //  Число, на которое умножается выбранная Матрица
      matrColumn, // Столбцы Матрицы (Ширина)
      matrRow,    // Строки Матрицы (Высота)
      szVector,  // Размер Вектора
      z; // Чтобы окно не закрылось раньше срока...

  Matrix matrx1, // 1-й объект класса Matrix (1-я Матрица)
        matrx2, // 2-й объект класса Matrix (2-я Матрица)
        matrx3; // 3-й объект класса Matrix (3-я Матрица. Используется в качестве хранения результатов расчёта)

  Vector vec1, // 1-й объект класса Vector (1-й Вектор)
        vec2; // 2-й объект класса Vector (2-й Вектор. Используется в качестве хранения результатов расчёта)

  cout<<" Enter size Column: ";
  cin>>matrColumn;                // Столбцы (Ширина)
  cout<<" Enter size Row: ";
  cin>>matrRow;                    // Строки (Высота)

  matrx1.setMatrix(matrRow, matrColumn); // Установка размера 1-й Матрицы (row * column)
  matrx1.UserFromKeyboardsMatrix();  // Ввод значений в первую Матрицу

  cout<<endl; // Для читабельности, пустая строка...

  matrx2.setMatrix(matrRow, matrColumn); // Установка размера 2-й Матрицы (row * column)
  matrx2.UserFromKeyboardsMatrix();  // Ввод значений во вторую Матрицу

  for(int i = 0; i < 80; i++) // Для читабельности
    cout<<'-';
   
  cout<<"\n Print First (1-st) Matrix"<<endl;
  matrx1.PrintMatrix();    // Печать 1-й Матрицы
  cout<<"\n Print Second (2-nd) Matrix"<<endl;
  matrx2.PrintMatrix();    // Печать 2-й Матрицы

  matrx3.setMatrix(matrRow, matrColumn); // Установка размера 3-й Матрицы (row * column)

  MultiplicationMatrix(matrx1, matrx2, matrx3); // Функция умножения Матрицы на Матрицу

  matrx3.PrintMatrix();  // Печать результата умножения Матрицы на Матрицу

  // Предложение ввести Число на которое будет умножена выбранная Матрица
  cout<<"\n\n Enter Number Multiplication Matrix: ";
  cin>>num;
  cout<<endl;

  // Выбор умножаемой Матрицы [1 - первая Матрица, 2 - вторая Матрица]
  cout<<"  Enter Number Vibor Multiplication Matrix [1/2]: ";
  cin>>feature;
  // Проверка выбора
  while(feature >= 3 || feature <= 0){
    cout<<"  Enter Number Vibor Multiplication Matrix [1/2]: ";
    cin>>feature;
  }
 
  if(feature == 1)      // Если выбрана первая Матрица
    NumberMultiplicationMatrix(matrx3, matrx1, num); // Функция умножения Матрицы на Число
  else if(feature == 2)  // Если выбрана вторая Матрица
    NumberMultiplicationMatrix(matrx3, matrx2, num); // Функция умножения Матрицы на Число

  matrx3.PrintMatrix(); // Печать результата умножения Матрицы на Число

  // Установка ориентации Вектора (Вектор-столбец или Вектор-строка)
  vec1.setOrientationVector();
  // Размер 2-го Вектора должен быть равен кол-ву строк в Матрице
  vec2.setSizeVector(matrRow);

  if(vec1.getOrientationVector()) // Вертикальная ориентация Вектора
    vec1.setSizeVector(matrRow); // Размер должен быть равен кол-ву строк в Матрице
  else if(!vec1.getOrientationVector()) // Горизонтальная ориентация Вектора
    vec1.setSizeVector(matrColumn); // Размер должен быть равен кол-ву столбцов в Матрице

  cout<<"\n\n"; 
  vec1.UserFromKeyboardsVector(); // Ввод данных с клавиатуры, для Вектора

  for(int j = 0; j < 80; j++) // Для читабельности, вывод линии...
    cout<<'-';

  cout<<"\n  Print Vector..."<<endl;
  vec1.PrintVector(); // Печать 1-го Вектора

  cout<<"\n Print First (1-st) Matrix"<<endl;
  matrx1.PrintMatrix(); // Печать Матрицы, на которую будет умножаться Вектор...

  MultiplyVectorMatrix(matrx1, vec2, vec1); // Функция умножения Вектора на 1-ю Матрицу

  vec2.PrintVector(); // Печать результата умножения Вектора на Матрицу

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

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

Код:

Vec2 = Vec1 * Matrix;
Нужно ли реализовывать операцию присваивания? Или ещё как нужно или можно, подскажите
Правилен ли будет такой вариант:


Код:

Vector::Vector operator*(Vector &Vec, Matrix &Matr)
{
    Vector tempVec;
   
    ...
    // Здесь алгоритм умножения
    ...
    return tempVec;
}

Или если не будет сложно, опишите как правильно возвратить или перегрузить эту операцию, чтобы во всю ширь использовать перегрузку операций, буду благодарен за любой совет...

elektra192 08-12-2007 17:59 693395

Задание №6.
а)Создайте функцию,которая обычно принимает один аргумент-адрес строки-и выводит эту строку на экран один раз.Но если задаеться второй аргумент типа int,который не равен нулю,то эта функция выводит строку столько раз,какое число было передано функции,а если ж этот переданный параметр равен нулю,-то столько раз,сколько было вызовов функции до момента ево вызова.Используйте эту функцию в програме,что б показать как она работает.
б)Перегрузить функцию,которая вычесляет обьемы кубка и шара,которые задаються классом figura.Покажите ее использование.
в)Допустим есть класс CandyBar,который содержит три закрытые элементы:1)фирменное название конфеты,2)вес(double),3)количество калорий(целое значение).Написать програму,в которой в даном классе перегружаеться конструктор:без параметров(закрытые члены класса должны получить значения "Millenium",2.85,350 соответственно за умолчанием),с двумя параметрами(один из параметров-как задано за умолчанием),со всеми(пользователь вводит данные с клавиатутры).Создайте базу данных про любимые конфеты(массив обьектов).Показать использование конструкторов.Перегрузить функцию,которая выводит на экран вес одной(данной)конфеты и вес того количества таких самых (данных)конфет,которую задаст пользователь(передаеться как параметр функции).
4.Перегрузить функцию изображения на экране веселого и грусного смайлика в графическом режиме.

elektra192 08-12-2007 19:18 693438

Задание 7.
а)Написать програму с использованием конструктора копирование.Обьявить класс myclass,который содержит функцию f1(),что будет возвращать обьект myclass,функцию f2(),что будет получать обьект типа myclass как параметр и выводить на экран значение закрытых переменных класса для данного обьекта,конструктор и конструктор копирование.В основной части программы присвойте обьекту класса результат выполнения фнгкции f1(),используйте функцию f2(),выполните явную инициализацию одного обьекта другим.Все конструкторы выводят на экран"В конструкторе" или "В конструкторе копирования".
б)Написать программу вычисления среднево арифметического 5 и 2-х чисел,в которой:
1.Перегрузить функцию в зависимости от количества аргументов.
2.Использовать арагументы по умолчанию
в)Создать класс StrType ,который содержит(закрытые переменные)саму строку p(char*) и длину этой строки len(целое число).Определить открытые функции получения строки и длины строки.
г)Перегрузить конструктор следующим образом.Первый-без параметров.Он должен выделять 255 байтов памяти (оператор new),инициализировать эту память строкой,которую вводит пользователь,и установить значение len 255.Другой конструктор-с двумя параметрами(не вводяться с клавиатуры):1-строка,которая используеться при инициализации,2-число байтов,что выделяеться.Во второй версии конструктора нужно выделить необходимое количество памяти,в которую должна размещаться передаванная строка.Реализуйте контроль границ массива(используя функцию strlen()).
д)Определить функцию с целым аргументом,который за умолчанием равен нулю,которая выводит строку,что сохраняеться в классе,на экран:когда ей не передаеться ни единого параметра,тогда функция выводит всю строку;если передаеться какое то число,которое не равно нулю,тогда эта функция выводит столько элементов строки,согласно числа,которое было передано функции.Показать что перегруженные конструкторы и функция работает так как нужно.

Drongo 12-12-2007 15:23 695857

По поводу задачи А) в шестом задание, не могу правильно вычислить второй тип, когда в функции есть переменными параметрами, почему-то код: выдаёт какое-то число десятизначное, число... Почему так, и как нужно правильно? Подскажите?!
Код:

void PrintString(const char *S, ...)
{
  va_list ap;
  va_start(ap, S);            // раскрутка arg
//  int COUNTER = va_arg(ap, int);
  int  COUNTER = 0;

//  cout<<" COUNTER = "<<COUNTER<<endl;
  if((COUNTER = va_arg(ap, int)) > 0){
      ....// code...
    }
//----------------------------------

Цитата:

Цитата elektra192
Задание №6. »

Задача "А")
читать дальше »
Код:

//---------------------------------------------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <stdarg.h>
//#include <stdio.h>

void PrintString(const char *String, ...);

int main()
{
  char *s = "Hello Anna!";
  char *sPtr = &(*s);
  int counter,
      z;
     
  cout<<" Enter String: ";
  cin.getline(s, 100, '\n');

//  PrintString(sPtr);

  cout<<" Enter Number: ";
  cin>>counter;
  while(counter < 0){
      cout<<" Enter Number: ";
      cin>>counter;
    }

  PrintString(sPtr, counter);

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------
void PrintString(const char *S, ...)
{
 
  va_list ap;
  va_start(ap, S);            // раскрутка arg
//  int COUNTER = va_arg(ap, int);
  int  COUNTER = 0;

//  cout<<" COUNTER = "<<COUNTER<<endl;
  if((COUNTER = va_arg(ap, int)) > 0){

  cout<<" Vono=="<<endl;
  cout<<" COUNTER = "<<COUNTER<<endl;
    for(int i = 0; i < COUNTER; i++)
        cout<<" Num: "<<i<<"Output: "<<S<<endl;
        va_end(ap);
    }
                    // очистка arg
  else{
      cout<<" Ne vono"<<endl;
        cout<<"Output: "<<S<<endl;
    }
}
//----------------------------------------------------------------------


В чём я ошибся, или не так сделал?!

Цитата:

Цитата elektra192
Задание 7. »

Задача "А")
читать дальше »
Код:

// Написать програму с использованием конструктора копирования.
// Обьявить класс MyClass, который содержит функцию f1(), что будет возвращать обьект MyClass,
// функцию f2(), что будет получать обьект типа MyClass как параметр
// и выводить на экран значение закрытых переменных класса для данного обьекта,
// конструктор и конструктор копирования.
// В основной части программы присвойте обьекту класса результат выполнения функции f1(),
// используйте функцию f2(), выполните явную инициализацию одного обьекта другим.
// Все конструкторы выводят на экран "В конструкторе" или "В конструкторе копирования".
//----------------------------------------------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

class MyClass{ // Класс MyClass
  friend void fr2(MyClass MC);
public:
  MyClass(int x = 1) { num = x; cout<<" Konstruktor = "<<num<<endl; } // Конструктор
  MyClass(const MyClass &MC); // Копирующий конструктор
  const MyClass fr1() { return *this; };
private:
  int num; // Число....
};
// Копирующий конструктор-----------------------------------------------------
MyClass::MyClass(const MyClass &MC)
{
  num = MC.num;
  cout<<"\n Konstruktor Copy = "<<num<<endl;
}
// Функция fr2(), принимает однин параметр MyClass и выводит значения закрытых членов
void fr2(MyClass MC)
{
    cout<<" Activation Function fr2(MyClass MC)"<<endl;
    cout<<" Value = "<<MC.num<<endl;
}
// Выполнение программы-------------------------------------------------------
int main()
{
  int z;
  MyClass MC_1(-88),
          MC_2(105),
          MC_3(247),
          MC_4(-578),
          MC_5(MC_1),
          MC_6,
          MC_7;

  MC_6 = MC_2;  // Присваивание одного объекта другому
  fr2(MC_6.fr1()); // Инициализация одного объекта другим, через вызов функции fr1()

  fr2(MC_4); // Инициализация одного объекта другим
  fr2(MC_5.fr1()); // Инициализация одного объекта другим, через вызов функции fr1()

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


Задача "Б")
читать дальше »
Код:

// Написать программу вычисления среднего арифметического 5 и 2-х чисел, в которой:
// 1.Перегрузить функцию в зависимости от количества аргументов.
// 2.Использовать арагументы по умолчанию--------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip.h>
using std::setprecision;
using std::setiosflags;

// Вычисление среднего арифметического с пятью параметром---------------------
double Average(double V1 = 2.0, double V2 = 5.0, double V3 = 7.0, double V4 = 9.0, double V5 = 8.0)
  {  return (V1 + V2 + V3 + V4 + V5) / 5;  };
// Вычисление среднего арифметического с двумя параметрами--------------------
double Average(int V1 = 4.0, int V2 = 7.0)
  {  return (static_cast<double>(V1) + static_cast<double>(V2)) / 2;  };
//----------------------------------------------------------------------------
int main()
{
  int num6,        // Число 6
      num7,        // Число 7
      z;
  double num1,      // Число 1
          num2,      // Число 2
          num3,      // Число 3
          num4,      // Число 4
          num5,      // Число 5
          average1,  // Среднее 1
          average2;  // Среднее 2

  // Форматирование потока...
  cout<<setiosflags(ios::fixed | ios::showpoint)
        <<setprecision(1);

  // Ввод пяти чисел для функции с пятью аргументами (double)...
  cout<<" Print Result Average 5 Arguments\n";
  cout<<" Enter number 1: ";
  cin>>num1;
  cout<<" Enter number 2: ";
  cin>>num2;
  cout<<" Enter number 3: ";
  cin>>num3;
  cout<<" Enter number 4: ";
  cin>>num4;
  cout<<" Enter number 5: ";
  cin>>num5;
 
  // Функция вычисляет среднее для пяти параметров
  average1 = Average(num1, num2, num3, num4, num5);
  cout<<" Average s 5 Arguments = "<<average1<<endl<<endl;

  // Ввод двух чисел для функции с двумя параметрами (int)...
  cout<<" Print Result Average 2 Arguments\n";
  cout<<" Enter number 1: ";
  cin>>num6;
  cout<<" Enter number 2: ";
  cin>>num7;

  // Функция вычисляет среднее для двух параметров
  average2 = Average(num6, num7);
  cout<<" Average s 2 Arguments = "<<average2<<endl<<endl;

  // Печать результатов среднего по умолчанию для функции с пятью параметрами
  cout<<" Print Result Average Default 5 Argument\n";
  average1 = Average(3.3, 4.4, 7.7);
  cout<<" Average Default 5 Argument = "<<average1<<endl<<endl;

  // Печать результатов среднего по умолчанию для функции с двумя параметрами
  cout<<" Print Result Average Default 2 Argument\n";
  average2 = Average(55, 88);
  cout<<" Average Default 2 Argument = "<<average2<<endl;

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


Задача "В")
читать дальше »
Код:

// Создать класс StrType, который содержит(закрытые переменные)
// саму строку (char* p;) и длину этой строки (int len;).
// Определить открытые функции получения строки и длины строки.----------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

//#include "StrType.h"

class StrType{ // Класс StrType
public:
  StrType(char *s = "Anna", int l = 8); // Конструктор с аргументами по умолчанию
  int getLen() const { return len; };  // Получение длины строки
  char *getString() { return p; };      // Получение строки
  void Print();    // Печать объекта, вывод значений...
private:
  char *p;  // Строка
  int len;  // Длина строки
};
// Конструктор по умолчанию--------------------------------------------------
StrType::StrType(char *str, int lenght)
{
  p = str;
  len = lenght;
}
// Печать объекта, для проверки----------------------------------------------
void StrType::Print()
{
  cout<<" Value Default\n\n";
  cout<<" String (*p): "<<getString()<<endl;
  cout<<" Lenght (len) = "<<getLen()<<endl;
}
// Демонстрация композиции. Тестирование-------------------------------------
int main()
{
  int z;
  StrType s;

  s.Print();
  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


Задача "Г")
читать дальше »
Код:

// Создать класс StrType, который содержит(закрытые переменные)
// саму строку (char* p;) и длину этой строки (int len;).
// Определить открытые функции получения строки и длины строки.----------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <cstring.h>
#include <cassert>

class StrType{ // Класс StrType
public:
  StrType(); // Конструктор без аргументов
  StrType(char *s, int l); // Конструктор с аргументами
  int getLen() const { return len; };  // Получение длины строки
  char *getString() { return p; };      // Получение строки
  void Print();    // Печать объекта, вывод значений...
private:
  char *p;  // Строка
  int len;  // Длина строки
};
// Конструктор без параметров, с вводом с клавиатуры--------------------------
StrType::StrType()
{
  char sTemp[255] = ""; // Временный символьный массив

  len = 255;
  p = new char[255 + 1]; // Выделение памяти в 255 байт плюс завершающий символ
  assert(p != 0);  // Проверка выделения памяти

  cout<<" Enter String: ";  // Предложение ввода
  cin.getline(sTemp, 255, '\n'); // Ввод строки символов

  strcpy(p, sTemp);  // Копирование строки символов в "р"
  delete []sTemp;
}
// Конструктор с параметрами, без ввода с клавиатуры--------------------------
StrType::StrType(char *str, int lenght)
{
  len = strlen(str);  // Вычисление длины строки

  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255
    p = new char[len + 1]; // Выделение памяти в 255 байт плюс завершающий символ
    assert(p != 0);  // Проверка выделения памяти
    strcpy(p, str);  // Копирование...
  }
  else  // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт...
    cout<<" Error! Lenght > 256 bytes!";
}
// Печать объекта, для проверки----------------------------------------------
void StrType::Print()
{
  cout<<endl;
  cout<<" String (char *p): "<<getString()<<endl; // Печать строки...
  cout<<" Lenght (int len) = "<<getLen()<<endl;  // Печать длины строки...
}
// Демонстрация композиции. Тестирование-------------------------------------
int main()
{
  int z;
  StrType s1,                                                // 1-й объект, без инициализации...
          s2("Anna Kanaeva - programming and diasyner", 40); // 2-й объект, инициализирован...

  s1.Print(); // Печать объекта...
  s2.Print(); // Печать объекта...
  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


Задача "Д")
читать дальше »
Код:

// Определить функцию с целым аргументом, который по умолчанию равен нулю,
// которая выводит строку, что сохраняеться в классе, на экран:
// когда ей не передаётся ни одного параметра, тогда функция выводит всю строку;
// если передаеться какое то число, которое не равно нулю, тогда эта функция
// выводит столько элементов строки, согласно числу, которое было передано функции.
// Показать что перегруженные конструкторы и функция работает так как нужно.
// А как нужно?!
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <cstring.h>
#include <cassert>
#include <stdarg.h>
#include <stdio.h>

class StrType{ // Класс StrType
public:
  StrType(); // Конструктор без аргументов
  StrType(char *s, int l); // Конструктор с аргументами
  int getLen() const { return len; };  // Получение длины строки
  char *getString() { return p; };      // Получение строки
  void Function(int n = 1, ...);
  void Print();    // Печать объекта, вывод значений...
private:
  char *p;  // Строка
  int len;  // Длина строки
};
// Конструктор без параметров, с вводом с клавиатуры--------------------------
StrType::StrType()
{
  char sTemp[255] = ""; // Временный символьный массив

  len = 255;
  p = new char[255 + 1]; // Выделение памяти в 255 байт плюс завершающий символ
  assert(p != 0);  // Проверка выделения памяти

  cout<<" Enter String: ";  // Предложение ввода
  cin.getline(sTemp, 255, '\n'); // Ввод строки символов

  strcpy(p, sTemp);  // Копирование строки символов в "р"
  delete []sTemp;
}
// Конструктор с параметрами, без ввода с клавиатуры--------------------------
StrType::StrType(char *str, int lenght)
{
  len = strlen(str);  // Вычисление длины строки

  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255
    p = new char[len + 1]; // Выделение памяти в 255 байт плюс завершающий символ
    assert(p != 0);  // Проверка выделения памяти
    strcpy(p, str);  // Копирование...
  }
  else  // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт...
    cout<<" Error! Lenght > 256 bytes!";
}
// Печать объекта, для проверки----------------------------------------------
void StrType::Print()
{
  cout<<endl;
  cout<<" String (char *p): "<<getString()<<endl;
  cout<<" Lenght (int len) = "<<getLen()<<endl;
}
// Функция с перечислимыми параметрами---------------------------------------
void StrType::Function(int n, ...)
{
//  int i = 0;
//  va_list List1;
  //va_start(List1, i);
//  i = va_arg(List1, char *);
  cout<<"\n\n Value parameters len for Function() = "<<n<<endl;

  for(int i = 0; i < n; i++)
    cout<<*p++;

  //va_end(List1);
}
// Демонстрация композиции. Тестирование-------------------------------------
int main()
{
  int z;
  StrType s1,                                                // 1-й объект...
          s2("Anna Kanaeva - programmist and disayner", 40); // 2-й объект...

  s1.Print(); // Печать объекта...
  s2.Print(); // Печать объекта...

  s2.Function(35); // Число, сколько символов вывести для 1-го объекта
  s1.Function(8);  // Число, сколько символов вывести для 2-го объекта

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------


bool 19-12-2007 18:00 700072

Цитата:

Цитата elektra192
Создайте функцию,которая обычно принимает один аргумент-адрес строки-и выводит эту строку на экран один раз.Но если задаеться второй аргумент типа int,который не равен нулю,то эта функция выводит строку столько раз,какое число было передано функции,а если ж этот переданный параметр равен нулю,-то столько раз,сколько было вызовов функции до момента ево вызова.Используйте эту функцию в програме,что б показать как она работает »

Код:

#include <iostream>
using namespace std;
void func(char *p,int n=0);
int main()
{
        char *s = "bla bla bla";
        func(s);
        cout <<endl <<  "1 string:" << endl;
        func(s,5);
        cout << "5 strings:" << endl;
        return 0;
}
void func(char *p,int n)
{
        if(n==0)
                cout << p;
        else
                for(int i=0;i<n;i++)
                        cout << p << endl;
}



Время: 05:30.

Время: 05:30.
© OSzone.net 2001-