Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- C++ (http://www.informatikerboard.de/board/thread.php?threadid=1685)
Geschrieben von johnny21 am 03.11.2013 um 22:45:
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
Geschrieben von eulerscheZahl am 04.11.2013 um 05:39:
![[latex]b_1=\frac{N}{D}+g = \frac{N+g\cdot D}{D}[/latex]](http://www.matheboard.de/latex2png/latex2png.php?b_1=\frac{N}{D}+g = \frac{N+g\cdot D}{D})
Was sind Zähler und Nenner von b1?
Geschrieben von johnny21 am 04.11.2013 um 08:36:
Da müsste ich doch irgendwie mit dem Modulo Operator arbeiten oder ?
Geschrieben von eulerscheZahl am 04.11.2013 um 16:40:
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
Geschrieben von Johnny21 am 05.11.2013 um 08:03:
| 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.
Geschrieben von Karlito am 05.11.2013 um 09:49:
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
Geschrieben von Johnny21 am 05.11.2013 um 10:16:
ICH verstehe nicht so ganz .
Kannst du mir ein wenig genauer erklären was ich an meinem code ändern soll?
Geschrieben von Johnny21 am 05.11.2013 um 10:25:
Ich glaube ich habe den Fehler :
N1 = N*D;
Würde jetzt der Code stimmen ?
Geschrieben von Karlito am 05.11.2013 um 10:31:
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
Geschrieben von Johnny21 am 05.11.2013 um 10:47:
Tut mir leid wenn die Frage blöd wirkt .
Aber kannst du mir erklären was ich da genau an meinem Programm ändern soll?
Geschrieben von Karlito am 05.11.2013 um 13:57:
| 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
Geschrieben von Johnny21 am 05.11.2013 um 14:05:
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?
Geschrieben von eulerscheZahl am 05.11.2013 um 14:15:
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.
Geschrieben von Karlito am 05.11.2013 um 14:15:
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
Geschrieben von Johnny21 am 05.11.2013 um 15:01:
Echter Bruch müsste doch ein Bruch mit Komma Zahl sein oder ?
Unechter Bruch 2/1 zum Beispiel ?
Forensoftware: Burning Board, entwickelt von WoltLab GmbH