C++

Neue Frage »

Auf diesen Beitrag antworten »
johnny21 C++

Meine Frage:
Hallo ich habe gerade probleme bei einer Aufgabe:

N sei der Zähler und D der Nenner eines Bruchs b = N/D
, g sei eine ganze Zahl. Ergänzen Sie den
unten angegebenen C++-Code so, dass der Zähler N1 und der Nenner D1 des Bruchs b1 = b + g
berechnet werden.
int N=5, D=7, g=2;
int N1, D1;

Hat jemand tipps für mich?

Meine Ideen:
keine
 
Auf diesen Beitrag antworten »
eulerscheZahl

[latex]b=\frac{N}{D}[/latex]
[latex]b_1=\frac{N}{D}+g = \frac{N+g\cdot D}{D}[/latex]
Was sind Zähler und Nenner von b1?
Auf diesen Beitrag antworten »
johnny21

Da müsste ich doch irgendwie mit dem Modulo Operator arbeiten oder ?
Auf diesen Beitrag antworten »
eulerscheZahl

Du wirst nur nach Zähler und Nenner des Bruches gefragt, da brauchst du kein modulo.
Modulo brauchst du hier: 14:5 = 2 Rest 4
 
Auf diesen Beitrag antworten »
Johnny21

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:

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

using namespace std;

int main(){

	int b; int b1;

	int N = 5 , D= 7, g =2;

	b = N/D;

	int N1;

	int D1;


	N1 = (N*g);

	D1 = (D*1);

	b1 = b+g;







}
[/quote]

Würde der code so stimmen ?

Und hast du noch einen tipp für mich für diese Fragestellung?

Geben Sie ein Verfahren an, mit dem überprüft werden kann, ob es sich bei einem Bruch b = N/D um einen echten oder unechten Bruch handelt.

Habe da im moment keine Idee.
Auf diesen Beitrag antworten »
Karlito

Hallo,

3 Kleinigkeiten:
  • b und b1 spielen für die Bearbeitung der Aufgabe keine Rolle. Die Ergebnisse sind dann auch immer nur Ganzzahlwerte, welche dem abgerundeten Wert des Bruchs entsprechen.
  • schau dir mal die Berechnung von N1 an. Die stimmt noch nicht.
  • D1 = (D*1) könnte man kürzer als D1 = D darstellen.


Gruß,

Karlito
Auf diesen Beitrag antworten »
Johnny21

ICH verstehe nicht so ganz .

Kannst du mir ein wenig genauer erklären was ich an meinem code ändern soll?
Auf diesen Beitrag antworten »
Johnny21

Ich glaube ich habe den Fehler :

N1 = N*D;

Würde jetzt der Code stimmen ?
Auf diesen Beitrag antworten »
Karlito

Nein! Schau dir noch einmal die Formel von euler an. Da steht klar, wie man den Nenner berechnet. Das muss man nur ins Programm übernehmen. Ich sehe da nirgendwo N*D!

VG,

Karlito
Auf diesen Beitrag antworten »
Johnny21

Tut mir leid wenn die Frage blöd wirkt .

Aber kannst du mir erklären was ich da genau an meinem Programm ändern soll?
Auf diesen Beitrag antworten »
Karlito

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main(){

	int N = 5 , D= 7, g =2;

	int N1;
	int D1;

	N1 = N+g*D;
	D1 = D;

	cout << N << "/" << D << " + " << g << " = " << N1 << "/"  << D1 << endl;
}


VG,

Karlito
Auf diesen Beitrag antworten »
Johnny21

Ah danke .

Geben Sie ein Verfahren an, mit dem überprüft werden kann, ob es sich bei einem Bruch b = N/D um einen echten oder unechten Bruch handelt.

Hast du auch noch einen tipp für mich für diese Aufgabe?
Auf diesen Beitrag antworten »
eulerscheZahl

Noch ein Hinweis, da das so wohl nicht geplant war (für die Aufgabe nicht relevant, wird dir aber noch öfter unterkommen):
code:
1:
2:
3:
int b; int b1;
int N = 5 , D= 7, g =2;
b = N/D;

in der letzten Zeile wird erst N/D gerechnet - und zwar als int/int, das heißt der Teil nach dem Komma wird einfach abgeschnitten:
5/7 = 0 Rest 5, wobei der Rest ignoriert wird.
Außerdem solltest du b als float oder double definieren, weil du sonst nur Ganzzahlen damit speichern kannst.
Wenn du wirklich eine Kommazahl haben willst, gibt es 3 Möglichkeiten:
1.:
code:
1:
2:
double b = N;
b = b/D;

hier wird eine sogenannte implizite Typumwandlung durchgeführt: auf der rechten Seite ist ein int, links ein double, also wird das int einfach zum double umgewandelt. (Funktiert nur in diese Richtung, int b = 3.4 klappt nicht).
2.:
code:
1:
2:
double b;
b = (0.0+N) / D

es wird erst 0.0+N gerechnet, dabei wieder implizit in double umgewandelt, dann double/int, was auch ein double liefert.
3.: (die beste Variante)
code:
1:
2:
double b;
b = (double)N / D

(double) ist ein cast, hier wird direkt gesagt, wie umgewandelt werden soll. Bezieht sich nur auf das N, dann wieder double/int = double.


Zitat:
Geben Sie ein Verfahren an, mit dem überprüft werden kann, ob es sich bei einem Bruch b = N/D um einen echten oder unechten Bruch handelt.

edit: hier stand Unsinn, ich hatte den unechten Bruch mit einem Scheinbruch verwechselt.
Auf diesen Beitrag antworten »
Karlito

Ja. Erstmal klären was ein echter und was ein unechter Bruch ist. Welche Eigenschaft hat dann die Zahl b, die in der Aufgabe durch N und D repräsentiert wird. Wie müssen sich N und D verhalten und wie findet man das im Programm heraus.

VG,

Karlito
Auf diesen Beitrag antworten »
Johnny21

Echter Bruch müsste doch ein Bruch mit Komma Zahl sein oder ?

Unechter Bruch 2/1 zum Beispiel ?
Auf diesen Beitrag antworten »
eulerscheZahl

Du verwechselst den unechten Bruch auch mit dem Scheinbruch: Mathebuch
echter Bruch: Zähler < Nenner
unechter Bruch: Zähler >= Nenner
Scheinbruch: Zähler ist Vielfaches des Nenners
Auf diesen Beitrag antworten »
Johnny21

Aha ok.

Weisst du welches Verfahren da genau gefragt ist ?
Auf diesen Beitrag antworten »
eulerscheZahl

Eine einfach if-Abfrage:
code:
1:
2:
3:
4:
if (Zaehler >= Nenner)
    printf("unechter Bruch");
else
    printf("echter Bruch");

oder, verkürzt und deutlich schlechter verständlich:
code:
1:
2:
3:
if (Zaehler >= Nenner)
    printf("un");
printf("echter Bruch");
Auf diesen Beitrag antworten »
Johnny21

Nur noch 2 letzte fragen ,dann lasse ich euch in ruhe leute .

a)Erklären Sie die Funktionsweise des Modulo-Operators % anhand eines Beispiels. Wie kann man
mit Hilfe dieses Operators testen, ob eine Zahl a ein ganzzahliges Vielfaches einer Zahl b ist?

Ich weiss das der modulo Operator eine Rest Zahl ausgibt , aber wie kann ich das testen?

b)Rufen Sie sich die mathematischen Zusammenhänge in Erinnerung:
Wenn ihr Saugroboter eine Ausrichtung von 30° hat und um 1m weiterbewegt wird, wie ändern sich
dann seine x- und y-Koordinaten? Wie lautet die allgemeine Formel?

Hier habe ich leider keine Ahnung.
Auf diesen Beitrag antworten »
eulerscheZahl

zu a)
code:
1:
2:
3:
4:
5:
int rest = a % b;
if (rest == a)  //a ist von dir sinnvoll zu ersetzen, was muss der Rest sein?
    printf("a ist Vielfaches von b");
else
    printf("a ist kein Vielfaches von b");

zu b)
hast du dir durchgelesen, was ich dir hier am 17.10.2013, 18:21 Uhr geschrieben habe?
Und noch ein Bild dazu: Link
Auf diesen Beitrag antworten »
Johnny21

int rest = a % b;
if (rest == a) //a == 1;
printf("a ist Vielfaches von b");
else
printf("a ist kein Vielfaches von b");

So müsste es stimmen oder euler?

Danke auch für deine Geduld.

Ist diese Formel gemeint :

sin() /180grad *pi

Ich weiss nicht ob ich die Formel so ganz verstanden hab euler?
Auf diesen Beitrag antworten »
eulerscheZahl

wieso soll der Rest 1 sein?
code:
1:
2:
3:
4:
a=7; b=3;
rest = a % b; //rest = 7 % 3 = 1
if(rest == 1) //ist ja erfüllt
    printf("a ist Vielfaches von b");

7 ist aber kein Vielfaches von 3, da stimmt noch etwas nicht.
Damit a Vielfaches von b ist, muss die Division a/b glatt aufgeben, das heißt der Rest muss 0 sein.
code:
1:
2:
if(rest == 0)
    printf("%d ist Vielfaches von %d", a, b);


zu b)
ich meine:
code:
1:
x += laenge * cos(Pi * winkelInGrad/ 180);

Für den Fall mit 30° musst du nur noch einsetzen:
laenge = 1m, winkel = 30°
x += 1m * cos(Pi * 30/180) = sqrt(3)/2 m = 0,866... m
der Saugroboter bewegt sich also um 86,6cm in x-Richtung (und 50cm in y-Richtung).
Auf diesen Beitrag antworten »
Johnny21

Danke Euler . Kannst du mir nur noch sagen woher du die Formel her hast?
Auf diesen Beitrag antworten »
Karlito

Hallo,

wenn ich mich nicht irre ist Trigonometrie im Lehrplan aller Schulformen und allen Bundesländern in der 9. oder 10. Klasse enthalten. Daher stammt dieses Wissen. Ansonsten könnte es sein, dass man Wegweiser im Tafelwerk findet. Da habe ich aber momentan keins zur Hand.

VG,

Karlito
 
Neue Frage »
Antworten »


Verwandte Themen