IDIVIDI forum Веб сајт
почетна страница почетна страница > Технологија > Хардвер и софтвер
  Активни теми Активни теми RSS - C++ / C Програмирање
  најчести прашања најчести прашања  Пребарувај форум   Настани   Регистрирајте се Регистрирајте се  Влез Влез

C++ / C Програмирање

 Внеси реплика Внеси реплика страница  <1 23456 12>
Автор
Порака
 Оцена: Оцена на тема: 1 Гласови, Просечно 5,00  Тема Пребарувај Тема Пребарувај  Опции за темата Опции за темата
Flix Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)
Клабинг

Регистриран: 14.Септември.2005
Статус: Офлајн
Поени: 9229
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Flix Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 19.Ноември.2008 во 15:15
На тест ми беше дадено и само толку беше објаснато , и доволно е :) го направив до негде само функцијата за replace не ми е нешто во ред.

Инаку ова го учиме исто по бази од податоци, и алгоритми по бази од податоцисреќа ова моментално е најлесното .

Eве што направив.

#include <iostream>
#include <string>
using namespace std;

template <typename Object>
class Sequence {
private:
  enum { CAPACITY = 1000 };
  int       N;   
  Object*   S;
  int       f,r;
     
public:

Sequence(int cap = CAPACITY){
    N         = cap;
    S         = new Object[N];
    f         = 0;
    r         = 0;
  };
 
  int size() const
  {return ((N - f + r) % N);};
 
  bool isEmpty() const
  {return (f==r);};

  Object& get_last() {
    return S[r];};
 

void insert_last (const Object& obj){
S[r] = obj;
r = ((r + 1) % N);};

  Object remove_last(){
Object& obj = S[f];
f = ((f + 1) % N);
return obj;};

 Sequence(const Sequence& st){
  N  = st.N;
  f         = st.f;
  r         = st.r;
  S         = new Object[N];
   for (int i = f; i <= f+st.size(); i++) {   
    S[i%N] = st.S[i%N];
  }};

  Sequence& operator=(const Sequence& st){
  if (this != &st) {       
    delete [] S;              
    N  = st.N;
    f         = st.f;
    r         = st.r;
    S         = new Object[N];
    for (int i = f; i <= f+st.size(); i++) {   
    S[i%N] = st.S[i%N];
    }}return *this;};

  ~Sequence(){ delete [] S; };
 
 


};


void reverse (const Sequence<string> st){
      
       Sequence<string> st1(st.size());
       while (!st.isEmpty()) st1.insert_last(st.remove_last());
       st=st1;};

int main()
{ Sequence<string> names(20);

  char c='y';
  cout<<"Add names in sequence"<<endl;
  while (c=='y') {cout<<"Enter a name: ";string a;cin>>a;
  names.insert_last(a);
  cout<<"Do you wish to enter more names? (y/n)";cin>>c;}
  cout<<endl;
  cout<<"Do you wish to print the sequence in reverse? (y/n)"; cin>>c;
  
  reverse(names);
   
  if (c=='y') while (!names.isEmpty()) cout<<names.remove_last()<<endl;


 
  system("pause"); 
  return 0;   
}

Кон врв
ZoraNaSlobodata Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)

Регистриран: 03.Јуни.2008
Статус: Офлајн
Поени: 3392
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај ZoraNaSlobodata Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 00:03
Која година си,и кај учиш,на електро :O.Бог нека ти е напомош ако си таму :D.
За нея ние живеемъ,за нея ние мремъ!
Кон врв
Flix Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)
Клабинг

Регистриран: 14.Септември.2005
Статус: Офлајн
Поени: 9229
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Flix Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 01:19
Втора година сум :)
Не сум на електро во бугарија студирам на еден интернационален универзитет , компјутерски мрежи и интернет програмирање :)
Кон врв
ZoraNaSlobodata Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)

Регистриран: 03.Јуни.2008
Статус: Офлајн
Поени: 3392
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај ZoraNaSlobodata Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 02:07
Море беља,ова засега претставува тешко за мене,ама сепак немам книга фатено,за една недела имам прв колоквиум :).
Учам нешто како,незнам ни како се вика од шо имам книга фатено...Linked Lists англиски,то е доста просто,изгледа вакви работи допрва ќе учам.Моментално сум скроз концентриран на програмирање.

И велиш функцијата Reverse не ти работи.Какви грешки ти кажува,при компајлирање или рановање?И кои се тие(Што вели компајлерот)?

Изменето од ZoraNaSlobodata - 20.Ноември.2008 во 02:12
За нея ние живеемъ,за нея ние мремъ!
Кон врв
Flix Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)
Клабинг

Регистриран: 14.Септември.2005
Статус: Офлајн
Поени: 9229
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Flix Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 02:13
Па на англиски и студирам и затоа на англиски ми е задачата инаку ова ептен е комплицирано треба до крајот на семестарот до највисоко ниво да го научиме c++
Кон врв
ZoraNaSlobodata Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)

Регистриран: 03.Јуни.2008
Статус: Офлајн
Поени: 3392
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај ZoraNaSlobodata Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 02:56
Па многу уба работа е то шо ти е се на англиски,јас од C++ ни ништо освен основата не учев на македонски.Се што научив беше со помош на англискиот јазик и интернетот.
Ете веќе гледам користите Templates i operator overloading а тоа се веќе пренапредни концепти.Претпоставувам дека имате се научено во врска со Објектно Ориентирано Програмирање.Инаку нема ништо што би ме убедило дека на факултет можи да се научи програмски јазик во целост,најголемото знаење доаѓа од самостојна работа.
За нея ние живеемъ,за нея ние мремъ!
Кон врв
Petkovsky Кликни и види ги опциите
Сениор
Сениор


Регистриран: 09.Декември.2007
Статус: Офлајн
Поени: 239
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Petkovsky Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 17:52
Originally posted by ZoraNaSlobodata ZoraNaSlobodata напиша:

Па многу уба работа е то шо ти е се на англиски,јас од C++ ни ништо освен основата не учев на македонски.Се што научив беше со помош на англискиот јазик и интернетот.
Ете веќе гледам користите Templates i operator overloading а тоа се веќе пренапредни концепти.Претпоставувам дека имате се научено во врска со Објектно Ориентирано Програмирање.Инаку нема ништо што би ме убедило дека на факултет можи да се научи програмски јазик во целост,најголемото знаење доаѓа од самостојна работа.


Koga ke gi pomines site fakulteti vo svetot ke mozes slobodno da kazes dali moze ili ne moze da se nauci programski jazik vo celost
Кон врв
ZoraNaSlobodata Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)

Регистриран: 03.Јуни.2008
Статус: Офлајн
Поени: 3392
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај ZoraNaSlobodata Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 20.Ноември.2008 во 20:03
Рака давам :)И мислам дека е така за скоро секоја струка.
За нея ние живеемъ,за нея ние мремъ!
Кон врв
sanjago4e Кликни и види ги опциите
Група
Група
Лик (аватар)

Регистриран: 23.Јануари.2009
Локација: Macedonia
Статус: Офлајн
Поени: 74
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај sanjago4e Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 25.Јануари.2009 во 22:25
c++ e mnogu lesno da naucite veruvajte mi
Кон врв
Flix Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)
Клабинг

Регистриран: 14.Септември.2005
Статус: Офлајн
Поени: 9229
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Flix Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 26.Јануари.2009 во 00:11
Originally posted by sanjago4e sanjago4e напиша:

c++ e mnogu lesno da naucite veruvajte mi


да да основите лесно се учат нешто понапредно тешко е :)
Кон врв
sanjago4e Кликни и види ги опциите
Група
Група
Лик (аватар)

Регистриран: 23.Јануари.2009
Локација: Macedonia
Статус: Офлајн
Поени: 74
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај sanjago4e Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 26.Јануари.2009 во 18:46


ti javuva greska kaj while ciklusot

#include <iostream>
#include <string>
using namespace std;

template <typename Object>
class Sequence {
private:
enum { CAPACITY = 1000 };
int       N;   
Object*   S;
int       f,r;
     
public:

Sequence(int cap = CAPACITY){
    N        = cap;
    S        = new Object[N];
    f        = 0;
    r        = 0;
};

int size() const
{return ((N - f + r) % N);};

bool isEmpty() const
{return (f==r);};

Object& get_last() {
    return S[r];};


void insert_last (const Object& obj){
S[r] = obj;
r = ((r + 1) % N);};

Object remove_last(){
Object& obj = S[f];
f = ((f + 1) % N);
return obj;};

Sequence(const Sequence& st){
N = st.N;
f        = st.f;
r        = st.r;
S        = new Object[N];
   for (int i = f; i <= f+st.size(); i++) {   
    S[i%N] = st.S[i%N];
}};

Sequence& operator=(const Sequence& st){
if (this != &st) {       
    delete [] S;              
    N = st.N;
    f        = st.f;
    r        = st.r;
    S        = new Object[N];
    for (int i = f; i <= f+st.size(); i++) {   
    S[i%N] = st.S[i%N];
    }}return *this;};

~Sequence(){ delete [] S; };




};


void reverse (const Sequence<string> st){
      
       Sequence<string> st1(st.size());
       while (!st.isEmpty()) st1.insert_last(st.remove_last());
       st=st1;};

int main()
{ Sequence<string> names(20);

char c='y';
cout<<"Add names in sequence"<<endl;
while (c=='y') {cout<<"Enter a name: ";string a;cin>>a;
names.insert_last(a);
cout<<"Do you wish to enter more names? (y/n)";cin>>c;}
cout<<endl;
cout<<"Do you wish to print the sequence in reverse? (y/n)"; cin>>c;

reverse(names);
   
if (c=='y') while (!names.isEmpty()) cout<<names.remove_last()<<endl;



system("pause");
return 0;   
}

Кон врв
Flix Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)
Клабинг

Регистриран: 14.Септември.2005
Статус: Офлајн
Поени: 9229
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Flix Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 26.Јануари.2009 во 19:37
Ја решив таа :)

И еве последната задача за овој семестар што ми беше  за задача да ја решам.
Write a C++ class that implements all the functions of an ordered dictionary

Eве ја ставам па можеби ќе му се најди на некој.намигнување



#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <fstream>
#include <stdlib.h>

using namespace std;

class Student
{
    public:
        friend istream& operator >>(istream& ,Student& );   
        friend ostream& operator <<(ostream& ,Student& );   
        Student();
    private:
        int  id;           
        char name[30];       
        float Cgpa;           
    friend class Node;           
    friend class two_3_4_Tree;   
};



istream& operator >>(istream &in,Student& obj)

{
    cout <<"Please Enter the ID:  "<<endl;
    in >>obj.id;                           

    cout <<"Please Enter the First Name:  "<<endl;
    gets(obj.name);                           

    cout <<"\nPlease Enter the Cgpa:"<<endl;
    in >>obj.Cgpa;                           

    return in;
}

ostream& operator<<(ostream& out,Student& obj)

{
    cout <<"ID of the Student is  :";
    out <<obj.id<<endl;                       
    cout <<"Name of the Student is  :";
    out <<obj.name<<endl;                   
    cout <<"Cgpa of the Student is   :";
    out <<obj.Cgpa<<endl;                   
    return out;
}

Student::Student()

{
    id=-1;
    Cgpa=0;
    name[0]='\0';
}



struct Node
{
    Node();                       
    Student array[3];           
    Node *left;               
    Node *leftMiddle;           
    Node *rightMiddle;           
    Node *right;               
    int findKey(int,int&);       
    int count;                   
};


Node::Node()

{
    for(int i=0;i<3;i++)
        array.id=-1;
    left=leftMiddle=rightMiddle=right=NULL;       
    count = 0;
}

int Node::findKey(int key,int &success)

{
    if(array[0].id==key||array[1].id==key||array[2].id==key)
    {
        success=1;
        return 1;
    }
    if(array[0].id>key)   
        return 2;
    else if((array[0].id<key&&array[1].id>key)||count==1)
        return 3;             
    else if((array[1].id<key&&array[2].id>key)||count==2)
        return 4;             
    else if(array[2].id<key)
        return 5;             
    else
    {
        success=1;
        return 1;
    }
}

class Queue
{
    public:
        Queue(){front=0; rear=0;}     
        int isEmpty();                 
        void enQueue(Node*,int&);     
        Node* deQueue();             
    private:
        Node* data[300];             
        int front,rear;                 
};


void Queue::enQueue(Node* temp,int &count)

{
    if(temp)
    {
        data[rear]=temp;
        rear++;
        count++;
    }
}

Node* Queue::deQueue()

{
    front++;
    return data[front-1];
}

int Queue::isEmpty()

{
    if(front==rear)
        return 1;
    else
        return 0;
}

class two_3_4_Tree
{
    public:
        two_3_4_Tree();                   
        ~two_3_4_Tree();                  
        void resetTree();                  
        int insertElement(Student);          
        void deleteElement(int,int&);      
        void saveToFileInorder();          
        void saveToFileBreath();             
        void retrieveData(int,Student&,int&);   
        void getFromFile(int&);                   
        void printBreath();                       
        void printSortedOrder();               

    private:
        Node *root;                               
        void insertElementHelper(Student,Node*,int&,Node*); 
        void deleteElementHelper(int,Node*,Node*,int&);       
        void mergeLeft(Node*&,Node*&);                       
        void mergeLeftMiddle(Node*&,Node*&);
        void mergeRightMiddle(Node*&,Node*&);
        void mergeRight(Node*&,Node*&);
        void removeLeaf(Node*&,int key,int&);
        Node* searchNode(int,int&);
        void deAllocat(Node*&);
        void arrange(Node* ,Student,int&);                 
        Node* split(Node*,Node*,Student,int&);               
        void inOrderTraversal();                           
        void retrieveHelper(Node*,int,Student&,int&);       
        int checkCountDel(Node*);                           
        Student predecessor(Node* ,int&);
        void breathTraversal(Node*);                   
        void inOrderHelper(Node*);
        void saveHelper(Node* ptr,ofstream& obj);       
        void saveHelperInorder(Node*,ofstream&);
};


two_3_4_Tree::two_3_4_Tree()

{
    root=NULL;
}

two_3_4_Tree::~two_3_4_Tree()

{
    deAllocat(root);
}

void two_3_4_Tree::arrange(Node* ptr,Student key,int &success)

{
    if(key.id==ptr->array[0].id||key.id==ptr->array[1].id||key.id==ptr->array[2].id)
    {
        success=0;          
        return;
    }

    if(key.id<ptr->array[0].id)        
    {
        ptr->array[2]=ptr->array[1];
        ptr->array[1]=ptr->array[0];
        ptr->array[0]=key;
    }
    else
    if(key.id<ptr->array[1].id)       
    {
        ptr->array[2]=ptr->array[1];
        ptr->array[1]=key;
    }
    else
        ptr->array[ptr->count]=key;
    ptr->count++;                          
    success=1;
}

int two_3_4_Tree::insertElement(Student key)
{
    int success=1;
    Node *prev=new Node;        
    Node *ptr=new Node;           
    ptr=root;
    insertElementHelper(key,ptr,success,prev);   
    return success;
}

void two_3_4_Tree::insertElementHelper(Student key,Node *ptr,int &success,Node *prev)

{
    if(root==NULL)               
    {
        prev=NULL;
        Node* temp=new Node;
        temp->array[0]=key;
        temp->count++;
        root=temp;
    }
    else
    {
        if(ptr->count==3)               
        {
            if(success==1)
                ptr=split(ptr,prev,key,success);   
        }
        if(ptr->array[0].id>key.id)       
        {
            if(ptr->left&&success==1)
            {
                prev=ptr;       
                insertElementHelper(key,ptr->left,success,prev);
            }
            else
            {
                arrange(ptr,key,success);       
            }
        }
        else
            if(ptr->array[0].id<key.id&&(ptr->array[1].id>key.id||ptr->array[1].id==-1))
            {           
                if(ptr->leftMiddle&&success==1)
                {
                    prev=ptr;
                    insertElementHelper(key,ptr->leftMiddle,success,prev);
                }
                else
                {
                    arrange(ptr,key,success);
                }
        }
        else
            if(ptr->array[1].id<key.id && (ptr->array[2].id>key.id || ptr->array[2].id==-1) )
            {               
                if(ptr->rightMiddle&&success==1)
                {
                    prev=ptr;
                    insertElementHelper(key,ptr->rightMiddle,success,prev);
                }
                else
                {
                    arrange(ptr,key,success);
                }
            }
        else
        {
            if(ptr->array[2].id<key.id)   
            {
                if(ptr->right&&success==1)
                {
                    prev=ptr;
                    insertElementHelper(key,ptr->right,success,prev);
                }
                else
                {
                    arrange(ptr,key,success);
                }
            }
        }
    }
}

Node* two_3_4_Tree::split(Node* ptr,Node* prev,Student key,int &success)

{
    Node *temp=new Node;                   
    temp->array[0]=ptr->array[2];     
    if(ptr==root)                       
    {
        Node *temp1=new Node;
        temp1->array[0]=ptr->array[1];
        temp1->count++;
        temp1->left=ptr;
        root=temp1;
        prev=root;
        temp1->leftMiddle=temp;
    }
    else
        if(prev->rightMiddle==NULL)   
        {
            if(ptr==prev->left)               
            {
                arrange(prev,ptr->array[1],success);
                prev->rightMiddle=prev->leftMiddle;       
                prev->leftMiddle=temp;
            }
            else
            {
                if(ptr==prev->leftMiddle)   
                {
                    arrange(prev,ptr->array[1],success);
                    prev->rightMiddle=temp;
                }
            }
        }
    else
        if(prev->right==NULL)   
        {
            if(ptr==prev->left)
            {
                prev->right=prev->rightMiddle;
                prev->rightMiddle=prev->leftMiddle;
                prev->leftMiddle=temp;
                arrange(prev,ptr->array[1],success);
            }
            else
                if(ptr==prev->leftMiddle)     
                {                           
                    prev->right=prev->rightMiddle;
                    prev->rightMiddle=temp;
                    arrange(prev,ptr->array[1],success);
                }
            else
                if(ptr==prev->rightMiddle)       
                {
                    prev->right=temp;
                    arrange(prev,ptr->array[1],success);
                }
        }

        ptr->array[1].id=-1;       
        ptr->array[2].id=-1;
        ptr->count=1;               
        temp->count++;

        if(ptr->left!=NULL&&ptr->leftMiddle!=NULL&&ptr->rightMiddle!=NULL&&ptr->right!=NULL)
        {   
            temp->left=ptr->rightMiddle;
            temp->leftMiddle=ptr->right;
            ptr->rightMiddle=NULL;
            ptr->right=NULL;
        }
        if(key.id<prev->array[0].id)       
            return prev->left;
        if(key.id>prev->array[0].id&&(key.id<prev->array[1].id||prev->array[1].id==-1))
            return prev->leftMiddle;
        if(key.id>prev->array[1].id&&(key.id<prev->array[2].id||prev->array[2].id==-1))
            return prev->rightMiddle;
        else
            return prev->right;
}

void two_3_4_Tree::deleteElement(int key,int &success)

{
    Node *sibling=root;       
    Node *prev=NULL;       
    deleteElementHelper(key,sibling,prev,success);
}

void two_3_4_Tree::deleteElementHelper(int key,Node* sibling,Node* prev,int &success)


{
    int prev1=key;
    Student s;
    if(root!=NULL)   
    {
        if(sibling->count==1&&sibling!=root)
        {
            if(sibling==prev->left)           
                mergeLeft(prev,sibling);
            else
            if(sibling==prev->leftMiddle)   
                mergeLeftMiddle(prev,sibling);
            else
            if(sibling==prev->rightMiddle)   
                mergeRightMiddle(prev,sibling);
            else
            if(sibling==prev->right)           
                mergeRight(prev,sibling);
        }
        if(sibling->left==NULL)                   
        {
            removeLeaf(sibling,key,success);
            return;
        }
        prev=sibling;                           
        if(sibling->findKey(key,success)==1)   
        {
            if(sibling->array[0].id==key)       
            {
                s=predecessor(sibling->left,key);   
                deleteElementHelper(key,sibling->left,prev,success); 
            }
            else
            if(sibling->array[1].id==key)           
            {
                s=predecessor(sibling->leftMiddle,key);
                deleteElementHelper(key,sibling->leftMiddle,prev,success);
            }
            else
            if(sibling->array[2].id==key)           
            {
                s=predecessor(sibling->rightMiddle,key);
                deleteElementHelper(key,sibling->rightMiddle,prev,success);
            }
        }                       
        else if(sibling->findKey(key,success)==2)
            deleteElementHelper(key,sibling->left,prev,success);
        else if(sibling->findKey(key,success)==3)
            deleteElementHelper(key,sibling->leftMiddle,prev,success);
        else if(sibling->findKey(key,success)==4)
            deleteElementHelper(key,sibling->rightMiddle,prev,success);
        else if(sibling->findKey(key,success)==5)
            deleteElementHelper(key,sibling->right,prev,success);
    }
    if(s.id!=0)
    {
        Node* temp=searchNode(prev1,success);
        if(temp->array[0].id==prev1)
            temp->array[0]=s;
        else
        if(temp->array[1].id==prev1)
            temp->array[1]=s;
        else
        if(temp->array[2].id==prev1)
            temp->array[2]=s;
    }
    if(root->rightMiddle==NULL)       
    {                               
        if(root->left->count==1&&root->leftMiddle->count==1&&root->left->left==NULL&&root->leftMiddle->left==NULL)
        {
            root->array[1]=root->array[0];
            root->array[0]=root->left->array[0];
            root->array[2]=root->leftMiddle->array[0];
            root->count=3;
            delete root->left;
            delete root->leftMiddle;
            root->left=NULL;
            root->leftMiddle=NULL;
        }
    }
}

int two_3_4_Tree::checkCountDel(Node *ptr)

{
    if(ptr->array[0].id==-1)
        return 0;
    else if(ptr->array[1].id==-1)
        return 1;
    else if(ptr->array[2].id==-1)
        return 2;
    else
        return 3;
}

Node* two_3_4_Tree::searchNode(int key,int &success)

{
    Node* temp=root;
    while(temp->left)
    {
        if(temp->findKey(key,success)==1)   
            return temp;

        else if(temp->findKey(key,success)==2)   
            temp=temp->left;

        else if(temp->findKey(key,success)==3)
            temp=temp->leftMiddle;

        else if(temp->findKey(key,success)==4)
            temp=temp->rightMiddle;

        else if(temp->findKey(key,success)==5)
            temp=temp->right;
    }
    return temp;   
}

void two_3_4_Tree::removeLeaf(Node*& ptr,int key,int &success)

{
    if(ptr->findKey(key,success)==1)   
    {
        if(ptr->array[0].id==key)   
        {
            ptr->array[0]=ptr->array[1];
            ptr->array[1]=ptr->array[2];
            ptr->array[2].id=-1;
        }
        else
            if(ptr->array[1].id==key)   
            {
                ptr->array[1]=ptr->array[2];
                ptr->array[2].id=-1;
            }
        else
            ptr->array[2].id=-1;           
        ptr->count=checkCountDel(ptr);
    }
}

Student two_3_4_Tree::predecessor(Node* current,int& key)

{
    Node* temp=current;
    while(temp->left)         
    {
        if(temp->count==3)
            temp=temp->right;
        else
        if(temp->count==2)
            temp=temp->rightMiddle;
        else
        if(temp->count==1)
            temp=temp->leftMiddle;
    }
    if(temp->count==3)           
    {
        key=temp->array[2].id;
        return temp->array[2];
    }
    else
    if(temp->count==2)
    {
        key=temp->array[1].id;
        return temp->array[1];
    }
    else
    {
        key=temp->array[0].id;
        return temp->array[0];
    }
}


void two_3_4_Tree::mergeLeft(Node*& prev,Node*& sibling)

{
    if(prev->leftMiddle->count==1)           
    {
        sibling->array[1]=prev->array[0];       
        sibling->array[2]=prev->leftMiddle->array[0];

        sibling->count=checkCountDel(sibling);       

        sibling->rightMiddle=prev->leftMiddle->left;   
        sibling->right=prev->leftMiddle->leftMiddle;
        delete prev->leftMiddle;
        prev->leftMiddle=NULL;
        if(prev->count==1)
        {
            Node* temp=root;
            root=root->left;
            delete temp;
        }
        else
        {
            prev->array[0]=prev->array[1];       
            prev->array[1]=prev->array[2];
            prev->array[2].id=-1;

            prev->count=checkCountDel(prev);   
            prev->leftMiddle=prev->rightMiddle;   
            prev->rightMiddle=prev->right;
            prev->right=NULL;
        }
    }
    else       
    {
        sibling->array[1]=prev->array[0];
        sibling->count=2;           
        prev->array[0]=prev->leftMiddle->array[0];
        sibling->rightMiddle=prev->leftMiddle->left;
        prev->leftMiddle->array[0]=prev->leftMiddle->array[1];       
        prev->leftMiddle->array[1]=prev->leftMiddle->array[2];
        prev->leftMiddle->array[2].id=-1;

        prev->leftMiddle->count=checkCountDel(prev->leftMiddle);       
        prev->leftMiddle->left=prev->leftMiddle->leftMiddle;
        prev->leftMiddle->leftMiddle=prev->leftMiddle->rightMiddle;
        prev->leftMiddle->rightMiddle=prev->leftMiddle->right;
        prev->leftMiddle->right=NULL;
    }
}

void two_3_4_Tree::mergeLeftMiddle(Node*& prev,Node*& sibling)

{
    if(prev->left->count==1)           
    {
        sibling->array[2]=sibling->array[0];       
        sibling->array[1]=prev->array[0];
        sibling->array[0]=prev->left->array[0];
        sibling->count=checkCountDel(sibling);
        sibling->right=sibling->leftMiddle;           
        sibling->rightMiddle=sibling->left;
        sibling->leftMiddle=prev->left->leftMiddle;
        sibling->left=prev->left->left;
        delete prev->left;
        prev->left=NULL;
        if(prev->count==1)
        {
            Node* temp=root;
            root=root->leftMiddle;
            delete temp;               
        }
        else           
        {
            prev->array[0]=prev->array[1];       
            prev->array[1]=prev->array[2];
            prev->array[2].id=-1;
            prev->count=checkCountDel(prev);   
            prev->left=prev->leftMiddle;   
            prev->leftMiddle=prev->rightMiddle;
            prev->rightMiddle=prev->right;
            prev->right=NULL;
        }
    }
    else
    if(prev->left->count==2)           
    {
        sibling->array[1]=sibling->array[0];
        sibling->array[0]=prev->array[0];
        sibling->count=2;
        prev->array[0]=prev->left->array[1];       
        prev->left->array[1].id=-1;
        prev->left->count=checkCountDel(prev->left);   
        sibling->rightMiddle=sibling->leftMiddle;       
        sibling->leftMiddle=sibling->left;
        sibling->left=prev->left->rightMiddle;
        prev->left->rightMiddle=NULL;
    }
    else
    if(prev->left->count==3)       
    {
        sibling->array[1]=sibling->array[0];   
        sibling->array[0]=prev->array[0];
        sibling->count=2;           
        prev->array[0]=prev->left->array[2];
        prev->left->array[2].id=-1;
        prev->left->count=checkCountDel(prev->left);   
        sibling->rightMiddle=sibling->leftMiddle;       
        sibling->leftMiddle=sibling->left;
        sibling->left=prev->left->right;
        prev->left->right=NULL;
    }
}

void two_3_4_Tree::mergeRightMiddle(Node*& prev,Node*& sibling)

{
    if(prev->leftMiddle->count==1)               
    {                                           
        sibling->array[2]=sibling->array[0];   
        sibling->array[1]=prev->array[1];
        sibling->array[0]=prev->leftMiddle->array[0];
        sibling->count=checkCountDel(sibling);
        sibling->right=sibling->leftMiddle;     
        sibling->rightMiddle=sibling->left;
        sibling->leftMiddle=prev->leftMiddle->leftMiddle;
        sibling->left=prev->leftMiddle->left;
        delete prev->leftMiddle;
        prev->leftMiddle=NULL;
        prev->array[1]=prev->array[2];   
        prev->array[2].id=-1;
        prev->count=checkCountDel(prev);   
        prev->leftMiddle=prev->rightMiddle;   
        prev->rightMiddle=prev->right;
        prev->right=NULL;
    }
    else
    if(prev->leftMiddle->count==2)   
    {
        sibling->array[1]=sibling->array[0];     
        sibling->array[0]=prev->array[1];
        sibling->count=checkCountDel(sibling);     
        prev->array[1]=prev->leftMiddle->array[1];   
        prev->leftMiddle->array[1].id=-1;
        prev->leftMiddle->count=checkCountDel(prev->leftMiddle); 
        sibling->rightMiddle=sibling->leftMiddle;       
        sibling->leftMiddle=sibling->left;
        sibling->left=prev->leftMiddle->rightMiddle;
        prev->leftMiddle->rightMiddle=NULL;
    }
    else
    if(prev->left->count==3)           
    {
        sibling->array[1]=sibling->array[0];   
        sibling->array[0]=prev->array[1];
        sibling->count=checkCountDel(sibling);   
        prev->array[1]=prev->leftMiddle->array[2];
        prev->leftMiddle->array[2].id=-1;
        prev->leftMiddle->count=checkCountDel(prev->leftMiddle);   
        sibling->rightMiddle=sibling->leftMiddle;
        sibling->leftMiddle=sibling->left;
        sibling->left=prev->leftMiddle->right;
        prev->right->right=NULL;
    }
}

void two_3_4_Tree::mergeRight(Node*& prev,Node*& sibling)

{
    if(prev->rightMiddle->count==1)           
    {
        sibling->array[2]=sibling->array[0];   
        sibling->array[1]=prev->array[2];
        sibling->array[0]=prev->rightMiddle->array[0];
        sibling->count=checkCountDel(sibling);
        prev->array[2].id=-1;

        sibling->rightMiddle=sibling->left;      
        sibling->right=sibling->leftMiddle;
        sibling->left=prev->rightMiddle->left;
        sibling->leftMiddle=prev->rightMiddle->leftMiddle;
        delete prev->rightMiddle;
        prev->rightMiddle=prev->right;
        prev->right=NULL;
        prev->count=checkCountDel(prev);

    }
    else
    if(prev->rightMiddle->count==2)          
    {
        sibling->array[1]=sibling->array[0];   
        sibling->array[0]=prev->array[2];
        sibling->count=checkCountDel(sibling);   
        prev->array[2]=prev->rightMiddle->array[1];   
        prev->rightMiddle->array[1].id=-1;
        prev->rightMiddle->count=checkCountDel(prev->rightMiddle);   
        sibling->rightMiddle=sibling->leftMiddle;
        sibling->leftMiddle=sibling->left;
        sibling->left=prev->rightMiddle->rightMiddle;
        prev->rightMiddle->rightMiddle=NULL;
    }
    else
    if(prev->rightMiddle->count==2)       
    {
        sibling->array[1]=sibling->array[0];   
        sibling->array[0]=prev->array[2];
        sibling->count=checkCountDel(sibling);   
        prev->array[2]=prev->rightMiddle->array[2];
        prev->rightMiddle->array[2].id=-1;
        prev->rightMiddle->count=checkCountDel(prev->rightMiddle);
        sibling->rightMiddle=sibling->leftMiddle;   
        sibling->leftMiddle=sibling->left;
        sibling->left=prev->rightMiddle->right;
        prev->rightMiddle->right=NULL;
    }
}



void two_3_4_Tree::retrieveData(int key,Student& array,int& success)

{
    retrieveHelper(root,key,array,success);   
}

void two_3_4_Tree::retrieveHelper(Node* ptr,int key,Student& array,int &success)

{
    Queue q;
    Node *temp;
    int count=0;
    q.enQueue(ptr,count);       
    while(!q.isEmpty())
    {
        temp=q.deQueue();           
        for(int i=0;i<temp->count;i++)       
        {
            if(temp->array.id==key)           
            {
                array=temp->array;
                success=1;
                return;
            }
            else
                success=0;               
        }
        q.enQueue(temp->left,count);       
        q.enQueue(temp->leftMiddle,count);   
        q.enQueue(temp->rightMiddle,count);   
        q.enQueue(temp->right,count);       
    }
}

void two_3_4_Tree::resetTree()

{
    deAllocat(root);   
}

void two_3_4_Tree::deAllocat(Node*& current)

{
    if(current)           
    {
        Queue q;
        int count=0,value=0;
        Node *temp;
        q.enQueue(current,count);           
        count=0;
        while(!q.isEmpty())               
        {
            temp=q.deQueue();
            q.enQueue(temp->left,count);       
            q.enQueue(temp->leftMiddle,count);   
            q.enQueue(temp->rightMiddle,count);   
            q.enQueue(temp->right,count);       
            delete temp;
            temp=NULL;
        }
    }
    current=NULL;
}



void two_3_4_Tree::printBreath()
{
    breathTraversal(root);
}

void two_3_4_Tree::breathTraversal(Node* ptr)

{
    if(root)       
    {
        Queue q;
        int count=0,value=0;
        Node *temp;
        q.enQueue(ptr,count);           
        count=0;
        while(!q.isEmpty())               
        {
            temp=q.deQueue();
            for(int i=0;temp->array.id!=-1&&i<3;i++)       
                cout <<temp->array.id<<" ";
            cout <<"    ";
            q.enQueue(temp->left,count);       
            q.enQueue(temp->leftMiddle,count);   
            q.enQueue(temp->rightMiddle,count);   
            q.enQueue(temp->right,count);       
            if(value==0)                       
            {
                value=count;
                count=0;
                cout <<endl;
            }
            value--;
        }
    }
    else
        cout <<"No Data Present In The Key"<<endl;
}

void two_3_4_Tree::saveToFileBreath()

{
    ofstream obj;
    char fileName[40];
    cout <<"Please Enter the File Name and Path"<<endl;
    cin >>fileName;
    obj.open(fileName,ios::out);       
    if(!obj)                           
    {
        cout <<"File cannot be created"<<endl;
        return;
    }
    saveHelper(root,obj);               
    obj <<"^Z";
    cout <<"Your Data Has Been Saved"<<endl;
    obj.close();

}

void two_3_4_Tree::saveHelper(Node* ptr,ofstream& obj)

{
    Queue q;
    int count=0,value=0;
    Node *temp;
    q.enQueue(ptr,count);       
    count=0;
    while(!q.isEmpty())           
    {
        temp=q.deQueue();           
        for(int i=0;i<temp->count;i++)       
            obj <<temp->array.id<<" ";
        obj <<"    ";
        q.enQueue(temp->left,count);       
        q.enQueue(temp->leftMiddle,count);   
        q.enQueue(temp->rightMiddle,count);
        q.enQueue(temp->right,count);       
        if(value==0)           
        {
            value=count;
            count=0;
            obj <<'\n';
        }
        value--;
    }
}

void two_3_4_Tree::saveToFileInorder()

{
    ofstream obj;
    char fileName[40];
    cout <<"Please Enter The File Name and Path"<<endl;
    cin >>fileName;

    obj.open(fileName,ios::out);           
    if(!obj)
    {
        cout <<"File Cannot Be Created"<<endl;
        return;
    }
    saveHelperInorder(root,obj);       
    obj <<"^Z";
    obj.close();
}

void two_3_4_Tree::saveHelperInorder(Node *ptr,ofstream& obj)

{
    if(ptr!=0)
    {
        saveHelperInorder(ptr->left,obj);   
        if(ptr->array[0].id!=-1)
            obj <<ptr->array[0].id<<'\n'<<ptr->array[0].name<<'\n'<<ptr->array[0].Cgpa<<'\n';
        saveHelperInorder(ptr->leftMiddle,obj);   
        if(ptr->array[1].id!=-1)
            obj <<ptr->array[1].id<<'\n'<<ptr->array[1].name<<'\n'<<ptr->array[1].Cgpa<<'\n';
        saveHelperInorder(ptr->rightMiddle,obj);
        if(ptr->array[2].id!=-1)
            obj <<ptr->array[2].id<<'\n'<<ptr->array[2].name<<'\n'<<ptr->array[2].Cgpa<<'\n';
        saveHelperInorder(ptr->right,obj);       
    }
}

void two_3_4_Tree::getFromFile(int &success)

{
    ifstream obj;
    Student array;
    char get[30];
    char fileName[30];
    cout <<"Enter the file Name"<<endl;
    cin >>fileName;                   
    obj.open(fileName,ios::in);       
    if(!obj)
    {
        success=0;
        return;
    }
    while(!obj.eof())                   
    {
        obj.getline(get,80);       
        array.id=atoi(get);           
        obj.getline(array.name,80);
        obj.getline(get,80);       
        array.Cgpa=atof(get);
        if(array.id!=0)
            insertElement(array);  
        success=1;
    }
    obj.close();
}

void two_3_4_Tree::inOrderTraversal()

{
    inOrderHelper(root);   
}

void two_3_4_Tree::inOrderHelper(Node* ptr)

{
    if(root==NULL)   
    {
        cout <<"There Is No Data In The Tree"<<endl;
        return;
    }
    else
    if(ptr!=0)
    {
        inOrderHelper(ptr->left);       
        if(ptr->array[0].id!=-1)       
            cout <<ptr->array[0]<<endl;   
        inOrderHelper(ptr->leftMiddle);   
        if(ptr->array[1].id!=-1)
            cout <<ptr->array[1]<<endl; 
        inOrderHelper(ptr->rightMiddle);
        if(ptr->array[2].id!=-1)
            cout <<ptr->array[2]<<endl;     
        inOrderHelper(ptr->right);         
    }
}


void two_3_4_Tree::printSortedOrder()

{
    inOrderTraversal();
}


int main()
{
   
    two_3_4_Tree t,key;      
    Student value,array;           
    char fileName[10];
    fileName[0]='\0';
    int id=0;
    int choice=0;                   
    int success=1;
    while(1)
    {
       
        cout <<"1:  Enter The Record"<<endl;
        cout <<"2:  Delete The Record"<<endl;
        cout <<"3:  Retrive The Record"<<endl;
        cout <<"4:  Print The Data BreathFirst"<<endl;
        cout <<"5:  Print The Data In Sorted Order"<<endl;
        cout <<"6:  Save ID To File BreathFirst"<<endl;
        cout <<"7:  Save Records To File In Sorted Order"<<endl;
        cout <<"8:  Retrive Records From The File"<<endl;
        cout <<"9:  Reset The Tree"<<endl;
        cout <<"Q:  Exit"<<endl;
        choice=getch();           
        switch(choice)
        {
            case '1':{
                cin >>value;
                int success=t.insertElement(value);     
                if(success==0)
                    cout <<"Id Already Exist"<<endl;
                getch();}
            break;

            case '2':{
               
                success=0;
                cout <<"Please enter the ID to be deleted"<<endl;
                cin >>id;
                t.deleteElement(id,success);       
                if(success==1)
                    cout <<"The id "<<id<<" has been deleted"<<endl;
                else
                    cout <<"Id Not Fount"<<endl;
                getch();}
            break;

            case '3':
                {
                success=0;
                cout <<"Please enter the ID of array to be retrieved"<<endl;
                cin >>id;
                t.retrieveData(id,array,success);         
                if(success==1)
                    cout <<array;
                else
                    cout <<"Cannot Found The ID"<<endl;
                getch();}
                break;
            case '4':
                {
                t.printBreath();           
                getch();}
                break;

            case '5':
                {
                t.printSortedOrder();           
                getch();}
                break;

            case '6':
            {
                t.saveToFileBreath();     
                getch();}
                break;

            case '7':
                {
                t.saveToFileInorder();
                cout <<"Your Data Has Been Saved"<<endl;
                getch();}
                break;

            case '8':
                {
                t.getFromFile(success);   
                if(success==0)
                    cout <<"File Not Found"<<endl;
                getch();}
                break;

            case '9':
                {
                t.resetTree();       
                cout <<"Tree Has Been Reseted"<<endl;
                getch();}
                break;
            case 'Q':
            case 'q':
                exit(0);           
                break;
        }
    }
system ("pause");
return 0;}

Кон врв
sanjago4e Кликни и види ги опциите
Група
Група
Лик (аватар)

Регистриран: 23.Јануари.2009
Локација: Macedonia
Статус: Офлајн
Поени: 74
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај sanjago4e Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 27.Јануари.2009 во 10:27
baram programa vo c++ ista kako ona sto e so iks tocka,no da bide so iganje na sah
vo programata mora da se opfatat site potezi na sekoja od figurite ako nekoj znae da mi kaze nesto oti ne mozam da ja napravam celata programa

Изменето од sanjago4e - 27.Јануари.2009 во 10:28
Кон врв
Flix Кликни и види ги опциите
Сениор
Сениор
Лик (аватар)
Клабинг

Регистриран: 14.Септември.2005
Статус: Офлајн
Поени: 9229
Опции за коментарот Опции за коментарот   Благодарам (0) Благодарам(0)   Цитирај Flix Цитирај  Внеси репликаОдговор Директен линк до овој коментар Испратена: 27.Јануари.2009 во 13:41
Originally posted by sanjago4e sanjago4e напиша:

baram programa vo c++ ista kako ona sto e so iks tocka,no da bide so iganje na sah
vo programata mora da se opfatat site potezi na sekoja od figurite ako nekoj znae da mi kaze nesto oti ne mozam da ja napravam celata programa



За шах тешко ама еве ти програма како x и точка па можи ќе ти помогни.

Ако најдам за шах ќе ти пратам.

http://rapidshare.com/files/190130493/Trica.rar.html

И еве имам за шах ама од C e ќе смениш нешто за C++ да биди не е проблем.

http://rapidshare.com/files/190132241/Chess_Game1888205142005.zip.html








Изменето од FLipsi - 27.Јануари.2009 во 13:45
Кон врв
 Внеси реплика Внеси реплика страница  <1 23456 12>
  Сподели тема   

Скок до Овластувања Кликни и види ги опциите

Forum Software by Web Wiz Forums® version 10.03
Copyright ©2001-2011 Web Wiz Ltd.

Страницата е генерирана за 0,344 секунди.