Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите решить

Ответить
Настройки темы
C/C++ - Помогите решить

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 21:50, 01-11-2007

 

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Таки решил, посмотрите пожалуйста код и расскритикуйте...
Код: Выделить весь код
//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;
}
Или если не будет сложно, опишите как правильно возвратить или перегрузить эту операцию, чтобы во всю ширь использовать перегрузку операций, буду благодарен за любой совет...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 31-01-2008 в 20:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:27, 26-11-2007 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:59, 08-12-2007 | #12


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:18, 08-12-2007 | #13


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


По поводу задачи А) в шестом задание, не могу правильно вычислить второй тип, когда в функции есть переменными параметрами, почему-то код: выдаёт какое-то число десятизначное, число... Почему так, и как нужно правильно? Подскажите?!
Код: Выделить весь код
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;
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 25-04-2008 в 14:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:23, 12-12-2007 | #14


Аватара для bool

Старожил


Сообщения: 229
Благодарности: 9

Профиль | Отправить PM | Цитировать


Цитата 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;
}

Отправлено: 18:00, 19-12-2007 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите решить

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Помогите решить задачу Urann Программирование и базы данных 11 14-05-2013 11:44
помогите решить задачу snikers Программирование и базы данных 2 27-08-2004 01:57
помогите решить задачу Guest Программирование и базы данных 2 21-05-2004 11:23




 
Переход