Hallo iedereen,
Ik heb een vraag, een probleem in C# en ik kan niet op de oplossing komen hoewel die waarschijnlijk heel eenvoudig is; Ik heb nog nooit echt veel gedaan met C#, maar zou het nu graag gaan gebruiken.
Het zit zo: ik heb een binnenkomend signaal dat soms hoog en soms laag is. Ik heb hiervoor een bool gebruikt: soms true, soms false. (laten we deze bool A noemen).
Nu zou ik graag een tweede bool aanmaken, laten we deze bool B noemen. Bool B zou initieel false moeten zijn, en op iedere derde keer wanneer bool A true wordt, moet bool B ook true worden.
vb:
A false B false
A true B false
A false B false
A true B false
A false B false
A true B true
A false B false
A true B false
A false B false
A true B false
A false B false
A true B true
...
Weet iemand hoe je dit aanpakt? Waarschijnlijk is het eenvoudig maar ik "zie 't niet", ik kan er niet opkomen.
Vriendelijk bedankt!
Kwally
If electronics aint your life, what r u doing here?
counter op A ?
dus
if (A ==1)
{
A_true = 1;
counter = counter +1;
if (B == 1) and (counter = 2)
{
counter = 0;
B_true = 1;
}
}
@kwally: let op je maakt een toewijzing ipv vergelijking: (counter = 2)
Ik zou een "vorige A gebruiken" psuedo code:
BEGIN:
A = inlezen_van_dingetje();
if A==true and A_vorige==false { // alleen bij verandering van A naar true tellen.
if count++ == 3 { // bij derde tel gaan we B zetten
B=true;
count=0;
}
} elseif A!=A_vorige { // als A wel verandert maar niet naar 1 dan B = false.
B=false ;
}
A_vorige = A; // we gaan A onthouden zodat we verandering kunnen zien na de loop
GOTO BEGIN:
int counter = 0;
bool ParseB(bool A)
{
B = false; // normaal false
if (A) // tenzij A true is..
{
counter++;
if(counter == 3) // voor de derde keer..
{
B = true; // dan is B true..
counter = 0; // en tellen we weer opnieuw.
}
}
return B;
}Zoiets?
Dag jroels,
Als ik dit niet verkeerd versta is dit eigenlijk een 3-deler?
Nog een alternatief.
bool bA; //Signaal A
bool bB; //Signaal B
long ilCount; //Teller voor A pulsen
ilCount += Convert.ToUInt64(bA);
bB = ((ilCount % 3) == 0 );
"Volledig" zou dit er zo kunnen uitzien:
using System;
namespace TestClass
{
class tBoolCount
{
private bool bA; //Signaal A
private bool bB; //Signaal B
private long ilCount; //Teller voor A pulsen
//Teller funktie
public void Count(void)
{
ilCount += Convert.ToUInt64(bA);
bB = ((ilCount % 3) == 0 );
}
}
class TestClass
{
static void Main(string[] args)
{
tBoolCount SignCount = new tBoolCount();
while(true)
{
SignCount.Count();
}
}
}
}
Op 17 april 2013 15:57:39 schreef K7Jz:
@kwally: let op je maakt een toewijzing ipv vergelijking: (counter = 2)
Deze (veel voorkomende) bug kan je voorkomen door stelselmatig de parameters in vergelijkingen om te draaien. Zoals hier beneden. Werkt natuurlijk ook voor C en C++;
if (2 == counter)
Dit ziet men trouwens graag in heel wat bedrijven.
Groetjes
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 18 april 2013 03:18:02 schreef YokoTsuno:
if (2 == counter)Dit ziet men trouwens graag in heel wat bedrijven.
Bij mij niet hoor! Koop gewoon een compiler die het verschil ziet/weet!
(GCC, aanschafprijs: EUR 0,- )
Gatze
Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously
Je kunt het ook oplossen door de 1e A, 2e A en 3e A als 'verschillende' booleans te zien. Dan kijk je of A1 == 1 && A2 == 1 && A3 == 1. (Je truth-table wordt dus eigenlijk 8 entries groot ipv 2)
Dit is vrij 'ligt' te implementeren:
In C zoiets:
bool checkA(bool A)
{
static char Ahist = 0;
Ahist = Ahist << 1;
Ahist = Ahist | A;
return (Ahist & 0x07 == 0x07);
}
B = checkA(A)
if(B)
...
e: 'static' is vrij belangrijk: dit zorgt dat Ahist maar eenmaal gealloceerd wordt en niet 'reset' tussen de calls naar checkA door.
[Bericht gewijzigd door knifter op (14%)]
Op 19 april 2013 12:15:06 schreef knifter:
Je kunt het ook oplossen door de 1e A, 2e A en 3e A als 'verschillende' booleans te zien. Dan kijk je of A1 == 1 && A2 == 1 && A3 == 1.
Een serie/parallel omvormer. Uniek concept. Denk dat dit ook op andere plaatsen van pas kan komen.
: 'static' is vrij belangrijk
De TS maakt gebruik van C#.
Op 19 april 2013 11:13:33 schreef shizzle dizzle:
Ik zou net zeggen, GCC waarschuwt je hiervoor.
Klopt. De meeste compilers hebben overigens een dergelijke optie. Dit ligt echter niet meer zo eenvoudig voor grotere projecten met bestaande code en/of meerdere SW ontwikkelaars.
Groetjes.
Kwally
If electronics aint your life, what r u doing here?
Op 17 april 2013 15:57:39 schreef K7Jz:
@kwally: let op je maakt een toewijzing ipv vergelijking: (counter = 2)
Oeps idd, maar het was meer een id dan bruikbare code.
Op 18 april 2013 03:18:02 schreef YokoTsuno:
Deze (veel voorkomende) bug kan je voorkomen door stelselmatig de parameters in vergelijkingen om te draaien. Zoals hier beneden. Werkt natuurlijk ook voor C en C++;if (2 == counter)Dit ziet men trouwens graag in heel wat bedrijven.
Groetjes
MOOI! Zelf gebruik ik het enkel voor hobby bobby toestanden.
Op 19 april 2013 11:13:33 schreef shizzle dizzle:
Ik zou net zeggen, GCC waarschuwt je hiervoor.
Dit gebruik ik ook.