Erste Schritte beim Programmieren mit Eurer Hilfe
-
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 Zeileausgabe_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;