Bitte um Hilfe.
-
@Mechanics
Imperative Programmierung erfordert etwas, was viele Leute nicht können: Schritt für Schritt klare Anweisungen geben, deren Ausführung dann im Endeffekt das bewirkt was man erreichen wollte.
Das in der Schule zu unterrichten halte ich schon für Vorteilhaft, weil ich der Meinung bin dass es allgemein das logische Denken und die Fähigkeit sich klar auszudrücken fördert. Wobei man es dann natürlich so unterrichten müsste dass dabei auch was ankommt.
Rumhantieren mit Zeigern halte ich dabei z.B. nicht füt notwendig.
-
Hört mal. Wir haben mit Office alles durch. Auch Mi MYSQL ein bißchen gearbeitet, jetzt c++ bzw das Programm QT. Wir haben schon Taschenrechner gemacht, Rechenaufgaben, usw. War echt ok. Aber sowas sehe ich zum ersten Mal. Egal ob ich zeichne, wenn es mich nicht weiterbringt, weil ich nicht richtig weiß, wo was reingehört.
Ich wollte hier Hilfe bekommen, Weil ich damit nichts zu tun habe, oder ab September hoffentlich nix mehr zu tun haben werde.
Es ist für mich einfach sinnlos sowas zu lernen. Ich muss es machen. Leider. Hilfe brauche ich.
-
In einer doppelt verketteten Liste hat jedes Element einen Zeiger auf das nächste Element sowie auf das vorige Element.
Wenn also e ein Zeiger auf ein Element ist, dann muss e->Next immer der Zeiger auf das nächste Element sein, und e->Prev der Zeiger auf das vorige.
D.h. es muss dann z.B. auch (für alle Elemente bis auf das letzte) gelten e == e->Next->Prev. Und für alle Elemente bis auf das erste muss gelten e == e->Prev->Next.Um ein Element e irgendwo einzufügen musst du also 4 Zeiger richtig setzen:
`e->Nexte->Prev
e->Next->Prev
unde->Prev->Next`
-
Danke an hustbaer,
jetzt ist es rückwärts, aber es fahlt 1-2-3. Aber ist schon mal was, ich bekomme auch Fehlermeldungen, das Programm macht den build fertig.

Ist schon mal was![code"cpp"]
#include <iostream>
using namespace std;
struct listenelement
{
string daten;
listenelement* next;
listenelement* prev;
listenelement* last;
};
void anhaengen(string datenneu, listenelement* listenanfang)
{
listenelement* hilfszeiger;
hilfszeiger = listenanfang;
while(hilfszeiger->next != NULL)
hilfszeiger = hilfszeiger->next;
hilfszeiger == hilfszeiger->prev->next;
hilfszeiger == hilfszeiger->next->prev;
hilfszeiger->daten = datenneu;
hilfszeiger = hilfszeiger->prev = NULL;
}
void ausgeben(listenelement listenanfang)
{
listenelement hilfszeiger;
hilfszeiger = listenanfang;
cout << hilfszeiger->daten << '\n';
while (hilfszeiger->next != NULL)
{
hilfszeiger = hilfszeiger->next;
cout << hilfszeiger->daten << '\n';
}
}
void ende(listenelement* listenanfang)
{
listenelement* hilfszeiger;
while (listenanfang !=NULL)
{
hilfszeiger = listenanfang;
listenanfang = listenanfang->next;
delete (hilfszeiger);
}
}int main ()
{
listenelement* listenanfang;
listenanfang = new (listenelement);
listenanfang->next = NULL;
listenanfang->daten = "Element 1",
anhaengen("Element 2", listenanfang);
anhaengen("Element 3", listenanfang);
anhaengen("Element 4", listenanfang);
ausgeben (listenanfang);
ende (listenanfang);return 0;
}
[/code]
-
tom830211 schrieb:
... das Programm macht den build fertig.
Das hat nicht viel zu sagen:
Zeile 16 und 17 haben keinen Effekt (das ist ein Vergleich)
Aber da sollte der Compiler eine Warnung geben.Es hilft auch nichts, dem Hilfszeiger immer neue Werte zuzuweisen.
Du musst diese Werte auch mal wieder schreiben.Am einfachsten ist es erstmal drei (3) Hilfszeiger zu nehmen.
Einen für das neue Element,
einen für den Vorgänger und
einen für den Nachfolger.Damit kannst du dann die Werte neu zuweisen.
Vorgänger->next = neues Element Nachfolger->prev = neues Element neues Element->prev = Vorgänger neues Element->next =Denke aber auch daran, dass die Zeiger mal NULL sein können (Anfang und Ende).
Einen NULL-Zieger darf man nicht dereferenzieren.Mach dich mal über http://de.wikipedia.org/wiki/Einrückungsstil schlau.
-
Hallo, ich schon wieder.
Wie kann ich es rückwärts laufen lassen??? Vorvärts geht es ja!
Danke schön!
#include <iostream> using namespace std; struct listenelement { string daten; listenelement* next; listenelement* prev; listenelement* last; }; void anhaengen(string datenstring, listenelement* listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; while(hilfszeiger->next != NULL) hilfszeiger = hilfszeiger->next; hilfszeiger->next = new (listenelement); hilfszeiger->next->prev = hilfszeiger; hilfszeiger->next->daten = datenstring; hilfszeiger->next->next = NULL; } void ausgeben(listenelement *listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; cout << hilfszeiger->daten << '\n'; while (hilfszeiger->next != NULL) { hilfszeiger = hilfszeiger->next; cout << hilfszeiger->daten << '\n'; } } void ende(listenelement* listenanfang) { listenelement* hilfszeiger; while (listenanfang !=NULL) { hilfszeiger = listenanfang; listenanfang = listenanfang->next; delete (hilfszeiger); } } int main () { listenelement* listenanfang; listenanfang = new (listenelement); listenanfang->next = NULL; listenanfang->daten = "Element 1", anhaengen("Element 2", listenanfang); anhaengen("Element 3", listenanfang); anhaengen("Element 4", listenanfang); ausgeben (listenanfang); ende (listenanfang); return 0; }
-
Na als erstes wie in
anhaengendas letzte Element suchen (diewhileSchleife) und dann über dieprevZeiger zurück gehen statt über dienextZeiger vorwärts.BTW: Den
lastZeiger in der struct würde ich wegmachen, schliesslich verwendest du den ja auch nicht.
(Vermutlich wurde "last" hier mit der Bedeutung "letztes" im Sinn von "voriges" verwendet/vorgeschlagen, also einfach nur ein anderer Name für das was bei dir jetzt "prev" heisst.)Und dem
DirkB schrieb:
Mach dich mal über http://de.wikipedia.org/wiki/Einrückungsstil schlau.
kann ich mich nur anschliessen.
Korrekte Einrückung macht den Code viel einfacher lesbar.
-
So,
danke an alle, wir haben jetzt eine Musterlösung bekommen, Das hätten wir programmieren müssen.
Also, ohne "prev", nur mit "last".
Also, hatt die ganze Klasse eine 6 bekommen. Wir haben uns sehr darüber ......Danke trotzdem an alle, die helfen wollten!
#include <iostream> using namespace std; struct listenelement { int daten; listenelement* next; listenelement* last; }; listenelement* anhaengen(int datenneu, listenelement* listenende) { listenelement* hilfszeiger; hilfszeiger = listenende; hilfszeiger->next = new(listenelement); hilfszeiger->next->last = hilfszeiger; hilfszeiger = hilfszeiger->next; hilfszeiger->daten = datenneu; hilfszeiger->next = NULL; return (hilfszeiger); } void ausgeben(listenelement* listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; cout << hilfszeiger->daten << '\n'; while (hilfszeiger->next != NULL) { hilfszeiger = hilfszeiger->next; cout << hilfszeiger->daten << '\n'; } } void ausgebenRueckwaerts(listenelement* listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; while (hilfszeiger->next != NULL) hilfszeiger = hilfszeiger->next; while (hilfszeiger != NULL) { cout << hilfszeiger->daten << '\n'; hilfszeiger = hilfszeiger->last; } } void ende(listenelement *listenanfang) { listenelement* hilfszeiger; while (listenanfang != NULL) { hilfszeiger = listenanfang; listenanfang = listenanfang->next; delete(hilfszeiger); } } int main () { listenelement* listenanfang; listenelement* listenende; listenanfang = new(listenelement); listenanfang->next = NULL; listenanfang->daten = 1; listenende = listenanfang; for (int schleife = 2; schleife< 100; schleife++) listenende = anhaengen(schleife, listenende); ausgeben(listenanfang); ausgebenRueckwaerts(listenanfang); ende(listenanfang); return 0; }
-
Die ganze Klasse hat ne 6 bekommen, weil sie die Variable "prev" und nicht "last" genannt haben?

Lustig auch, dass wohl deine ganze Klasse diesen Thread gelesen hat.Mal ehrlich, was genau hat der Lehrer denn gesagt?
-
tom830211 schrieb:
Also, hatt die ganze Klasse eine 6 bekommen.
.. dann hat ja wohl der Lehrer auf ganzer Linie versagt - oder?
-
NaAHörMal schrieb:
Die ganze Klasse hat ne 6 bekommen, weil sie die Variable "prev" und nicht "last" genannt haben?

Lustig auch, dass wohl deine ganze Klasse diesen Thread gelesen hat.Kann ja sein dass die anderen wegen anderer Fehler/Probleme ne 6 bekommen haben.
Davon abgesehen ist natürlich von einem Versagen des Lehrers auszugehen wenn die ganze Klasse ne 6 bekommt.
Eine ganze Klasse voller Idioten und/oder Leute die zu faul sind eine bestimmte Aufgabe zu machen, davon ist ja eher nicht auszugehen.@tom830211
Wie ist denn euer Direktor so drauf? Falls man mit dem halbwegs reden kann würde ich mir mal einen Termin bei diesem erbitten. Bzw. vielleicht kann man das ganze ja einfach beim nächsten Elternsprechtag ansprechen.
Dass ein Lehrer allen ne 6 gibt, einfach nur weil er nicht fähig war das Thema so zu unterrichten dass es wenigstens ein paar Schüler verstehen, das kanns ja dann auch nicht sein.
Dann muss man als Lehrer auch soweit sein zu sagen "OK, das hab' ich verbockt, also werte ich die Aufgabe einfach nicht und gucke wie ich das das nächste mal besser machen kann".ps: Ausser natürlich es haben alle in eurer Klasse "zufällig" 1:1 den selben Code abgegeben. Dann würde wohl auch ich als Lehrer einfach allen ne 6 geben

(Obwohl man bei dieser Aufgabe schon sehr eingeschränkt ist, bzw. auch sehr wenig dazuprogrammieren muss, so dass es kaum sehr viele wirklich unterschiedliche Lösungen geben wird -- auch ohne Schummeln/Abschreiben. Gerade weil schon so viel vorgegeben ist, inklusive Schema wie lokale Hilfsvariablen etc. benannt werden.)
-
Eine ganze Klasse voller Idioten und/oder Leute die zu faul sind eine bestimmte Aufgabe zu machen, davon ist ja eher nicht auszugehen.
da wäre ich mir mal nicht so sicher

-
Nun, paar haben es nicht mal versucht. Wieso auch, kann ich auch nachvollziehen. Aber ich habe es wenigstens versucht, mit Hilfe von hier, die Tipps habe ich eingebaut, es lief bloß nicht rückwärts. Aber trotzdem ne 6. Ist ja auch ok. Die nächste Aufgabe ist ein TV zu programmieren, mit ein und aus. Weiß nicht wieso, aber hört sich nicht schwer an.
-
Also dieses "die ganze Klasse hat ne 6 bekommen" hört sich so bekannt aus Schulzeiten an.
Man hat ne 6 bekommen, schaut sich um : "Ach ja, [2-3 Personen, die ich kenne] haben auch auch ne 6 -> JEDER HAT NE 6!!!".
In deinem Fall ist die 6 natürlich gerechtfertigt. Du hast schlichtweg überhaupt keine Ahnung von der Materie und du hast was gefordert war einfach nicht mal ansatzweise umgesetzt. Wenn es eine schlechtere Note als die 6 gäbe, dann wäre diese angebracht.
Aber das ist dir auch völlig bewusst und da du nicht klagst ist ja auch alles in Ordnung. Ist halt nun mal so.
Was die anderen angeht haben wir natürlich viel zu wenig Informationen. Das hängt imho vom Milieu ab. Kein Lehrer der Welt kann Menschen unterrichten, die nicht unterrichtet werden wollen.
Aber in so einem Milieu bringt man eig. auch keine Informatik bei.Naja, wie auch immer ... Wir können daran eh nichts ändern, du wirst auch nichts dran ändern und am Ende ist es halt so, wie es ist.
Schade aber auch keine Tragödie.
-
NaAHörMal schrieb:
In deinem Fall ist die 6 natürlich gerechtfertigt. Du hast schlichtweg überhaupt keine Ahnung von der Materie und du hast was gefordert war einfach nicht mal ansatzweise umgesetzt. Wenn es eine schlechtere Note als die 6 gäbe, dann wäre diese angebracht.
Wie kannst du das sagen?
Warst du beim Unterricht dabei?
Weisst du was unterrichtet wurde? Ob die Schüler überhaupt auch nur ansatzweise genug mitbekommen haben so dass man ihnen die Aufgabe zumuten kann?
Kann sein ja, kann sein nein.Was ich nicht abkann, ist wenn sich jemand anhand unvollständiger und nicht nachzuprüfender Daten ein Bild macht, und dann sicher ist dass es zutrifft.
Das ist nämlich reichlich arrogant.
Und abgesehen davon natürlich auch sehr dumm.
Macht die Welt dafür natürlich unglaublich einfach.
-
hustbaer schrieb:
Wie kannst du das sagen?
Warst du beim Unterricht dabei?
Weisst du was unterrichtet wurde? Ob die Schüler überhaupt auch nur ansatzweise genug mitbekommen haben so dass man ihnen die Aufgabe zumuten kann?
Kann sein ja, kann sein nein.Hast du mal versucht den Thread zu lesen?
Mal ehrlich ... Mit der Einstellung hat man nichts anderes als eine 6 verdient. Ganz egal was der Lehrer beigebracht hat oder was auch nicht.
Willst du mir ernsthaft erzählen, dass jemand mit der Einstellung "Ich will das gar nicht können, sagt mir bitte einfach die Lösung damit ich es abgeben kann! Ich will auch bitte überhaupt gar keine Mühe darin investieren, es zu verstehen!" etwas anderes als die schlechteste Note verdient hat?
Es juckt ihn doch nicht mal. Und wieso? Weil er selber weiß, dass es verdient war.
-
@NaAHörMal
Ich hab' kein Problem damit dass du deine Meinung hast. Ich hab auch kein Problem damit wenn du deine Meinung hier äusserst.
Ich hab aber sehrwohl ein Problem damit wenn jemand meint Dinge zu "wissen" die er einfach nicht wissen kann.
Wie hoch bzw. niedrig die Wahrscheinlichkeit ist dass er dabei falsch liegt ist ziemlich egal.Und wenn du gar nicht anders kannst, dann schreib von mir aus "ich bin mir sicher ...". Was zumindest klarmacht dass es eine subjektive Meinung ist, auch wenn du persönlich quasi die Möglichkeit ausschliesst dass es anders sein könnte.
Nur etwas einfach als Fakt zu präsentieren was man eben nicht wissen kann... finde ich Kacke.
Falls ich mich dessen auch schuldig machen sollte macht das die Sache nicht besser, und ich würde bitten mich dann an entsprechender Stelle darauf hinzuweisen.Und auf ein paar Sachen möchte ich noch konkret eingehen...
NaAHörMal schrieb:
Hast du mal versucht den Thread zu lesen?
Ja, natürlich. Ich hab' den gesamten Thread gelesen, von Anfang an.
NaAHörMal schrieb:
Mal ehrlich ... Mit der Einstellung hat man nichts anderes als eine 6 verdient. Ganz egal was der Lehrer beigebracht hat oder was auch nicht.
Ich weiss nicht ob ich es jemandem übel nehmen könnte, wenn er sich für ein Fach und die Aufgaben die er dafür machen soll nicht interessiert, wenn der Unterricht in dem Fach einfach unter aller Sau ist. Ich weiss nicht ob das der Grund ist, aber es zumindest möglich und nicht astronomisch unwahrscheinlich.
(Dass der Lehrer nicht ganz so toll drauf ist, das kann man anhand der Vorgabe schon halbwegs sicher sagen. Die Frage ist für mich bloss noch ob er "nicht so gut" oder wirklich schlecht ist.)
-
Ich versteh nicht genau, was dich so sonderlich stört.
Die Tatsache, dass ich eine als Fakt formulierte Aussage getroffen habe, dass er diese Note 6 definitiv verdient hat?
Falls es das ist, dann kann ich leider nicht davon abweichen. Ich finde das sowohl subjektiv als auch objektiv und auch unter Betrachtung meines mangelnden Kenntnisstandes der Gesamt-Situation völlig angebracht.
Der TE kam hier in den Thread und wollte eine Lösung für eine Aufgaben, die er in der Schule bekommen hat.
Er weiß, dass er diese Aufgabe zu lösen hat und gleichzeitig ist diese Aufgabe auch völlig lösbar.Der TE merkte schnell, dass ihm dazu das Wissen fehlte. Hierzu wurde von Euch allerdings einiges an Material geliefert, mit dem man sehr leicht das fehlende Wissen hätte erlangen können.
Das wäre in dem zeitlichen Rahmen locker drin gewesen und hätte auch keine unverhältnismäßige Anstrengung seinerseits gefordert.Ob er auf die Aufgabe Lust hat oder nicht und warum er keine Lust drauf hat (seine Schuld oder die des Lehrers?) ist doch völlig irrelevant.
Er weiß, dass er die Aufgabe lösen muss und riskiert, eine 6 zu bekommen, falls er es nicht tut.Er hat sich dafür entschieden, es nicht zu tun und hat dementsprechend die Note kassiert, die er dafür verdient hat.
Völlig unabhängig davon kann der Lehrer trotzdem richtig mies sein. Das ist aber nicht wichtig.
Wichtig ist, dass er die Aufgabe hätte lösen können, wenn er die entsprechende Lust und Mühe investiert hätte.Er wollte aber nicht und somit kassiert er die Note, die es dafür nun mal gibt.
Anders wäre die Situation, wenn ihm der Lehrer eine völlig unlösbare Aufgabe geben hätte, die in dem gegeben Zeitraum nicht realistisch lösbar ist.
Die Aufgabe war aber definitiv Schul und Anfängerniveau.
-
NaAHörMal schrieb:
Ich versteh nicht genau, was dich so sonderlich stört.
Die Tatsache, dass ich eine als Fakt formulierte Aussage getroffen habe, dass er diese Note 6 definitiv verdient hat?
Genau.
Dass du glaubst Dinge mit Sicherheit wissen zu können die du meiner Meinung nach nicht wissen kannst.Diese absolute Sicherheit die leider so viele Leute bezüglich so vieler Dinge verspüren führt zu so viel unnötigen Misverständnissen, Kummer und Leid ... ich finde das einfach traurig. Vielleicht reagiere ich daher etwas überempfindlich auf dieses Thema.
Hier in diesem Thread dieses konkrete Beispiel ... völlig schnuppe. Der OP macht nicht den Eindruck als wäre er jmd. der sich wegen ein paar harter Worte aus dem Fenster stürzt, ich denke der hält das schon aus.
Ich hab da einfach grundsätzlich ein Problem damit. Und schon doppelt und dreifach wenn jemand, selbst wenn man ihn darauf anspricht/-schreibt, dabei bleibt und noch bekräftigt dass er es weiss, dass es so sein muss, dass es so ist.Ob er auf die Aufgabe Lust hat oder nicht und warum er keine Lust drauf hat (seine Schuld oder die des Lehrers?) ist doch völlig irrelevant.
Das sehe ich auch anders. Ist aber nichtmal wichtig, denn...
Anders wäre die Situation, wenn ihm der Lehrer eine völlig unlösbare Aufgabe geben hätte, die in dem gegeben Zeitraum nicht realistisch lösbar ist.
Die Aufgabe war aber definitiv Schul und Anfängerniveau.
Ich hatte selbst Informatik in der Schule. Ich konnte damals schon programmieren, weil ich mich privat schon seit Jahren damit beschäftigt hatte.
Unser Lehrer konnte allerdings *nichts*. Er hat es 2-3 Stunden probiert uns ein bisschen was beizubringen. *
Hätte er uns damals so eine Aufgabe gebeben (was er nicht hat, so realistisch war er), so wäre diese für vermutlich > 90% der Klasse nicht in zumutbarer Zeit (oder überhaupt nicht) eigenständig lösbar gewesen.ps:
Ich glaube ja selbst dass der OP ein faules Stück ist. Ich bin mir aber nicht sicher, und ich meine eben dass wir es aus der Ferne nicht sicher sagen können.EDIT:
*
D.h. er hat 2-3 Stunden versucht uns etwas zum Thema Programmierung beizubringen. Die restliche Zeit haben wir schon andere Dinge gemacht, und da war er auch nicht so schlecht. Nur ... ins WinWord reinklicken können bringt dir halt wenig, wenn du dann auf einmal was programmieren sollst.
-
Nun, um alles klar zu stellen.
1.: Es war ne Hausaufgabe.
2.: Wir hatten ja nur die einfach verkettete Liste bekommen.
3.: Über eine doppelt verkettete Liste haben wir nie was gehört, kein Hand-Out bekommen, das Buch ist ja nicht dafür gedacht, ist ja eigentlich nur Office drinn.
4.: Wieso wir jetzt solche Aufgaben bekommen haben, weiß keine von uns.
5.: Wir sind keine Informatik Klasse, wir sind im sozialen Bereich tätig.
6.: Einige haben es versucht, z.B.: Ich, da unten ist es, ist nicht perfekt, aber immerhin habe ich es versucht, trotz der Tatsache, dass wir NICHTS ABER GARNICHTS dafür bekommen haben, doppelt verkettete Liste, ja eine Sache, das auch noch rückwärts laufen zu lassen, ja, auch eine Sache. Völlig sinnlos für uns.
7.: wieso müssen wir sowas machen?
8.: Ja ich konnte es nicht mehr sehen, wieso auch, ich habe wichtigere Fächer als das, bzw möchte ich mein wissen in eine total andere Richtung erweitern.
9.: Als wir dies angesprochen haben beim Lehrer, hat es nix gebracht. Im Direktorat auch nicht. Aber ok.
10.: Du arroganter A...., löse du Aufgaben bitte, wo du keine Infos hast, einfach was vor deine Nase geschi.....n bekommst, und löse es, auch noch so, das für dich echt keinen relevanten Wert macht.
11.: Wer es wenigstens versucht hat, hätte ne 4 verdient. aber ok.
12. Hast du hier alles durchgelesen du Depp, hier steht überall, dass ich mit den "Befehl" "prev" arbeiten soll. Siest du sowas in der Lösung des Lehrers???Lass mich lieber in Ruhe ja, Du bist nicht dabei, du hast echt keine Ahnung, kannst uns gerne mal besuchen kommen. Eventuell Kann ich dir solche Aufgaben in Soziologie oder Psychologie geben, was für mich ganz logisch oder einfach ist, aber für dich wird es unlösbar sein, oder du gibst einfach auf. Und dann????
Hinsetzen 6!#include <iostream> using namespace std; struct listenelement { string daten; listenelement* next; listenelement* prev; listenelement* last; }; void anhaengen(string datenstring, listenelement* listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; while(hilfszeiger->next != NULL) hilfszeiger = hilfszeiger->prev->next; hilfszeiger->next = new (listenelement); hilfszeiger = hilfszeiger->next->prev; hilfszeiger->next->daten = datenstring; hilfszeiger->next->next = NULL; } void ausgeben(listenelement *listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; cout << hilfszeiger->daten << '\n'; while (hilfszeiger->next != NULL) { hilfszeiger = hilfszeiger->next; cout << hilfszeiger->daten << '\n'; } } void ende(listenelement* listenanfang) { listenelement* hilfszeiger; while (listenanfang !=NULL) { hilfszeiger = listenanfang; listenanfang = listenanfang->next; delete (hilfszeiger); } } int main () { listenelement* listenanfang; listenanfang = new (listenelement); listenanfang->next = NULL; listenanfang->daten = "Element 1"; anhaengen("Element 2", listenanfang); anhaengen("Element 3", listenanfang); anhaengen("Element 4", listenanfang); ausgeben (listenanfang); ende (listenanfang); return 0; }