Teilnehmerliste erstellen mit Sortierung
-
Und vor allem geht <stdio.h> nicht genauso gut. Das ist mal wieder Quatsch. stdio.h ist im C-Standard und hat in einer C++-Anwendung NICHTS zu suchen. Müsste sogar im C++-Standard stehen, dass aus kompatibilitätsgründen die alten C-Header übernommen wurden, diese aber durch ein vorrangehendes c im namen gekennzeichnet werden.
-
Ach, was mit C geht, dafür braucht man kein C++.

printf (und sprintf) finde ich schon ziemlich sinnvoll. Wenn man dessen Tücken kennt ist es meines Erachtens wesentlich übersichtlicher und komfortabler als alle IOStreams. Alleine schon durch die Trennung von Format und Parametern.
-
CStoll schrieb:
wog schrieb:
verstehe ich nit so ganz statt cin.width cin.left??
cin.width() setzt die Breite für die nächste Ausgabe, cin.setf() setzt einige interne Flags (u.a. Ausrichtung, Zahlenbasis und Darstellung von Gleitkomma-Werten). setw() und left sind sog. Manipluatoren - die kannst du an dne normalen operator<< übergeben, um die Breite bzw. die Flags des Streams zu beeinflussen.
(für's erste reicht es vermutlich zu wissen, daß es das gibt - was du alles damit machen kannst, erfährst du z.B. in meinem Magazin-Artikel über IO-Streams)
@Fellhuhn: Da haben wir schonmal jemanden, der gleich mit vernünftigem C++ begonnen hat - den mußt du nicht durch C Basteleien aus dem Konzept bringen

cin soll schon immer cout heißen denke ich mal wenn du ausgabe schreibst
-
Fellhuhn schrieb:
Alleine schon durch die Trennung von Format und Parametern.
... führt zu massenweise schwer zu entdeckenden Problemen - wenn die Formate nicht zu den übergebenen Parametern passen.
IO-Streams sind zwar teilweise ein wenig umständlicher zu handhaben, aber auf jeden Fall sicherer und weniger fehleranfällig als printf(). (und wie du selbst sagtest, man muß die Tücken kennen ;))
-
(D)Evil schrieb:
Und vor allem geht <stdio.h> nicht genauso gut. Das ist mal wieder Quatsch. stdio.h ist im C-Standard und hat in einer C++-Anwendung NICHTS zu suchen. Müsste sogar im C++-Standard stehen, dass aus kompatibilitätsgründen die alten C-Header übernommen wurden, diese aber durch ein vorrangehendes c im namen gekennzeichnet werden.
Probier es aus. Es geht genauso gut.
Viel mehr als stdio.h inkludieren und die Funktionen in den Namespace zu packen macht cstdio nämlich auch nicht.
-
CStoll schrieb:
IO-Streams sind zwar teilweise ein wenig umständlicher zu handhaben, aber auf jeden Fall sicherer und weniger fehleranfällig als printf(). (und wie du selbst sagtest, man muß die Tücken kennen ;))
Gerade das sehe ich als riesigen Vorteil. Zu wissen was da passiert, darauf achten zu müssen. Ansonsten endet man wie bei Java und hat am Ende keine Ahnung mehr davon was da eigentlich vor sich geht. Und von Debuggen hat man dann auch nichts mehr gehört. Um so mehr Grundlage, um so besser. Sehe ich zumindest so.

-
Fellhuhn schrieb:
Probier es aus. Es geht genauso gut.
Viel mehr als stdio.h inkludieren und die Funktionen in den Namespace zu packen macht cstdio nämlich auch nicht."Probier es aus" oder "funktioniert aber" sagt genau 0% über die Konformität des verwendeten Compilers aus :p
-
Fellhuhn schrieb:
(D)Evil schrieb:
Und vor allem geht <stdio.h> nicht genauso gut. Das ist mal wieder Quatsch. stdio.h ist im C-Standard und hat in einer C++-Anwendung NICHTS zu suchen. Müsste sogar im C++-Standard stehen, dass aus kompatibilitätsgründen die alten C-Header übernommen wurden, diese aber durch ein vorrangehendes c im namen gekennzeichnet werden.
Probier es aus. Es geht genauso gut.
Viel mehr als stdio.h inkludieren und die Funktionen in den Namespace zu packen macht cstdio nämlich auch nicht.Ja, die C-Header sind noch im Orignal enthalten, aber schon in der nächsten Version sind sie afaik als veraltet eingestuft - und in der übernächsten Version des C++ Standards gibt es dann nur noch die C++ Version.
Fellhuhn schrieb:
Gerade das sehe ich als riesigen Vorteil. Zu wissen was da passiert, darauf achten zu müssen. Ansonsten endet man wie bei Java und hat am Ende keine Ahnung mehr davon was da eigentlich vor sich geht. Und von Debuggen hat man dann auch nichts mehr gehört. Um so mehr Grundlage, um so besser. Sehe ich zumindest so.

Mir ist aber eine klare Compiler-Meldung deutlich lieber als ein Laufzeit-Fehler, der mit etwas "Glück" gar nicht bei dem falsch verwendeten printf()-Aufruf, sondern irgendwo anders im Programm auftritt.
-
Hallo allerseits...
ich klinge mich hier einfach mal in das Thema ein, da es sich bei mir um die gleiche Aufgabe dreht.
Genauergesagt geht es um die alphabetische Sortierung der Nachnamen.
Ich wollte das aber eben nicht über Befehle lösen die wir eigentlich noch nicht kennen sondern über Schleifen und diese Dreiecksverschiebung.
Ich habe mir also diesen Code überlegt:for (i=0;i<n;i++) { for (j=0;j<n;j++) { if (nachname[j+1]<nachname[j]) { p1=vorname[j]; vorname[j]=vorname[j+1]; vorname[j]=p1; p2=nachname[j]; nachname[j]=nachname[j+1]; nachname[j]=p2; p3=matrikelnummer[j]; matrikelnummer[j]=matrikelnummer[j+1]; matrikelnummer[j]=p3; } } }p1 ist in diesem Fall der Platzhalter für die Vornamen, p2 für die Nachnamen und p3 für die Nummern. Ich habs gern übersichtlich ^^.
Wenn ich das in Gedanken und mit Hilfe von Stift+Papier nachprüfe sollte das auch ohne Probleme funktionieren.
Praktisch tut es das allerdings nicht.Woran liegt das?
-
als was ist nachname definiert? So wie es aussieht verschiebst du die Buchstaben in den Nachnamen ... ob das der Sinn ist?

Aja und guck dir doch sortieralgorithmen an ... du kannst sie ja selber implementieren ... aber angucken schadet nicht ...
-
Die Nachnamen sind selbstverständlich Buchstaben und als string definiert, genauso wie p1, p2 und p3. Und dass ich mir "übliche" Algorithmen anschaue erklärt mir doch auch nicht, warum meine Möglichkeit nicht funktioniert.
-
also ich hab meinen fehler gefunden.