Hi leute ich hab da so ein problem ich kann irgendwie nur c++ c garnet und wollt fragen ob mir das progrämmchen in c umschreiben kann BITTE
wenns geht noch datensatz speichen auf diskette hinzufügen so das die eingeben daten net verloren gehn sonder das man den daten satz wieder laden kann
big thx der c noob
#include<iostream>
#include<string>
#include<ctype.h>
#include<assert.h>
using namespace std;
template<class T>
class Vector
{
private:
T *m_data;
int m_size;
enum{GROW_SIZE=10};
public:
Vector(int size)
{
m_size=size;
m_data=new T[m_size];
};
Vector(const Vector &derAndereVector)
{
m_size=derAndereVector.m_size;
m_data=new T[m_size];
for(int i=0;i<m_size;++i)
m_data=derAndereVector.m_data;
};
~Vector()
{
delete[] m_data;
};
T& operator[](int index)
{
assert(index>=0);
assert(index<m_size);
return m_data[index];
};
int getSize()
{
return m_size;
};
void grow(int newSize)
{
if(newSize>m_size)
{
newSize+=GROW_SIZE;
T *newData=new T[newSize];
for(int i=0;i<m_size;++i)
newData=m_data;
delete[] m_data;
m_size=newSize;
m_data=newData;
};
};
Vector &operator=(const Vector &derAndereVector)
{
if(&derAndereVector!=this)
{
delete[] m_data;
m_size=derAndereVector.m_size;
m_data=new T[m_size];
for(int i=0;i<m_size;++i)
m_data=derAndereVector.m_data;
}
return *this;
}
void moveDown(int pa, int pe, int newstart)
{
int einheit = pa - newstart;
for (int n=newstart;n<=pe-einheit;n++)
{
m_data[n]=m_data[n + einheit];
}
};
void moveUp(int pa, int pe, int newstart)
{
int einheit = newstart - pa;
for(int i=pe;i>=pa;i--)
m_data[i+einheit]=m_data;
}
};
template<class T,class C=DefaultComparator<T> >
class SortedArray
{
private:
Vector<T> m_data;
C m_comp;
int m_size;
int findIndex(const T &tofind)
{
if(m_size > 2)
{
int oben=m_size-1, unten=0, mitte=int(oben/2);
do
{
if (!(m_comp.lessThan(tofind,m_data[mitte])))
{
unten=mitte;
mitte=int(mitte+((oben-mitte)/2));
}
else
{
oben=mitte-1;
mitte=int(mitte-(mitte-unten)/2);
};
}while(oben-unten>1);
if(!(m_comp.lessThan(tofind,m_data[oben])))
return oben;
else
return unten;
}
else
{
if (m_size == 2)
{
if(!(m_comp.lessThan(tofind,m_data[1])))
return 1;
else
return 0;
}
else
return 0;
}
};
public:
SortedArray()
:m_data(10)
{
m_size=0;
};
bool has(const T &toFind)
{
return find(toFind)!=0;
};
void insert(const T &toInsert)
{
int pos;//Position, hinter der eingefügt werden soll
m_data.grow(m_size+1);
if(m_size==0)
pos=-1;
else
{
pos=findIndex(toInsert);
if(pos==0)
if(m_comp.lessThan(toInsert,m_data[pos]))
pos=-1;
};
m_data.moveUp(pos+1,m_size-1,pos+2);
m_data[pos+1]=toInsert;
++m_size;
};
int find(const T &toFind)
{
if(m_size==0)
return -1;
else
{
int index=findIndex(toFind);
if(m_comp.isEqual(toFind,m_data[index]))
return index;
else
return -1;
}
};
int remove(const T &toRemove)
{
if(m_size>0)
{
int found=findIndex(toRemove);
if(m_comp.isEqual(m_data[found],toRemove))
{
m_data.moveDown(found+1,m_size,found);
--m_size;
return found;
}
else
return -1;
}
else
return -1;
};
void print()
{
for(int n=0;n<m_size;n++)
cout<<n<<": "<<m_data[n]<<endl;
cout<<endl;
};
int getSize()
{
return m_size;
};
const T &operator[](int index)
{
assert(index<m_size);
return m_data[index];
};
};
string tolower(const string &str)
{
string result=str;
for(int i=0;i<result.size();++i)
result=tolower(result);
return result;
};
class IgnoreCaseStringComparator
{
public:
bool lessThan(const string &a,const string &b)
{
return tolower(a)<tolower(b);
};
bool isEqual(const string &a,const string &b)
{
return tolower(a)==tolower(b);
};
};
template<class T>
class DefaultComparator
{
public:
bool lessThan(const T &a,const T &b)
{
return a<b;
};
bool isEqual(const T &a,const T &b)
{
return a==b;
};
};
template<class KEY,class VALUE>
class DictionaryEntry
{
private:
KEY m_key;
VALUE m_value;
public:
DictionaryEntry()
{
};
DictionaryEntry(const KEY &key)
:m_key(key)
{
};
DictionaryEntry(const KEY &key,const VALUE &value)
:m_key(key),m_value(value)
{
};
const KEY &getKey() const
{
return m_key;
};
VALUE &getValue() const
{
return const_cast<VALUE&>(m_value);
};
};
template<class KEY,class VALUE,class KEY_COMPARATOR>
class DictionaryEntryComparator
{
private:
KEY_COMPARATOR m_comp;
public:
bool lessThan(const DictionaryEntry<KEY,VALUE> &a,const
DictionaryEntry<KEY,VALUE> &b)
{
return m_comp.lessThan(a.getKey(),b.getKey());
};
bool isEqual(const DictionaryEntry<KEY,VALUE> &a,const
DictionaryEntry<KEY,VALUE> &b)
{
return m_comp.isEqual(a.getKey(),b.getKey());
};
};
template<class KEY,class VALUE,class KEY_COMPARATOR=DefaultComparator<KEY> >
class Dictionary
{
private:
SortedArray
<
DictionaryEntry<KEY,VALUE>,
DictionaryEntryComparator<KEY,VALUE,KEY_COMPARATOR>
> m_data;
public:
void insert(const KEY &key,const VALUE &value)
{
m_data.insert(DictionaryEntry<KEY,VALUE>(key,value));
};
int getSize()
{
return m_data.getSize();
};
const DictionaryEntry<KEY,VALUE> &operator[](int index)
{
return m_data[index];
};
int find(const KEY &key)
{
return m_data.find(DictionaryEntry<KEY,VALUE>(key));
}
int remove(const KEY &toremove)
{
return m_data.remove(DictionaryEntry<KEY,VALUE>(toremove));
}
};
void main()
{
Dictionary<string,string> buch;
DictionaryEntry<string,string> temp;
bool nochmal=true;
while(nochmal)
{
cout<<"Menue"<<endl;
cout<<"1 Name einfuegen"<<endl;
cout<<"2 Name suchen"<<endl;
cout<<"3 Name aendern"<<endl;
cout<<"4 Name loeschen"<<endl;
cout<<"5 Liste anzeigen"<<endl;
cout<<"0 Programm beenden"<<endl;
int eingabe;
cin>>eingabe;
string name;
string nummer;
switch(eingabe)
{
int index,i;
case 0:
nochmal=false;
break;
case 1:// Name einfügen
cout<<"Name : ";
cin>>name;
cout<<"Nummmer: ";
cin>>nummer;
buch.insert(name,nummer);
break;
case 2:// Name suchen
cout<<"Gesuchter Name: ";
cin>>name;
index = buch.find(name);
if(index == -1)
cout<<"Name befindet sich nicht im Telefonbuch!"<<endl;
else
{
temp = buch[index];
cout<<"Name : "<<temp.getKey()<<endl;
cout<<"Nummer: "<<temp.getValue()<<endl;
}
break;
case 3:// Name aendern
cout<<"Zu aenderner Name: ";
cin>>name;
if(buch.remove(name) == -1)
cout<<"Name befindet sich nicht im Telefonbuch!"<<endl;
else
{
cout<<"Bitte Aenderungen eintragen:"<<endl;
cout<<"Name :";cin>>name;
cout<<"Nummer:";cin>>nummer;
buch.insert(name,nummer);
}
break;
case 4:// Name loeschen
cout<<"Zu loeschender Name: ";
cin>>name;
if(buch.remove(name) == -1)
cout<<"Name befindet sich nicht im Telefonbuch!"<<endl;
else
cout<<"Eintrag wurde erfolgreich geloescht!"<<endl;
break;
case 5:// Liste anzeigen
for (i=0;i<buch.getSize();i++)
{
temp=buch;
cout<<"Name : "<<temp.getKey()<<endl;
cout<<"Nummer: "<<temp.getValue()<<endl;
}
break;
default:
cout<<"Diesen Menuepunkt gibt es nicht!"<<endl;
};
};
};
c noob Gast |