Menu Close

Programmieren, Algorithmen und Datenstrukturen 2 (Vorlesung 6)

Probleme

  • Basiszeiger -> Abgeleitete Klasse = Problem
    • Zeiger kann nicht auf die abgeleiteten Eigenschaften zugreifen, da er diese nicht kennt
  • Abgeleiteter Zeiger -> Basisklasse = Problem
    • Zeiger denkt, dass die abgeleiteten Eigenschaften auch in der BK vorhanden sind

Abgeleitete Klassen

  • Abgeleitete Klasse hat alle Eigenschaften der Basisklasse + mehr = mehr Speicherplatz
  • Zugriff aus der abgleiteten Klasse nicht auf private Methoden der Basisklasse ( über Set/Get gehen ) <- Memberinitialisiererliste für Konstruktoren
  • Überschreiben mittels virtual != Überladung

Figuren

  • Konsolte/Terminal = 2 dimensionales Raster als char-Datenfeld[x][y] benutzen
  • Line = das schwerste, alles danach = einfach
  • Leere Stelle im Terminal = Punkt

Terminal

  • Früher 
    • Terminal = Hardware mit Schnittstelle zum Großrechner
  • Jetzt 
    • Terminal = SW
  • Aufbau
    • Reagiert nicht auf Mauseingaben
    • Prompt ist die Eingabe
    • Befehle eingeben wird vom DOS Interpreter verarbeitet
    • cls= Konsole leeren
    • Spalten/Zeilen-Größe über Rechtsklick =>Eigenschaften veränderbar

Aufgabe:

  • 20 Zeilen / 40 50 Sterne
  • for-schleife mit cout
#include <cstdlib>
#include <iostream>

using namespace std;

int main() {

    for (int i=0; i<40;i++)
    {
	for (int j=0; j<75;j++)
	{
	    cout << "*";
	}
	cout << endl;
    }

    return 0;
}

Datenfeld

  • frame[x][y]= Zweidimensionales Datenfeld im Sinne eines Rasters
  • Fängt unten an an den Koordinaten [0,0]
  • Position wird mittels X und Y bestimmt, die durch ein , getrennt werden

Schwarzes Quadrat

Frame-Klasse

  • enum color = Zwei Farben, schwarz und weiß (klassisches Terminal)
  • Schwarz = ‚ ‚ ( Leerzeichen )
  • weiß = ‚*‘ ( Char-Zeichen )
  • Frame( );  = Standardkonstruktor
  • Clipping = Unerreichbare Punkte ansteuern
int main() {

    Frame test;
    test.put_point(10,1);
    test.frame_dump();
}
*
 * File:   Frame.cpp
 * Author: maximilian.krieg
 *
 * Created on 12. April 2012, 09:19
 */

#include "Frame.h"
#include <iostream>
using namespace std;

Frame::Frame() {
    frame_reset();
}

void Frame::put_point(int x, int y) // Punkt im Frame speichern
{
    if (on_frame(x, y)) {
	frame[x][y] = on;
    }
}

void Frame::frame_reset() // Frame "leeren"
{
    for (int x = 0; x < XMAX; x++) {
	for (int y = 0; y < YMAX; y++) {
	    frame[x][y] = off;
	}
    }
}

void Frame::frame_dump() const // Frame auf die Konsole ausgeben
{
    for (int y = YMAX - 1; 0 <= y; --y) {
	for (int x = 0; x < XMAX; x++) {
	    cout.put(frame[x][y]);
	}

	cout.put('\n');
    }
    cout.put('\n');
}

bool Frame::on_frame(int x, int y) const // "Clipping"
{
    if (XMAX < x) {
	return false;
    }
    if (YMAX < y) {
	return false;
    }
    return true;
}
/*
 * File:   Frame.h
 * Author: maximilian.krieg
 *
 * Created on 12. April 2012, 09:19
 */

#ifndef FRAME_H
#define	FRAME_H

const int XMAX = 55; // Zeichen pro Frame-Zeile
const int YMAX = 34; // Zeilen pro Frame

class Frame {
public:

    enum color {
	on = ' ', off = '*'
    };

    Frame();
    void put_point(int, int); // Punkt im Frame speichern
    void frame_reset(); // Frame "leeren"
    void frame_dump() const; // Frame auf die Konsole ausgeben
    bool on_frame(int, int) const; // "Clipping"

private:
    char frame[XMAX][YMAX];

};

#endif	/* FRAME_H */

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.

Index