Aufgabe Preisliste

ekago

Mitglied
Hallo zusammen,
ich muss die untenstehende Aufgabe lösen.
Kann mir vielleicht jemand verdeutlichen wie man auf 4,90 oder 4,50 kommt
ich hätte bei 100 kopien einfach 0,08*100 gerechnet

:bahnhof:
In einem Copyshop gilt die folgende Preisliste:
Seite Preis
1 – 49 0,10 €
50 – 99 0,09 €
100 – 199 0,08 €
ab 200 0,07 €
Erstellen Sie ein Programm, welches nach Eingabe der Kopienanzahl den Gesamtpreis ausgibt.
Beispiel: 100 Kopien kosten 4,90 € + 4,50 € + 0,08 € = 9,48 €
 

stg

Top Contributor
Bei 100 Kopien kosten die ersten 49 Stück jeweils 10 Cent, macht insgesamt 49*0,10€=4,90€. Die nächsten 50 Kopien (nämlich die Kopien 50 bis 99) kosten jeweils 9 Cent, insgesamt also 50*0,09€=4,50€ und die letzte Kopie kostet schließlich 8 cent.
 

ekago

Mitglied
Also ich hab mal was zusammengeschrieben aber so berechnet das programm jeweils nur eine bedingung
(entweder oder) wie bekomme ich es hin dass es wie in der aufgabenstellung mir jeweils die abstufungen berechnet werden?
Java:
public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Geben Sie die Kopienanzahl ein");
double kopieranzahl = new Scanner (System.in).nextDouble();
if (kopieranzahl >=1 && kopieranzahl <= 49) {
	System.out.println(kopieranzahl * 0.10);
}else
if (kopieranzahl >=50 && kopieranzahl <= 99) {
	System.out.println(kopieranzahl * 0.09);	
}
else	
if (kopieranzahl >=100 && kopieranzahl <= 199) {
	System.out.println(kopieranzahl * 0.08);	
	}else
if (kopieranzahl <= 200) {
	System.out.println(kopieranzahl * 0.07);
}

}
	}
 

Joose

Top Contributor
Hab mir mal die Freiheit genommen dir eine Lösung zuschreiben und den Weg dahin

Also ich hab mal was zusammengeschrieben aber so berechnet das programm jeweils nur eine bedingung
(entweder oder) wie bekomme ich es hin dass es wie in der aufgabenstellung mir jeweils die abstufungen berechnet werden?

Gehe dein Problem einfach Schritt für Schritt an:

Es soll möglich sein die Kopien einzugeben. Da es unüblich ist nur halbe Kopien anzubieten, ist es angebracht für die Anzahl der Kopie den Datentyp "int" zu verwenden.
Java:
System.out.println("Geben Sie die Anzahl der gewünschten Kopien ein: ");
int anzahlDerKopien = new Scanner(System.in).nextInt();

Die 1.Abfrage sollte darauf abzielen ob diese Anzahl > 0 ist.

Java:
System.out.println("Geben Sie die Anzahl der gewünschten Kopien ein: ");
int anzahlDerKopien = new Scanner(System.in).netInt();

if(anzahlDerKopien > 0) {
    System.out.println("Es wurden " + anzahlDerKopien + " Kopie(n) gewünscht.");
} else {
    System.out.println("Es wurden keine Kopien gewünscht, daher sind auch keine Kosten entstanden!");
}

Jetzt musst du dir überlegen wie du den Preis berechnest:
Verwende die Preisliste um dir "Stufen" festzulegen.
Die 1. 50 Seiten sind Preisstufe 1 (0,10€)
Die 2. 50 Seiten sind Preisstufe 2 (0,09€)
Die 3.+4. 50 Seiten (gesamt 100 Seiten) sind Preisstufe 3 (0,08€)
Alle weiteren Seiten sind Preisstufe 4 (0,07€)
Also erstmal lokale Variablen definieren um die Seitenanzahl je Stufe speichern zu können.
Außerdem kann man schon mal die Kosten je Stufe ausgeben (Formatierung kann später ergänzt werden)

Java:
System.out.println("Geben Sie die Anzahl der gewünschten Kopien ein: ");
int anzahlDerKopien = new Scanner(System.in).netInt();

if(anzahlDerKopien > 0) {
    System.out.println("Es wurden " + anzahlDerKopien + " Kopie(n) gewünscht.");
    int seitenStufe1 = 0;
    int seitenStufe2 = 0;
    int seitenStufe3 = 0;
    int seitenStufe4 = 0;
	
    System.out.println(seitenStufe1 * 0.1);
    System.out.println(seitenStufe2 * 0.09);
    System.out.println(seitenStufe3 * 0.08);
    System.out.println(seitenStufe4 * 0.07);
} else {
    System.out.println("Es wurden keine Kopien gewünscht, daher sind auch keine Kosten entstanden!");
}

Jetzt fehlt nur noch die Aufteilung wieviele Seiten jeder Stufe gedruckt werden müssen.

Java:
System.out.println("Geben Sie die Anzahl der gewünschten Kopien ein: ");
int anzahlDerKopien = new Scanner(System.in).netInt();

if(anzahlDerKopien > 0) {
    System.out.println("Es wurden " + anzahlDerKopien + " Kopie(n) gewünscht.");
    int seitenStufe1 = 0;
    int seitenStufe2 = 0;
    int seitenStufe3 = 0;
    int seitenStufe4 = 0;
	
    if(anzahlDerKopien <= 50) {
        seitenStufe1 = anzahlDerKopien;
    } else if(anzahlDerKopien <= 100) {
        seitenStufe1 = 50;
        seitenStufe2 = anzahlDerKopien - 50;
    } else if(anzahlDerKopien <= 200) {
        seitenStufe1 = 50;
        seitenStufe2 = 50;
        seitenStufe3 = anzahlDerKopien - 100;
    } else if(anzahlDerKopien > 200) {
        seitenStufe1 = 50;
        seitenStufe2 = 50;
        seitenStufe3 = 100;
        seitenStufe4 = anzahlDerKopien - 200;
    }
	
    System.out.println(seitenStufe1 * 0.1);
    System.out.println(seitenStufe2 * 0.09);
    System.out.println(seitenStufe3 * 0.08);
    System.out.println(seitenStufe4 * 0.07);
} else {
    System.out.println("Es wurden keine Kopien gewünscht, daher sind auch keine Kosten entstanden!");
}

So funktioniert das Programm schon mal richtig, wenn nun aber die Preisstufen geändert werden, musst du an mehrere Stellen im Code Anpassungen machen.
Das ist sehr unpraktisch daher sollte man sich überlegen ob es möglich ist den Code zu optimieren

Java:
System.out.println("Geben Sie die Anzahl der gewünschten Kopien ein: ");
int anzahlDerKopien = new Scanner(System.in).netInt();

if(anzahlDerKopien > 0) {
    System.out.println("Es wurden " + anzahlDerKopien + " Kopie(n) gewünscht.");
    int verbleibendeSeiten = anzahlDerKopien;
    int seitenStufe1 = 0;
    int seitenStufe2 = 0;
    int seitenStufe3 = 0;
    int seitenStufe4 = 0;
	
    if(verbleibendeSeiten > 200) {
        seitenStufe4 = verbleibendeSeiten - 200;
        verbleibendeSeiten = verbleibendeSeiten - seitenStufe4;
    }
    if(verbleibendeSeiten > 100) {
        seitenStufe3 = verbleibendeSeiten - 100;
        verbleibendeSeiten = verbleibendeSeiten - seitenStufe3;
    } 
    if(verbleibendeSeite > 50) {
        seitenStufe2 = verbleibendeSeiten - 50;
        verbleibendeSeiten = verbleibendeSeiten - seitenStufe2;
    }
    seitenStufe1 = verbleibendeSeiten;
		
    System.out.println(seitenStufe1 * 0.1);
    System.out.println(seitenStufe2 * 0.09);
    System.out.println(seitenStufe3 * 0.08);
    System.out.println(seitenStufe4 * 0.07);
} else {
    System.out.println("Es wurden keine Kopien gewünscht, daher sind auch keine Kosten entstanden!");
}

Jetzt hast du maximal 2 Stellen an denen du die Grenzen einer Stufe anpassen musst und diese beiden Stellen stehen in 2 aufeinanderfolgenden Zeilen.
(weitere Optimierungen wäre Konstanten für die Preise je Seite bzw. für die Grenzen der Preisstufen.
 
Zuletzt bearbeitet:

ekago

Mitglied
soweit komm ich glaub mit, und du hast es wirklich verständlich erklärt, trotzdem muss ich nachfragen
warum macht man:

Java:
int verbleibendeSeiten = anzahlDerKopien;
 

ekago

Mitglied
wie addiere ich die stufen miteinander??
wenn ich
Java:
int summe=(stufe1+stufe2+stufe3+stufe4);
System.out.println("Gesamtpreis:"+ " "+summe );
}
rechne kommt nicht die summe raus
was mach ich falsch?
 
Zuletzt bearbeitet:

ekago

Mitglied
wenn ich zum beispiel 4 zahlen habe wie
5.0
4.5
2.4
0.0
kommt 130 als Gesamtpreis raus und nicht 11,9

Java:
int summe= stufe1+stufe2+stufe3+stufe4;
System.out.println("Gesamtpreis:"+ " "+summe);
 

ekago

Mitglied
mein gesamtcode sieht noch so aus
Java:
package Uebungsaufgaben7;
import java.util.Scanner;
public class Aufgabe7_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Geben Sie die Kopienanzahl ein");
int kopieranzahl = new Scanner (System.in).nextInt();

if (kopieranzahl >0) {
	System.out.println("Es wurden"+" "+ kopieranzahl+" "+ "Kopien gewünscht");
int stufe1=0;
int stufe2=0;
int stufe3=0;
int stufe4=0;

if (kopieranzahl>200){
	stufe4=kopieranzahl-200;
	kopieranzahl=kopieranzahl-stufe4;
	
}if (kopieranzahl>100){
	stufe3=kopieranzahl-100;
	kopieranzahl=kopieranzahl-stufe3;
	
}if(kopieranzahl>50){
	stufe2=kopieranzahl-50;
	kopieranzahl=kopieranzahl-stufe2;
	
} 
stufe1=kopieranzahl;


System.out.println(stufe1*0.10);
System.out.println(stufe2*0.09);
System.out.println(stufe3*0.08);
System.out.println(stufe4*0.07);

int summe= stufe1+stufe2+stufe3+stufe4;
System.out.println("Gesamtpreis:"+ " "+summe);
}

else {
	System.out.println("Es wurden keine Kopien gewünscht daher sind keine Kosten entstanden");
}
	}
}
 

Joose

Top Contributor
Welche Werte werden in den Variablen stufe1, stufe2, stufe3 und stufe 4 gespeichert?
Wenn du dir meinen Code richtig durchgelesen hast, hättest du bemerkt das bei mir diese Variablen alle "seitenStufeX" heißen. Und zwar aus den bestimmten Grund damit man schon am Namen erkennen kann welcher Wert hinter dieser Variable steckt.

Überlege einfach logisch für was diese Variablen gut sind? Wo werden sie verwendet? Was wird damit gespeichert?
Überlege wo der Preise für die einzelnen Stufen ausgerechnet wird, werden diese Werte wo gespeichert?
 

ekago

Mitglied
Java:
System.out.println(stufe1*0.10);
System.out.println(stufe2*0.09);
System.out.println(stufe3*0.08);
System.out.println(stufe4*0.07);

spätestens da haben die Stufen doch ihre werte mit dene man sie identifizieren kann warum kann ich sie nicht einfach addieren??
 
Zuletzt bearbeitet von einem Moderator:

ekago

Mitglied
ich habe das jetzt so hin bekommen
das funktioniert zwar aber kommt mir so umständlich vor.. wäre das denn nicht auch einfacher gegangen??ß
Java:
package Uebungsaufgaben7;
import java.util.Scanner;
public class Aufgabe7_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Geben Sie die Kopienanzahl ein");
int kopieranzahl = new Scanner (System.in).nextInt();

if (kopieranzahl >0) {
	System.out.println("Es wurden"+" "+ kopieranzahl+" "+ "Kopien gewünscht");
	int verbleibendeSeiten=kopieranzahl;
int stufe1=0;
int stufe2=0;
int stufe3=0;
int stufe4=0;

if (verbleibendeSeiten>200){
	stufe4=verbleibendeSeiten-200;
	verbleibendeSeiten=verbleibendeSeiten-stufe4;
	
}if (verbleibendeSeiten>100){
	stufe3=verbleibendeSeiten-100;
	verbleibendeSeiten=verbleibendeSeiten-stufe3;
	
}if(verbleibendeSeiten>50){
	stufe2=verbleibendeSeiten-50;
	verbleibendeSeiten=verbleibendeSeiten-stufe2;
	
} 
stufe1=verbleibendeSeiten;

double stufenew1= stufe1*0.10;
double stufenew2= stufe2*0.09;
double stufenew3= stufe3*0.08;
double stufenew4= stufe4*0.07;
System.out.println(stufenew1);
System.out.println(stufenew2);
System.out.println(stufenew3);
System.out.println(stufenew4);

double summe= stufenew1+stufenew2+stufenew3+stufenew4;
System.out.println("Gesamtpreis:"+ " "+summe);
}

else {
	System.out.println("Es wurden keine Kopien gewünscht daher sind keine Kosten entstanden");
}
	}
}
 

Joose

Top Contributor
Wie meinst du die heißen SeitenStufeX du hast die stufen doch auch durch nummeriert oder?

Damit wollte ich sagen:
Ich habe diese Variablen seitenStufeX genannt weil ich damit die Seiten für die Stufe X speichere. Wenn man diese 4 Variablen nun wieder addiert sollten die Anzahl an Kopien rauskommen.
Versuche eben deinen Variablen sprechende Namen zu geben, so das man darauf schließen kann was gespeichert wird.
Wenn du hier nur stufeX verwendest als Bezeichnung könnte das alles mögliche bedeuten.

ich habe das jetzt so hin bekommen
das funktioniert zwar aber kommt mir so umständlich vor.. wäre das denn nicht auch einfacher gegangen??ß

Kommt ganz darauf an was du später noch mit diesen Werten machen willst.
Hier eine Möglichkeit:

Java:
package Uebungsaufgaben7;
import java.util.Scanner;
public class Aufgabe7_1 {

    public static void main(String[] args) {
        System.out.println("Geben Sie die Kopienanzahl ein");
        int kopieranzahl = new Scanner (System.in).nextInt();

        if (kopieranzahl >0) {
            System.out.println("Es wurden " + kopieranzahl + " Kopien gewünscht"); // kleiner Tipp verwende sowenige Strings wie möglich
            int verbleibendeSeiten = kopieranzahl;
            int seitenStufe1 = 0;
            int seitenStufe2 = 0;
            int seitenStufe3 = 0;
            int seitenStufe4 = 0;
            doouble kostenGesamt = 0.0;

            if (verbleibendeSeiten > 200){
                seitenStufe4 = verbleibendeSeiten - 200;
                verbleibendeSeiten = verbleibendeSeiten - seitenStufe4;
                kostenGesamt = kostenGesamt + (seitenStufe4 * 0.07);
            }
			if (verbleibendeSeiten > 100){
                seitenStufe3 = verbleibendeSeiten - 100;
                verbleibendeSeiten = verbleibendeSeiten - seitenStufe3;
                kostenGesamt = kostenGesamt + (seitenStufe3 * 0.08);
            }
			if(verbleibendeSeiten > 50){
                seitenStufe2 = verbleibendeSeiten - 50;
                verbleibendeSeiten = verbleibendeSeiten - seitenStufe2;
                kostenGesamt = kostenGesamt + (seitenStufe2 * 0.09);
            } 
            seitenStufe1 = verbleibendeSeiten;
            kostenGesamt = kostenGesamt + (seitenStufe1 * 0.10);
            System.out.println("Gesamtpreis: " + kostenGesamt);
        } else {
            System.out.println("Es wurden keine Kopien gewünscht daher sind keine Kosten entstanden");
        }
    }
}
 

Neue Themen


Oben