<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Projekt Double Hashing]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Hab den Auftrag ein Programm zu schreiben, dass eine Tabelle erstellt und mittls DOubleHashing 200000 Werte einfügt.</p>
<p>Mein Aufratgeber hat mir einen Container vorgegeben von dem mein Header erbt.</p>
<pre><code class="language-cpp">#ifndef DOUBLEHASHING_H
#define DOUBLEHASHING_H

#include &lt;iostream&gt;
#include &quot;Container.h&quot;

enum Status { empty, filled, emptyagain };

class Ex;//Klasse für nichtimplementierte Methoden

template &lt;typename E&gt;
class DoubleHashing : public Container&lt;E&gt;
{

    size_t n;
    size_t nmax;
    size_t pos;

    E* values;
    Status* status;

    void sort ( ) const;

public:

    DoubleHashing(size_t laenge=30);
    virtual ~DoubleHashing(  );

    using Container&lt;E&gt;::add;
    virtual void add( const E e[], size_t len );

    using Container&lt;E&gt;::remove;
    virtual void remove( const E [], size_t  )
    {
        throw Ex();
    }

    virtual bool member( const E&amp; e ) const;
    virtual size_t size( ) const
    {
        throw Ex();
    }

    virtual size_t apply ( const Functor&lt;E&gt;&amp;,Order= dontcare) const
    {
        throw Ex();
    }

    virtual E min() const
    {
        throw Ex();
    }
    virtual E max() const
    {
        throw Ex();
    }

    virtual std::ostream&amp; print( std::ostream&amp; o ) const;

};

class DHEmptyException : public ContainerException
{
public:
    virtual const char * what() const throw()
    {
        return &quot;empty&quot;;
    }

};

class Ex : public ContainerException
{
public:
    virtual const char * what() const throw()
    {
        return &quot;not implemented&quot;;
    }

};

template &lt;typename E&gt;
DoubleHashing&lt;E&gt;::DoubleHashing ( size_t laenge) :  n(0), nmax (laenge)
{

    values = new E[nmax];
    status = new Status[nmax];
    for (size_t i = 0; i &lt; nmax; ++i) status [i] = empty;

}

template &lt;typename E&gt;
DoubleHashing&lt;E&gt;::~DoubleHashing ( )
{

    delete[] values;
    delete[] status;

}

template &lt;typename E&gt;
void DoubleHashing&lt;E&gt;::add ( const E e[], size_t len )
{

    if ((n+len) &gt;(nmax*0.7))
    {

        size_t newnmax=nmax;

        while ((n + len) &gt; newnmax)
        {

            newnmax = ( newnmax * 1.2 ) + 2;
        }

        E* newvalues = new E[newnmax];
        Status * newstatus = new Status[newnmax];

        for (size_t i = 0; i &lt; newnmax; ++i) newstatus [i] = empty;

        //NEu Hashen

        for (size_t i = 0; i &lt; nmax; ++i)
        {

            if(status[i] == filled)
            {

                size_t key;
                key = hashValue&lt;E&gt;(values[i]);

                pos = key % newnmax; //erste Hashfunktion
                if ( newstatus[pos] != filled )
                {

                    newvalues[pos] =values[i];
                    newstatus[pos] =filled;

                }
                else
                {
                    //zweite Hashfunktion

                    size_t seckey;
                    size_t newpos;

                    seckey = 2*(hashValue&lt;E&gt;(e[i]) % 10)+1;

                    newpos = (pos + seckey) % newnmax;

                    for (; newstatus[newpos] == filled;)
                    {
                        if (newpos != pos)
                            newpos = (newpos + seckey) % newnmax;
                    }

                    newvalues[newpos] = values[i];
                    newstatus[newpos] = filled;

                }
            }
            delete[] values;
            delete[] status;

            values=newvalues;
            status=newstatus;
            nmax=newnmax;
        }
    }

    size_t pos;
    size_t key;

    for (size_t i = 0; i &lt; len; ++i)
    {

        if (!member(e[i]))
        {
            key = hashValue&lt;E&gt;(e[i]);

            pos = key % nmax; //erste Hashfunktion

            if ( status[pos] != filled )
            {

                values[pos] = e[i];
                status[pos] = filled;
                n++;
            }

            else
            {
                //zweite Hashfunktion

                size_t seckey;
                size_t newpos;

                seckey = 2*(hashValue&lt;E&gt;(e[i]) % 10)+1;

                newpos = (pos + seckey) % nmax;

                for (; status[newpos] == filled;)
                {
                    if (newpos != pos)
                        newpos = (newpos + seckey) % nmax;
                }

                values[newpos] = e[i];
                status[newpos] = filled;
                n++;
            }

        }
    }
}

template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{

    size_t key;
    size_t pos;

    key = hashValue&lt;E&gt;(e);
    pos = key % nmax;

    if(status[pos] == filled)
    {

        if (values[pos] == e) return true;
        else
        {
            return false;
        }

    }
    else
    {

        size_t seckey;
        size_t newpos;

        seckey = 2*((hashValue&lt;E&gt;(e))%10)+1;

        newpos = (pos + seckey) % nmax;

        while (newpos != pos)
        {

            if (status[newpos] == empty) return false;

            else
            {

                if(status[newpos] == filled)
                {

                    if (values[newpos] == e) return true;
                }

                else newpos = (newpos + seckey) % nmax;
            }
        }

        return false;

    }

}

template &lt;typename E&gt;
std::ostream&amp; DoubleHashing&lt;E&gt;::print( std::ostream&amp; o ) const
{
    o &lt;&lt; &quot;HashTable[ n=&quot; &lt;&lt; n &lt;&lt; &quot; nmax=&quot; &lt;&lt; nmax &lt;&lt; &quot; values=&quot;;
    for (size_t i = 0; i &lt; nmax; ++i)
    {
        if (status[i] == filled ) o &lt;&lt; ' ' &lt;&lt; values[i] &lt;&lt; ' ' &lt;&lt; status[i] &lt;&lt; &quot;, &quot;;
    }
    o &lt;&lt; &quot; ]&quot;;
    return o;
}

#endif
</code></pre>
<p>Das wäre mein Programm und ich bin echt am verzweifeln da ich den Fehler nicht finde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Vielleicht könnt ihr mir da weiter helfen!</p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303586/projekt-double-hashing</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 09:16:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303586.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 May 2012 17:02:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Projekt Double Hashing on Thu, 17 May 2012 17:37:38 GMT]]></title><description><![CDATA[<p>Hi Leute!</p>
<p>Hab den Auftrag ein Programm zu schreiben, dass eine Tabelle erstellt und mittls DOubleHashing 200000 Werte einfügt.</p>
<p>Mein Aufratgeber hat mir einen Container vorgegeben von dem mein Header erbt.</p>
<pre><code class="language-cpp">#ifndef DOUBLEHASHING_H
#define DOUBLEHASHING_H

#include &lt;iostream&gt;
#include &quot;Container.h&quot;

enum Status { empty, filled, emptyagain };

class Ex;//Klasse für nichtimplementierte Methoden

template &lt;typename E&gt;
class DoubleHashing : public Container&lt;E&gt;
{

    size_t n;
    size_t nmax;
    size_t pos;

    E* values;
    Status* status;

    void sort ( ) const;

public:

    DoubleHashing(size_t laenge=30);
    virtual ~DoubleHashing(  );

    using Container&lt;E&gt;::add;
    virtual void add( const E e[], size_t len );

    using Container&lt;E&gt;::remove;
    virtual void remove( const E [], size_t  )
    {
        throw Ex();
    }

    virtual bool member( const E&amp; e ) const;
    virtual size_t size( ) const
    {
        throw Ex();
    }

    virtual size_t apply ( const Functor&lt;E&gt;&amp;,Order= dontcare) const
    {
        throw Ex();
    }

    virtual E min() const
    {
        throw Ex();
    }
    virtual E max() const
    {
        throw Ex();
    }

    virtual std::ostream&amp; print( std::ostream&amp; o ) const;

};

class DHEmptyException : public ContainerException
{
public:
    virtual const char * what() const throw()
    {
        return &quot;empty&quot;;
    }

};

class Ex : public ContainerException
{
public:
    virtual const char * what() const throw()
    {
        return &quot;not implemented&quot;;
    }

};

template &lt;typename E&gt;
DoubleHashing&lt;E&gt;::DoubleHashing ( size_t laenge) :  n(0), nmax (laenge)
{

    values = new E[nmax];
    status = new Status[nmax];
    for (size_t i = 0; i &lt; nmax; ++i) status [i] = empty;

}

template &lt;typename E&gt;
DoubleHashing&lt;E&gt;::~DoubleHashing ( )
{

    delete[] values;
    delete[] status;

}

template &lt;typename E&gt;
void DoubleHashing&lt;E&gt;::add ( const E e[], size_t len )
{

    if ((n+len) &gt;(nmax*0.7))
    {

        size_t newnmax=nmax;

        while ((n + len) &gt; newnmax)
        {

            newnmax = ( newnmax * 1.2 ) + 2;
        }

        E* newvalues = new E[newnmax];
        Status * newstatus = new Status[newnmax];

        for (size_t i = 0; i &lt; newnmax; ++i) newstatus [i] = empty;

        //NEu Hashen

        for (size_t i = 0; i &lt; nmax; ++i)
        {

            if(status[i] == filled)
            {

                size_t key;
                key = hashValue&lt;E&gt;(values[i]);

                pos = key % newnmax; //erste Hashfunktion
                if ( newstatus[pos] != filled )
                {

                    newvalues[pos] =values[i];
                    newstatus[pos] =filled;

                }
                else
                {
                    //zweite Hashfunktion

                    size_t seckey;
                    size_t newpos;

                    seckey = 2*(hashValue&lt;E&gt;(e[i]) % 10)+1;

                    newpos = (pos + seckey) % newnmax;

                    for (; newstatus[newpos] == filled;)
                    {
                        if (newpos != pos)
                            newpos = (newpos + seckey) % newnmax;
                    }

                    newvalues[newpos] = values[i];
                    newstatus[newpos] = filled;

                }
            }
            delete[] values;
            delete[] status;

            values=newvalues;
            status=newstatus;
            nmax=newnmax;
        }
    }

    size_t pos;
    size_t key;

    for (size_t i = 0; i &lt; len; ++i)
    {

        if (!member(e[i]))
        {
            key = hashValue&lt;E&gt;(e[i]);

            pos = key % nmax; //erste Hashfunktion

            if ( status[pos] != filled )
            {

                values[pos] = e[i];
                status[pos] = filled;
                n++;
            }

            else
            {
                //zweite Hashfunktion

                size_t seckey;
                size_t newpos;

                seckey = 2*(hashValue&lt;E&gt;(e[i]) % 10)+1;

                newpos = (pos + seckey) % nmax;

                for (; status[newpos] == filled;)
                {
                    if (newpos != pos)
                        newpos = (newpos + seckey) % nmax;
                }

                values[newpos] = e[i];
                status[newpos] = filled;
                n++;
            }

        }
    }
}

template &lt;typename E&gt;
bool DoubleHashing&lt;E&gt;::member ( const E&amp; e ) const
{

    size_t key;
    size_t pos;

    key = hashValue&lt;E&gt;(e);
    pos = key % nmax;

    if(status[pos] == filled)
    {

        if (values[pos] == e) return true;
        else
        {
            return false;
        }

    }
    else
    {

        size_t seckey;
        size_t newpos;

        seckey = 2*((hashValue&lt;E&gt;(e))%10)+1;

        newpos = (pos + seckey) % nmax;

        while (newpos != pos)
        {

            if (status[newpos] == empty) return false;

            else
            {

                if(status[newpos] == filled)
                {

                    if (values[newpos] == e) return true;
                }

                else newpos = (newpos + seckey) % nmax;
            }
        }

        return false;

    }

}

template &lt;typename E&gt;
std::ostream&amp; DoubleHashing&lt;E&gt;::print( std::ostream&amp; o ) const
{
    o &lt;&lt; &quot;HashTable[ n=&quot; &lt;&lt; n &lt;&lt; &quot; nmax=&quot; &lt;&lt; nmax &lt;&lt; &quot; values=&quot;;
    for (size_t i = 0; i &lt; nmax; ++i)
    {
        if (status[i] == filled ) o &lt;&lt; ' ' &lt;&lt; values[i] &lt;&lt; ' ' &lt;&lt; status[i] &lt;&lt; &quot;, &quot;;
    }
    o &lt;&lt; &quot; ]&quot;;
    return o;
}

#endif
</code></pre>
<p>Das wäre mein Programm und ich bin echt am verzweifeln da ich den Fehler nicht finde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Vielleicht könnt ihr mir da weiter helfen!</p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212615</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Thu, 17 May 2012 17:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to Projekt Double Hashing on Thu, 17 May 2012 17:29:07 GMT]]></title><description><![CDATA[<p>pepschi schrieb:</p>
<blockquote>
<p>von dem mein Header erbt.</p>
</blockquote>
<p>Aha.</p>
<blockquote>
<p>viel unlesbarer Code</p>
</blockquote>
<p>Tag-ig.</p>
<blockquote>
<p>size_t</p>
</blockquote>
<p>Nanu, wo kommt der denn her?</p>
<blockquote>
<p>virtual std::ostream&amp; print( std::ostream&amp; o ) const;</p>
</blockquote>
<p>Süß.</p>
<blockquote>
<p>values = new E[nmax];<br />
status = new Status[nmax];</p>
</blockquote>
<p>Ojeh.</p>
<blockquote>
<p>for (size_t i = 0; i &lt; nmax; ++i) status [i] = empty;</p>
</blockquote>
<p>Naja.</p>
<blockquote>
<p>template &lt;typename E&gt;<br />
DoubleHashing&lt;E&gt;::~DoubleHashing ( )</p>
</blockquote>
<p>Irgendwie habe ich das Bedürfnis, noch andere Funktionen zu schreiben.</p>
<blockquote>
<p>E* newvalues = new E[newnmax];<br />
Status * newstatus = new Status[newnmax];</p>
</blockquote>
<p>Eieiei.</p>
<blockquote>
<p>size_t key;<br />
key = hashValue&lt;E&gt;(values[i]);</p>
</blockquote>
<p>Niedlich.</p>
<blockquote>
<p>pos = key % newnmax; //erste Hashfunktion</p>
</blockquote>
<p>Kreativ.</p>
<blockquote>
<p>{<br />
key = hashValue&lt;E&gt;(e[i]);</p>
<p>pos = key % nmax; //erste Hashfunktion</p>
<p>if ( status[pos] != filled )<br />
{</p>
<p>values[pos] = e[i];<br />
status[pos] = filled;<br />
n++;<br />
}</p>
</blockquote>
<p>Abstrakt.</p>
<blockquote>
<p>den Fehler</p>
</blockquote>
<p>Soso, ein Fehler.</p>
<blockquote>
<p>Vielleicht könnt ihr mir da weiter helfen!</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/200753" rel="nofollow">Du brauchst Hilfe?</a></p>
<blockquote>
<p>Mein Aufratgeber</p>
</blockquote>
<p>Du verdienst Geld <strong>damit</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212625</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 17 May 2012 17:29:07 GMT</pubDate></item><item><title><![CDATA[Reply to Projekt Double Hashing on Thu, 17 May 2012 17:38:44 GMT]]></title><description><![CDATA[<p>nein bekomme kein geld muss das auf der uni machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>und bin echt ein anfänger! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212630</guid><dc:creator><![CDATA[pepschi]]></dc:creator><pubDate>Thu, 17 May 2012 17:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to Projekt Double Hashing on Thu, 17 May 2012 17:50:12 GMT]]></title><description><![CDATA[<p>pepschi schrieb:</p>
<blockquote>
<p>und bin echt ein anfänger! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
</blockquote>
<p>Darauf zielen meine Kommentare ab.</p>
<p>Wie wäre es, wenn du die Sprache lernst, <strong>bevor</strong> du solch ein (nicht so ganz einfaches) Projekt beginnst?</p>
<p>Grundlegende Stilregeln, die wichtigsten Mittel der Standardbibliothek, die einfachsten &quot;best practices&quot;, Übung in grundlegender Abstraktion und die wichtigsten Grunddesigns. Das alles fehlt dir. Irgendwie ein bisschen überraschend, da du anscheinend ein paar schwierigere Syntaxfallstricke und ein paar fortgeschrittenere Techniken doch ganz gut beherrscht. Zusammenkopiert? &quot;Gruppen&quot;arbeit? Einseitige Ausbildung?</p>
<p>Übrigens hast du immer noch keine Frage gestellt. Wir sehen nur einen Haufen unformatierten Code<sup>*</sup>. Da soll also ein Fehler drin sein. Soso. Lies dir mal den ersten Link in meiner Signatur durch.</p>
<p><sup>*</sup>: Guck mal im Editorfenster links unter den Smileys</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212637</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 17 May 2012 17:50:12 GMT</pubDate></item></channel></rss>