# gerade zahlen größer und kleiner null



## gast (2. Nov 2003)

wie schreibe ich ein programm das nach eigabe von n die funktion f(n) ausrechnet.
es soll überprüft werden ob n=0                          dann f(n)=0
                                        n>0 und gerade         dann f(n) 5(n/2+1)
                                        n>0 und ungerade      dann f(n) n³-2n+7;

ich habe folgendes programm  geschrieben:


```
import java.io.*;

public class Aufgabe3{
    public static void main(String[] args)
    throws IOException
    {int n; 
    BufferedReader din = new BufferedReader(new InputStreamReader(System.in));

    System.out.print("Bitte n von f(n) eingeben : ");
    n = Integer.parseInt(din.readLine());
    if ( n == 0) { System.out.println(" ergebnis = 0 "); }
    if (n%2==0 ) { System.out.println(" test gerade " + 5*(n/2+1) ); }
    else { System.out.println(" test ungerade " + ((n*n*n)-2*n+7)); }
    if ( n < 0) { System.out.println(" bitte das nächste mal ne positive zahl eingeben !");                   


    }
    }
}
```
das problem ist, dass auch bei eingabe von negativen zahlen eine rechnung gemacht wird mit geraden bzw ungeraden zahlen, obwohl er ja nur ausgeben soll"(" bitte das nächste mal ne positive zahl eingeben !");                   ?


----------



## mariopetr (2. Nov 2003)

hallo

um es etwas uebersichtlich zu machen packt man es erstmal in eine funkion


```
public static double func(int n) /*static um es aus main aufrufen zu koennen, double da die funktionsbeschreibung Z+->R+*/
{
	if(n==0)
		return 0;
	else
		if(n<0)
			return -1; // invalid argument
		else
		{
			if((n%2)==0) // gerade
				return 5*((n/2)+1);
			else //ungerade
				return Math.pow(n,3)-(2*n)+7;
		}
}
```
du musst nur den returnwert auf -1 pruefen, um zu sehen ob es ein nicht gueltiges argument war (n<0). leider ist die funktion nicht vollstaendig fuer Z (was integer,short,byte ist) oder R (float,double) beschrieben


----------



## Guest (2. Nov 2003)

ähm kann man das irgendwie auch einfacher schreiben, weil ich die aufgabe für ein praktikum in der uni brauche, wir sind erst in der 2 woche und haben bedingungen kennengelernt. ich brauche es irgendwie simpler, weil wir es auch erklären müssen. außerdem funktioniert es auch nicht bei mir so, wie du es geschrieben hast. also bitte etwas nachsicht, bin blutiger anfänger


----------



## mariopetr (2. Nov 2003)

naja, ich habe nur bedingungen (if-then-else) benutzt. was ist den nicht richtig an der funktion? liefert sie falsche werte? einfacher geht kaum (ohne es unnoetig zu verkomplizieren), da ansonsten werte <0 ncht ordentlich abgefangen werden oder man redundante pruefungen durchfuehrt.


----------



## gast (2. Nov 2003)

habe das problem gelöst. mann kann mehrere bedingungen mit einem & bzw && verbinden also
if (n == 0 & (n %=2));
aber trozdem danke vielleicht hilfts ja noch jemanden
cu


----------



## Guest (2. Nov 2003)

würde reichen wenn der Quellcode so aussieht


```
if ( n == 0 ) { System.out.println(" Ergebnis : " +  n*0 ); } 
if ( n > 0 & (n%2)==0)  System.out.println(" Ergebnis bei Zahl > 0 und gerader Zahl : " +  5*((n/2)+1) ); 
if ( n > 0 & (n%2)==1)  System.out.println(" Ergebnis bei Zahl > 0 und ungerader Zahl : " + ((n*n*n)-2*n+7));  
if ( n < 0 ) System.out.println(" Bei Eingabe einer negativen Zahl wird kein Ergebnis errechnet !" );
```


----------



## bygones (2. Nov 2003)

ich würde aber nicht in der abfrage ein einfaches '&' verwenden, denn dann steigst du in die Tiefen der Bit-Operationen ein !!!

Nimm anstatt dessen '&&' !!!


----------

