C Klasse erstellen

Neue Frage »

Auf diesen Beitrag antworten »
Jason C Klasse erstellen

Hallo leute ich habe gerade schon am Anfang probleme bei dieser Aufgabe:

Gegeben sei die folgende Beschreibung eines Saugroboters:
· Der Saugroboter ist rund, seine Form wird damit durch seinen Durchmesser bestimmt. Der
Durchmesser wird in Metern gemessen. Eine Gleitkommazahl mit einer Genauigkeit von 6 bis 7
Nachkommastellen genügt den Genauigkeitsanforderungen.
· Die Position des Saugroboters im Raum wird durch zwei Werte x und y (Einheit: Meter)
angegeben, die die Position als Punkt im kartesischen Koordinatensystem eindeutig beschreiben.
Um Rundungsfehler bei relativer Positionierung zu minimieren, sollen diese Werte als doppelt
genaue Gleitkommazahlen definiert werden.
· Für die Ausrichtung wird der Winkel zwischen der Mitte der Frontseite und der x-Achse
(gemessen in Radianten (rad)) ebenfalls mit einer doppelt genauen Gleitkommazahl gespeichert

Beim Erzeugen eines neuen Saugroboters („Einschalten“) nimmt er an, dass er an der Position
(0, 0) steht und in Richtung der x-Achse ausgerichtet ist.
· Der Saugroboter kann sich um einen angegebenen Winkel drehen (um seine Mitte). Ein positiver
Wert entspricht dabei einer Drehung gegen den Uhrzeigersinn, ein negativer Wert einer Drehung
im Uhrzeigersinn. Der Winkel wird in Radianten (rad) angegeben.
· Der Saugroboter kann sich um eine angegebene Strecke entlang der Fahrtrichtung bewegen.
Eine positive Zahl entspricht einer Vorwärtsbewegung, eine negative Zahl einer Rückwärtsbewegung.
Die zurückzulegende Strecke wird in Metern angegeben.
· Der Saugroboter kann die x- und y-Werte seiner aktuellen Position und seine aktuelle
Ausrichtung an das aufrufende Programm liefern.
· Der Saugroboter kann seine aktuelle Position und Ausrichtung (seinen Zustand) auf dem Bildschirm
anzeigen. Die Ausrichtung soll zur einfacheren Interpretation sowohl in Radianten als
auch (in Klammern) in Grad angezeigt werden.
a) Entwerfen Sie eine Klasse zur Modellierung eines Saugroboters, die den Anforderungen der
gegebenen Beschreibung entspricht und stellen Sie das UML-Klassendiagramm dieser Klasse auf.
Hinweise: Überlegen Sie dazu, durch welche Eigenschaften ein Saugroboter beschrieben wird und
welches Verhalten von ihm gefordert wird. Eigenschaften können mit Substantiven und Verhalten mit Verben beschrieben werden. Eigenschaften werden zu Attributen, Verhaltensweisen zu Methoden
einer Klasse.
Kennzeichnen Sie im ersten Schritt Angaben zu Eigenschaften und Verhaltensweisen im Text mit
verschiedenen Farben.
Stellen Sie dann das UML-Klassendiagramm auf. Beachten Sie dabei die folgenden
Namenskonventionen:
· Namen und Bezeichnungen in Englisch
· Großbuchstaben zur Abgrenzung von Namensbereichen sonst Kleinschreibung, z.B. getName,
ArrayIndex
· Bezeichnung von Methoden mit Verben, z.B. getName, setName, print
· Bezeichnung von Attributen und Klassen mit Substantiven
· Verwendung von Präfixen zur Kennzeichnung spezieller Bezeichnungen:

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

using namespace std;

public static class Saugroboter {



};


Kann mir jemand tipps geben wie ich hier den Robotor ezeugen soll?

Das ist die 1 Aufgabe die ich zur C programmierung bekommen hab und daher habe ich auch probleme.


Für hilfe wäre ich dankbar.
 
Auf diesen Beitrag antworten »
eulerscheZahl

In C gibt es nur struct, keine Klassen; die kommen erst in C++ dazu.
Zitat:
#include< iostream>
#include <stdio.h>

iostream ist ein C++Header, stdio.h ist C(stdlib.h auch) und hat die selbe Funktionalität. Da du für die Klassen ohnehin C++ brauchst, solltest du stdio löschen.

Ich fange an, damit du siehst, wie es etwa funktioniert.
Zitat:
· Der Saugroboter ist rund, seine Form wird damit durch seinen Durchmesser bestimmt. Der
Durchmesser wird in Metern gemessen. Eine Gleitkommazahl mit einer Genauigkeit von 6 bis 7
Nachkommastellen genügt den Genauigkeitsanforderungen.
· Die Position des Saugroboters im Raum wird durch zwei Werte x und y (Einheit: Meter)
angegeben, die die Position als Punkt im kartesischen Koordinatensystem eindeutig beschreiben.
Um Rundungsfehler bei relativer Positionierung zu minimieren, sollen diese Werte als doppelt
genaue Gleitkommazahlen definiert werden.

code:
1:
2:
3:
4:
5:
6:
class Saugroboter
{
private:
	float durchmesser;
	double x, y;
};

du hattest die class als static deklariert, das macht in C++ bei Klassen meines Wissens keinen Sinn, in C# wäre es kontraproduktiv.

Zitat:
Beim Erzeugen eines neuen Saugroboters („Einschalten“) nimmt er an, dass er an der Position
(0, 0) steht und in Richtung der x-Achse ausgerichtet ist.

code:
1:
2:
3:
4:
5:
public:
	Saugroboter() //Konstruktor, wird beim Erstellen einer Instanz aufgerufen
	{
		this->x = 0; this->y = 0; //es geht auch: x = 0; y = 0;
	}

Zitat:
· Der Saugroboter kann sich um eine angegebene Strecke entlang der Fahrtrichtung bewegen.
Eine positive Zahl entspricht einer Vorwärtsbewegung, eine negative Zahl einer Rückwärtsbewegung.
Die zurückzulegende Strecke wird in Metern angegeben.

code:
1:
2:
3:
4:
5:
	void bewegen(double laenge)
	{
		this->x += laenge;
		//hier ist eine Rechnung in Abhängigkeit vom Winkel nötig
	}


Hier ein Programm, das zwar nicht tut, was verlangt wird, aber zumindest ausgeführt wird:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
#include <iostream>
#include <sstream>
using namespace std;


class Saugroboter
{
private:
	float durchmesser;
	double x, y;

public:
	Saugroboter() //Konstruktor, wird beim Erstellen einer Instanz aufgerufen
	{
		this->x = 0; this->y = 0; //es geht auch: x = 0; y = 0;
	}

	void bewegen(double laenge)
	{
		this->x += laenge;
		//hier ist eine Rechnung in Abhängigkeit vom Winkel nötig
	}

	string getPosition()
	{
		stringstream s;
		s << this->x << "/" << this->y;
		return s.str();
	}
};

int main()
{
	Saugroboter saugi1;
	saugi1.bewegen(3.4);
	cout << saugi1.getPosition();
//Für VisualStudio folgende Zeile verwenden:
//system("PAUSE");
}
Auf diesen Beitrag antworten »
Jason

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
#include <iostream>
#include <sstream>
using namespace std;


class Saugroboter
{
private:
	float durchmesser;
	double x, y;

public:
	Saugroboter() //Konstruktor, wird beim Erstellen einer Instanz aufgerufen
	{
		this->x = 0; this->y = 0; //es geht auch: x = 0; y = 0;
	}

	void bewegen(double laenge)
	{
		this->x += laenge;
		//hier ist eine Rechnung in Abhängigkeit vom Winkel nötig
		
		if( x == +){
			
			x = +;
			
			else{
				
				x = -;
			}
			
			
		}
		
		
		
		
	}

	string getPosition()
	{
		stringstream s;
		s << this->x << "/" << this->y;
		return s.str();
	}
};

int main()
{
	Saugroboter saugi1;
	saugi1.bewegen(3.4);
	cout << saugi1.getPosition();
//Für VisualStudio folgende Zeile verwenden:
//system("PAUSE");
}


Der Saugroboter kann sich um einen angegebenen Winkel drehen (um seine Mitte). Ein positiver
Wert entspricht dabei einer Drehung gegen den Uhrzeigersinn, ein negativer Wert einer Drehung
im Uhrzeigersinn.

Habe ich diesen Teil ein wenig richtig programiert ?

Mit der if Bedingung ?

P:s Ich muss in C programieren.

Kann man da auch so programieren?
Auf diesen Beitrag antworten »
eulerscheZahl

Was du machen sollst, nennt sich objektorientierte Programmierung, das geht nicht in C.
Ich zitiere aus deinem ersten Beitrag:
Zitat:
#include< iostream>
using namespace std;
class Saugroboter

Das ist C++.

Zum Bewegen/Drehen:
du brauchst bei den Variablen der Klasse einen zusätzlichen Eintrag:
code:
1:
2:
3:
4:
private:
	float durchmesser;
	double x, y;
	double winkel; //speichert ab, in welche Richtung der Roboter gedreht ist

Für das Drehen brauchst du eine eigene Funktion:
code:
1:
2:
3:
4:
void drehen(double winkel)
{
    this->winkel += winkel;
}


Das Bewegen des Roboters ändert die Werte x und y:
Für einen Winkel=0 bewegt der Roboter sich in positiver x-Richtung, bei 90°=Pi/2 in y-Richtung, bei z.B. 45° in x- und y-Richtung.
Allgemein lässt sich das durch sinus und cosinus berechnen.

Zitat:
if( x == +){

x = +;

else{

x = -;
}


}

Hattest du vorher schon irgendetwas mit Programmieren zu tun? Das ist noch nicht mal annährend korrekte Syntax.

Hast du einen Compiler um dein Programm auszuführen oder dich auf Fehler hinweisen zu lassen? Ohne wirst du es schwer haben, programmieren zu lernen.
Hier mögliche Entwicklungsumgebungen:
Visual Studio (unter Visual Studio Express 2013 für Windows Desktop)
Nur für Windows, Registrierung innerhalb von 30 Tagen erforderlich. Bringt einen guten Debugger(für Fehlersuche) mit.

Code::Blocks
Ist Open-Source und somit kostenlos.

Einige meiner Kommilitonen nutzen Dev-C++, dazu kann ich aber nichts sagen.
 
Auf diesen Beitrag antworten »
Jason

ich muss eclipse benutzen.

Wie berechne ich das mit sin und cos ?

Echt kompliziert.
Auf diesen Beitrag antworten »
eulerscheZahl

eclipse ist auch gut.
Du solltest damit erkannt haben, dass dein Code nicht ausgeführt werden kann.

Ich dachte an so etwas (nicht getestet, ich muss gleich weg):
code:
1:
2:
3:
4:
5:
void bewegen(double laenge)
{
    x += laenge * cos(winkel);
    y += laenge * sin(winkel);
}
Auf diesen Beitrag antworten »
Jason

Wie soll denn jetzt genau mein komplettes Program aussehen ?
Auf diesen Beitrag antworten »
eulerscheZahl

Das ist deine Aufgabe, nicht meine.
Du kannst hier gerne einen Vorschlag bringen, auf den ich dann einen Blick werfen kann. Aber ich werde dir die Arbeit nicht abnehmen.
Auf diesen Beitrag antworten »
Jason

Weißt du wie ich das UML Klassendiagramm machen kann ?

Weil so was habe ich noch nie gemacht.

Nach der Aufgabenstellung soll ich ja auch keinen Code schreiben oder )
Auf diesen Beitrag antworten »
eulerscheZahl

Wo hängt es denn beim Klassendiagramm?
Weißt du, wie so etwas prinzipiell aufgebaut wird?
-> Wirf z.B. einen Blick in die Wikipedia, wenn danach noch Fragen sind, kann ich sie gerne beantworten.
Oder sucht du nur nach Software, um das Diagramm am PC zu erstellen?
Für Windows, 30-Tage Demo: Enterprise Architect
Für Linux/Windows, Open Source: TOPCASED
Auf diesen Beitrag antworten »
Jason

Hast du tipps wie ich das für meine Aufgabe darstellen kann ?
Auf diesen Beitrag antworten »
eulerscheZahl

Mal 'nen Kasten, schreib' oben Saugroboter hin, dann eine waagrechte Linie, Eigenschaften (x, y, winkel, durchmesser), noch eine Waagrechte, dann die Funktionen.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »