login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem m.b.t. even/oneven getal

Offline BigBug - 23/10/2008 15:24
Avatar van BigBugPHP expert Beste dames en heren, eerst mijn stukje code;
  1. <?php
  2.  
  3. function decryption($value)
  4. {
  5. $lengte = strlen($value); // kijkt hoe lang de waarde is
  6. if($lengte > 7) // als de waarde groter is dan 7 dan...
  7. {
  8. if((floor($lengte/2)+floor($lengte/2)) == $lengte) // als 2x gefloorde waarde gelijk is aan het origineel was het een even getal anders dus niet
  9. {
  10. $real_length = $lengte/2; // De originele waarde heeft net zoveel extra karakters gekregen in het midden als de originele invoer
  11. $length_1stpart = ceil($real_length/2);
  12. $length_2ndpart = $real_length-$length_1stpart;
  13. echo "Lengte eerste deel: ".$length_1stpart."";
  14. echo "<br><br>Lengte tweede deel: ".$length_2ndpart."";
  15. }
  16. else
  17. {
  18. echo 'Dit is geen juiste waarde om te decrypten!';
  19. }
  20. }
  21. else
  22. {
  23. echo 'De waarde is te kort om te decrypten!';
  24. }
  25. }
  26. ?>


Als $value een even getal is dan is het de bedoeling dat $length_1stpart en $length_2ndpart ook even zijn. Dit gedeelte van het script klopt ook, maar het probleem zit hem in het doorlaten van de 'even' en 'oneven' getallen.

Als ik een input van 11 karakters heb wordt deze doorgelaten, terwijl dit niet de bedoeling is.

11/2 = 5.5 => floor-> 5
5+5 = 10
10 !== 11

Dit zou de bedoeling moeten zijn, alleen werkt het om de een of andere reden niet 

Ziet iemand het probleem?

Bij voorbaat dank,
Bug

4 antwoorden

Gesponsorde links
Offline avdg - 23/10/2008 15:27
Avatar van avdg PHP gevorderde ik versta je probleem niet echt...
wat kan helpen...
  1. if ($getal % 2 == 0){
  2.  
  3. //Deelbaar door 2
  4.  
  5. } else {
  6.  
  7. //Niet deelbaar door 2
  8.  
  9. }

 
Offline BigBug - 23/10/2008 15:34
Avatar van BigBug PHP expert Het probleem is dat die manier dus ook waardes van 11 doorlaat. Een andere oplossing is leuk maar ik wil dus weten waarom:

(floor($lengte/2)+floor($lengte/2)) == $lengte

bijvoorbeeld $lengte = 11; doorlaat. Dit zou niet moeten kunnen (zie mijn kleine rekensommetje bovenaan in TS).
Offline Diko - 23/10/2008 15:35
Avatar van Diko PHP interesse @avdg: Vergeet niet om $getal == 0 ook af te vangen. Deze zou bij jou ook deelbaar door 2 zijn ;)
Offline BigBug - 23/10/2008 15:41
Avatar van BigBug PHP expert @Diko dat is niet nodig omdat in het script de lengte minimaal 8 moet zijn Anders komt ie niet eens bij de check 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.238s