Problem mit Rückgabewert einer Funktion

moin


Du machst dir das viel viel komplizierter als das eigentlich ist!


Ich würde es wie folgt machen:
1. Erste Zahl einlesen und zwar als int einlesen!
2. Dann die Zahl einer Funktion übergeben.
- Die dann die Zahl in einen Stringkonvertiert.
- Den String umdreht.
- In ein int konvertiert.
- Und diesen int dann wieder zurückgibt.
3. Jetzt hast du die erste int Variable und die zweite (umgedrehte) Variable die ihren Wert von der "umdreh" Funktion zurückbekommen hat.
4. Die beiden Subtrahieren.
5. Inner Schleife das so lange machen bis 6174 rauskommt.

Vielleicht mach ich das nachher mal.


mfg
umbrasaxum
 
moin


Es erfüllt noch nicht alle deine Anforderungen, aber vielleicht bringt es dir was.

Code:
#include <iostream>
#include <windows.h>

using namespace std;

int umkehrfunktion(int zahl);

int main()
{
	int erste = 0, zweite = 0;

	while( zweite != 6174 )
	{
		cin >> erste;
		zweite = umkehrfunktion(erste);
		cout<< erste << " - " << zweite << " = " << erste - zweite;
	}

	return 0;
}

int umkehrfunktion(int zahl)
{
    char string[5];
	char ergebnis[5];

	int l=3;

	itoa(zahl, string, 10);

	for(int i=0; i<4; i++)
		ergebnis[l--] = string[i];

	ergebnis[4] = '\0';

	return atoi(ergebnis);
}


mfg
umbrasaxum
 
Hey, danke, das hilft mir schonmal weiter, aber du hast das Problem auch noch nicht ganz verstanden ;)
In der Funktion wird nicht nur Umgekehrt, sondern ich Sortiere in der Funktion auf- und abwärts.
Wenn ich es einmal aufwärts sortiere muss ich es natürlich nicht noch abwärts sortieren, deswegen dreh ich es nur um.

Dann hab ich noch die differenz der großen und der kleinen zahl genommen.
Und das will ich zurückgeben.

Warte ich kopier dir mal den Code des Pascal programms, welches ich geschrieben hab, der genau das selbe macht.

Code:
program uebung8;
uses CRT;
function str2val(chstr:string):integer;
var code,chint : integer;
  begin
	val(chstr,chint,code);
	if code <> 0 then
	  writeln('Fehler beim Konvertieren des Strings an Stelle ',code);
	str2val:=chint
  end;
procedure sortieren(inzahl:string;var kzahl,gzahl:string);
  var i,j:integer;
	  tmp:char;
  begin
	  kzahl:=inzahl;
	  gzahl:='';
	  for i:=1 to 3 do
		begin
		for j:=i+1 to 4 do
		  begin
		  if kzahl[j]<kzahl[i] then
			begin
			  tmp:=kzahl[i];
			  kzahl[i]:=kzahl[j];
			  kzahl[j]:=tmp;
			end;
		end;
	  end;
	  for i:=1 to 4 do
		begin
		 insert(kzahl[5-i],gzahl,i)
		end;
  end;
  procedure kaprekar(krzahl:string;var anz:integer);
  var kzahl,gzahl:string;
	begin
	anz:=0;
	  while krzahl <> '6174' do
		begin
		  inc(anz);
		  sortieren(krzahl,kzahl,gzahl);
		  str(str2val(gzahl)-str2val(kzahl),krzahl);
		  if length(krzahl)<4 then
			begin
			  repeat
				insert('0',krzahl,1);
			  until length(krzahl)=4
			end;
		end;
	end;
  var ausgangszahl:string;
	  comp,zaehl:integer;
  const max=7;
  begin
  clrscr;
  ausgangszahl:='0';
  zaehl:=0;
	while str2val(ausgangszahl)<=9999  do
	  begin
	  str(str2val(ausgangszahl)+1,ausgangszahl);
	  if length(ausgangszahl) < 4 then
			begin
			   repeat
				 insert('0',ausgangszahl,1);
			   until length(ausgangszahl)=4
			end;
		if str2val(ausgangszahl) mod 1111 = 0 then
		else
		  begin
			kaprekar(ausgangszahl,comp);
			if comp=max then
			  begin
				inc(zaehl);
				{write(ausgangszahl,' ');}
			  end;
		  end;
	  end;
	  writeln('die maximale Zahl der Schritte betr„gt: ',max);
	  writeln('die Anzahl derer, die sich am laengsten wiedersetzen, betraegt: ',zaehl);
  readln
  end.

Das Programm is sogar noch ein wenig komplexer da es die ganzen Zahlen von 1- 9998 durchgeht und guckt ob es die maximale schrittzahl vonn 7 erreicht.


Aber danke dein Programm bringt mir auf jeden Fall schonmal was.
 
Zuletzt bearbeitet:
moin


Aha, jetzt hab ich es verstanden.
Ich lass mir das nochmal durchn Kopfgehen wenn ich wieder wach bin.


mfg
umbrasaxum
 
Zurück