Herr Tupid ist Kabelverleger...

Mr.Pink!

Mitglied
Hallo liebe Gemeinde,

ich sitze hier an folgender Aufgabe, wo ich ein kleines Problem habe (mathematisch und evtl. von der Umsetzbarkeit in Java her), aber vorerst die Aufgabenstellung:

Herr Tupid ist Kabelverleger. Am Ende jeder Woche muss er eine Abrechnung
durchführen. Dazu gibt er seiner Firma bekannt, wie viele Meter Kabel er verlegt
und wie viele Stunden er dafür benötigt hat. Die Firma errechnet daraus die
angefallenen Kosten wie folgt: Eine Kabeltrommel hat 500 Meter Kabel und kostet
2 € pro Meter. Angefangene Kabeltrommel kosten 3 € pro Meter. Herr Tupid hat
einen Stundensatz von 50 €. Hat Herr Tupid mehr als 40 Stunden gearbeitet, so
gebührt ihm für jede Überstunde der doppelte Stundensatz. Schreiben Sie das
JAVA-Programm.

Zu meinem Problem:
Die Lohnabrechnung habe ich bereits erfolgreich fertiggestellt, allerdings hapert es bei der Materialkosten, einen Lösungsansatz habe ich aber ebenfalls bereits:
1. haben wir weniger als 500m Kabel kostet der Meter 3 €
2. Haben wir mehr als 500, 1000, 1500 usw. m Kabel, kosten die 500, 1000, 1500 usw. 2€ pro Meter und der Rest darüber 3€ pro Meter.

Ich weiss leider nicht, wie ich die 2. Überlegung mathematisch/programmtechnisch gescheit umsetzen soll, könnt ihr mir da vielleicht einen Denkanstoß geben?

Hier noch mein bisheriger Quelltext:
Java:
import java.util.Scanner;

public class Nr6 {
	public static void Lohnabrechnung () {
		Scanner eingabe = new Scanner (System.in);
		
		System.out.println ("Guten Tag, Herr Tupid." + "\n" + "\n" + "Bitte geben Sie die Anzahl ihrer Arbeitsstunden ein.");
		int Stundenzahl = eingabe.nextInt();
		int Lohn;
		
		if (Stundenzahl <= 40) {
		Lohn = Stundenzahl * 50;
		} else { 
		Lohn = 40 * 50 + ((Stundenzahl - 40) * 100);
		}
		
		System.out.println ("Ihr Wochenlohn beträgt: " + Lohn + " €.");
	}
	
	public static void main (String args [] ) {
		Scanner eingabe = new Scanner (System.in);
		
		System.out.println ("Herr Tupid, " + "\n" + "bitte geben Sie die Anzahl der verlegten Kabel an (Meter).");
		int Kabelmeter = eingabe.nextInt();
		int Materialkosten;
	}
}

Ich bin schon sehr gespannt auf eure Ansätze.

Vielen Dank und noch einen sonnigen Tag.

lG




Mr.Pink!
 

Ein Keks

Bekanntes Mitglied
Kennst du Modulo (in java: %)? Damit kannst du denn Rest einer Division berechen.
Dann kanst du einfach folgendes machen (pseudocode):
Java:
anzahlKabeltrommeln = meter / 500
restmeter = meter % 500
geldFuerKabel = //das kriegste ja wohl selber hin^^
 

Mr.Pink!

Mitglied
Hallo,

zunächst vielen Dank für deine Antwort, aber das eigentliche Problem liegt bei der Preisberechnung (bei dir: Variable GeldfuerKabel).
Bei der Berechnung der Materialkosten kommt bei mir nicht das richtige Ergebnis heraus:
Java:
int Kabelmeter = eingabe.nextInt();
int Materialkosten = ((Kabelmeter * 2 / 500) * Kabelmeter) + ((Kabelmeter % 500) * 3);

Oder hattest du das anderst gemeint mit der Berechnung?

Über eine Rückmeldung würde ich mich sehr freuen.

Vielen Dank und lG
 
S

SlaterB

Gast
rechne nicht 75.000 Variablen auf einmal zusammen und wundere dich über das unerwartete Ergebnis
sondern führe immer nur einen Wert zu einem anderen und schaue dir das Ergebnis an,

dann bedenke noch:
150/160 = 0
150/160.0 = 0.9irgendwas
 

Mr.Pink!

Mitglied
rechne nicht 75.000 Variablen auf einmal zusammen und wundere dich über das unerwartete Ergebnis
sondern führe immer nur einen Wert zu einem anderen und schaue dir das Ergebnis an,

Ich habe doch lediglich zwei Variablen in der Rechnung benutzt;-)
Ich lasse mir ja auch immer wieder einen Teil der Rechnung ausgeben, damit ich Fehler nachvollziehen kann. Nur leider fehlt mir gerade der fortführende Denkansatz zu dem Ansatz mit %, weil ein Teil der Rechnung ja immer Null sein muss, wenn man entweder mehr oder weniger als eine Kabeltrommel hat...

Bitte um Hilfe.

Danke und lG
 
S

SlaterB

Gast
was ist denn überhaupt deine Frage?
int Kabelmeter = irgendwas, was eingetippt wird weißt du sicherlich, hier verrätst du es nicht, Variablen übrigens besser klein schreiben,

danach rechne Kabelmeter * 2 aus, logge da, wird sicher deiner Papierrechnung nebenher entsprechen usw.

zu welcher Eingabe erwartest du welches Ergebnis, was kommt stattdessen raus, welche Zwischenschritte hast du dabei angeschaut,
was ist die Frage?
 

Mr.Pink!

Mitglied
Also folgendes:

wenn ich in der oben aufgeführten Rechnung (Materialkosten = ...), 500 Kabelmeter eingebe, kommt zunächst das richtige Ergebnis heraus, nämlich 1000€.
Gebe ich 400 Meter ein, kommt man auch auf das richtige Ergebnis (1200€).
Allerdings kommt, wenn es 600 Meter sind, 1500€ statt 1300€ heraus. Dies hat etwas damit zu tun, dass ich in beiden Teilen der Rechnung nun etwas rausbekomme und eigentlich zwei verschiedene Variablen festlegen müsste, um dies zu beheben. Dies geht aber nicht, da der Benutzer ja nur einmal die verlegten Meter eingeben soll.

Deswegen meine Frage: wie kann ich dieses Problem auf eine andere Weise beheben?

Vielen Dank und lG
 
S

SlaterB

Gast
die erste Hälfte lautet nicht
((Kabelmeter * 2 / 500) * Kabelmeter)

da würde Kabelmeter ja quadratisch eingehen, 10 Rollen zählen 100fach, 100 Rollen zählen 10.000fach,
durch keinen konstanten Faktor kann das gesenkt werden,
um nicht nur zu nerven aber auch konkrete Hilfe:

stattdessen eher
((Kabelmeter * 2 / 500) * 500)
oder kürzer
(Kabelmeter / 500 * 1000) [1000 = Gesamt-Kosten für eine Rolle]
nicht die Reihenfolge umstellen, du nutzt schon den Effekt, dass / 500 auf ganze Rollen abrundet
bzw. ((Kabelmeter * 2 / 500) * 500) wäre dann sogar noch falsch, ab 750 aufwärts ein Unterschied
 

Andi_CH

Top Contributor
Ich habe doch lediglich zwei Variablen in der Rechnung benutzt;-)

Ein kleiner Tipp:

Du hast zwar nur zwei Variablen benutzt, aber die mehrfach verwendet.

Verwende lieber mehr Variablen und rechne Zwischenresultate - es ist so wesentlich einfacher Fehler zu finden.
Du kannst mit dem Debugger oder mit Hilfe von system.output sehr schnell sehen wo Probleme sind.

z.B. so (Achtung Pseudocode!)
Java:
int anzahlRollen = ......;
int restMeter = .....;
int kostenRollen= anzahlRollen * rollenpreis;
int kostenRestmeter = restMeter * meterpreis;
int Materialpreis = kostenrollen + kostenRestmeter;

natürlich kann man das dann, wenn es dann läuft, wieder zusammenfassen, aber soooo wichtig ist das bei der Programmgrösse auch wieder nicht
 

Mr.Pink!

Mitglied
stattdessen eher
((Kabelmeter * 2 / 500) * 500)
oder kürzer
(Kabelmeter / 500 * 1000) [1000 = Gesamt-Kosten für eine Rolle]

Genauso habe ich am Anfang auch gedacht, nur habe ich den Gedanken verworfen, weil ich fälschlicherweise angenommen habe, dass das * 500 die /500 wieder aufhebt, aber ich profitiere trotzdem immer noch von der ganzzahligen Divison (int)...-->da lag mein Fehler;-)
 

Mr.Pink!

Mitglied
Ein kleiner Tipp:

Verwende lieber mehr Variablen und rechne Zwischenresultate - es ist so wesentlich einfacher Fehler zu finden.
Du kannst mit dem Debugger oder mit Hilfe von system.output sehr schnell sehen wo Probleme sind.

natürlich kann man das dann, wenn es dann läuft, wieder zusammenfassen, aber soooo wichtig ist das bei der Programmgrösse auch wieder nicht

Du hast da auf jeden Fall Recht, habe das auch am Anfang so gemacht und die eine Zeile war jetzt halt die Zusammenfassung...

Danke und lG
 

Neue Themen


Oben