Сторінка 6 з 9

Re: ПРОГРАМУВАННЯ

ПовідомленняДодано: 29 травня 2011, 11:15
Batarchuk
Задания нужны на завтра(.
Вот инфа по поводу стека: http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA
http://www.cyberforum.ru/cpp-beginners/ ... 78335.html - какая-то мудрёная реализация стека


Во втором задании нужно :
У пользователя спросило координаты 1-го вектора x, y, z
И вывело после их ввода в таком формате : Вектор а ( x1, y1, z1)
Длинна вектора равна d , где d = sqrt(x*x+y*y+z*z)
Потом запросило координаты второго вектора : x, y, z
И вывело после их ввода в таком формате : Вектор b ( x2, 2y, z2)
Длинна вектора равна d , где d = sqrt(x*x+y*y+z*z)
Потом вывело a - b = (x1-x2,y1-y2,z1-z2)
a + b = (x1+x2,y1+y2,z1+z2)
a*b = формулу не помню
Вот получил ещё такие рекомендации :
нужен один класс, который содержит свои координаты, определить
vector operator+(const vector& another)
vector operator-(const vector& another)
double operator*(const vector& another) скалярное произведение
Конструктор копирования и деструктор не нужны .

соответсвенно в теле программы создать два объекта типа вектор и их складывать умножать и тд и тп...

координаты хранить в приватном vector<double>, а в операциях сложения делать проверку, чтобы векторы имели одинаковую размерность.

Re: Програмування

ПовідомленняДодано: 29 травня 2011, 13:48
Даша
// Визначити клас, який реалізує поліном.
//Поліном визначається поядком та масивом коефіцієнтів.
//Передбачитит методи обчислення значення полінома у
//заданій точці, знаходження похідної та первісної

#include <iostream>
#include <cstring>

using namespace std;
double MyPow (double a, int b)
{
if (b==0)
{
return 1;
}
double z=1;
for (int i=0; i,b; i++)
{
z*=a;
}
return z;
}
class polynom // Клас полінома
{
public:
int n; // Порядок
double *p_koef; // Вказівник масив коефіцієнтів. Поки що пам'ять для нього не виділена
void EnterN()
{ // функція просить користувача ввести порядок полінома
do
{
cout<<" Vvedit poryadok [n>=2]: ";
cin>>n;
} while (n<2); // не пропускаємо n<2
n++;
}
void EnterKoef()
{ // Вводимо коефіцієнти полінома
for (int i=n-1 ; i >=0 ; i--)
{
cout<<"Enter [ "<<i<<" ] = ";
cin>>*(p_koef+i);
}
}
void ShowPoly()// вивести поліном на екран
{
for (int i=n-1 ; i >=1 ; i--)
{
cout<<"("<<*(p_koef+i)<<")"<<"*x^"<<i<<" + ";
}
cout<<"("<<*(p_koef)<<")";
cout<<endl;
}
double EnterX()// Ввести X
{
double x;
cout<<" Enter X : ";
cin>>x;
return x;
}
double CalculatePoly(double x)// порахувати поліном
{
double sum=0;
for (int i=n-1 ; i >= 0 ; i--)
{
sum+=*(p_koef+i)*MyPow(x,i);
}
return sum;
}

void CalculatePoh()
{ // похідна
cout<<" Pohidna = ";
int i=n-1;
for (i ; i > 1 ; i--)
{
cout<<"("<<i*(*(p_koef+i))<<")"<<"*x^"<<i-1<<" + ";
}
cout<<"("<<i*(*(p_koef+i))<<")";
cout<<endl;
return ;
}
void CalculatePer()// первісна
{
cout<<" Pervisna = ";
int i=n-1;
for (i ; i >= 1 ; i--)
{
cout<<"("<<(*(p_koef+i))/(i+1)<<")"<<"*x^"<<i+1<<" + ";
}
cout<<"("<<(*(p_koef+i))<<")*x";
cout<<endl;
return ;
}

polynom()// конструктор
{
EnterN();
p_koef=new double [n];// виділяємо місце під пам'ять
EnterKoef();
}
~polynom()
{
delete(p_koef); // звільнюємо виділену пам'ять
}
};

int main()
{
polynom p1; // створюємо поліном, запускається конструктор,
// який заповлює його
p1.ShowPoly(); // Показатии введений поліном
cout<<endl;
p1.CalculatePoh(); // Вивести похідну
p1.CalculatePer(); // Вивести первысну
cout<<endl;

cout<<" CalculatePoly = "<<p1.CalculatePoly(p1.EnterX())<<endl;
// Функція рахує значення полінома.
// функція CalculatePoly приймає значення x і повертає рахунок
// функція EnterX повертає число, яке користувач ввів з клавіатури

system("PAUSE");
return 0;
}

Re: Програмування

ПовідомленняДодано: 29 травня 2011, 16:02
Василь

Re: Програмування

ПовідомленняДодано: 29 травня 2011, 16:23
Василь
Код: Виділити все
/*

 Визначити клас, який реалізує множину. Визначити методи включення та виключення
 елементу, а також перевантажити операції додавання (об’єднання множин),
 множення (переріз множин), віднімання (різниця множин).
 
*/

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#define maxn 200
using namespace std;
class Mnojina
 {
      public:
      int Items[maxn];
      int Count;
      public:
             Mnojina () {  Count=0;}
             ~Mnojina () { /*delete Items;*/}
             int IsPresent(int A){
                  for (int i = 0 ; i < Count; i++)
                  {
                      if (*(Items+i)==A) return i+1;
                  }
                  return 0;
             }
             void Include(int A){                 
                  if (!IsPresent(A)){
                     *(Items+Count)=A;
                     Count++;   
                  }
             }
             void Exclude(int A){
                  int n=IsPresent(A);
                  if (n){
                     for (int i = n ; i < Count; i++)
                     {
                        *(Items+i-1)=*(Items+i);
                     }
                     Count--;   
                  }
             }

             void Show(char *name=""){
                  cout<<" Elements of "<<name<<"["<<Count<<"] = { ";
                  for (int i = 0 ; i < Count-1; i++)
                  {
                      cout<<*(Items+i)<< ", ";
                  }
                  if (Count!=0) cout<<*(Items+Count-1);
                  cout<<" }\n";
             }
      Mnojina Mnojina :: operator + (Mnojina b){

                Mnojina temp;
                for (int i = 0 ; i < Count ; i++)
                {
                    temp.Include(*(Items+i));
                }
                for (int i = 0 ; i < b.Count ; i++)
                {
                    temp.Include(*(b.Items+i));
                }               
               // temp.Show("Temp");

                return temp;
      }             
      Mnojina Mnojina :: operator - (Mnojina b){
                Mnojina temp;
                for (int i = 0 ; i < Count ; i++)
                {
                    temp.Include(*(Items+i));
                }
                for (int i = 0 ; i < b.Count ; i++)
                {
                    temp.Exclude(*(b.Items+i));
                }               
               // temp.Show("Temp");

                return temp;
      }
      Mnojina Mnojina :: operator * (Mnojina b){
                Mnojina temp;
                for (int i = 0 ; i < Count ; i++)
                {
                    for (int j = 0 ; j < b.Count ; j++)
                    {
if ( IsPresent(b.Items[j]) && b.IsPresent(Items[i])  ) {

         temp.Include(Items[i]);
 }
                    }
                }

               // temp.Show("Temp");

                return temp;
      }           

};
using namespace std;


int main(){
    Mnojina A,B,C;
    A.Include(1);
    A.Include(2);
    A.Include(3);       
    A.Include(4);
   
    B.Include(3);
    B.Include(4);
    B.Include(5);
    B.Include(6);

   
    A.Show("A");
    B.Show("B");
    C.Show("C");
    cout<<endl;
   
       
    C=A+B;
    C.Show("C=A+B");
    A.Show("A");
    B.Show("B");
    C.Show("C");
    cout<<endl;
   
    C=A-B;
    C.Show("C=A-B");
    cout<<endl;
    A.Show("A");
    B.Show("B");
    C.Show("C");
    cout<<endl;
     
     
    C=A*B;
    C.Show("C=A*B");
    cout<<endl;
    A.Show("A");
    B.Show("B");
    C.Show("C");     
   
    system("pause");
}

Re: Програмування

ПовідомленняДодано: 29 травня 2011, 17:45
Sergiych
Допоможи з лабою!
Завдання: реалізувати клас- група тварин. Реалізувати можливість включення та виключення тварин у групу, сортування їх за різними ознаками.
Бажано зробити до вівторка.
Наперед дякую!!!

Re: ПРОГРАМУВАННЯ

ПовідомленняДодано: 30 травня 2011, 15:24
aol
Василь написав:
Obi-Van написав:я не шарю як перевантажувати саме оператор присвоєння, інші в мене є...


Код: Виділити все
#include <stdio.h> // для printf
 
class X
{
    int x;
public:
    X() : x(0) {}
    explicit X(int i) : x(i) {}
    operator int() { return x; }
    X& operator=(const X& arg1) { x = arg1.x; return *this; }
    friend X operator+(const X&, const X&);
    friend X operator*(const X&, const X&);
};
 
// використання дружніх функцій дозволяє доступ до приватних членів класу
// і також дозволяє показати симетричність в оголошенні функції
inline X operator+(const X& arg1, const X& arg2)
{
    X r;
    r.x = arg1.x + arg2.x;
    return r;
}
 
inline X operator*(const X& arg1, const X& arg2)
{
    X r;
    r.x = arg1.x * arg2.x;
    return r;
}
 
int main()
{
    X x;
    x = X(5) + X(6) * X(7); // = 47 ( * має вищий пріоритет )
                            // x = 5 + 6 * 7; - не спрацює через використання explicit,
                            // а x = X(5 + 6 * 7); можна
    printf("%d\n", x); // завдяки operator int() х неявно перетворюється в int
}



Знов таки відходите від парадигми ООП.
Все що стосується класу дуже бажано реалізовувати в межах класу.
Навіщо дружні функції, якщо обидва елементи є членами цього класу

Код: Виділити все
...
X operator+(const X&);
...
inline X X::operator+(const X& arg2)
{
    X r;
    r.x = x + arg2.x;
    return r;
}
...

Re: ПРОГРАМУВАННЯ

ПовідомленняДодано: 30 травня 2011, 17:28
Obi-Van
aol написав:Знов таки відходите від парадигми ООП.
Все що стосується класу дуже бажано реалізовувати в межах класу.
Навіщо дружні функції, якщо обидва елементи є членами цього класу

а навіщо тут інлайн функції??
і чому треба параметром передававти саме const Vector& ?

Код: Виділити все
class Vector
{
      private:
          int e1, e2, e3, e4;
      public:
          Vector operator&(Vector);
          ...
          Vector operator~();
          Vector& operator=(const Vector&);
};
Vector Vector :: operator&(Vector v2)
{
       Vector v;
       v.e1 = e1 & v2.e1;
       v.e2 = e2 & v2.e2;
       v.e3 = e3 & v2.e3;
       v.e4 = e4 & v2.e4;       
       return v;     
}

...

Vector& Vector :: operator=(const Vector& v1)
{
       Vector v;
       e1 = v1.e1;
       e2 = v1.e2;
       e3 = v1.e3;
       e4 = v1.e4;
       return *this;
}

Re: ПРОГРАМУВАННЯ

ПовідомленняДодано: 30 травня 2011, 17:54
aol
inline - це тільки підказка оптимізатору, що цю функцію бажано при компіляції коду не викликати, а просто підставляти цілком тіло для прискорення роботи програми.

Питання з const & білш цікаве

Давайте почнемо з початку:
Якщо функція описана як f(int a), то передається до функції копія змінної а. Якщо змінна а не типу int а велика структура або об'єкт, то це ресурсоємна операція. Для випадку об'єкту складного класу створення його копії може займати багато часу та системних ресурсів. Як альтернатива використовувати передачу параметра за посиланням (by reference): f(int& a). Тоді у функцію передається не копія об'єкту (змінної) а, а тільки посилання на нього. Але як побочний ефект можливість змінити зміст змінної а у тілі функції. Для того, щоб унеможливити зміну змісту і використовують слово const. Фактично f( const int& a) майже рівнозначне до f(int a) але не потребує створення копії а при виклику функції.

Re: ПРОГРАМУВАННЯ

ПовідомленняДодано: 30 травня 2011, 18:06
Obi-Van
aol написав:inline - це тільки підказка оптимізатору, що цю функцію бажано при компіляції коду не викликати, а просто підставляти цілком тіло для прискорення роботи програми.

Питання з const & білш цікаве

Давайте почнемо з початку:
Якщо функція описана як f(int a), то передається до функції копія змінної а. Якщо змінна а не типу int а велика структура або об'єкт, то це ресурсоємна операція. Для випадку об'єкту складного класу створення його копії може займати багато часу та системних ресурсів. Як альтернатива використовувати передачу параметра за посиланням (by reference): f(int& a). Тоді у функцію передається не копія об'єкту (змінної) а, а тільки посилання на нього. Але як побочний ефект можливість змінити зміст змінної а у тілі функції. Для того, щоб унеможливити зміну змісту і використовують слово const. Фактично f( const int& a) майже рівнозначне до f(int a) але не потребує створення копії а при виклику функції.

ясно, дякую велике )

Re: Програмування

ПовідомленняДодано: 30 травня 2011, 21:59
Василь
Sergiych написав:Допоможи з лабою!
Завдання: реалізувати клас- група тварин. Реалізувати можливість включення та виключення тварин у групу, сортування їх за різними ознаками.
Бажано зробити до вівторка.
Наперед дякую!!!

Ответ появиться тут http://radfiz.org.ua/sos/q/1306784643.txt