C++ Programmierung

Z3UZ

Ensign
Registriert
Mai 2007
Beiträge
128
Wir sitzen inner schule und müssen in C++ eine Schleife erstellen, die Zahlenwerte nach der größe sortiert?!
Dabei sind wir soweit gekommen xD


#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

float messwert [7];
float p;
int i,l;

int main()
{


for(i=0;i<=6;i++)
{
l=i+1;
cout<< "Bitte geben Sie Ihren " <<l<< " . Messwert ein ";
cin>> messwert ;
messwert =i;
endl;
}




getch();
}

Wir haben bereits versucht mit dem Sortieralgorithmus Bubblesort zu arbeiten aber kp...
 
ich musste mal im 1. semester sowas machen und kopiers dir einfach mal rein.. such dir das was du brauchst hinaus ^^

#include <iostream>
using namespace std;

// Global
const int zahlenwert=5;

void tausche(double &pos1,double &pos2)
{
double temp = 0.0;

temp = pos1;
pos1 = pos2;
pos2 = temp;
}

void main()

{
double sortArray[zahlenwert];

// Ausgabe Anfangstext
cout << "Gebe nun " << zahlenwert << " Zahlen ein, diese werden geordnet!" << endl << endl;

// Eingabe
for (int i=0; i<zahlenwert; i++)
{
cout << "Den " << (i+1) << ". Wert eingeben: ";
cin >> sortArray;
}

// Sortieralgorithmus
for (int i=zahlenwert; i>1; i--)
{
for (int i=0; i<zahlenwert-1; i++)
{
if (sortArray > sortArray[i+1])
{
tausche(sortArray, sortArray[i+1]);
}
}
}

cout << endl;


// Ausgabe

cout << "Die Werte wurden sortiert:" << endl;

for (int i=0; i<zahlenwert; i++)
{
cout << " " << sortArray << endl;
}

}


Hinweis:
Im 1. Semester hatten wir erstmal nur C gemacht, is ja aber nicht ganz so unterschiedlich
 
Zuletzt bearbeitet:
Hallo erstmal, wie immer scheine die Leute zu meinen schmeiss mal sourcecode rein, und dann macht mal schön.

Lerneffekt NULL.

okay nun aber mal zu euren Sachen.



Das mit den Includes ist schon alt inzwischen je nach compiler
nutzt man(n) die libs ohne .h
also
#include <iostream>
so heist jetzt der Teil aus der std library.

dadurch funktioniert aber der aufruf von endl cout etc. nicht mehr

da sie eine "Verpackung bekommen haben" stichwort namespaces

eine abhilfe schaft da die Zeile

using namespace std;

dadurch wird der aufruf von cout zu einem std::cout

und alles ist gut...

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

hier habt ihr globale variablen eingefügt, diese sollte man immer vermeiden.

float messwert [7];
float p;
int i,l;

besser ihr benutzt hier lokale variablen

also
int main()
{
float messwerte [7];
float p;
int i,l;

anstatt :

int main()
{

bei einer Schleife könnt / solltet ihr die Zählvar mit in den schleifenkopf nehmen also

for(int i=0; i<7; ++i)

for(i=0;i<=6;i++)
{
die variable l könnt ihr euch sparen indem ihr einfach bei cout << i+1 schreibt.

also
cout<< "Bitte geben Sie Ihren " << i+1 << " . Messwert ein ";

anstatt

l=i+1;
cout<< "Bitte geben Sie Ihren " <<l<< " . Messwert ein ";
cin>> messwert ;

an dieser stelle überschreibt ihr den eingelesenen wert wieder, das muss weg
messwert =i;

hier fehlt noch ein cout << endl;
anstatt
endl;
}


getch();
}

soviel erstmal zu eurem source.

sort folgt
Ergänzung ()

Sortieren könnt ihr dann ganz einfach via Bubblesort

vom Prinzip super einfach

// Einen Schleife die so lange läuft wie werte getauscht wurden

// eine weitere Schleife die jetzt alle werte der reihe nach durchgeht
// und wenn der zweite wert größer ist als der erste wird getauscht.
// und wir müssen uns merken das wir getauscht haben

// das ganze wiederholen wir so lange bis nichts mehr getauscht wurde.

// dann ist die Liste sortiert. das Prinizp der aufsteigenen Blasen. ( Bubblesort)
 
Ich kann die Ausführungen von FrankRWeb so unterschreiben.
Allerdings gehe ich davon aus, dass der Threadersteller in der Schule auf nen Borland Compiler vom letzten Jahrhundert angewiesen ist. Dort muss man die Zeile:

using namespace std;

weglassen, da diese vom Compiler selbstständig eingebaut wird.


Ich lass das mal einfach so im Raum stehen, ohne Wertung von Borland in Kombination mit C++ ...

EDIT: achja: der Befehl getch() ist glaube ich in der Headerdatei "conio.h" enthalten. Diese sollte man noch zusätzlich inkludieren.
Oder wenn man unter Windows arbeitet: die conio.h draußen lassen und stattdessen am Ende des Programms ein:

SYSTEM("PAUSE");

reinsetzen.
 
Zuletzt bearbeitet:
Nun zum sortieren. Bevor man Code schreibt sollte man erstmal überhaupt überblicken, mit welchem logischen Vorgehen man das macht.

Bubblesort
Du willst eine Liste von Zahlen ('Array') sortieren. Die einfachste Methode ist, jedes Element dieser Liste mit dem nächsten Element in dieser Liste zu vergleichen und - je nachdem ob größer oder kleiner - die Elemente vertauschen. Dies macht man solange, bis keine Elemente mehr getauscht werden mussten. Daher der Name Bubblesort, weil die Elemente wie Blasen an ihre entsprechende Position wandern. Das ist alles andere als effizient, aber einfach zu implementieren.

Lange Rede, kurzer Sinn - Ihr benötigt folgendes:
  • Variable in der - im Falle eines Tausches - ein Wert zwischengespeichert wird (Datentyp entsprechend eurer Werteliste, also float)
  • Eine Do-While Schleife
  • Variable in der gemerkt wird OB ein Element getauscht wurde (zu beginn der Schleife jeweils zurücksetzen)
  • Eine For-Schleife in der bereits erwähnten Do-While-Schleife die die Elemente vergleicht.

Ich hoffe das genügt euch als Denkanreiz.
 
Zuletzt bearbeitet:
wow :D also danke euch allen schonmal für die Antworten
werd mich dann mal ransetzen und probieren
 
Hallo,

C++ bringt in der standardkonformen Form eine Menge Funktionen bereits mit. Damit könntet ihr die Aufgabe sehr kompakt lösen. Z.B. gibt es eine Sortierfunktion; in euren Fall könnte das so aussehen:

#include <algorithm>
...
...

std::sort( messwert, messwert + 7);

Falls ihr die Sortierung aber selber programmieren sollt, kann ich euch Insertionsort wegen der leichten Verständlichkeit empfehlen. Man trägt halt jeden Messwert an der richtigen Stelle im Anfangs leeren Array ein. Im Code etwa so aussehen:

for(int i=0;i<=6;i++) {
cout<< "Bitte geben Sie Ihren " << l << " . Messwert ein ";
cin>> mw;

// Messwert an der richtigen Stelle einfuegen
int j = 0;
while(j < i && mw > messwert[j]) ++j;
// hier gilt die Schleifenbedingung nicht mehr, also entweder j >= i oder mw <= messwert[j]
// für beide Fälle ist dann j die Position an der der Messwert eingefügt werden sollte
// Dazu muss dann Platz geschaffen werden, in dem die nachfolgende Werte um 1
// nach hinten geschoben werden.
// Das führ ich jetzt mal nicht aus ;-)
}

Hoffe es hilft.
 
Zuletzt bearbeitet: (Schleifenbedingung war im Kommetar falsch negiert. Überschreiben anstelle von Einfügen, Is wohl schon zu spät für mich ;-))
Zurück
Oben