ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
781
781
EMPFEHLEN
-
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#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]; [color=red]return atoi(gzahl)-atoi(kzahl);[/color] } void main(void) { char azahl[5]; cout << "Gebe die gewuenschte Zahl zum testen ein. "; cin >> azahl; while(azahl != "6174"){ [color=red]azahl=sortdef(azahl); [/color]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
-
26.01.05 15:23 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Und was genau ist dein Problem?
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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...
-
26.01.05 20:28 #4
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
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
-
26.01.05 22:11 #6colt4ever Tutorials.de Gastzugang
Hallo, dies ist mein Beispiel mit einem Pointer für die Differenz:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
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 :1 2 3 4 5 6 7 8 9 10 11 12 13
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.
-
26.01.05 22:17 #7colt4ever Tutorials.de Gastzugang
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
-
26.01.05 22:33 #8
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Nicht wirklich.Naja ist ja relativ gut zu sehen eigendlichChor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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)
-
27.01.05 22:26 #11
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
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
-
27.01.05 22:48 #12
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Es erfüllt noch nicht alle deine Anforderungen, aber vielleicht bringt es dir was.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
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.Geändert von CLRS530 (29.01.05 um 02:38 Uhr)
-
29.01.05 00:55 #14
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Aha, jetzt hab ich es verstanden.
Ich lass mir das nochmal durchn Kopfgehen wenn ich wieder wach bin.
mfg
umbrasaxum
-
Naja wenn man den Text nur überfliegt und sich nicht die Zeit zum lesen nimmt, dann hast du wohl recht
Zitat von Kachelator
Ähnliche Themen
-
BCB Ansistring als Rückgabewert einer Funktion
Von dern3ro im Forum Borland CBuilder und VCLAntworten: 2Letzter Beitrag: 22.03.10, 18:08 -
Rückgabewert einer Funktion
Von Dragonate im Forum C/C++Antworten: 5Letzter Beitrag: 30.11.09, 14:57 -
jQuery: $.post Rückgabewert als Rückgabewert der Funktion - geht das?
Von Kryptaesthesie im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 15.01.09, 07:40 -
jsp: Rückgabewert einer Funktion in variable?
Von Layna im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 13.12.07, 11:17 -
combobox, rückgabewert einer js-funktion
Von rtd1978 im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 18.04.05, 14:12





Zitieren
Login






