Problem mit Rückgabewert einer Funktion

CLRS530

Grünschnabel
Code:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
 
char sortdef(char kzahl[5])
{
char gzahl[5],temp;
	for (int i=1;i<=3;i++) {
for (int j=i+1;j<=4;j++) {
if(kzahl[j-1] < kzahl[i-1]) {
	temp=kzahl[i-1];
	kzahl[i-1]=kzahl[j-1];
	kzahl[j-1]=temp;
			} 
}
}
for(i=1;i<=4;i++)
	 gzahl[4-i]=kzahl[i-1];
	return atoi(gzahl)-atoi(kzahl);
}
 
void main(void)
{
char azahl[5];
cout << "Gebe die gewuenschte Zahl zum testen ein. ";
cin >> azahl;
while(azahl != "6174"){
	 azahl=sortdef(azahl);
cout << azahl << "\n";
	}
}


Hier erstmal der Code, ich habe die 2 problematischen Zeilen makiert.
Es ist mein 1. C++ Programm und wnen ich sonst irgendwas nichgt gut gemacht habe, könnt ihr das auch immer gerne schreiben :)

Zum Problem ich habe ein Arraychar wo eine 4- Stellige Zahl drinne stehtdiese sortiere ich in der Funktion einmal aufsteigend und einmal absteigend.
Dann ziehe ich die Aufsteigende(kleine) von der Absteigenden(großen) ab.
Die differenz möchte ich dann(auch als char array) zurückgeben.

Das ganze ist eine Zahlenspielerei von einem Herrn Kaprekar.
Alle 4- Stelligen Zahlen (auch 0001) die nicht gleich sind ergeben nach diesem Muster (Sortierung- differenz) nach maximal 7 Schritten 6174


So ich wäre froh wnen mir da jemand behilflich sein könnte :)



Achso ich hab noch was vergessen, der Rückgabewert ist natürlich auch noch falsch, der ist integer und nicht char...
Aber denke das hättet ihr auch so gesehen ;)
 
Naja ist ja relativ gut zu sehen eigendlich ;)

Beim ersten roten ist der Rückgabewert integer und nicht string, da bräuchte man noch ne Wechselfunktion, das hab ich aber nicht hinbekommen/gefunden.

Beim 2. sagt er
"error C2440: '=' : 'char' kann nicht in 'char [5]' konvertiert werden
Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt"

is ja auch relativ klar, der rückgabetyp sollte char sein und die variable ist char array...
 
moin


Deine Sortierfunktion muss vom Typ int und nciht char sein. Dann ist das Problem schonmal gelöst.

Aber das wird dann auch nciht sein was du genau suchst!

Du solltest für den übergabe Parameter einen Pointer nehmen, dann kannst dir das ganze mit den Rückgaben ersparen!


mfg
umbrasaxum
 
könntest du mir das vielleicht machen?
Weil ich hab mit Zeigern noch nicht so die Ahnung, wäre nett, dann hab ich da gleich ne Anwendung :)
 
Hallo, dies ist mein Beispiel mit einem Pointer für die Differenz:
Code:
void sortdef(char *kzahl, int *differenz)
{
char gzahl[5]; //Aufsteigend sortiertes Array
char help_zahl; //Hilfsvariable
int count1 = 0;
int count2 = 0;
 
//sortiert kzahl von groß nach klein
for(count1 = 0; count1 < 5; count1++)
for(count2 = 0; count2 < 4; count2++)
if(kzahl[count2] <= kzahl[count2+1])
{
	help_zahl = kzahl[count2];
	kzahl[count2] = kzahl[count2+1];
	kzahl[count2+1] = help_zahl;
}
 
//sortiert genau umgekehrt
for(count1 = 0; count1 < 4; count1++)
gzahl[count1] = kzahl[3-count1];
gzahl[4] = '\0';
 
//differenz berechnen
*differenz = atoi(kzahl) - atoi(gzahl); 
}

Und hier ist der Aufruf:
Code:
void main()
{
char azahl[5];
int differenz = 0;
 
cout << "Gebe die gewuenschte Zahl zum testen ein. ";
cin >> azahl;
 
sortdef(azahl,&differenz);
printf("%d",differenz*2);	//bin draufgekommen das man die differenz * 2 tut um 
//das ergebnis zu erhalten (61..)
system("pause");
}

ich hoffe es geht bei mir jedenfalls schon
bei fehler sag es mir.
 
ACHTUNG, WAR ZU VOREILIG:

Bin auf Fehler draufgekommen,
wenn man zB 9087 (aber mit 3214 gehts und 5647) eingibt gehts nicht, ich geh aber jetzt schlafen. Morgen kriegst du dein fertiges programm spätestens um diese Zeit, falls ich nicht vergesse
 
ich glaub das reicht mir schon, ich werd dir mal nen beispiel geben, sagen wir du hast die Zahl 5472 dann geht das folgendermaßen:

7542 - 2457 = 5085
8550 - 0558 = 7992
9972 - 2799 = 7173
7731 - 1377 = 6354
6543 - 3456 = 3078
8730 - 0378 = 8352
8532 - 2358 = 6174

Den Vorgang simulier ich dann.
Das kannst du mit allen beliebigen 4- stelligen Zahlen machen die eben net alle gleich sind.

Das Beispiel hat jetzt die maximalschritte von 7 gebraucht.
 
So ich hab das Ding mit dem int Zeiger mal versucht und dann ist mir aufgefallen das das so nicht gehen kann, denn im Hauptprogramm muss ich ja eine Schleife machen die die Funktion so lange aufruft bis der String 6174 ist.

Deswegen muss ich für den 1. Parameter immer den Wert des zeigers übergeben.
Es würde jetzt gehen wenn ich nur den Zeiger von char da reingehe, aber dann muss ich den Rückgabewert auch in char haben und nicht wie jetzt in integer (mit atoi)
 

Neue Beiträge

Zurück