Erste Schritte beim Programmieren mit Eurer Hilfe
-
@CStoll: <cstdio>

-
habe das ganze mal eingefügt, jedoch bekomme ich leider nur 8mal die null angezeigt.
wobei ich bei der eingabe von z.b. 12 gerne die ausgabe von 00001100 hätte

-
Zeig doch mal den korrigierten Code - ich vermute mal, du hast irgendwas nicht richtig zusammengefügt.
@DEvil: Ja, wieso?
-
#include <stdio.h> #include <iostream.h> int binear(int); void main() { int x; int eingabe; int value; x = eingabe; cin >> eingabe; x = eingabe; binear(value); } int binear(int x) { //Wandelt eine Dezimalzahl in ein 8 Bit Binärfeld um!! int h=255; int bin[9]; // Array bekommt 9 Felder zugewiesen int i=1; if (x<=255) { for (i=1;i<=8;i++) { h = h / 2; //128-64-32-16-8-4-2-1 if (x-h > -1) { x=x-h; bin[i]=1; //Aufruf des Array's, zahl wird in i gespeichert } else { bin[i]=0; } } cout << endl <<endl; // Ausgabe des gesamten Arrays for (i=1; i <= 8; i++) { cout << bin[i]; } } else { cout << "Das oktett ist nichtig"; } getchar(); }
-
Du hast viel zu viele Variablen im Hauptprogramm und übergibst dann natürlich genau die falsche
Deine Eingabe wird in 'eingabe' eingelesen und dann nach 'x' kopiert (wozu eigentlich) - und anschließend übergibst du 'value' (das bislang nicht einmal initialisiert ist) an die Hilfsfunktion.*tief durchatmet*
int binear(int); int main() { int eingabe; cin >> eingabe; binear(eingabe); }PS: Und beherzige bitte die Bonushinweise aus meinem letzten Beitrag - inklusive sfds
-
/Hauptprogramm
void main()
{
int x;cin >> x;
binear(x); //<-- kannst du mir sagen, was ich mit diesem x mach ??
}Ok, jetzt funzt es fast. bis auf bekomme jetzt bei 12 00001111 angezeigt. sollte zwar 00001100 sein aber immer hin

-
Dieses x wird jetzt als Parameter an die Funktion
binaer(int x/* <- genau hier*/)übergeben.Zu dem Fehler: Vielleicht solltest du die Schleife mit 'h=256;' beginnen, damit du auf die richtigen Werte kommst (int-Division rundet grundsätzlich ab, darum vergleichst du x (=12) nacheinander mit 127,63,31,15,7(x wird 5),3(x wird 2),1(x wird 1) und 0.
PS: Zum dritten und (hoffentlich) letzten Mal: sfds (bitte einmal lesen und in Zukunft umsetzen - herzlichen Dank)
-
genial, du bist ein Held. Danke, genau die dumme 5 war der fehler.
Nur komisch, das es ohne die funktion auch mit der 5 funktioniert, aber ok, wohl wieder etwas, was man sich einfach merken muss...Jedoch muss ich zu meiner Schandtat gestehen, dass ich aus dem Link nicht wirklich schlau werde.
jedoch habe ich den befehl return bei der Funktion binear eingesetzt, damit er den Befehl an meine Hauptfunktion zurückgibt.
ich denk mal, dass das so war...
-
Chaos5 schrieb:
genial, du bist ein Held. Danke, genau die dumme 5 war der fehler.
Nur komisch, das es ohne die funktion auch mit der 5 funktioniert, aber ok, wohl wieder etwas, was man sich einfach merken muss...Ja, vermutlich

Jedoch muss ich zu meiner Schandtat gestehen, dass ich aus dem Link nicht wirklich schlau werde.
Na gut, dann in Kurzfassung - wenn du am Anfang und Ende deiner Quelltexte je einmal auf den Button "C/C++" unter dem Eingabefeld drückst, werden deine Programmtexte in [cpp]-Tags eingeschlossen - und das erleichtert es uns, sie zu lesen (auf die Weise bekommst du auch die wunderbar farbige Darstellung, die du bei meinen Beiträgen siehst ;)).
jedoch habe ich den befehl return bei der Funktion binear eingesetzt, damit er den Befehl an meine Hauptfunktion zurückgibt.
ich denk mal, dass das so war...
Was will uns dieser Satz jetzt sagen?
-
naja, ich hoffe, das ich das mit dem return so richtig erzählt habe.
*g nun komme ich auch schon zu meinem nächsten prob. denn ich möchte nun 4 mal eine Zahl (mit anderen worten eine IP) eingeben. die in eine binärzahl umgewandelt wird...
-
Dann pack die gesamte Eingeben-Umwandeln-Sequenz in eine Schleife (hier dürfte for() am besten passen).
-
?? verstehe ich nicht ganz.
Ich werde mich mal weiter daran versuchen...
Auf jedenfall muss ich nun 4 oktette eingeben z.B. 192.168.5.1
die Punkte trennen die oktette. d.h. 192 = okt1 ; 168 =okt2 usw.
und diese sollen dann seperat ausgewertet werden und dann alle zusammen ausgegeben werden.192 --> 11000000
168 --> 10101000
5 --> 00000101
1 --> 00000001
-
Wie gesagt, nimm eine Schleife:
for(i=0;i<4;++i) { cin>>eingabe; cin.get();//um die Punkte als Trennzeichen zu überlesen binaer(eingabe); cout<<" ";//Trennung zwischen den Oktetten in der Ausgabe }
-
//Deklaration von Funktion int binear(int); int okt(int,int,int,int); //Hauptprogramm void main() { int x; int okt1,okt2,okt3,okt4; char point; cin >> okt1 >> point >> okt2 >> point >> okt3 >> point >> okt4; okt (okt1,okt2,okt3,okt4); getchar(); // binear(x); //<-- Dieses x wird jetzt als Parameter an die Funktion binaer(int x/* <- genau hier*/) übergeben. } //Oktette weiterleiten zur Berechnung int okt(int okt1,int okt2,int okt3,int okt4) { int x; int i; x=okt1; binear(x); x=okt2; binear(x); x=okt3; binear(x); x=okt4; binear(x); return 0; }habs mal so gedeichselt. jedoch ist dies noch keine elegante Lösung

zudem stört mich noch, das die oktette untereinander stehen und nicht nebeneinander durch einen Punkt getrennt...
-
#include <iostream> #include <sstream> #include <string> // speichert die Binärdarstellung einer Dezimalzahl in einem String std::string binaer(unsigned int dec) { std::ostringstream s; while(dec > 0) { s << dec % 2; dec = dec / 2; } return s.str(); } int main() { // die vier Oktette unsigned int octets[4]; // liest die IP-Addresse als String ein statt als einzelne Zahlen std::string s; std::cout << "Geben Sie eine IP-Addresse im Format XXX.XXX.XXX.XXX ein: "; std::cin >> s; // extrahiert die vier Oktette als Zahlen aus dem String std::istringstream ss(s); char point; ss >> octets[0] >> point >> octets[1] >> point >> octets[2] >> point >> octets[3]; // gibt die Binärdarstellung der vier Oktette aus std::cout << binaer(octets[0]) << std::endl; std::cout << binaer(octets[1]) << std::endl; std::cout << binaer(octets[2]) << std::endl; std::cout << binaer(octets[3]) << std::endl; return 0; }
-
Okay, somit käme ich zu meinem nächsten Prob, wobei ich nicht weiß wie ich es umsetzen muss.
Also ich möchte die maximale Anzahl der Hosts ermitteln, aus einer x-beliebigen Adresse. z.B. 255.255.255.240
die binäre Ausrechnung hätten wir ja schonmal...
11111111.11111111.1111111.11110000 oder ander /28
28-32 (max Anzahl) = 4
dann soll er 2^4 rechnen = 16
und die - 2 (Broadcast und die Netzwerk ID) =14somit hätten wir ja unsere Maximale Anzahl unserer hosts.
jedoch, wie wird das ganze umgesetzt? könnt ihr mir da helfen?
weiß nicht unter anderem nicht, wie ich es bewerkstelligen soll, dass er die binären 1'zen zusammenzählt

-
#include <stdio.h> #include <iostream.h> #include <conio.h> #include <math.h> struct IP //In dieser Struktur sind Variablen hinterlegt, die ich mit IP aufrufen kann { //Speicherung für Dezimale Darstellung (192.1.1.1) int dez_okt1,dez_okt2,dez_okt3,dez_okt4; int bin_okt1[8],bin_okt2[8],bin_okt3[8],bin_okt4[8]; }; //Wandelt eine Dezimalzahl in ein 8 Bit Binärfeld 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); } //Hilfsfunktion zum Rechnen mit Exponenten int exponent(int basis, int exponent) { int ergebnis; ergebnis=basis; if(exponent==0) { ergebnis=1; } else { for(int i=1; i<exponent; i++) { ergebnis=ergebnis*basis; }//for(int i=0; i<=exponent; i++) } return ergebnis; }//int exponent(int basis, int exponent) //Umrechnung einer Binarzahl in eine Dezimalzahl. //Die Binarzahl muss durch ein array mit 8 Elementen uebergeben werden. //Es wird die Dezimalzahl vom Typ int zurueckgegeben. //Beispiel fuer die Dezimalzahl 192 als Binaerzahl im array. //Element [1][1][0][0][0][0][0][0 ] //Index 7 6 5 4 3 2 1 0 int bin_to_dezi(int *binaer_feld) { int dezizahl, hilf; dezizahl=0; for(int i=0; i<8; i++) { dezizahl=dezizahl+binaer_feld[i]*exponent(2,i); }//for(int i=0; i<8; i++) return dezizahl; }//int bin_to_dezi(int* binarzahl) //Umwanldeln von dezimale Darstellung in Binäre Darstellung void IP_Adress_dezi_to_bin(IP &ip) { dezi_to_bin(ip.dez_okt1,ip.bin_okt1); dezi_to_bin(ip.dez_okt2,ip.bin_okt2); dezi_to_bin(ip.dez_okt3,ip.bin_okt3); dezi_to_bin(ip.dez_okt4,ip.bin_okt4); } //Übergabeparameter call by reference (Original) void Einlesen(IP &Ip1) { char point; cout <<"Bitte geben Sie die IP-Adresse an:192.1.1.1 :"; cin >>Ip1.dez_okt1>>point>>Ip1.dez_okt2>>point>>Ip1.dez_okt3>>point>>Ip1.dez_okt4; //Umwandlung in Binäre Darstellung dezi_to_bin(Ip1.dez_okt1,Ip1.bin_okt1); dezi_to_bin(Ip1.dez_okt2,Ip1.bin_okt2); dezi_to_bin(Ip1.dez_okt3,Ip1.bin_okt3); dezi_to_bin(Ip1.dez_okt4,Ip1.bin_okt4); } void main() { IP Ip1; //Binäre Umwandlung cout<<"IP: "<<Ip1.dez_okt1<<"."<<Ip1.dez_okt2<<"."<<Ip1.dez_okt3<<"."<<Ip1.dez_okt4; getchar(); }Also, ich hab kein plan, wie das prog jetzt funzt. wenn ihr es wisst, wäre ich für ne Erklärung dankbar.
zudem, bekomme ich die Ausgabe von den oktetten nicht hin

wisst ihr eine Lösung??
-
es heißt <iostream> nicht <iostream.h>
Chaos5 schrieb:
Also, ich hab kein plan, wie das prog jetzt funzt. wenn ihr es wisst, wäre ich für ne Erklärung dankbar.
Wir können dir nicht helfen wenn du sagst du blickst überhaupt nichts . Du musst uns schon genau sagen von was du keinen Plan hast (welche Zeilen du nicht kapierst)
-
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]