Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2018-09-04, 21:49
  #13
Medlem
Citat:
Ursprungligen postat av Mulle-Meth
Jag testade din kod, men den säger att 49 är ett primtal, vilket det inte är :/

Väldigt märkligt då den spottar ut "The number is NOT a prime!" när jag testar med 49.

Din nya kod däremot är fel. Det ska inte vara else TRUE och TRUE-returern ska även ligga utanför for-loopen. Altså att om alla tal gåtts igenom och den inte returnerat FALSE så ska den returnera TRUE.

Se nedan.

Kod:
<?php

$myNumber 
49;

function 
isPrime($myNumber) {

    for(
$i 2$i $myNumber$i++) {

        if(
$myNumber $i == 0) {
            return 
False;
        }
    }

    return 
True;
}

if(
isPrime($myNumber)) {
    echo 
'YES!';
}

else {
    echo 
'NO!';
}

?>
__________________
Senast redigerad av LoveShy 2018-09-04 kl. 21:54.
Citera
2018-09-04, 22:21
  #14
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av Mulle-Meth
Tack! Detta är lite av vad jag siktat på. Jag behöver alltså dels ta reda på om ett tal är ett primtal eller inte, samt så måste jag kunna faktorera ett tal.

När jag sedan har faktorerna i en array så vill jag kunna använda funktionen som tar reda på om ett tal är ett primtal eller inte på samtliga faktorer. Problemet är att jag inte vet hur man gör detta, men jag ska söka. Samt så tror jag att mitt faktoriseringsscript är buggigt...

Först vill jag påpeka att jag inte kan PHP.

Om du har en massa element i en array och vill utföra samma operation på alla så låter foreach-loop som en bra lösning.

Om något, i det här fallet faktoreringsgrejen, är buggigt så är det bra om den delen är ordentligt isolerad från övriga delar. Det gör att du kan "reparera" buggen utan att påverka de övriga, fungerande, delarna av programmet. Det gör också att du i framtiden lätt kan byta ut delen mot en effektivare lösning.
Citera
2018-09-08, 09:31
  #15
Medlem
Mulle-Meths avatar
Citat:
Ursprungligen postat av LoveShy
Väldigt märkligt då den spottar ut "The number is NOT a prime!" när jag testar med 49.

Din nya kod däremot är fel. Det ska inte vara else TRUE och TRUE-returern ska även ligga utanför for-loopen. Altså att om alla tal gåtts igenom och den inte returnerat FALSE så ska den returnera TRUE.

Se nedan.

Kod:
<?php

$myNumber 
49;

function 
isPrime($myNumber) {

    for(
$i 2$i $myNumber$i++) {

        if(
$myNumber $i == 0) {
            return 
False;
        }
    }

    return 
True;
}

if(
isPrime($myNumber)) {
    echo 
'YES!';
}

else {
    echo 
'NO!';
}

?>

Okej, tack

Jag tror inte riktigt att jag förstår detta syntax ännu dock. När jag använder mig av if-satser inkluderar jag alltid ett else statement där (oftast) "motsatsen" returneras, om du förstår vad jag menar.

Detta kanske är lite bortom den ursprungliga frågeställningen, men varför fungerar inte detta egentligen?

Kod:
if($myNumber $i == 0) {
    return 
FALSE;
}

else {
    return 
TRUE;


Om jag tolkar din kod rätt så är talet som matas in i funktionen ett primtal "per default" eftersom att funktionen alltid returnerar TRUE (nedanför if-satsen), eller? Det jag dock inte fattar är att om if-satsens conditional stämmer och den i sin tur returnerar FALSE, vad är det då som stoppar funktionen från att returnera TRUE, eftersom att det alltid returneras i funktionen?

Jag ber om ursäkt för en synnerligen grötigt ställd fråga, men jag hoppas att du förstår vad jag menar
Citera
2018-09-08, 09:34
  #16
Medlem
Mulle-Meths avatar
Citat:
Ursprungligen postat av Neksnor
Först vill jag påpeka att jag inte kan PHP.

Om du har en massa element i en array och vill utföra samma operation på alla så låter foreach-loop som en bra lösning.

Om något, i det här fallet faktoreringsgrejen, är buggigt så är det bra om den delen är ordentligt isolerad från övriga delar. Det gör att du kan "reparera" buggen utan att påverka de övriga, fungerande, delarna av programmet. Det gör också att du i framtiden lätt kan byta ut delen mot en effektivare lösning.

Ja, en for-each är nog mycket riktigt den återstående komponenten som saknas för att jag ska lyckas med min uppgift.

Angående faktorerings-scriptet så ska jag fila lite på den och publicera den här i tråden för lite offentlig debugging
Citera
2018-09-08, 10:54
  #17
Medlem
Eftersom if-satsen ligger i en forloop så kommer inte den att komma till return TRUE innan forloopen är klar. Är forloopen klar så finns inga delare och finns inga delare så är det ett primtal.

Har du else med så kommer den att returnera TRUE så fort första delaren inte är delare, altså på alla udda tal eftersom första delaren är två.
__________________
Senast redigerad av LoveShy 2018-09-08 kl. 11:22.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback