# Aufgabe Preisliste



## ekago (1. Jan 2015)

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 (1. Jan 2015)

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 (1. Jan 2015)

Ah super vielen dank


----------



## ekago (2. Jan 2015)

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?

```
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 (2. Jan 2015)

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



ekago hat gesagt.:


> 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.

```
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.


```
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)


```
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.


```
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


```
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.


----------



## ekago (2. Jan 2015)

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


```
int verbleibendeSeiten = anzahlDerKopien;
```


----------



## ekago (3. Jan 2015)

wie addiere ich die stufen miteinander??
wenn ich 

```
int summe=(stufe1+stufe2+stufe3+stufe4);
System.out.println("Gesamtpreis:"+ " "+summe );
}
```
rechne kommt nicht die summe raus 
was mach ich falsch?


----------



## ekago (5. Jan 2015)

Kann mir jemand dabei helfen? Bitte bitte


----------



## Joose (5. Jan 2015)

Wie schaut denn dein Code aktuell aus?
Wie schaut die Ausgabe aus? Wie sollte sie ausschauen?


----------



## ekago (7. Jan 2015)

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 


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


----------



## ekago (7. Jan 2015)

mein gesamtcode sieht noch so aus

```
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 (7. Jan 2015)

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 (7. Jan 2015)

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


----------



## ekago (7. Jan 2015)

```
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??


----------



## ekago (7. Jan 2015)

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??ß

```
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 (8. Jan 2015)

ekago hat gesagt.:


> 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.



ekago hat gesagt.:


> 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:


```
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");
        }
    }
}
```


----------

