C/C++ Programmierung

Aufgabe 34

Es werden positive Zahlen von der Tastatur eingelesen bis der Benutzer eine 0 eingibt (Abbruchkriterium). Das Programm gibt die eingegebenen Zahlen absteigend sortiert aus.
     Bitte die Werte eingeben und mit 0 beenden:
     3 6 5 99 1001 1 5
     1001, 99, 6, 5, 5, 3, 1,

Alle unterstrichenen Stellen bei der Aufgabe sind Eingaben, die der Benutzer durchführen soll.

Lösung für die Aufgabe

#include <fstream.h>

// Konstante für die maximale Anzahl an Zahlen definieren
const int MAX_ZAHL = 100;

// Funktion zum Vertauschen zweier Zahlen
void change(int *a, int *b)
{
  int buffer; // Buffer, der für die Vertauschung benötigt wird

  buffer = *a;
  *a = *b;
  *b = buffer;
}

// Start des Hauptprogrammes
main()
{
  // Variablen deklarieren
  int zahl;
  int count = 0;        // Aktuelle Zahl (mit 0 initialisieren)
  int zahlen[MAX_ZAHL]; // Buffer für die Zahlen (max. MAX_ZAHL Zahlen)

  cout << "Bitte die Werte eingeben und mit 0 beenden: ";
  // Die erste Zahl einlesen
  cin >> zahl;

  // Testen ob Zahl ungleich 0 ist und weniger als MAX_ZAHL Zahlen
  // im Buffer sind
  while (zahl != 0 && count < MAX_ZAHL)
  {
    // Testen ob die Zahl positiv ist
    if (zahl > 0)
    {
      // Zahl in den Buffer schreiben
      zahlen[count] = zahl;

      // Variable für aktuelle Zahl um eins erhöhen
      count++;

      // Testen ob MAX_ZAHL Zahlen eingegeben wurden
      if (count == MAX_ZAHL)
      {
        cout << "Es können keine weiteren Zahlen eingegeben werden." << endl;
        break;
      }
    }

    // nächste Zahl einlesen
    cin >> zahl;
  }

  // Zahlen sortieren (Selectionsort)
  int max_pos, max_zahl, i, j; // Variablen deklarieren
  // Alle Zahlen durchlaufen
  for (i = 0; i < count; i++)
  {
    max_zahl = 0;
    max_pos  = i;

    // Zahlen von i bis count-1 durchlaufen
    for (j = i; j < count; j++)
    {
      // Testen ob Zahl an Position j größer ist als max_zahl
      if (zahlen[j] > max_zahl)
      {
        max_zahl = zahlen[j];
        max_pos = j;
      }
    }

    // Wenn die größte Zahl nicht die Zahl an Position i ist, dann
    // Zahlen vertauschen
    if (max_pos != i)
      change(&zahlen[i], &zahlen[max_pos]);
  }

  // Zahlen ausgeben
  for (i = 0; i < count; i++)
    cout << zahlen[i] << ", ";

  cout << endl;
}


Zurück zur Übersicht