Forum: Compiler & IDEs Programmierfrage - einfache Lösung?


von Frank (Gast)


Lesenswert?

Hallo,

ich steh irgendwie auf dem Schlau.

Ich habe folgendes Problem:

In einer Funktion habe ich die Variable "Zahl" vom Typ int. Ist "Zahl" 
zwischen 4 und 8, so soll der Return-Wert zuerst 0 sein und beim 
nächsten Funktionsaufruf dann 1. Für alle anderen Werte soll der 
Return-Wert gleich 1 sein.

Wie löse ich das? Vielen Dank!

von Ingo (Gast)


Lesenswert?

int Fernsterkomparator(int Zahl)
 {
 if((Zahl>3)&&(Zahl<9)) return 0;
 return 1;
 }

mfG ingo

von Frank (Gast)


Lesenswert?

Hallo Ingo,

danke für deinen Versuch, aber beim 2. Aufruf der Funktion soll bei 
einer Zahl zwischen 4 und 8 ja dann auch 1 zurückgegeben werden.

Gruß, Frank

von Ingo (Gast)


Lesenswert?

dann so:

int Fernsterkomparator(int Zahl)
 {
 static int Versuch=0;
 if(!Versuch)
  {
   Versuch=1;
   return 1;
  }
 if((Zahl>3)&&(Zahl<9)) return 0;
 return 1;
 }

mfG ingo

von Volker Z. (vza)


Lesenswert?

Ich glaube er meint soetwas:
1
int Fernsterkomparator(int Zahl)
2
{
3
  static int Versuch=0;
4
  if((Zahl>3)&&(Zahl<9))
5
  {
6
    if(!Versuch)
7
    {
8
      Versuch=1;
9
      return 0;
10
    }
11
    else
12
      return 1;
13
  }
14
  Versuch=0;
15
  return 1;
16
}

von Frank (Gast)


Lesenswert?

DANKE, manchmal steht man echt auf dem Schlauch!!

von test (Gast)


Lesenswert?

und dann, wenn die Zielplattform ein avr sein soll, doch bitte "Versuch" 
nicht als "int" sondern "uint8_t"

von Manne (Gast)


Lesenswert?

Warum?

von Karl H. (kbuchegg)


Lesenswert?

Manne schrieb:
> Warum?

Wozu den µC in 16-Bit Verarbeitung reintreiben, wenn es 8 Bit auch tun. 
Im Grunde würde sogar ein einzelnes Bit genügen, aber das gibt es in C 
nun mal nicht.

von Detlev T. (detlevt)


Lesenswert?

Ich hätte auch noch eins:
1
int Fernsterkomparator(int Zahl)
2
{
3
  static int Versuch=0;
4
5
    if(Versuch) return 1;
6
7
    if((Zahl > 3) && (Zahl < 9)) Versuch = 1;
8
9
  return (1-Versuch);
10
}

von Karl H. (kbuchegg)


Lesenswert?

Detlev T. schrieb:
> Ich hätte auch noch eins:

Geht aber nicht.
Wenn Versuch das erste mal 1 geworden ist, returnierst du immer eine 1.
Selbst dann wenn der zu überwachende Bereich verlassen und erneut 
betreten wird

von Detlev T. (detlevt)


Lesenswert?

@kbuchegg
Stimmt, ich hatte mich verlesen. Ich hatte gedacht "bei de*n* nächsten" 
statt "bei de*m* nächsten". (Du bist aber auch kleinlich ;) )

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.