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

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

Повідомлення Batarchuk » 29 травня 2011, 11:15

Задания нужны на завтра(.
Вот инфа по поводу стека: 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>, а в операциях сложения делать проверку, чтобы векторы имели одинаковую размерность.
Група 3. Батарчук Сергій.
Аватар користувача
Batarchuk
 
Повідомлень: 294
З нами з: 18 жовтня 2010, 18:18
Звідки: Сватове

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;
}
Даша
 
Повідомлень: 2
З нами з: 20 січня 2011, 17:24

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

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

Аватар користувача
Василь
 
Повідомлень: 907
З нами з: 15 жовтня 2010, 02:08

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");
}
Аватар користувача
Василь
 
Повідомлень: 907
З нами з: 15 жовтня 2010, 02:08

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

Повідомлення Sergiych » 29 травня 2011, 17:45

Допоможи з лабою!
Завдання: реалізувати клас- група тварин. Реалізувати можливість включення та виключення тварин у групу, сортування їх за різними ознаками.
Бажано зробити до вівторка.
Наперед дякую!!!
Група 3. Новак Сегрій
Sergiych
 
Повідомлень: 20
З нами з: 09 листопада 2010, 18:37

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

Повідомлення aol » 30 травня 2011, 15:24

Василь написав:
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;
}
...
aol
 
Повідомлень: 9
З нами з: 19 травня 2011, 15:04

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

Повідомлення Obi-Van » 30 травня 2011, 17:28

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;
}
Гринько Олександр, 1 група
Аватар користувача
Obi-Van
 
Повідомлень: 80
З нами з: 20 лютого 2011, 19:56

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

Повідомлення aol » 30 травня 2011, 17:54

inline - це тільки підказка оптимізатору, що цю функцію бажано при компіляції коду не викликати, а просто підставляти цілком тіло для прискорення роботи програми.

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

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

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

Повідомлення Obi-Van » 30 травня 2011, 18:06

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

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

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

ясно, дякую велике )
Гринько Олександр, 1 група
Аватар користувача
Obi-Van
 
Повідомлень: 80
З нами з: 20 лютого 2011, 19:56

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

Повідомлення Василь » 30 травня 2011, 21:59

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

Ответ появиться тут http://radfiz.org.ua/sos/q/1306784643.txt
Аватар користувача
Василь
 
Повідомлень: 907
З нами з: 15 жовтня 2010, 02:08

Поперед.Далі

Повернутись до Питання по домашці

Хто зараз онлайн

Зараз переглядають цей форум: Немає зареєстрованих користувачів і 2 гостей