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

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

Повідомлення Василь » 24 травня 2011, 23:31

Для Ксюхи і Мороза ))
Код: Виділити все
/*
  Горбаченко В.А. 25052011 0026
  Створити клас бібліотека, де існує назва книги і автор.
  Реалізвати пошук книги по автору та ралізувати додавання та
  видалення книги із спику
*/
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cstring>
#define n 100
#define sdata1 "Nazva knugu"
#define sdata2 "Avtor"

using namespace std;

//===========================================================================
class Tlibrary{
      public:
      char data1[n]; // назва книги
      char data2[n]; // автор
     
     
      void EnterInfo(){
           fflush(stdin);
           cout<<" Enter "<<sdata1<<" : ";
           cin.getline(&data1[0],n);

           cout<<" Enter "<<sdata2<<" : ";
           cin.getline(&data2[0],n);           
      }
      void ShowInfo(){
           fflush(stdin);
           cout<<"  \t"<<sdata1<<" : \t"<<&data1[0];
           cout<<"  \t"<<sdata2<<" : \t"<<&data2[0];
      }
     
};
//===========================================================================
int confirm(){// функція виводить підтвердження на екран
   char key; // зчтьувана клавіша
   do // цикл
   {
      cout<<endl<<" Confirm [Y/N]? "<<endl;
      key=getch();
      cout<<key;
   } while (key!='n' && key!='N' && key!='Y' && key!='y' ); // якщо натиснуто одну з перелічених клавіщ - вийти з циклу
   if (key=='y' || key=='Y') return 1; else return 0; //якщо y - повернути 1, інакше - 0
      
}
//===========================================================================
long EnterNumber(long max){  // функція повертає зчитане введене з клавіатури число, і в випадку, якщо число не з діапазону [0;max] просить користувача, переввести число
   long nn; // в цю змінну буде зчитуватись число введенне з клавіатури
   do{
      cout<<endl<<"Enter number [ 0 - "<<max-1<<" ] :";
      cin>>nn;
   if (nn<0 || nn>max-1) {cout<<endl<<" ERROR!!! "<<endl;}
   }while (nn<0 || nn>max-1); // умова виходу з циклу
   return nn; // воертає ввдеене число
}

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

void AddRecord(Tlibrary *lib,int &count){
     system("cls");
/*
     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
*/
     Tlibrary temp;
     cout<<"Entering data at "<<count<<" position\n";
     temp. EnterInfo();
     if (confirm()){
        *(lib+count)=temp;
        count++;
     }
}
//===========================================================================
void EditRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     Tlibrary temp=*(lib+nn);
     cout<<"Editing data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;
     temp. EnterInfo();
     if (confirm()){
        *(lib+nn)=temp;
     }
}
void DeleteRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     Tlibrary temp=*(lib+nn);
     cout<<"Delete data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;

     if (confirm()){
        for (int i=nn+1 ; i<count ; i++)
        {
         *(lib+i-1)=*(lib+i);
         }
         count--;
     }
}

//===========================================================================
void ShowRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     Tlibrary temp=*(lib+nn);
     cout<<"Data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;
    system("pause");
}
//===========================================================================
void FindRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     char *query = new char [n*3];
     cout<<"\nEnter find query : ";
     cin.getline(query,n*3);
     int founded=0;
     for (int i = 0 ; i < count ; i++){
         if (
         (strcmp(((lib+i)->data1), (query) )==0)
         ||
         (strcmp(((lib+i)->data2), (query) )==0)

         )
         {
          cout<<i<<" : ";
                  (lib+i)->ShowInfo();
                  cout<<endl;
                  founded++;
         }

         

     }
         cout<<"Founded "<<founded<<" record(s)\n";
     cout<<endl<<"===================================================="<<endl;
    system("pause");
}

//===========================================================================
void showmenu(){
//     setlocale(LC_ALL,"cp1251");
      Tlibrary *lib=new Tlibrary[n];
      int count=0;
     char key;
     do
     {
          system("cls");
          cout<<" Your database have "<<count<<" record(s) "<<endl<<endl;
          cout<<" Program main menu: "<<endl<<endl;
          cout<<" 1) Add record"<<endl;
          cout<<" 2) Edit record "<<endl;                   
          cout<<" 3) Delete record "<<endl;                             
          cout<<" 4) Show record "<<endl;                     
          cout<<" 5) Find record "<<endl;                     
         
          cout<<" ESC) Exit "<<endl;                     
          key=getch();         
          switch (key){
                 case '1': AddRecord(lib,count); break;
                 case '2': EditRecord(lib,count); break;
                 case '3': DeleteRecord(lib,count); break;
                 case '4': ShowRecord(lib,count); break;                                                   
                 case '5': FindRecord(lib,count); break;
          }
                             

     } while (key!=27);
}
//===========================================================================
int main(){
    showmenu();
    return 0;
}
Аватар користувача
Василь
 
Повідомлень: 907
З нами з: 15 жовтня 2010, 02:08

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

Повідомлення aol » 25 травня 2011, 11:02

aol написав:
GorbachenkoVasyl написав:
Код: Виділити все
В значити клас ПОЛІГОН (багатокутник). Клас має містити методи для зображення полігону, визначення його периметру, тощо. Створити похідний клас – ТРИКУТНИК з методом визначення точки перетину медіан.

Запитання:
Як малювати в DevCPP, бажано з прикладами.

Завчасно дякую!


Як шаблон створіть windows appilcation у DevCPP а не console application
Трошки пізніше допишу (але можливо завтра, зараз не багато часу)



Код: Виділити все
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
      case WM_PAINT:
         //MessageBox(NULL,"Test","Test2",0);
         HDC hdc;
         PAINTSTRUCT ps;
         hdc = BeginPaint(hwnd,&ps);
         
         MoveToEx(hdc,10,10,(LPPOINT) NULL);
         LineTo(hdc,20,10);
         LineTo(hdc,20,20);
         LineTo(hdc,10,10);
         
         EndPaint(hwnd,&ps);
         break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


У прикладі дописана функція WindowProcedure з стандартного шаблону для windows application, що малює трикутник.
aol
 
Повідомлень: 9
З нами з: 19 травня 2011, 15:04

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

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

Василь написав:Для Ксюхи і Мороза ))
Код: Виділити все
/*
  Горбаченко В.А. 25052011 0026
  Створити клас бібліотека, де існує назва книги і автор.
  Реалізвати пошук книги по автору та ралізувати додавання та
  видалення книги із спику
*/
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cstring>
#define n 100
#define sdata1 "Nazva knugu"
#define sdata2 "Avtor"

using namespace std;

//===========================================================================
class Tlibrary{
      public:
      char data1[n]; // назва книги
      char data2[n]; // автор
     
     
      void EnterInfo(){
           fflush(stdin);
           cout<<" Enter "<<sdata1<<" : ";
           cin.getline(&data1[0],n);

           cout<<" Enter "<<sdata2<<" : ";
           cin.getline(&data2[0],n);           
      }
      void ShowInfo(){
           fflush(stdin);
           cout<<"  \t"<<sdata1<<" : \t"<<&data1[0];
           cout<<"  \t"<<sdata2<<" : \t"<<&data2[0];
      }
     
};
//===========================================================================
int confirm(){// функція виводить підтвердження на екран
   char key; // зчтьувана клавіша
   do // цикл
   {
      cout<<endl<<" Confirm [Y/N]? "<<endl;
      key=getch();
      cout<<key;
   } while (key!='n' && key!='N' && key!='Y' && key!='y' ); // якщо натиснуто одну з перелічених клавіщ - вийти з циклу
   if (key=='y' || key=='Y') return 1; else return 0; //якщо y - повернути 1, інакше - 0
      
}
//===========================================================================
long EnterNumber(long max){  // функція повертає зчитане введене з клавіатури число, і в випадку, якщо число не з діапазону [0;max] просить користувача, переввести число
   long nn; // в цю змінну буде зчитуватись число введенне з клавіатури
   do{
      cout<<endl<<"Enter number [ 0 - "<<max-1<<" ] :";
      cin>>nn;
   if (nn<0 || nn>max-1) {cout<<endl<<" ERROR!!! "<<endl;}
   }while (nn<0 || nn>max-1); // умова виходу з циклу
   return nn; // воертає ввдеене число
}

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

void AddRecord(Tlibrary *lib,int &count){
     system("cls");
/*
     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
*/
     Tlibrary temp;
     cout<<"Entering data at "<<count<<" position\n";
     temp. EnterInfo();
     if (confirm()){
        *(lib+count)=temp;
        count++;
     }
}
//===========================================================================
void EditRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     Tlibrary temp=*(lib+nn);
     cout<<"Editing data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;
     temp. EnterInfo();
     if (confirm()){
        *(lib+nn)=temp;
     }
}
void DeleteRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     Tlibrary temp=*(lib+nn);
     cout<<"Delete data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;

     if (confirm()){
        for (int i=nn+1 ; i<count ; i++)
        {
         *(lib+i-1)=*(lib+i);
         }
         count--;
     }
}

//===========================================================================
void ShowRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     int nn=EnterNumber(count);
     Tlibrary temp=*(lib+nn);
     cout<<"Data at "<<nn<<" position\n";
     temp.ShowInfo();
     cout<<endl<<"===================================================="<<endl;
    system("pause");
}
//===========================================================================
void FindRecord(Tlibrary *lib,int &count){
     system("cls");

     if (count==0){
          cout<<" No records found!"<<endl;
          system("pause");
        return ;
     }
     char *query = new char [n*3];
     cout<<"\nEnter find query : ";
     cin.getline(query,n*3);
     int founded=0;
     for (int i = 0 ; i < count ; i++){
         if (
         (strcmp(((lib+i)->data1), (query) )==0)
         ||
         (strcmp(((lib+i)->data2), (query) )==0)

         )
         {
          cout<<i<<" : ";
                  (lib+i)->ShowInfo();
                  cout<<endl;
                  founded++;
         }

         

     }
         cout<<"Founded "<<founded<<" record(s)\n";
     cout<<endl<<"===================================================="<<endl;
    system("pause");
}

//===========================================================================
void showmenu(){
//     setlocale(LC_ALL,"cp1251");
      Tlibrary *lib=new Tlibrary[n];
      int count=0;
     char key;
     do
     {
          system("cls");
          cout<<" Your database have "<<count<<" record(s) "<<endl<<endl;
          cout<<" Program main menu: "<<endl<<endl;
          cout<<" 1) Add record"<<endl;
          cout<<" 2) Edit record "<<endl;                   
          cout<<" 3) Delete record "<<endl;                             
          cout<<" 4) Show record "<<endl;                     
          cout<<" 5) Find record "<<endl;                     
         
          cout<<" ESC) Exit "<<endl;                     
          key=getch();         
          switch (key){
                 case '1': AddRecord(lib,count); break;
                 case '2': EditRecord(lib,count); break;
                 case '3': DeleteRecord(lib,count); break;
                 case '4': ShowRecord(lib,count); break;                                                   
                 case '5': FindRecord(lib,count); break;
          }
                             

     } while (key!=27);
}
//===========================================================================
int main(){
    showmenu();
    return 0;
}


Трошки покритикую.
Завдання поставлене наступним чином:
Створити клас бібліотека, де існує назва книги і автор.
Реалізвати пошук книги по автору та ралізувати додавання та
видалення книги із спику

Класс у ООП - це певна абстракція, яка має містити суть класу. Ваш клас містить назву книги та автора + функції редагування та виводу, що є класом для книги, але ніяк не для бібліотеки. І в функції ShowMenu визначений масив об'єктів типу TLibrary - тобто масив книжок.
Функції пошуку книги, додавання та видалення не реалзовані в класі взагалі, вони не відносяться до жодного класу.
трошки змін і ми отримаємо насправді клас "Бібліотека"
1. Створити новий клас, в ньому як private змінні:
Tlibrary *lib=new Tlibrary[n];
int count=0;
(ініціалізацію змінних - у конструктор, звільнення місця, що займає lib у деструктор)
2. всі функції *Record (AddRecord, EditRecord...) зробити членами нового класу. Їм вже не потрібно передавати як параметри посилання на масив та кількість - вони є членами класу.
3. Ну і відповідно у ShowMenu створити объект нового класу (наприклад library) та у case-і викликати library.AddRecord(), library.EditRecord()...
aol
 
Повідомлень: 9
З нами з: 19 травня 2011, 15:04

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

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

Визначити клас БУЛІВСЬКИЙ ВЕКТОР (вектор, координати якого рівні 0 або 1). Перевантажити в класі операції покоординатної кон’юнкції (&); покоординатної диз’юнкції (|); покоординатної інверсії (~); покоординатного виключного АБО (^); а також операції присвоєння (=).

я не шарю як правильно перевантажувати оператор присвоєння(там різні особливості з вказівниками є)
писати всю прогу не треба, просто покажіть один метод або скажіть як треба його робити. координати задаються змінними е1, е2, е3, е4
дякую
Гринько Олександр, 1 група
Аватар користувача
Obi-Van
 
Повідомлень: 80
З нами з: 20 лютого 2011, 19:56

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

Повідомлення Василь » 28 травня 2011, 14:31

Obi-Van написав:Визначити клас БУЛІВСЬКИЙ ВЕКТОР (вектор, координати якого рівні 0 або 1). Перевантажити в класі операції покоординатної кон’юнкції (&); покоординатної диз’юнкції (|); покоординатної інверсії (~); покоординатного виключного АБО (^); а також операції присвоєння (=).

я не шарю як правильно перевантажувати оператор присвоєння(там різні особливості з вказівниками є)
писати всю прогу не треба, просто покажіть один метод або скажіть як треба його робити. координати задаються змінними е1, е2, е3, е4
дякую



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

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

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

Василь написав:
Obi-Van написав:Визначити клас БУЛІВСЬКИЙ ВЕКТОР (вектор, координати якого рівні 0 або 1). Перевантажити в класі операції покоординатної кон’юнкції (&); покоординатної диз’юнкції (|); покоординатної інверсії (~); покоординатного виключного АБО (^); а також операції присвоєння (=).

я не шарю як правильно перевантажувати оператор присвоєння(там різні особливості з вказівниками є)
писати всю прогу не треба, просто покажіть один метод або скажіть як треба його робити. координати задаються змінними е1, е2, е3, е4
дякую


http://radfiz.org.ua/sos/q/1302946526.txt
дивись знизу


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

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

Повідомлення Василь » 28 травня 2011, 15:55

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

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

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

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

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

Повідомлення Batarchuk » 28 травня 2011, 16:36

У меня два задания :
1) создать класс, который реализует стек. А также методы включения и выключения элементов.

2)Создать класс, который реализовывает геометрический вектор. А также методы подсчёта длинны, разницы векторов, сумы, скалярного воспроизведения.
Приєднані файли
6666(2222).rar
Вот часть 2-го задания, которого получилось сделать.
(671 байт) Завантажено 382 разів
Група 3. Батарчук Сергій.
Аватар користувача
Batarchuk
 
Повідомлень: 294
З нами з: 18 жовтня 2010, 18:18
Звідки: Сватове

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

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

Batarchuk написав:У меня два задания :
1) создать класс, который реализует стек. А также методы включения и выключения элементов.

2)Создать класс, который реализовывает геометрический вектор. А также методы подсчёта длинны, разницы векторов, сумы, скалярного воспроизведения.


На когда???

2)Создать класс, который реализовывает геометрический вектор. А также методы подсчёта длинны, разницы векторов, сумы, скалярного воспроизведения.

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

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

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

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

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

cron