# Zahl durch 5 teilbar



## uebertreiber (12. Nov 2012)

guten abend  und zwar hab ich eine aufgabe bekommen, die ich nicht ganz lösen kann und bräuchte dringend hilfe, ich hab zwar ansätze aber ich hänge da i.wie fest :/ und zwar lautet die aufgabe:

Erstellen Sie ein Programm welches vom Benutzer eine ganze Zahl einliest. Wenn die Zahl
durch 5 teilbar ist, soll das Ergebnis der Division durch 5 ausgegeben werden. Andernfalls
soll der Rest Modulo 5 ausgeben werden. Zwecks Lerneffekts ist bei dieser Aufgabe die
Verwendung von if NICHT gestattet.

Mein Ansatz ist:

[Java]
import java.util.Scanner;
public class Taschenrechner{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int resultat = scanner.nextInt();
[/Java]

und genau hier hänge ich fest, da ich nicht mit IF arbeiten darf :S jetzt weiß ich leider nicht wie ich weiter machen soll und würde mich sehr auf eure hilfe freuen.

MfG


----------



## Volvagia (12. Nov 2012)

Ich denke dein Lehrer verlangt das von dir:
Java ist auch eine Insel – 2.8 Weitere Operatoren


----------



## SlaterB (12. Nov 2012)

interessanter ist es aber auch ganz ohne direkte Fallunterscheidung,
Rechnen ist glaube ich immer noch ein Weg,
ich komme hier zumindest allein mit Java-Abrunden aus, was je nach Strenge erlaubt ist oder nicht


```
public class Test {

	public static void main(String[] args) {
		for (int i = 0; i <= 115; i++) {
			int j = i % 5;
			int k = (int) (0.6 + j / (j + 1.1));
			int l = i / 5 * (1 - k) + j * k;
			System.out.println(k + " -- " + l);
		}
	}
}
```
mit Methoden wie Math.signum() wäre es noch einfacher, aber das verlagert ja quasi nur das if


----------



## Landei (12. Nov 2012)

```
System.out.println(new int[]{x/5,1,2,3,4}[x%5]);
```


----------



## flopalko (12. Nov 2012)

Sehr elegant Landei, sehr elegant! :toll:


----------



## pappawinni (12. Nov 2012)

Mal ne kreative Lösung 


```
public class Test {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        int k = i/5;
        int j = i%5;
        int m = (j+1)/2;
        int n = (m+1)/2;
        int o = k*(1-n) + j * n; 
        System.out.println(o);
        }
    }
}
```


----------



## pappawinni (12. Nov 2012)

Ach, fällt mir gerade erst auf, meine Lösung entspricht ja beinahe der von SlaterB.
Die Lösung von Landei ist wirklich elegant, aber vermutlich auch nicht im Sinne des Aufgabenstellers..
Aber gut.. was beliebt ist auch erlaubt, oder so...


----------



## Zeeu (13. Nov 2012)

würde eher Volvagia zustimmen


```
public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int zahl = scan.nextInt();
		int ergebnis = 0;

		ergebnis = zahl % 5 != 0 ? zahl % 5 : zahl / 5;

		System.out.println(ergebnis);
	}
```

man könnts auch mit switch case machen :/


----------



## Landei (13. Nov 2012)

Ich denke mal, ein [c]:?[/c] ist faktisch ein [c]if[/c], genauso wie ein [c]switch[/c]:


```
switch(x % 5) {
  case 0 : System.out.println(x / 5); break;
  default:  System.out.println(x % 5);
}
```


----------



## SlaterB (13. Nov 2012)

und ein Array ist ja ein switch von Variablen


----------



## Trolllllll (13. Nov 2012)

Landei hat gesagt.:


> Ich denke mal, ein [c]:?[/c] ist faktisch ein [c]if[/c]...


Ja das ist ein 
	
	
	
	





```
if
```
, da es ja nur die kurzform für 
	
	
	
	





```
if
```
 ist.


----------



## Marco13 (13. Nov 2012)

@SlaterB: Vielleicht sollte man dem Aufgabensteller sagen, dass er die Aufgabe anders formulieren soll: "Schreibe ...[das Programm] ... ohne dass im resultierenden Bytecode die bytes aa,ab,a5,a6,9f,a0,a1,a2,a3,a4,99,9a,9b,9c,9d,9e,c7 oder c6 vorkommen"


----------



## Jango (13. Nov 2012)

SlaterB hat gesagt.:


> und ein Array ist ja ein switch von Variablen



Und ich dachte immer, ein Array wäre ein Objekt...???:L
:bae:


----------



## Landei (13. Nov 2012)

Um auch eine numerische Lösung präsentieren zu können:


```
int a = ((((x%5)*2-1)%2)+1)/2;
int result = a*(x%5)+(1-a)*(x/5);
```


----------



## bone2 (14. Nov 2012)

+1 für Landei. Code bringt mich selten zum schmunzeln


----------

