Abtastung des Logarithmus

Status
Nicht offen für weitere Antworten.

kannkeinjava

Aktives Mitglied
Der Logarathmus zur Basis b logb(x) soll für abtastwerte x, die3 im Intervall[a,c] liegen berechnet werder.
Das Programm soll folgendes leisten

1.Einlesen der Basis b(zu kontrollieren:b>1)
2.Einlesen der Intervallgrenze a
3.Einlesne der Intervallgrenze c (zu kontrollieren:c>a)
4.Einlesen der Abtaststrecke d(zu kontrollieren:d>0)
Berechnung von y=logb(x) fur alle x der Form x=a+k*d mit k=0,1,2,3,.....solange k im Intervall[a,c]liegt.

In jedem Iterationsschritt sidn die Werte von k,x,y auszugeben.
Nahc Ende der Iteration ist auchist auch y=logb(c) zu berrechnen und auszugeben.
Tip:logb(x) kann aus den natürlichen Logarithmuss mit folgender Formel berechnet werden:
logb(x)=ln(x)/ln(b).



Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<A)
			System.out.println("c muss größer als a sein");
		}	while(C<A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<0)
			System.out.println("D muss größer als 0 sein");
		}	while(D<0);
		for(K=1;K<=10;K++)
		{
			X=A+K*D;
			Y=Math.log(X);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
			System.out.println("Ihr Y lautet:"+Y);
		}
		
			
		
	}
}


Wo liegt den da der Fehler???????????????????????
 

tincup

Bekanntes Mitglied
Hi.

kannkeinjava hat gesagt.:
Wo liegt den da der Fehler???????????????????????
Generell solltest du bei solchen Problemen eine etwas genauere Fehlerbeschreibung posten. Was genau passiert denn falsches? Evtl kommt man darüber selbst schon drauf.


Was mir direkt aufgefallen ist, du verwendest die Basis nicht. Math.log berechnet eben den natürlichen Logarithmus, d.h. zur Basis e. Tip aus deiner eigenen Aufgabenstellung:

kannkeinjava hat gesagt.:
Tip:logb(x) kann aus den natürlichen Logarithmuss mit folgender Formel berechnet werden:
logb(x)=ln(x)/ln(b).

Grüsse und noch frohe Weihnachten.
 

kannkeinjava

Aktives Mitglied
habe etwas geändert
geändert????


Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		double Z;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<A)
			System.out.println("c muss größer als a sein");
		}	while(C<A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<0)
			System.out.println("D muss größer als 0 sein");
		}	while(D<0);
		for(K=0;K<=10;K++)
		{
			X=A+K*D;
			Y=Ln(X)/Ln(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
			System.out.println("Ihr Y lautet:"+Y);
		}
		
			
		
	}
}
 

kannkeinjava

Aktives Mitglied
Habe es jetzt umgeändert bin mir, aber trotzdem nciht sicher ob dies richtgi ist


Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<A)
			System.out.println("c muss größer als a sein");
		}	while(C<A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<0)
			System.out.println("D muss größer als 0 sein");
		}	while(D<0);
		for(K=0;K<=10;K++)
		{
			X=A+K*D;
			Y=Math.log(X)/Math.log(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
		}
	}
}

Wäre euch für eine 'Antwort sehr dankbar
 

kannkeinjava

Aktives Mitglied
maki hat gesagt.:
Was ist denn der Fehler?

wollte wissen ob die Aufgabe so richtig ist


Also ich habe das rausbekommen

Abtasttung des Logarithmus
Geben sie eine Basis b ein
2
Geben sie eine Intervallgrenze a ein
2
Geben sie eine Intervallgrenze c ein
2
Geben sie eine Abtaststrecke D ein
0
Ihr K lautet:0
Ihr X lautet:2.0
Ihr K lautet:1
Ihr X lautet:2.0
Ihr K lautet:2
Ihr X lautet:2.0
Ihr K lautet:3
Ihr X lautet:2.0
Ihr K lautet:4
Ihr X lautet:2.0
Ihr K lautet:5
Ihr X lautet:2.0
Ihr K lautet:6
Ihr X lautet:2.0
Ihr K lautet:7
Ihr X lautet:2.0
Ihr K lautet:8
Ihr X lautet:2.0
Ihr K lautet:9
Ihr X lautet:2.0
Ihr K lautet:10
Ihr X lautet:2.0

ist das richtig?
 

SebiB90

Top Contributor
d darf doch nicht 0 sein oder?
es ist aber 0
du musst also im code nicht d < 0 abfragen sondern d <= 0 ;)
 

kannkeinjava

Aktives Mitglied
habe es umgestellt uind sieht jetzt so aus


Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<A)
			System.out.println("c muss größer als a sein");
		}	while(C<A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<1)
			System.out.println("D muss größer als 0 sein");
		}	while(D<1);
		for(K=0;K<=10;K++)
		{
			X=A+K*D;
			Y=Math.log(X)/Math.log(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
		}
	}
}

und meine Ausgabe sieht so aus

Abtasttung des Logarithmus
Geben sie eine Basis b ein
2
Geben sie eine Intervallgrenze a ein
2
Geben sie eine Intervallgrenze c ein
2
Geben sie eine Abtaststrecke D ein
0
D muss gr÷▀er als 0 sein
Geben sie eine Abtaststrecke D ein
1
Ihr K lautet:0
Ihr X lautet:2.0
Ihr K lautet:1
Ihr X lautet:3.0
Ihr K lautet:2
Ihr X lautet:4.0
Ihr K lautet:3
Ihr X lautet:5.0
Ihr K lautet:4
Ihr X lautet:6.0
Ihr K lautet:5
Ihr X lautet:7.0
Ihr K lautet:6
Ihr X lautet:8.0
Ihr K lautet:7
Ihr X lautet:9.0
Ihr K lautet:8
Ihr X lautet:10.0
Ihr K lautet:9
Ihr X lautet:11.0
Ihr K lautet:10
Ihr X lautet:12.0
 

tincup

Bekanntes Mitglied
kannkeinjava hat gesagt.:

Ich denke nicht, dass es so richtig ist. Aber dass du die Frage so stellst scheint zu zeigen, dass du gar nicht so genau weisst, was du da programmieren sollst. Du sollst doch die Logarithmusfunktion an verschiedenen Stellen auswerten und das Ergebniss wahrscheinlich ausgeben. Das lässt sich doch recht einfach prüfen, ob das richtig ist (z.B. Windows-Taschenrechner kann das glaube ich). Was ich damit sagen will, wenn du jetzt hier deinen Code "zurechtgebogen" kriegst, aber gar nicht weisst, was da passiert ist, dann bringt dir das alles nicht sehr viel.

Zum Code:

Die obere Intervallgrenze C wird nicht benutzt, du zählst "hardcoded" bei K bis 10. Da müsste die obere Intervallgrenze verarbeitet werden.

Grüsse,
Tin
 

kannkeinjava

Aktives Mitglied
Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<A)
			System.out.println("c muss größer als a sein");
		}	while(C<A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<1)
			System.out.println("D muss größer als 0 sein");
		}	while(D<1);
		for(K=0;K<=C;K++)
		{
			X=A+K*D;
			Y=Math.log(X)/Math.log(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
			System.out.println("Ihr Y lautet"+Y);
		}
	}
}

jetzt müsste alles stimmen soweit
 

tincup

Bekanntes Mitglied
kannkeinjava hat gesagt.:
jetzt müsste alles stimmen soweit

Ich denke nicht, nein.

Code:
		for(K=0;K<=C;K++)
		{
			X=A+K*D;
			Y=Math.log(X)/Math.log(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
			System.out.println("Ihr Y lautet"+Y);
		}

Hier musst du genau mit den Intervallgrenzen aufpassen. Du willst dass X alle Werte zwischen A und C annimmt, mit bestimmten Schritten dazwischen. Das passiert jetzt aber dort nicht, denn du zählst deinen ganzzahligen Zähler K bis C hoch. Da du aber mit X=A+K*D; das K überhaupt erst verrechnest, wird das nicht zum gewünschen Resultat führen. Mal es dir mal mit ganz simplen Werten (z.B. A=1, C=3, schritt=0.5) auf einem Papier auf, was dein Code tut. Dann wirst du es sehen.

Hast du wie empfohlen mal überprüft, ob die Ausgabe überhaupt (mathematisch) in Ordnung ist?

Im übrigen sollten A und C wohl auch Gleitkommazahlen sein, oder?

Grüsse,
tin
 

kannkeinjava

Aktives Mitglied
danke

Ja habe es überprüft und es stimmts soweit, aber für Werte k=0 bekomme ich keine Ergebnisse

dne mien x darf ja auch nicht = 0 sein

schaue mir mal ab wo der fehler liegen könnte
 

Andreas29

Bekanntes Mitglied
Hi,

sorry, wenn ich mich hier mal einmische, aber mir ist noch ein Fehler aufgefallen. In der Aufgabestellung steht folgendes:
3.Einlesne der Intervallgrenze c (zu kontrollieren:c>a)
Wenn du jetzt als Werte für a und c allerdings 2 eingibst, wieso fängt das Programm überhaupt an zu rechnen? 2 = 2 und somit nicht 2 > 2...
Nur ein kleiner Hinweis...

Grüße,
Andreas
 

kannkeinjava

Aktives Mitglied
Andreas29 hat gesagt.:
Hi,

sorry, wenn ich mich hier mal einmische, aber mir ist noch ein Fehler aufgefallen. In der Aufgabestellung steht folgendes:
3.Einlesne der Intervallgrenze c (zu kontrollieren:c>a)
Wenn du jetzt als Werte für a und c allerdings 2 eingibst, wieso fängt das Programm überhaupt an zu rechnen? 2 = 2 und somit nicht 2 > 2...
Nur ein kleiner Hinweis...

Grüße,
Andreas

danke für den Hinweis

jetzt müsste, aber alles stimmen oder?

Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<=A)
			System.out.println("c muss größer als a sein");
		}	while(C<=A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<1)
			System.out.println("D muss größer als 0 sein");
		}	while(D<1);
		for(K=0;K<=100;K++)
		{
			X=A+K*D;
			Y=Math.log(X)/Math.log(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
			System.out.println("Ihr Y lautet"+Y);
		}
	}
}
 

kannkeinjava

Aktives Mitglied
danke

habe noch einen Fehler entdeckt.

Jetzt müsste, aber alles stimmen




Code:
class Logar
{
	public static void main(String args[])
	{
		int A,B,C,D,G,K;
		double Y;
		double X;
		System.out.println("Abtasttung des Logarithmus");
		do
		{
			System.out.println("Geben sie eine Basis b ein");
			B=IO1.einint();
			if(B<=1)
			System.out.println("Fehler b muss größer als 1 sein");
		}	while(B<=1);
		
		System.out.println("Geben sie eine Intervallgrenze a ein");
		A=IO1.einint();
		do
		{
			System.out.println("Geben sie eine Intervallgrenze c ein");
			C=IO1.einint();
			if(C<=A)
			System.out.println("c muss größer als a sein");
		}	while(C<=A);
		do
		{
			System.out.println("Geben sie eine Abtaststrecke D ein");
			D=IO1.einint();
			if(D<1)
			System.out.println("D muss größer als 0 sein");
		}	while(D<1);
		for(K=0;K<=100;K++)
		{
			X=A+K*D;
			Y=Math.log(X)/Math.log(B);
			System.out.println("Ihr K lautet:"+K);
			System.out.println("Ihr X lautet:"+X);
			System.out.println("Ihr Y lautet"+Y);
		}
	}
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben