matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMathe-SoftwareProgrammieren in Java
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
Forum "Mathe-Software" - Programmieren in Java
Programmieren in Java < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Mathe-Software"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programmieren in Java: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:09 Mi 20.04.2011
Autor: Bicarbonat

Hallo allerseits,

ich intereßiere mich für ein mathematisches "Problem" :

Wenn man eine rationale Zahl q geeignet mit einer natürlichen Zahl p erweitert, so daß p*Nenner(q) zu einer Zehnerpotenz wird, dann ist q in Dezimalschreibweise endlich. D.h. q besitzt nur endlich viele Nachkommastellen.

Mathematisch ist mir das klar, einen Beweis benötige ich nicht.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Ich möchte dieses Problem mit Java realisieren. Hier sind meine Grundgedanken:

Zuerst laße ich eine integer Zahl m einlesen (m soll der Nenner des zu testenden Bruches sein). Anschließend setze ich:

double x = 0;
     for (int i = 1; i <= 100; i++){
     x = Math.pow(10,i)/m;
                           *    //if x ist ein integer, break, syso (i)
}

Ich möchte an der mit * gekennzeichneten Stelle folgendes tun:

Wenn x irgendwann in der for-Schleife ganzzahlig wird, soll das i ausgegeben werden, für das x eben ganzzahlig ist. Dann hätte ich diejenige Zehnerpotenz gefunden, auf die sich der Bruch bzw der Nenner m erweitern ließe.


Also: Wie kann ich an der Stelle * einen "int-Test" durchführen?

Ich habe mir schon überlegt, vor der main Methode eine Funktion bzw einen boolean zu schreiben und dann:

//if (isInt(x) = true){system.out.println (+i)}

Wie würde ich überhaupt an den Zählindex i rankommen?

Ich bin ja gerade an dem i_null intereßiert, für das x integer ist.



Okay, ich hoffe jemand weiß, was ich meine und hat eine Idee

        
Bezug
Programmieren in Java: Antwort
Status: (Antwort) fertig Status 
Datum: 21:32 Mi 20.04.2011
Autor: wieschoo

Hi,

ich kenn mich nicht mit java aus. Aber ich würde:
- eine While Schleife verwenden (gut du kannst auch die For-Schleife missbrauchen und gehst per break raus)
- i nicht in der Schleife deklarieren, wie sagen die Informatiker "Function-scope" oder so etwas (also auf jeden Fall vor der Schleife, dann hast du dein i_Null
- falls kein isint vorhanden ist, dann gibt es meistens round und "if round(x)-x<eps" mit eps = [mm] 10^{-28} [/mm] oder so => es ist Ganzzahl

Bezug
        
Bezug
Programmieren in Java: Antwort
Status: (Antwort) fertig Status 
Datum: 22:20 Mi 20.04.2011
Autor: rainerS

Hallo!

> Hallo allerseits,
>  
> ich intereßiere mich für ein mathematisches "Problem" :
>
> Wenn man eine rationale Zahl q geeignet mit einer
> natürlichen Zahl p erweitert, so daß p*Nenner(q) zu einer
> Zehnerpotenz wird, dann ist q in Dezimalschreibweise
> endlich. D.h. q besitzt nur endlich viele
> Nachkommastellen.
>  
> Mathematisch ist mir das klar, einen Beweis benötige ich
> nicht.
>  Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>  Ich möchte dieses Problem mit Java realisieren. Hier sind
> meine Grundgedanken:
>  
> Zuerst laße ich eine integer Zahl m einlesen (m soll der
> Nenner des zu testenden Bruches sein). Anschließend setze
> ich:
>  
> double x = 0;
>   for (int i = 1; i <= 100; i++){
>   x = Math.pow(10,i)/m;
>                             *    //if x ist ein integer,
> break, syso (i)
>  }
>  
> Ich möchte an der mit * gekennzeichneten Stelle folgendes
> tun:
>  
> Wenn x irgendwann in der for-Schleife ganzzahlig wird, soll
> das i ausgegeben werden, für das x eben ganzzahlig ist.
> Dann hätte ich diejenige Zehnerpotenz gefunden, auf die
> sich der Bruch bzw der Nenner m erweitern ließe.
>
>
> Also: Wie kann ich an der Stelle * einen "int-Test"
> durchführen?

Ich denke, du machst hier mehrere Fehler.

1. Zahlen von Typ int sind in der Größe beschränkt auf das Intervall [mm] $[-2^{31},2^{31}-1]$. [/mm] Das heisst, mit größeren Werten für m als etwa 2 Milliarden kannst du nicht rechnen.

2. Du berechnest [mm] $10^i$ [/mm] als double-Wert, für i von 1 bis 100. [mm] $10^{100}$ [/mm] liegt zwar noch im Zahlenbereich eines double-Werts, kann aber mit seinen etwa 332 Binärstellen in den 52 Bits der Mantisse nicht mehr genau dargestellt werden; 280 Binärstellen werden durch Runden abgeschnitten. Wenn du durch m dividierst, wird wieder gerundet.

Besser ist es, wenn du mit java.math.BigInteger rechnest, da sind die Zahlen in der Größe nicht begrenzt und du vermeidest Rundungsfehler.

Außerdem kannst du das Problem erheblich vereinfachen, wenn du dir überlegst, dass m genau dann zu einer Zehnerpotenz erweitert werden kann, wenn die Primfaktorzerlegung nur aus Potenzen von 2 und 5 besteht - weil [mm] $10^n=2^n*5^n$ [/mm] ist und damit jeder Teiler von [mm] $10^n$ [/mm] auch nur die Form [mm] $2^i*5^j$ [/mm] haben kann.

Das heisst, dass du eigentlich nur solange durch 2 und 5 teilen musst bis entweder 1 herauskommt oder ein Rest übrigbleibt, etwa so:

1: boolean teste(BigInteger m) {
2:
3:     final BigInteger two = new BigInteger("2");
4:     final BigInteger five = new BigInteger("5");
5:     BigInteger result[2];
6:
7:     if (m.compareTo(BigInteger.ZERO) < 1) {
8:         // keine positive Zahl m
9:         return false;
10:     }
11:
12:
13:     while (! m.equals(BigInteger.ONE)) {
14:         result = m.divideAndRemainder(two);
15:         if (result[1].equals(BigInteger.ONE)) {
16:             // Rest ist 1 => Zahl war ungerade
17:             break;
18:         }
19:         m = result[0]; // m durch m/2 ersetzen
20:     }
21:
22:     // Hier ist m ungerade
23:     while (! m.equals(BigInteger.ONE)) {
24:         result = m.divideAndRemainder(five);
25:         if (! result[1].equals(BigInteger.ZERO)) {
26:             // Rest ist nicht 0 => Zahl war nicht durch 5 teilbar
27:             return false;
28:         }
29:         m = result[0]; m durch m/5 ersetzen
30:     }
31:     return true;
32: }



  Viele Grüße
    Rainer

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Mathe-Software"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]