C++ Dual - Dezimal "Rückgabearray"?

Eddi0406

Ensign
Registriert
März 2006
Beiträge
234
Heyho ihr Profis=),

ich sitze zur Zeit an meinem zweiten Beleg für das erste Semester Informatik und habe da ein größeres Problem. :mad:

Ich muss für den Anfang zwei Dezimalzahlen ins Dualsystem überführen und diese ausgeben, was auch ganz gut funktioniert (nur noch falsch herum). Nur das "Zurückgeben" an mein Hauptprogramm bereitet mir Kopfschmerzen. Über Google habe ich außer meiner Möglichkeit nur etwas über Zeiger gefunden. Leider sollen wir das Problem aber ohne Zeiger lösen...

#include <iostream>
using namespace std;

int umrechnung(int x)
{
int y[8], i;

for(i=0;i<8;i++)
{
if(x>=0)
y = x % 2;

x = x / 2;
cout << y; // nur zum Test, ob Berechnung stimmt
}

return 0; // Wie realisieren?
}

int main()
{
int a, b, ad[8], bd[8], i;
a = 5;
b = 8;

for(i=7;i>=0;i--) // "richtigherume" Darstellung des Arrays
ad= umrechnung(a);

return 0;
}


Hat vielleicht jemand einen Hinweis für mich? Das wäre echt super :)

Grüße
Eddi0406
 
Zuletzt bearbeitet:
Empa schrieb:
mache es einfach mit einer globalen Variable

Schwachsinn!!!
Globale Variablen ist der schlechteste Stil den es gibt!


@Eddi0406: Ohne Zeiger ist das in C++ schlichtweg nicht möglich.
Du könntest dir eine Klasse machen welche dein Array beinhaltet und du gibst einfach ein OBjekt der Klasse zurück.

Wenn du jedoch nur einzelne Werte zurückgeben willst anstatt ein Komplettes Array, mach doch einfach return y; und gut ist.
 
Ich würde das y in einen String umwandeln und dann an einen anderen String dranhängen und dann den String zurückgeben. Leider hab ich noch nicht so die Erfahrung mit C(++), haben die ganze Zeit nur Java, Assembler etc. gemacht und steigen jetzt erst in C ein. Ist ja aber an sich nur ein Befehl einen String an einen anderen dranzuhängen.

EDIT: Für die richtige Reihenfolge dann quasi ein string = convertToString(y) + string.
Syntax oder zumindest der Befehl wird falsch sein, sollte nur zum Verständnis sein.
 
Zuletzt bearbeitet:
Es geht hier nicht um Programmierstyle. Diese Programme sollen nur Grundfkt. von C zeigen!
Und Grundfkt. sind auch Globale Variablen... sollte das Programm so gut wie möglich laufen wären ja Zeiger erlaubt

Ps: du kannst es evt. auch mit einer Struktur/Union versuchen, da weiß ich aber jetzt nicht ob es wirklich geht
 
Zuletzt bearbeitet:
oder du speicherst dein Array nach umwandlung in eine Variable und gibts die zurück, oder musst du im Hauptprogramm mit dem Array weiterarbeiten?
 
Empa schrieb:
Es geht hier nicht um Programmierstyle. Diese Programme sollen nur Grundfkt. von C zeigen!
Und Grundfkt. sind auch Globale Variablen... sollte das Programm so gut wie möglich laufen wären ja Zeiger erlaubt

Noch größerer Schwachsinn, das ist das erste was du im Informatik Studium in C/C++ lernst, Globale Variablen sind unfug, und es geht sehr wohl auch ohne Globaler Variable.
 
Jop, ich muss die beiden Dualzahlen dann im Hauptprogramm miteinander addieren. Daher dachte ich, ich komme mit einem Array vielleicht besser als mit einerm String.

Kompliziert für Anfänger, sowas^^
 
Oha mein Prof. sagt ich darf das net, also mach ich das net, so ein Schwachsinn. Später macht man das eh fast nur mit Zeigern also was solls. Ob ich das nun easy löse oder schwer ist komplett irrelevant, da es keinen Unterschied macht bei solch einen leichten Programm...
 
Dann werde ich mich jetzt am besten mal in die Zeiger einlesen und versuchen das so zu realisieren.

Danke euch=)
 
Ich glaube du verstehst nicht um was es geht.
Es geht darum das du von vorn herein lernst wie du ordentlich programmierst und da gehört es nunmal nicht dazu globale Variablen zu definieren.
Globale Variablen sind in vielen Sprachen verankert und nur weil es das Konzept gibt heißt es noch lange nicht das man es verwenden muss.
Es gibt genügend Gründe dafür warum globale Variablen schlecht sind, kleines Projekt hin oder her.
 
Knie durchs Auge:

Array in String speichern -> übergeben -> String wieder in ein Array speichern (falls das bei C++ geht, wir haben nur Java -> WI ;))
 
habe es eben auch mal mit einer Struktur versucht funktionert auch wunderbar und diese wird dir später ofters mal über den weg laufen, also lohnt sich es diese anzuschauen
 
Strukturen? Ehm...ich fang mal lieber mit der Umwandlung in einen String und zurück an (bin absoluter Anfänger).

Alles andere danach^^

Danke tdm;)

Edit:
Soweit so gut. Leider bekomme ich jetzt für jede 1 einen Smiley und für eine 0 ein Leerzeichen im Dos-Fenster. Muss ich vielleicht mit char- statt int-Arrays arbeiten oder wandle ich falshc um?
 
Zuletzt bearbeitet:
könntest du den aktuellen code posten?
 
#include <iostream>
#include <string>
using namespace std;

string umrechnung(int x) // Umrechung Dezimalzahl in Dualzahl
{
int y[8], i;
string erg = "";

for(i=0;i<8;i++)
{
if(x>=0)
y = x % 2;

x = x / 2;
erg += y;
cout << y; //Berechnung stimmt
}

return erg;
}

int main()
{
int a, b, ad[8], bd[8], i;
a = 5;
b = 8;

for(i=7;i>=0;i--)
{
ad = umrechnung(a); //string in int konvert scheitert? oO
cout << ad;
}

return 0;
}

Jetzt geht es gar nicht mehr oO.
 
Zuletzt bearbeitet:
klar, du musst den String schon stellenweise in das Array schreiben... ;) (bei Java gibt es ne Funktion die "CharAt" heißt. Ist dann etwa so:

array = Integer.parseInt(String.valueOf(stringvariable.charAt(i))); //ACHTUNG, Java Code! :)


Du rufst in deiner Main bei jedem Schleifendurchgang die Methode zur Umwandlung auf. Den Aufruf solltest du ausserhalb der Schleife erledigen:

Code:
String erg = umrechnung(a);

for...
{
}
 
Zuletzt bearbeitet:
Juhu, es geht endlich. Wieder etwas gelernt=).

Ich musste unten nur nochmal einen String erstellen und das Funktionsergebnis an ihn und nicht direkt an ein Array zuweisen, bevor ich ihn in der oben zitierten Schleife im Hauptprogramm umgewandelt habe.

Vielen Dank :D
 
Das Konvertieren in einen String könntest Du Dir auch sparen.

Code:
#include <iostream>
#include <vector>

typedef std::vector< unsigned int > BinaryDigitsVector;

const BinaryDigitsVector umrechnung( int x ) // Umrechung Dezimalzahl in Dualzahl
{
	// Estellt einen vector mit 8 unsigned ints ... alle 8 Elemente haben zu Beginn den Wert 0.
	BinaryDigitsVector retVal( 8, 0 );

	// Wir iterieren von hinten nach vorne durch den vector, damit die Elemente nach her beim Ausgeben 'richtig herum' drin stehen.
	for ( BinaryDigitsVector::reverse_iterator it = retVal.rbegin(); it != retVal.rend(); ++it )
	{
		if ( x != 0 )
		{
			*it = x % 2;
		}

		x /= 2;
	}
	
	return retVal;
}


int main()
{
	const BinaryDigitsVector res = umrechnung( 5 );
	
	for ( BinaryDigitsVector::const_iterator it = res.begin(); it != res.end(); ++it )
	{
		std::cout << *it;
	}

	std::cout << "\n";

	return 0;
}


Wobei das natürlich reine Geschmackssache ist. Ob ich die Binärziffern nun in einem string-Objekt oder einem vector-Objekt zurückgebe, naja ... Wurscht. :)


P.S. Ich muß mich aber entschieden auf toeffi's Seite stellen ... mit globalen Variablen sollte man gar nicht erst anfangen .... ganz schlechte Angewohnheit ... führt später zu nix als Schmerz und Tränen. ;)
 
Zuletzt bearbeitet:
Zurück
Oben