Was ist das hier?

  • Eine Plattform von Flensburger Studenten für Flensburger Studenten
  • Ein Wiki zum Sammeln von Wissen
  • Ein Forum zum Austausch
  • Eine Wissensdatenbank zum Informatikstudium:
    • Programmieren in C, C#, PHP, Javascript, HTML, CSS
    • Datenbanken und Abfragen mit SQL
    • 2D / 3D - Gestaltung
    • Mathe, Physik, Gerätetechnik, RoBs
    • Audio- / Videotechnik
    • ...und vieles mehr

Anmelden

Warum registrieren?

Weil besser als gut!

 

Programmieren1-Übung7 (Anmerkungen)

arraySort.cpp

Das Problem

  1. es soll eine durch eine Konstante vorgegebene Anzahl von Zahlenwerten (Typ double in ein Array eingelesen werden.
     int const anzahl = 5;
    die Konstante kann (und wird) global deklariert.
  2. Verwenden Sie zum testen einen kleinen Wert wie z.B. den Konstantenwert 5.
  3. Die vorgegebene Anzahl soll bei der Eingabeaufforderung genannt werden.
    7-Eingabeaufforderung
    7-Zahlenwerte einlesen
  4. anschließend sollen die Werte im Array nach aufsteigendem Wert sortiert werden. Sortieren
  5. Sie können hierfür den Algorithmus aus den nachfolgenden Programmierhinweisen verwenden.
    Andere Algorithmen sind möglich und erlaubt.
  6. definieren und verwenden Sie zur besseren Verständlichkeit des Hauptprogramms für das Tauschen der Werte ein kleines Unterprogramm tausche().
  7. In diesem Unterprogramm sollen nur die Werte zweier skalarer double-Parameter getauscht werden.
  8. Das Array und der Sortieralgorithmus sollen im Hauptprogramm implementiert werden.
    (→ kein Array im Unterprogramm)
  9. geben Sie dann die sortierten Werte im Hauptprogramm zeilenweise aus.

Ein Lösungsansatz

Codebeispiele sind unter Programmieren1-Übung7 zu finden.

Wenn Ihr mögliche Fehler findet oder Fragen habt, nutzt bitte die Diskussionsseite.

sortDynArray.cpp

Schreiben Sie ein Programm sortDynArray.cpp, welches sich von dem ersten folgendermaßen unterscheidet

Das Problem

  1. erfragen Sie zuerst die Anzahl der einzulesenden Werte.
    falsch ! Deklarieren Sie zuerst eine Variable (statt der Konstanten aus dem vorigen Teil)
    int  anzahl = 5;
    erfragen Sie dann den Wert !
    cout << "Geben Sie bitte die Anzahl der einzulesenden Werte ein: "; cin >> anzahl;
  2. allokieren Sie danach das benötigte Array dynamisch
    für das folgende Array muss auch erstmal ein Startpointer gesetzt werden
    double * sortList;
    dann wird der Speicherplatz für das Array sortList auf dem Heap mit anzahl Feldern zugewiesen.
    sortList = new double[anzahl];
  3. nach dem Sortieren und der Ausgabe soll der Speicherplatz für das Array wieder freigegeben werden.
    delete [] sortList; sortList = NULL; 

Eine Lösung

So könnte man es machen Codebeispiele sind unter Programmieren1-Übung7 zu finden.

Wenn Ihr mögliche Fehler findet oder Fragen habt, nutzt bitte die Diskussionsseite.

upperCase.cpp

Schreiben Sie ein Programm upperCase.cpp nach folgenden Vorgaben:

Das Problem

  1. zuerst wird zur Eingabe eines Wortes (→String) aufgefordert und dieses zunächst mit cin eingelesen. Achtung:es wird nicht geprüft, ob genug Speicher vorhanden ist. (siehe Hinweise)
  2. die in diesem Wort enthaltenen Kleinbuchstaben werden dann zu Großbuchstaben konvertiert. Alle anderen Zeichen bleiben unverändert.
  3. für die Konvertierung wird eine void-function upperCase() verwendet. Sie soll den String nur bis zur maximal erlaubten Länge verarbeiten; der Ergebnis-String soll also garantiert nicht länger sein, als durch den Speicherplatz vorgegeben.
  4. anschließend gibt das Hauptprogramm das eingegebene Wort und das konvertierte Wort aus.
  5. die maximale Wortlänge (maximale Anzahl Zeichen) wird als Konstante im Hauptprogramm definiert.
  6. es werden nur typenreine Ausdrücke verwendet! (→ nur explizite Typecasts)
  7. Da beim Einlesen mit cin bei zu langen Eingaben der Speicherbereich für die Stringvariable überläuft, soll als Alternative eine selbst zu erstellende void-function readString() verwendet werden,welche die Länge der Eingabe auf die maximale String-Länge begrenzt. -> vorläufige Eingabe mit cin (siehe 3.1) auskommentieren!

Eine Lösung

Codebeispiele sind unter Programmieren1-Übung7 zu finden.

Wenn Ihr mögliche Fehler findet oder Fragen habt, nutzt bitte die Diskussionsseite.

readString()

Das Problem

Die Eingabe über CIN ist für lange Eingabestrings unzuverlässig, da der Speicherbereich überlaufen kann. Daher soll die Eingabe auf eine maximale Länge begrenzt werden. Die Funktion übernimmt aus dem Hauptprogramm die referenz auf das Stringarray (Eingabe) und die maximale Länge der einzugebenen Zeichenkette. Bei Eingabe einer Zeichenkette, die kürzer ist als die maximale Länge soll auch nur diese eingelesen werden.

Eine Lösung

  • Der Eingabepuffer wird mit cin.get(Zeichen) über eine Schleife stückweise solange ausgelesen, bis der Integerwert des letzten eingelesenen Zeichens 10 ist (==Enter) oder die maximale Länge der Zeichenkette (maxLength) erreicht ist
  • der Integerwert wird über einen implicit typecast (Zuweisung der Char-Variablen Zeichen auf die Int-Variable (Zeichenwert) ermittelt.
  • ist Zeichenwert == 10, so wurde Enter eingelesen und eine Abbruchbedingung für die Schleife ist erfüllt.

Programmierhinweise

zu 1.2 Selection Sort Variante
Das erste Element wird mit allen nachfolgenden Elementen verglichen und immer, wenn eines davon kleiner ist,werden die Werte getauscht.Anschließend wird der gleiche Vorgang mit dem zweiten, dann dem dritten bis zum vorletzten Element wiederholt
Wie man (hoffentlich) sieht, bietet sich hier die Verwendung zweier geschachtelter for -Schleifen an.
zu 3.1 String einlesen mit cin
mit
 cin >> stringVar; 
wird ein eingelesenes Wort als String in stringVar gespeichert.
Es wird allerdings nicht überprüft, ob die String-Variable groß genug ist !!!
zu 3.2 function upperCase()
die Ordnungszahl von 'a' ist 97, die von 'z' ist 122. Das 'A' hat die Ordnungszahl 65. (siehe ASCII-Tabelle)
Beachten Sie die Struktur eines C-Strings! (wie ist er aufgebaut)
zu 3.3 Arrays als function-Parameter
beachten Sie die Besonderheiten von Array-Parametern !!!
zu 3.7
function readString()
damit nicht mehr Zeichen eingelesen werden, als in der Stringvariable Speicherzellen reserviert sind, sollen die Zeichen einzeln eingelesen werden bis die maximale Anzahl erreicht ist oder bis die Eingabetaste gedrückt wurde.
cin >> charVar;
ist hier nicht geeignet, da hiermit die Eingabetaste (-> erzeugt Code mit Ordnungszahl 10) nicht eingelesen werden kann. Stattdessen wird eine char-Variable charVar folgendermaßen eingelesen
cin.get(charVar);
Achtung: die Eingabetaste gehört nicht zum String!



Kategorie: Programmieren | 1. Semester | Labor
| Mehr

Zahlen & Daten

  • 814 Seitenaufrufe
  • 1141 Tage alt
  • 3 Versionen
  • Letzte Änderung: 21.04.2009 um 00:07 Uhr

Publish