C++ - Seite 2

Neue Frage »

Auf diesen Beitrag antworten »
info

Ok auf zum letzten Teil der Aufgabe:

2) Es ist ein Programm zu erstellen, in welchem genau drei Zahlen in drei Variable (z.B. a,b,c)
eingelesen werden. Diese drei Werte sollen so in drei neue Variable (z.B. x,y,z) umgespeichert
werden, dass diese sortiert sind. Für die neuen Variablem muss also gelten: x<=y<=z .
Danach sind diese drei Zahlen sortiert auszugeben.
Dieses Programm ist damit ein Spezialfall der Aufgabe aus 1).
Achten Sie in dem Programm auf
ausreichend Kommentare
einrücken bei den Abfragen
gefällige Ausgabe unter Verwendung von Manipulatoren.

Es ist ein Programm zu erstellen, in welchem genau drei Zahlen in drei Variable (z.B. a,b,c)
eingelesen werden. Diese drei Werte sollen so in drei neue Variable (z.B. x,y,z) umgespeichert



Kann man das nicht so machen:

int a;

int b;

int c;


int a = x;

int b = y;

int c = z ;

Würde das umspeichern so gehen ?
 
Auf diesen Beitrag antworten »
eulerscheZahl

Mein Compiler sagt: der Bezeichner "x" ist nicht definiert.
Das ist auch nicht verwunderlich, es müsst schließlich heißen int x=a;

Sortiert ist damit aber immer noch nichts.
Wenn in der Variablen x der kleinste Wert stehen soll, geht das am einfachsten mit
int x = min(a, min(b, c)); //davor #include <cmath>
Auf diesen Beitrag antworten »
info

OK dann mache ich das wohl so oder:

int x = a;

int y = b;

int z = c;


Kann ich nicht zum sortieren auch die if schleife benutzen oder while?
Auf diesen Beitrag antworten »
Karlito

Hallo,

du kannst testen ob das richtig ist, indem du zuerst a, b und c einliest und nachdem du umgespeichert hast, x y und z ausgibst. Die Sortierung würde ich mit If-Abfragen realisieren. Es gibt keine if-schleifen!

VG,

Karlito
 
Auf diesen Beitrag antworten »
Karlito

Falls Du keine Lust hast ist hier ein Programm, was die Aufgabe löst:

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:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char **argv){
	int r = 0;
	int a, b, c, x, y, z;

	cout << "Bitte Zahlen eingeben!" << endl;
	cout << "Zahl 1: ";
	cin >> a;
	cout << "Zahl 2: ";
	cin >> b;
	cout << "Zahl 3: ";
	cin >> c;

	r = (a<b)<<2|(a<c)<<1|(b<c);

	x = ((r==0x7)|(r==0x6))*a|((r==0x3)|(r==0x1))*b|((r==0x4)|(r==0x0))*c;
	y = ((r==0x3)|(r==0x4))*a|((r==0x7)|(r==0x0))*b|((r==0x6)|(r==0x1))*c;
	z = ((r==0x1)|(r==0x0))*a|((r==0x6)|(r==0x4))*b|((r==0x7)|(r==0x3))*c;

	cout << x << "," << y << "," << z << endl;

}


VG,

Karlito
Auf diesen Beitrag antworten »
info

Ich versuche es lieber doch selbst zu entwicckeln .

Könnte man so vorgehen ?

#include <iostream>
using namespace std;
include<cmath>


int main() {
int a = x;
int b = y;
int c = z;

cout << "Bitte Zahlen eingeben !" << endl;

cin >> x;

cout << "2 Zahl" << endl;


cin >> y;

cout << "3 Zahl" << endl;
cin >> z;


}

KArlito was bewirkt den in deinem code das hier:

int r = 0;


Wofür definiert man das r ?

Das verstehe ich überhaupt nicht.

Kannst du mir das erklären ?

Soll ich jetzt in meinem code auch z.B int i = 0;

definieren?
Auf diesen Beitrag antworten »
info

Ich hab bisschen weiter gearbeitet und das stehen:

#include <iostream>
using namespace std;



int main() {
int a = x;
int b = y;
int c = z;



cout << "Bitte Zahlen eingeben !" << endl;

cin >> x;

cout << "2 Zahl" << endl;


cin >> y;

cout << "3 Zahl" << endl;
cin >> z;

for(int i = 0; j < n-1; j++)
{
for(int i = 0; i < n-1; i++)
{

if(j < j+1){

j = j+1;

j+1= x;

j=y;

}
}













Kann man das so machen?
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
5:
6:
	1	IntelliSense: Der Bezeichner ""x"" ist nicht definiert.	f:\programmieren\visualstudio2010\projects\cpp-programm\cpp-programm\code.cpp	7	9	cpp-Programm
	2	IntelliSense: Der Bezeichner ""y"" ist nicht definiert.	f:\programmieren\visualstudio2010\projects\cpp-programm\cpp-programm\code.cpp	8	9	cpp-Programm
	3	IntelliSense: Der Bezeichner ""z"" ist nicht definiert.	f:\programmieren\visualstudio2010\projects\cpp-programm\cpp-programm\code.cpp	9	9	cpp-Programm
	4	IntelliSense: Der Bezeichner ""j"" ist nicht definiert.	f:\programmieren\visualstudio2010\projects\cpp-programm\cpp-programm\code.cpp	25	16	cpp-Programm
	5	IntelliSense: Der Bezeichner ""n"" ist nicht definiert.	f:\programmieren\visualstudio2010\projects\cpp-programm\cpp-programm\code.cpp	25	20	cpp-Programm
	6	IntelliSense: Es wurde eine "}" erwartet.		f:\programmieren\visualstudio2010\projects\cpp-programm\cpp-programm\code.cpp	61	3	cpp-Programm


Zitat:
KArlito was bewirkt den in deinem code das hier:
int r = 0;
Wofür definiert man das r ?

Das musst du im Zusammenhang sehen, r wird danach wieder befüllt, wenn auch nur die letzten 3 Bits.
Das drittletzte Bit gibt an, ob a<b, das vorletzte, ob a<c und das letzte ob b<c.
Ich habe auch einen Moment gebraucht, um das gesamte Programm zu verstehen.
Auf diesen Beitrag antworten »
info

Hast du tipps wie ich das irgendwie jetzt in meinem programm einbauen kann , das ist so schwer drauf zu kommen .
Auf diesen Beitrag antworten »
eulerscheZahl

Mache es doch, wie in der Aufgabenstellung beschrieben: erst einmal a, b und c einlesen.
Melde dich wieder, wenn du das Einlesen hast, dann schauen wir weiter. Die Variablen x, y und z will ich bis dahin nicht sehen, sonst gibt es am Ende wieder Fehlermeldungen.
Auf diesen Beitrag antworten »
info

Wieso ist das einlesen bei mir falsch.

Das verstehe ich nicht .

Was mache ich daran falsch?
Auf diesen Beitrag antworten »
eulerscheZahl

Was in meinem vorletzten Beitrag stand, waren die Fehlermeldungen des Compilers zu deinem Code:
code:
1:
2:
3:
int a = x;
int b = y;
int c = z;

Was sind x, y und z? Die hast du nirgendwo definiert, willst sie aber verwenden, das geht nicht.

code:
1:
2:
3:
4:
5:
6:
cout << "Bitte Zahlen eingeben !" << endl;
cin >> x;
cout << "2 Zahl" << endl;
cin >> y;
cout << "3 Zahl" << endl;
cin >> z;

Du sollst in a, b und c einlesen, nicht in x, y und z (siehe Aufgabenstellung)

Das sortieren mit verschachtelten Schleifen kannst du bei einem Array machen, die Schleifenvariablen sind dann die Indizes der zu vergleichenden Elemente. Mit verschiedenen Variablen geht das nicht, da der Zugriff da nicht so einfach ist.

Am einfachsten sind if-Abfragen wie:
if(a<=b && b<=c) {x=a; y=b; z=c;}

Aber solange das Einlesen nicht klappt, brauchen wir uns damit noch nicht zu befassen.
Auf diesen Beitrag antworten »
info

Puuh soweit hätte ich es endlich:

#include <iostream>
using namespace std;

int main() {


int a;

int b;

int c;

cout << "Bitte Zahlen eingeben !" << endl;
cin >> a;
cout << "2 Zahl" << endl;
cin >> b;
cout << "3 Zahl" << endl;
cin >> c;
}


Für die weitere vorgehensweise benötige ich paar tips , aber keine Lösung bitte.
Auf diesen Beitrag antworten »
Karlito

Hallo,

dann mach dir erstmal klar, welche Fälle Du behandeln musst. Ich persönlich habe mir dafür eine Tabelle gemacht (keine Angst, das Programm, was ich geschickt hatte, solltest Du nicht verstehen).

Fülle am Besten mal folgende Tabelle aus. In die Spalten x y und z kommen die Buchstaben a b und c, je nach dem, wie Du umspeichern musst. Die erste Zeile habe ich mal vorgegeben.
[latex]<br />
\begin{array}{c|c|c||c|c|c}a<b & a<c & b<c  & x & y & z<br />
\hline 0 & 0 & 0 & c & b & a<br />
0 & 0 & 1 &&&<br />
0 & 1 & 0 &&&<br />
0 & 1 & 1 &&&<br />
1 & 0 & 0 &&&<br />
1 & 0 & 1 &&&<br />
1 & 1 & 0 &&&<br />
1 & 1 & 1 &&&<br />
\end{array}<br />
[/latex]

VG,

Karlito
Auf diesen Beitrag antworten »
info

Was muss ich denn beachten wenn ich die tabelle ausfülle .

Das ist mir nicht so klar?
Auf diesen Beitrag antworten »
Karlito

Hi,

links von dem Doppelstrich stehen die Bedingungen, die erfüllt sein müssen. Also z.B. a<b und rechts vom Doppelstrich stehen die Belegungen von x. y und z. Wenn also a<b und a<c und b<c falsch, also 0 sind, dann ist a größer oder gleich b, größer oder gleich c und b ist größer oder gleich c. Somit ist a die größte Zahl und c die kleinste. Dewegen kommt die Belegung x=c, y=b und z=a zustande. Das ist der Sinn der Tabelle. Klar?

VG,

Karlito
Auf diesen Beitrag antworten »
info

Oh man leute ich probiere schon die ganze Zaber ich verstehe nicht wie ich die Schleife erstellen soll?
Auf diesen Beitrag antworten »
eulerscheZahl

Gar nicht:
Es gibt 3!=6 Fälle zu betrachten:
a<=b<=c
a<=c<=b
b<=a<=c
b<=c<=a
c<=a<=b
c<=b<=b
Das kannst du mit if überprüfen.
Dann entspechend x, y und z zuweisen.
Der Aufbau ist dabei immer gleich, du könntest dir sogar ein Funktionsmakro schreiben.

(Durch <= werden mache Fälle (z.B. a=b) mehrfach abgedeckt, macht aber nichts, da es bei zwei gleich großen Zahlen ja egal ist, in welcher Reihenfolge sie sortiert werden)
 
Neue Frage »
Antworten »


Verwandte Themen