2017-11-08 2 views
-1

Ich versuche, eine Dezimalzahl zu Binärzahl mit Stacks zu konvertieren, und ich muss Strukturen verwenden.Konvertieren von Dezimalzahl in Binärzahl mit Stapel

Jetzt von meinem Verständnis von Strukturen können wir Elementfunktionen in ihnen haben. Und Stack folgt einer LIFO-Strategie.

Wir können einen Stack erstellen, indem wir eine Struktur erstellen, einige Member deklarieren und einige Funktionen haben, um diese Member zu initialisieren und zu bearbeiten.

Also habe ich versucht, eine Struktur mit den oben genannten Dingen und meinem Verständnis zu deklarieren, aber ich scheint immer noch nicht das Konzept richtig zu bekommen. Ich glaube, es ist ein Fehler meinerseits. Aber das Lesen von Foren hilft immer noch nicht, da wir noch keine Klassen unterrichtet haben und auf jedem Forum sind Strukturen und Klassen vermischt.

Hier ist mein Code so weit, jede Hilfe und Anleitung in Bezug auf das Konzept und die Logik würde sehr geschätzt werden.

#include<iostream> 
using namespace std; 

struct bin{ 
int num[15]; 
int ci; 

void init() 
{ 
    ci = 0; 
    for (int i = 0;i < 15;i++) 
     num[i] = -1; 
} 

void push(int n) 
{ 
    num[ci] = n; 
    ci++; 
} 
int pop() 
{ 
    int temp = num[--ci]; 
    num[ci] = -1; 
    return temp; 
} 
}; 

int main() 
{ 
int inp, count = 0; 
bin var; 
cout << "Enter a decimal number to convert into binary: "; 
cin >> inp; 

while (inp != 0) 
{ 
    int rem = inp % 2; 
    cout << "rem= " << rem << endl; 
    inp /= 2; 
    cout << "inp= " << inp << endl; 
    var.push(rem); 
    count++; 
} 
cout << "\nYour binary is: "; 
while (count != 0) 
{ 
    cout << var.pop(); 
    count--; 
} 

return 0; 
} 

Ich versuchte mein Bestes, um die Fehler zu finden, konnte aber nicht. Also, habe ich einfach am Ende verwendet Arrays und implementiert den Code wie folgt

#include<iostream> 
using namespace std; 

void push(int bin[], int n, int &ci); 
void init(int bin[], int &count, int &ci); 
int pop(int bin[], int &ci); 
void display(int bin[], int &count, int &ci); 
void findBinary(int bin[], int &count, int&ci, int &inp); 

int main() 
{ 
int inp, count, ci; 
int bin[20]; 
char c = '\0'; 

init(bin,count,ci); 

    cout << "Enter a decimal number to convert into binary: "; 
    cin >> inp; 

    findBinary(bin, count, ci, inp); 
    display(bin, count, ci); 

return 0; 
} 

void init(int bin[], int &count, int &ci) 
{ 
count = 0; 
ci = 0; 

for (int i = 0;i < 20;i++) 
    bin[i] = -1; 
} 

int pop(int bin[], int &ci) 
{ 
    int temp = bin[--ci]; 
    return temp; 
} 

void push(int bin[], int n, int &ci) 
{ 
    bin[ci] = n; 
    ci++; 
} 

void display(int bin[], int &count, int &ci) 
{ 
    cout << "\nYour binary is: "; 
    while (count != 0) 
    { 
     cout << pop(bin, ci); 
     count--; 
    } 
    cout << endl; 
} 

void findBinary(int bin[], int &count, int&ci, int &inp) 
{ 
    while (inp != 0) 
    { 
     int rem = inp % 2; 
     inp /= 2; 
     push(bin, rem, ci); 
     count++; 
    } 
} 

Also meine Fragen sind: 1. Wenn wir eine Funktion innerhalb einer Struktur zu schreiben, wird die Funktion ausgeführt wird, wenn wir einen Strukturtyp-Objekt erstellen ? 2. Ist die Methode, die ich zum Implementieren des Stacks verwendet habe, im ersten Beispiel mit struct korrekt?

+0

Danke, dass Sie darauf hingewiesen haben, aber ich habe diesen Code nicht verwendet, da er nicht kompiliert wurde. Aber ich muss immer noch den Wert in der Pop-Funktion ersetzen, um den Wert zu löschen (-1 wird als gelöscht angenommen). –

+0

Dein Code im ersten Beispiel kompiliert und läuft gut (und richtig) für mich. Erweitern Sie auf "Ich finde das Konzept immer noch nicht richtig". – hnefatl

+0

Zweitens, meine ursprüngliche Pop-Funktion ist korrekt. ci zeigt ursprünglich auf einen leeren Index, um Daten einzugeben. –

Antwort

0

Wenn Sie zuerst ein Objekt aus erstellen struct oder class, die constructor läuft - aber keine andere Funktion (also nicht Ihre init-Funktion). Wenn Sie das ausführen möchten, müssen Sie es explizit nennen:

bin var; 
var.init(); 

Im Hinblick auf die Umsetzung Ihrer Funktionen: Sie sollten Grenzen Prüfung verwenden, um sicherzustellen, dass Sie nicht mehr Einzelteile nicht schieben, als Sie behandeln können oder mehr als in der Warteschlange. Abgesehen davon kann ich nicht viel falsch mit ihnen sehen. Erwägen Sie die Verwendung eines std::vector anstelle eines Arrays, aber da Sie gerade anfangen, etwas über C++ zu lernen, werden Sie das wahrscheinlich später in Ihrem Kurs behandeln.


Bis Sie Konstrukteuren zu einem struct obwohl ich hinzufügen, die Sie mit einem class auch wechseln. In C++ sind Strukturen und Klassen äquivalent (mit der kleinen Optimierung, dass der Standardzugriffsmodifikator in einer Struktur public ist, während in Klassen private ist), also lass dich nicht davon abhalten.

Verwandte Themen