# Produkt berechnen



## Romolus (10. Apr 2012)

Speichere in den Variablen x und y eine untere und obere positive Zahl als grenze und in einer weiteren Variablen s die positive Schrittweite (jeweils double). Teste, dass 0<x<y und s>0 ist. Alle Zahlen sollen vom Typ double sein. Berechne das Produkt von allen Zahlen von x bis y mit der SChittweite s, also diser Formel
Produkt von r_i mit Produktindex i mit
 r_i = x + i*s
solange r_i<=y,i\in{0,1,2..}

1Teil:

```
double x=2;
     double y=1;
     double s=6;
if(x>0) {
    if(x<y) {
        if (s>0) {
            System.out.print("True");
        }else {
            System.out.print("False");
         }
    }else {
        System.out.print("False");
     }
}else {
    System.out.print("False");
 }
```

2Teil ??
Dachte an eine do-while schleife 
Aber versage da maßlos

```
int i = 1;
double r = x+i*s;
do{
r*r;
i++;
}while(r<=y)
```


----------



## njans (10. Apr 2012)

```
r*r;
```

Willst du das nicht irgendwie speichern? Also r verändert sich da nicht ^^

Also du müsstest doch in der Schleife 
	
	
	
	





```
r = x+i*s;
```
 wieder neu errechnen.


----------



## Romolus (10. Apr 2012)

wenn ich r in der schleife definieren will, sagt der PC, dass hier keine Deklaration erfolgen darf ;(


----------



## njans (10. Apr 2012)

```
int i = 1;
double r = x+i*s;
do
{
  r = x+i*s;
  i++;
}
while(r <= y)
```

Das sollte gehen


----------



## Romolus (10. Apr 2012)

aber hier werden doch die r`s nicht miteinandermultipliziert?


----------



## njans (10. Apr 2012)

```
int i = 1;
double r = x+i*s;
do
{
  r = r * (x+i*s);
  i++;
}
while(r <= y)
```

So besser?^^


----------



## Romolus (10. Apr 2012)

Wenn das richtige Ergebnis rauskommen würde.


```
int i = 0;
double r = x+i*s;
do
{
System.out.print(r = r * (x+i*s));
  i++;
}
while(r <= y);
```

wenn
     double x=2;
     double y=9;
     double s=3;

müsste es rechnen (2+0*2)*(2+1*3)*(2+2*3)
da 2+3*3 =10 ergiebt und 10>9
also 80  ausgeben


----------



## njans (10. Apr 2012)

```
int i = 0;
double r = 1;
do
{
  r = r * (x+i*s)
  i++;
  System.out.print(r);
}
while(r <= y);
```

So?


----------



## Romolus (10. Apr 2012)

Mhm, mir spuck er da nur blödsinn aus.

 Mhm ;(


----------



## njans (10. Apr 2012)

nein tut er nicht. Nur du ließt da was falsch/gibst es falsch aus 


```
System.out.println(r);
```
verwende mal das println (das hat einen Zeilenumbruch am Ende). Dann kommst du auch auf 2 und 10 als Ergebnis. Ist wohl leserlicher als 2.010.0


----------



## Romolus (10. Apr 2012)

Aber wieso sollte er 2 und 10 ausgeben? Dass ist ja nicht die Lösung?
und wieso zwei werte?


----------



## njans (10. Apr 2012)

er gibt 2 und 10 aus, weil: 
(2+0*2) = 2
(2+0*2)*(2+1*3) = 10

Und du musst doch wissen, was du als Lösung berechnen willst^^

Du willst also nur das jeweilige r_i abprüfen, dann probier es doch mal so.


```
int i = 0;
double r = 1;
double product = 1;
do
{
  r = x+i*s;
  product= product* r;
  i++;
  System.out.print(r);
}
while(r <= y);
```


----------



## Romolus (11. Apr 2012)

Hallo 
Ich habe gedacht(korrigiere mich wenn es nicht so ist) das das Programm das Produkt der Zahlen berechnen soll.
Weil jetzt gibt er aus:
2.0
5.0
8.0
11.0

Aber in der angabe steht, dass man das Produkt der Zahlen ausgegeben will (oder nicht?)


----------



## SlaterB (11. Apr 2012)

dann gib doch die Variablen product aus, 

es muss doch nicht jeder genau die Aufgabenstellung lesen und dann noch solche Details anpassen


----------



## Romolus (11. Apr 2012)

Hallo
dann kommen aber alle produkte raus. Ich will aber nur das letzte Produkt


----------



## SlaterB (11. Apr 2012)

tja, auch das erfordert noch eine Änderung, zu der du keinen einzigen eigenen Gedanken hast?

reicht Codeaufteilung wie vor der Schleife, in der Schleife, nach der Schleife usw. als Hinweis?
bitte bisschen konzentrieren und ein Mindestmaß an Programmierung doch auch selber versuchen


----------



## Romolus (11. Apr 2012)

Hallo

```
double x=2;
     double y=1;
     double s=6;
if(x>0) {
    if(x<y) {
        if (s>0) {
            System.out.print("True");
        }else {
            System.out.print("False");
         }
    }else {
        System.out.print("False");
     }
}else {
    System.out.print("False");
 }
  double r = x;
  double produkt = 1;
  for (int i = 0; r < y; i++) {
  r = x + i*s;
  produkt = produkt * r;
  System.out.println(produkt);
        }
```
2
10
80
880
Hier gibt er mir am schluss 880 raus, was eine zahl zu viel ist!


----------



## SlaterB (11. Apr 2012)

mit den geposteten Werten, x=2 und y=1 wohl kaum 

ansonsten ist deine Schleife eben nicht so gut wie andere,
du erhöhst r und verwendest r, bevor es durch den Schleifenkopf im nächsten Durchlauf geprüft wird,

du könntest das Erhöhen ans Ende der Schleife verschieben und mit einem besseren Startwert anfangen,
oder dich nach den anderen Schleifen richten,
da gehört schon etwas knobeln dazu


----------



## njans (11. Apr 2012)

```
double x = 2;
		double y = 1;
		double s = 6;
		
		// etwas gekürzt
		boolean matches = (x>0 && x<y && s>0);
		System.out.println(matches);
		
		double r = x; // Das müsste doch 0 sein, nich?!
		double produkt = 1;
		
		for (int i = 0; r < y; i++) // War das nicht <= ?
		{
			r = x + i * s;
			produkt = produkt * r;
			System.out.println(produkt);
		}
```


----------



## Romolus (11. Apr 2012)

Muss in einer For schleife nicht Die erhöhung von i an dritter stelle stehen?
Weil die do-while schleife war auch nicht der richtige weg, da der Abbruch so zu spät erfolgt.

Es beginnt doch mit (x+0*s) und da wäre der r-wert x
880 wäre übrigens trotzdem dabei bei x=2, y=9,s=3


----------



## SlaterB (11. Apr 2012)

ich meinte die Erhöhung von r, Zeile 20 auf 22 verschieben oder so,

würdest du die Erhöhung von r in den Schleifenkopf schreiben und auf i verzichten, dann wäre es in der Tat noch leichter,
der Code von njans zuletzt dürfte auch nicht viel besser klappen

> Weil die do-while schleife war auch nicht der richtige weg, da der Abbruch so zu spät erfolgt. 
gehts genauer?


----------



## Romolus (11. Apr 2012)

Genau, danke
1.teil +

```
double r = x;
  double produkt = 1;
  for (int i = 1; r <= y; i++) {
    produkt = produkt * r;
  System.out.println(produkt);
  r = x + i*s;
        }
```


----------



## SlaterB (11. Apr 2012)

oder so:

```
double produkt = 1;
        for (double r = x; r <= y; r+= s)
        {
            produkt *= r;
            System.out.println(produkt);
        }
```


----------



## Romolus (11. Apr 2012)

Okay danke

LG


----------

