Erste Schritte beim Programmieren mit Eurer Hilfe



  • Ich blick den Ablauf des Progs nicht durch.
    dadurch weiß ich auch nemme, welche funktion ich schreiben muss, um die okts auszulesen.

    Sagen ma's so, ich weiß das dort einzelne funktionen sind, die ineinander greifen.

    😞 Also viel plan von nichts....



  • Hallo, wisst ihr rat?
    und zwar soll der Rückgabewert eine von den Hostwerten sein (habe ich fett markiert) (je nachdem welches netz eingegeben wurde) die ich durch eine if-schleife getrennt habe.

    [/cpp]#include <stdio.h>
    #include <iostream.h>

    //Eigener Datentyp Struktur anlegen
    struct IP
    {
    int dez_okt1,dez_okt2,dez_okt3,dez_okt4;
    int bin_okt1[8],bin_okt2[8],bin_okt3[8],bin_okt4[8];
    int hostanzahl;
    };

    //Wandelt Dezimalzahl zw. 0-255 in ein 8 Bit Feld um
    void dezi_to_bin(int dezimalzahl, int *binaer_feld)
    {
    int modrest=0, divisionsrest, i;

    //Initialisierung
    for (i=0;i<=7;i++)
    {
    binaer_feld[i] = 0;
    }

    divisionsrest = dezimalzahl;
    i=7;
    do
    {
    modrest=divisionsrest%2;
    binaer_feld[i]=modrest;
    divisionsrest=divisionsrest/2;
    i--;
    }

    while(divisionsrest != 0);
    }

    void Eingabe(IP &IP_1)
    {
    char Punkt;
    //Eingabe der IP_Adresse
    cout << "Geben Sie eine IP Adresse ein: (192.1.1.1): ";
    cin >>IP_1.dez_okt1>>Punkt>>IP_1.dez_okt2>>Punkt>>IP_1.dez_okt3>>Punkt>>IP_1.dez_okt4;

    dezi_to_bin(IP_1.dez_okt1,IP_1.bin_okt1);
    dezi_to_bin(IP_1.dez_okt2,IP_1.bin_okt2);
    dezi_to_bin(IP_1.dez_okt3,IP_1.bin_okt3);
    dezi_to_bin(IP_1.dez_okt4,IP_1.bin_okt4);
    }

    void AusgabeBin(IP &IP_1)
    {
    //Ausgabe der IP_Adresse binär
    for(int i=0;i<8;i++)
    {
    cout <<IP_1.bin_okt1[i];
    }
    cout <<".";

    for(int i=0;i<8;i++)
    {
    cout <<IP_1.bin_okt2[i];
    }
    cout <<".";

    for(int i=0;i<8;i++)
    {
    cout <<IP_1.bin_okt3[i];
    }
    cout <<".";

    for(int i=0;i<8;i++)
    {
    cout <<IP_1.bin_okt4[i];
    }
    }

    //Subnetzmaske bestimmung
    void sub(IP &IP_1)
    {
    int i,host=1;

    if (IP_1.dez_okt1 >= 192 && IP_1.dez_okt1 <= 223)
    {
    for (i=1;i<=8;i++)
    {
    host = host* 2;
    }
    host = host -3;

    cout << endl << host << endl;
    }

    if (IP_1.dez_okt1 >= 128 && IP_1.dez_okt1 <= 191)
    {
    for (i=1;i<=8;i++)
    {
    host = host* 2;
    }
    host = (host -1)*(host -1)-2;

    cout << "Es sind " << host << " Hosts moeglich";
    }

    if (IP_1.dez_okt1 > 0 && IP_1.dez_okt1 <= 126)
    {
    for (i=1;i<=8;i++)
    {
    host = host* 2;
    }
    host = (host -1)(host -1)(host -1)-2;

    cout << "Es sind " << host << " Hosts moeglich";
    }
    }

    void main()
    {
    IP IP_1;
    Eingabe(IP_1);
    cout <<endl;
    AusgabeBin(IP_1);
    cout <<endl;
    sub (IP_1);

    getchar();
    }[cpp]



  • if-Schleife? kenn ich nich.
    es heißt <iostream> nicht <iostream.h>
    Deinen Code habe ich nicht durchgelesen sieht mir zu unübersichtlich aus (mach die c++-Tags bitte richtigrum und rück den Text ein)

    mfg kaffee



  • kaffee schrieb:

    es heißt <iostream> nicht <iostream.h>

    Ältere Compiler akzeptieren (nur) <iostream.h>. Allerdings ist der korrekte Header schon länger <iostream>.

    Erwartest du, dass du jedes mal, wenn ein Fehler auftaucht du einfach hier deinen Code postest und die eine Lösung vorgesetzt bekommst? Wie du schon selber gesagt hast, du verstehst nicht was du da machst. Das bestätigen ja auch deine Aussagen ala if-Schleife. Es bringt nichts, wenn wir deinen Code korregieren, du ihn kopierst und in deine IDE einfügst. Dadurch werden die Probleme zwar gelöst allerdings weißt du beim nächsten mal immernoch nicht, wo die fehler liegen.
    Außerdem beschreibst du in einer Zeile völlig unzureichend deine Probleme und hängst einen unstrukturierten und unformatierten Code an. Du solltest ganz klar über deine eigenen Fähigkeiten und deine Ziele nachdenken.



  • temporärer-gast schrieb:

    kaffee schrieb:

    es heißt <iostream> nicht <iostream.h>

    Ältere Compiler akzeptieren (nur) <iostream.h>. Allerdings ist der korrekte Header schon länger <iostream>.

    Echt? Meiner aktzeptiert <iostream.h> nicht.



  • Ok, Ich habe mich etwas unklar ausgedrückt:
    Ältere Compiler akzeptieren <iostream.h> allerdings akzeptieren sie <iostream> nicht. Das gegenteil ist bei neueren Compilern der Fall.



  • Sorry, leuts. Aber ich verstehe nicht viel vom Programmieren *g ihr könnt mich über Heizungsanlagen ausquetschen, darüber könnte ich euch ne Menge erzählen...
    Aber das ist ein anderes Ding. Fakt ist, das ich mitten in einer Umschulung stecke und ich es fast geschafft habe... werde das Programmieren wohl nach meiner Ausbildung nie wieder brauchen. Aber man soll ja nie nie sagen 😉

    ja, ich benutze einen älteren compiler (dev c++ ver. 4.9.5.0)

    ich muss mit den veralteten Befehlen Arbeiten, da wir in der Schule nur mit diesen arbeiten. (dort benutzen wir BorlandC++ 5.02)

    Das Prog funktioniert so wie ich es gepostet hab.
    Erklären könnte ich es. zu 80%.

    Warum ich poste. weil ich auf hilfe hoffe. quäle mich mit der sch. da ich es bis zum 29.05.07 fertig haben und das ganze präsentieren soll. sonst könnt ich meine bewerbung im sommer vergessen... Aber wie das ist, wisst ihr selbst...

    Was ich von meiner seite aus tu'e. ich lese in 4 verschiedenen Büchern. Leider sind diese alle veraltet aber im prinzip stimmt der code soweit noch.
    finde nicht immer alles und weiß leider oft nicht weiter... so dass es nur sperrlich vorran geht.

    Und ja, es gibt bestimmt ne elegantere Lösung als mit if...
    Jedoch fehlt mir einfach die übung, das ich darauf komme, und wenn man etwas sieht dann funzt es halt besser.

    sogar die großen schauen sich aus links sachen ab und kopieren sich diese in ihr trade lassen den kompiler drüber laufen und schauen, was dieser macht und verstehen es so...

    Habe ja nicht umsonst diesen Tread "Erste Schritte" genannt...
    ___________________________________________________________

    Was ich zuerst hinbekommen muss ist dies:
    //Die Funktion berechnet die Maximale Anzahl der Hosts
    //Abhängig davon welche Ip Adresse übergeben wird
    //Rückgabewert ist die Anzahl der maximalen Hosts
    //Die Maxhosts soll zusätzlich in der Datenstrukur netzwerk.anzahl_Rechner_gesamt gespeichert werden!
    //Erstellen Sie auch ein Struktogramm für die Funktion

    Nur damit ihr wisst, wo meine Ziele sind. Falls ich meine Probleme zu undeutig beschreibe.

    MFG



  • Anbei hier nochmal das Funktionierende Programm (u.a. unter devC++ vers. 4.9.5.0 oder BorlandC++ 5.02) übersichtlich.

    //Rückgabewert ist die Anzahl der maximalen Hosts <-- Meine Aufgabe

    Was ich nicht weiß ist, wie ich es mit return zurück gebe. wenn ich dies hinein füge "return host" funktionierts nicht mehr.(wenn ich es in der Funktion
    "//Subnetzmaske bestimmung" einfüge)

    #include <stdio.h>
    #include <iostream.h>
    
    //Eigener Datentyp Struktur anlegen
    struct IP
    {
       int dez_okt1,dez_okt2,dez_okt3,dez_okt4;
       int bin_okt1[8],bin_okt2[8],bin_okt3[8],bin_okt4[8];
       int hostanzahl;
    };
    
    //Wandelt Dezimalzahl zw. 0-255  in ein 8 Bit Feld um
    void dezi_to_bin(int dezimalzahl, int *binaer_feld)
    {
       int modrest=0, divisionsrest,  i;
    
       for (i=0;i<=7;i++)
       {
          binaer_feld[i] = 0;
       }
    
       divisionsrest = dezimalzahl;
       i=7;
       do
       {
          modrest=divisionsrest%2;
          binaer_feld[i]=modrest;
          divisionsrest=divisionsrest/2;
          i--;
       }
       while(divisionsrest != 0);
    }
    
    void Eingabe(IP &IP_1)
    {
       char Punkt;
       //Eingabe der IP_Adresse
       cout << "Geben Sie eine IP Adresse ein: (192.1.1.1): ";
       cin >>IP_1.dez_okt1>>Punkt>>IP_1.dez_okt2>>Punkt>>IP_1.dez_okt3>>Punkt>>IP_1.dez_okt4;
    
       dezi_to_bin(IP_1.dez_okt1,IP_1.bin_okt1);
       dezi_to_bin(IP_1.dez_okt2,IP_1.bin_okt2);
       dezi_to_bin(IP_1.dez_okt3,IP_1.bin_okt3);
       dezi_to_bin(IP_1.dez_okt4,IP_1.bin_okt4);
    }
    
    void AusgabeBin(IP &IP_1)
    {
       //Ausgabe der IP_Adresse binär
       for(int i=0;i<8;i++)
       {
          cout <<IP_1.bin_okt1[i];
       }
       cout <<".";
    
       for(int i=0;i<8;i++)
       {
          cout <<IP_1.bin_okt2[i];
       }
       cout <<".";
    
       for(int i=0;i<8;i++)
       {
          cout <<IP_1.bin_okt3[i];
       }
       cout <<".";
    
       for(int i=0;i<8;i++)
       {
          cout <<IP_1.bin_okt4[i];
       }
    }
    
    //Subnetzmaske bestimmung
    void sub(IP &IP_1)
    {
       int i,host=1;
    
       if (IP_1.dez_okt1 >= 192 && IP_1.dez_okt1 <= 223)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = host -3;
    
          cout << endl << host << endl;
       }
    
       if (IP_1.dez_okt1 >= 128 && IP_1.dez_okt1 <= 191)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)-2;
    
          cout << "Es sind " << host << " Hosts moeglich";
       }
    
       if (IP_1.dez_okt1 > 0 && IP_1.dez_okt1 <= 126)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)*(host -1)-2;
    
          cout << "Es sind " << host << " Hosts moeglich";
       }
    }
    
    void main()
    {
       IP IP_1;
       Eingabe(IP_1);
       cout <<endl;
       AusgabeBin(IP_1);
       cout <<endl;
       sub (IP_1);
    
       getchar();
    }
    


  • wenn du eine Ganzzahl (int) zurückgeben willst muss die Funktion int heißen nicht void



  • main() sollte immer int zurückgeben!



  • Alles klar, werde es in zukunft beherzigen... 🙄

    Habe es geändert, jedoch bekomme ich nun als Rückgabewert 0.
    bei weiterem ausprobieren (umschreiben) bekomme ich 1244952 angezeigt.

    was muss ich beim Rückgabewert noch beachten, das er mir das ergebnis zur ausgabefunktion weiterleitet ?

    //Subnetzmaske bestimmung
    int sub(IP &IP_1)
    {
       int i,host=1;
    
       if (IP_1.dez_okt1 >= 192 && IP_1.dez_okt1 <= 223)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = host -3;
          return (host);
          cout << endl << host << endl;
       }
    
       if (IP_1.dez_okt1 >= 128 && IP_1.dez_okt1 <= 191)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)-2;
          return (host);
          cout << "Es sind " << host << " Hosts moeglich";
       }
    
       if (IP_1.dez_okt1 > 0 && IP_1.dez_okt1 <= 126)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)*(host -1)-2;
          return (host);
          cout << "Es sind " << host << " Hosts moeglich";
       }
       return (host);
    }
    
    void ausgabe_host(host)
    {
       cout << "\nDie maximale Anzahl der Host's lautet: " << host <<endl;
    }
    
    void main()
    {
       int host;
    
       IP IP_1;
       Eingabe(IP_1);
       cout <<endl;
       AusgabeBin(IP_1);
       cout <<endl;
       sub (IP_1);
       ausgabe_host(host);
    
       getchar();
    }
    


  • Das hat wirklich was mit totalen Grundlagen zu tun. Schau dir das ganze in einem Tutorial deiner Wahl an.
    Ein gutes englisches Tutorial ist http://www.cplusplus.com/doc/tutorial/
    Bei deutschen Tutorials schaut http://tutorial.schornboeck.net/inhalt.htm
    noch ganz ok aus. Weitere findest du über Google.
    Zur Lösung:

    void ausgabe_host(host)
    {
       cout << "\nDie maximale Anzahl der Host's lautet: " << host <<endl;
    }
    
    void main()
    {
       int host;
    
       IP IP_1;
       Eingabe(IP_1);
       cout <<endl;
       AusgabeBin(IP_1);
       cout <<endl;
       sub (IP_1);
       ausgabe_host(host);
    
       getchar();
    }
    }
    

    Du musst den Datentyp angeben, den du an die Funktion übergibst.
    Außerdem musst du die main Funktion etwas verändern. Du könntest allerdings auch einfach die Ausgabe in der main Funktion stattfinden lassen anstatt sie über eine extra Funktion auszuführen.
    Möglichkeit 1:

    void ausgabe_host(int host)
    {
       cout << "\nDie maximale Anzahl der Host's lautet: " << host <<endl;
    }
    
    void main()
    {
       IP IP_1;
       Eingabe(IP_1);
       cout <<endl;
       AusgabeBin(IP_1);
       cout <<endl;
       ausgabe_host(sub (IP_1));
    
       getchar();
    }
    

    oder die Ausgabe direkt in der main Funktion:

    void main()
    {
       IP IP_1;
       Eingabe(IP_1);
       cout <<endl;
       AusgabeBin(IP_1);
       cout <<endl;
       cout << "\nDie maximale Anzahl der Host's lautet: " << sub (IP_1) << endl;
    
       getchar();
    }
    

    So ich denke der Code sollte so funktionieren, wie du es dir gedacht hast allerdings habe ich ihn nicht getestet. Bei Problemen helfe ich gerne. Zum verständnis des Codes solltest du dir die entsprechenden Teile in einem der besagten Tutorials ansehen. Mir scheint als wäre das Kapitel Funktionen an dir vorbeigelaufen.



  • temporärer-gast schrieb:

    void main()
    {
       IP IP_1;
       Eingabe(IP_1);
       cout <<endl;
       AusgabeBin(IP_1);
       cout <<endl;
    -->   ausgabe_host(sub (IP_1));  <---
    
       getchar();
    }
    

    Was tut er?
    Sehe ich das Richtig, das Du ihm angibst, das die Endfunktion die "ausgabe_host" ist und er mit "sub (IP_1)" anfangen soll??

    hoffe, das ich nie mehr funktionen aufrufen muss und so lasse ich dies vorerst mal auf sich beruhen...

    Und es Funktioniert 👍 und der Link ist einfach Klasse.

    Warum ich so viele Funktionen verwende.?!
    Na weil unser Lehrer Funktionsgeil ist und es so wünscht 😉
    wünschte mir, das er es auch so gut erklären würde. aber naja.
    musste leider feststellen, das die lehrerm, an der schule, nicht der hit sind... 😞



  • Also ich versuche es mal kurz aber verständlich zu erklären:
    Die Funktion sub gibt einen Integer zurück. Was die besagte Zeile

    ausgabe_host(sub (IP_1));
    

    nun tut ist nicht mehr als die Funktion sub aufzurufen und den Wert, der durch return zurückgegeben wird als Parameter an ausgabe_host zu übergeben. Du kannst dir vorstellen, dass anstatt der Funktion, der Rückgabewert der Funktion in der Klammer steht, die Funktion aber trotzdem ausgeführt wird. Du könntest den return Wert aber auch in eine Variable speichern. Diese Alternative zur oben genannten Code Zeile wäre dann:

    int anzahlHosts = sub (IP_1);
    ausgabe_host(anzahlHosts);
    

    Der Rückgabewert von sub wird jetzt in die Variable anzahlHosts geschrieben und diese wird anschließend als Parameter an ausgabe_host übergeben. Ich denke das sollte auch klarer machen, was

    ausgabe_host(sub (IP_1));
    

    tut.



  • Hallo,
    Nun weiß ich nach stundenlangem grübeln und probieren nicht mehr weiter.

    Und zwar möchte ich die Anzahl der nullen am ende herraus finden.
    Bsp.: sm: 255.255.255.0
    binär: 11111111.11111111.11111111.00000000
    und diese dann
    z.B.
    bei 5 Subnetze fallen nur 3 nullen (Bit) weg, sodass die sm 248 (255-7)ausgegeben werden kann.

    1 Bit --> 1 Subnetz
    2 " " --> 2- 3 Subnetze
    3 " " --> 4- 7 " "
    4 " " --> 8-15 " "
    5 " " -->16-31 " "
    6 " " -->32-63 " "
    7 " " -->64-127 " "
    8 Bit -->128-255 Subnetze

    //Umwandlung der Subnet-Maske
    //Wandelt Dezimalzahl zw. 0-255  in ein 8 Bit Feld um
    int dezi_to_subb(int dezimalzahl, int *binaer_feld)
    {
       int modrest=0, divisionsrest,  i;
    
       //Initialisierung
       for (i=0;i<=7;i++)
       {
          binaer_feld[i] = 0;
       }
    
       divisionsrest = dezimalzahl;
       i=7;
       do
       {
          modrest=divisionsrest%2;
          binaer_feld[i]=modrest;
          divisionsrest=divisionsrest/2;
          i--;
       }
       while(divisionsrest != 0);
    
    // Hatte es hier mal mit einer for schleife veruscht, aber vergeblich
       for (i=0;i<8;i++)
       {
          if (divisionsrest=0)
          {
             divisionsrest=divisionsrest + 1;
          }
       }   
       cout << divisionsrest;   
    }
    

    Damit ihr mein Ziel wisst:
    Die Funktion berechnet die Anzahl der entlehnten Bits Abhängig davon der Angabe der Anzahl der Subnetze die vorher in network.anzahl_subnete angegeben werden muss.

    #include <stdio.h>
    #include <iostream.h>
    
    //Eigener Datentyp Struktur anlegen
    struct IP
    {
        int dez_okt1,dez_okt2,dez_okt3,dez_okt4;
        int bin_okt1[8],bin_okt2[8],bin_okt3[8],bin_okt4[8];
    };
    
    struct netzwerk
    {
       int host;
    };
    
    struct subnet
    {
        int subd_okt1,subd_okt2,subd_okt3,subd_okt4;
        int subb_okt1[8],subb_okt2[8],subb_okt3[8],subb_okt4[8];
    };
    
    //Subnetberechnung
    struct network
    {
       int sub_okt1,sub_okt2,sub_okt3,sub_okt4;
       int subb_okt1[8],subb_okt2[8],subb_okt3[8],subb_okt4[8];
       int anzahl_sub;
    };
    
    //Wandelt Dezimalzahl zw. 0-255  in ein 8 Bit Feld um
    int dezi_to_bin(int dezimalzahl, int *binaer_feld)
    {
       int modrest=0, divisionsrest,  i;
    
       //Initialisierung
       for (i=0;i<=7;i++)
       {
          binaer_feld[i] = 0;
       }
    
       divisionsrest = dezimalzahl;
       i=7;
       do
       {
          modrest=divisionsrest%2;
          binaer_feld[i]=modrest;
          divisionsrest=divisionsrest/2;
          i--;
        }
    
       while(divisionsrest != 0);
    }
    
    int Eingabe(IP &IP_1)
    {
        char Punkt;
        //Eingabe der IP_Adresse
        cout << "Geben Sie eine IP Adresse ein: (192.1.1.1): ";
        cin >>IP_1.dez_okt1>>Punkt>>IP_1.dez_okt2>>Punkt>>IP_1.dez_okt3>>Punkt>>IP_1.dez_okt4;
    
        dezi_to_bin(IP_1.dez_okt1,IP_1.bin_okt1);
        dezi_to_bin(IP_1.dez_okt2,IP_1.bin_okt2);
        dezi_to_bin(IP_1.dez_okt3,IP_1.bin_okt3);
        dezi_to_bin(IP_1.dez_okt4,IP_1.bin_okt4);
    }
    
    //Umwandlung der Subnet-Maske
    //Wandelt Dezimalzahl zw. 0-255  in ein 8 Bit Feld um
    int dezi_to_subb(int dezimalzahl, int *binaer_feld)
    {
       int modrest=0, divisionsrest,  i;
    
       //Initialisierung
       for (i=0;i<=7;i++)
       {
          binaer_feld[i] = 0;
       }
    
       divisionsrest = dezimalzahl;
       i=7;
       do
       {
          modrest=divisionsrest%2;
          binaer_feld[i]=modrest;
          divisionsrest=divisionsrest/2;
          i--;
        }
    
       while(divisionsrest != 0);
    }
    
    int AusgabeBin(IP &IP_1)
    {
        //Ausgabe der IP_Adresse binär
        for(int i=0;i<8;i++)
        {
            cout <<IP_1.bin_okt1[i];
        }
        cout <<".";
    
        for(int i=0;i<8;i++)
        {
            cout <<IP_1.bin_okt2[i];
        }
       cout <<".";
    
       for(int i=0;i<8;i++)
        {
            cout <<IP_1.bin_okt3[i];
        }
       cout <<".";
    
       for(int i=0;i<8;i++)
        {
            cout <<IP_1.bin_okt4[i];
        }
       cout << endl;
    }
    
    //Subnetzmaske bestimmung
    int max_host(IP &IP_1 , netzwerk &anzahl_Rechner_gesamt)
    {
       int i,host=1;
    
       if (IP_1.dez_okt1 >= 192 && IP_1.dez_okt1 <= 223)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = host -3;
          return (host);
          cout << endl << host << endl;
       }
    
       if (IP_1.dez_okt1 >= 128 && IP_1.dez_okt1 <= 191)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)-2;
            return (host);
           cout << "Es sind " << host << " Hosts moeglich";
       }
    
       if (IP_1.dez_okt1 > 0 && IP_1.dez_okt1 <= 126)
       {
           for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)*(host -1)-2;
            return (host);
           cout << "Es sind " << host << " Hosts moeglich";
       }
       return (host);
    }
    
    void ausgabe_host(int host_1)
    {
       cout << "\nDie maximale Anzahl der Host's lautet: " << host_1 <<endl;
    }
    
    int netzwerk_klasse(IP &IP_1, subnet &subnet_1)
    {
       int modrest=0, divisionsrest,  i;
    
       if (IP_1.dez_okt1 >= 0 && IP_1.dez_okt1<=126)
       {
          cout << "Sie befinden sich in der Klasse A mit der Subnetmaske 255.0.0.0";
          subnet_1.subd_okt1=255;
          subnet_1.subd_okt2=0;
          subnet_1.subd_okt3=0;
          subnet_1.subd_okt4=0;
    
           //Eingabe der IP_Adresse
          cout << "\n\n\nUebernahme von der Subnetmaste anhand der IP: \n";
    
           dezi_to_subb(subnet_1.subd_okt1,subnet_1.subb_okt1);
           dezi_to_subb(subnet_1.subd_okt2,subnet_1.subb_okt2);
           dezi_to_subb(subnet_1.subd_okt3,subnet_1.subb_okt3);
           dezi_to_subb(subnet_1.subd_okt4,subnet_1.subb_okt4);
       }
    
       if (IP_1.dez_okt1 >= 127 && IP_1.dez_okt1<=191)
       {
          cout << "Sie befinden sich in der Klasse B mit der Subnetmaske 255.255.0.0";
    
          subnet_1.subd_okt1=255;
          subnet_1.subd_okt2=255;
          subnet_1.subd_okt3=0;
          subnet_1.subd_okt4=0;
    
           //Eingabe der IP_Adresse
          cout << "\n\n\nUebernahme von der Subnetmaste anhand der IP: \n";
    
           dezi_to_subb(subnet_1.subd_okt1,subnet_1.subb_okt1);
           dezi_to_subb(subnet_1.subd_okt2,subnet_1.subb_okt2);
           dezi_to_subb(subnet_1.subd_okt3,subnet_1.subb_okt3);
           dezi_to_subb(subnet_1.subd_okt4,subnet_1.subb_okt4);
       }
    
       if (IP_1.dez_okt1 >= 192 && IP_1.dez_okt1<=223)
       {
          cout << "Sie befinden sich in der Klasse C mit der Subnetmaske 255.255.255.0";
    
          subnet_1.subd_okt1=255;
          subnet_1.subd_okt2=255;
          subnet_1.subd_okt3=255;
          subnet_1.subd_okt4=0;
    
           //Eingabe der IP_Adresse
          cout << "\n\n\nUebernahme von der Subnetmaste anhand der IP: \n";
    
           dezi_to_subb(subnet_1.subd_okt1,subnet_1.subb_okt1);
           dezi_to_subb(subnet_1.subd_okt2,subnet_1.subb_okt2);
           dezi_to_subb(subnet_1.subd_okt3,subnet_1.subb_okt3);
           dezi_to_subb(subnet_1.subd_okt4,subnet_1.subb_okt4);
       }
       else
       cout << "nicht bekannt";
    }
    
    int AusgabeSubb(subnet &subnet_1)
    {
        //Ausgabe der IP_Adresse binär
        for(int i=0;i<8;i++)
        {
            cout <<subnet_1.subb_okt1[i];
        }
        cout <<".";
    
        for(int i=0;i<8;i++)
        {
            cout <<subnet_1.subb_okt2[i];
        }
       cout <<".";
    
       for(int i=0;i<8;i++)
        {
            cout <<subnet_1.subb_okt3[i];
        }
       cout <<".";
    
       for(int i=0;i<8;i++)
        {
            cout <<subnet_1.subb_okt4[i];
        }
       cout << endl;
    }
    
    int eingabe_subnetze(network &subnetze_1)
    {
    	cout << "\nBitte geben Sie die gewuenschte Anzahl der Subnetze ein: ";
     	cin >> subnetze_1.anzahl_sub;
       cout << endl;
    	return (subnetze_1.anzahl_sub);
    }
    
    int ausgabe_subnetze(network &subnetze_1)
    {
      cout << subnetze_1.anzahl_sub;
    }
    
    void main()
    {
    
       IP IP_1;
       netzwerk anzahl_Rechner_gesamt;
       subnet subnet_1;
       network subnetze_1;
    
       Eingabe(IP_1);
       cout << endl;
       AusgabeBin(IP_1);
       cout << endl;
       netzwerk_klasse (IP_1,subnet_1);
       cout << endl;
       AusgabeSubb(subnet_1);
       cout << endl;
       ausgabe_host(max_host (IP_1,anzahl_Rechner_gesamt));
    
       eingabe_subnetze(subnetze_1);
       ausgabe_subnetze(subnetze_1);
    
       getchar();
    }
    


  • so en bullshit, ich könnt tage davor sitzen und mir fällt keine Lösung ein.
    kann mir einer nen kleinen Tipp geben???

    Also die ausrechnung auf nem baltt papier funktioniert einmandfrei. jedoch wie ich es dem prog beibringe ist es größte übel...



  • Liegt das Problem beim herausfinden, wie viele Nullen am ende sind oder wo liegt jetzt das Problem?



  • Sorry, ich war auf em Falschen Dampfer...
    Also es muss noch verfeinert werden etc. aber ich will Dich jetzt nicht länger ohne Antwort stehen lassen... Bin ja froh, das ich Hilfe bekomme...

    //Berechnung der Subnetze
    int eingabe_subnetze(network &subnetze_1)          //Funktionsaufruf
    {
       cout << "\nBitte geben Sie die gewuenschte Anzahl der Subnetze ein: ";
       cin >> subnetze_1.anzahl_sub;                  //Eingabe eines Wertes
       cout << endl;
    
       int i=1;                                      //Deklaration
       int x;
       int a;
       int b=0;
    
       for (i=0; i<8;i++)                          //Potenzausrechnung
       {
    	   x=pow (2,i);
    
          if (x<=subnetze_1.anzahl_sub)           //wenn potenz kleiner...
          {
             a=i;
    //         cout << "die anzahl betreagt" << a <<endl;
          }
       }
    
       int anzahl_subnetze;
       int d=1;
    
       for (b=1; b<=a+1;b++)
       {
          cout << endl<<"Die hochzahl lautet nach for-schleife: " << b;
          anzahl_subnetze = d++;
       }
       cout << endl<<anzahl_subnetze << "Dies ist die anzahl der nullen"<<endl;
       return (subnetze_1.anzahl_sub);
    }
    


  • Hallo, ich würde nun gerne das ergebnis host oben in meiner Struktur speichern.
    Jedoch weiß ich nicht, wie ich das tun soll. könnt ihr mir da helfen??

    (bevor ich es falsch erklärt habe, hier nochmal die aufgabe:
    //Die Maxhosts soll zusätzlich in der Datenstrukur
    //netzwerk.anzahl_Rechner_gesamt gespeichert werden!)

    anzahl_Rechner_gesamt --> sollte bei mir dann host heißen. oder??

    Anbei der Ausschnitt

    struct netzwerk
    {
       int host;
    };
    
    //Subnetzmaske bestimmung
    int max_host(IP &IP_1)  //(übernahme der variblen aus der struktur ip)
    {
       int i,host=1;
    
       if (IP_1.dez_okt1 >= 192 && IP_1.dez_okt1 <= 223)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = host -2;
          return (host);
       }
    
       if (IP_1.dez_okt1 >= 128 && IP_1.dez_okt1 <= 191)
       {
          for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)-1;
          return (host);
       }
    
       if (IP_1.dez_okt1 > 0 && IP_1.dez_okt1 <= 127)
       {
           for (i=1;i<=8;i++)
          {
             host =  host* 2;
          }
          host = (host -1)*(host -1)*(host -1)-1;
          return (host);
       }
       return (host);
    }
    
    case 4:	//Anzahl der maxiamlen Hosts im Netzwerk bestimmen
                   Eingabe(IP_1);
    				   umwandeln_subb(IP_1,subnet_1);
                   ausgabe_host(max_host (IP_1));
                   getchar();
                   break;
    

Anmelden zum Antworten