myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

PHP-Neuling

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 08.06.10, 19:43   #1
Driller1407
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 2
Bedankt: 0
Driller1407 ist noch neu hier! | 0 Respekt Punkte
Standard PHP-Neuling

Also ich habe heute mit PHP angefangen und wollte dann auch meine ersten einfachen Skripts schreiben. Unter anderem wollte ich eine Skript schreiben, welches testet, ob es sich bei einer bestimmten Zahl um eine Primzahl handelt.
Also hab ich mir überlegt, dass das Skript erst einmal kontrollieren muss durch wie viele Zahlen die zu testende Zahl teilbar ist. (Das habe ich noch hinbekommen)
Jetzt wollte ich noch, dass das Skript bei einer Primzahl "Primzahl schreibt und bei einer Nicht Primzahl "Keine Primzahl" schreibt. Da ist mein Problem. Ich wollte das ganze mit if machen aber mir wird immer Primzahl angezeigt.

PHP-Code:
<?php

$prime
=12;
$start=1;
$count=0;
for (;
$start<=$prime;){
      if(
$prime%$start) {
       
$start++;}
      else {
$count++;
            
$start++;}       
}

if (
$count=2) {
    echo 
'Primzahl';}
else {echo 
'Keine Primzahl';
      echo 
$prime'hat'$count'Teiler';}
?>
Driller1407 ist offline   Mit Zitat antworten
Ungelesen 08.06.10, 20:03   #2
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

hehe,
a) gidf: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
b) funktionen sind auch dein freund.
dann kannst du
Code:
function /*bool */ isPrime (/* int */$i) {
 // compute ...
 return $someBoolean;
}

if (isPrime (12)) {
 echo "ja";
}
else {
  echo "nein";
}
machen.
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 08.06.10, 20:12   #3
Driller1407
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 2
Bedankt: 0
Driller1407 ist noch neu hier! | 0 Respekt Punkte
Standard

Okay Danke schon mal. Mich würde aber trotzdem interessieren, warum bei mir immer der obere Teil des If Bedingung angezeigt wird.
Driller1407 ist offline   Mit Zitat antworten
Ungelesen 08.06.10, 20:22   #4
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

naja, debuggen, debuggen und nochmals debuggen :P

deine funktion sieht ja fast so aus:
Code:
function isPrime ($i) {
	$prime = $i;
	$start = 1;
	$count = 0;
	for (; $start <= $prime ;){
		if($prime % $start) {
			$start++;
		}
		else {
			$count++;
			$start++;
		}       
	}
	return $count == 2;
}
und da ist irgendetwas falsch.

edit

insbesondere ist:
Code:
if ($count=2) {
falsch
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 08.06.10, 21:08   #5
kramido
Erfahrener Newbie
 
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
kramido ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von urga Beitrag anzeigen
insbesondere ist:
Code:
if ($count=2) {
falsch
Vielleicht klärst du ihn auch auf, wieso!

Bei PHP (ähnlich auch bei C/C++/Java) ist der Zuweisungsoperator = nicht das gleiche wie der Vergleichsoperator == (in PHP sogar noch === für typengerechte Vergleiche).

PHP interpretiert alle Zahlen außer 0 und alle Zeichenfolgen außer einem leeren String "" als TRUE, die restlichen Fälle als FALSE.

Code:
if ($count=2);
ist identisch mit
Code:
$count = 2;
if ($count);
Was du erreichen wolltest, ist zu prüfen, ob count gleich 2 ist. Das funktioniert so:
Code:
if ($count == 2);
Schöner ist noch nachfolgende Variante, die den Fehler der Verwechslung von Zuweisung und Vergleich verhindert:
Code:
if (2 == $count);
Ich empfehle nachfolgend immer letztes Beispiel einzusetzen!
kramido ist offline   Mit Zitat antworten
Ungelesen 08.06.10, 21:22   #6
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Vielleicht klärst du ihn auch auf, wieso!
nein. diese schmerzen muss man selbst erfahren. außerdem hab' ich bei seiner funktion per
Code:
return $count == 2;
einen hinweis geliefert. (und dadurch auch erst den fehler gefunden )
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 08.06.10, 21:43   #7
kramido
Erfahrener Newbie
 
Registriert seit: Apr 2010
Beiträge: 172
Bedankt: 31
kramido ist noch neu hier! | 0 Respekt Punkte
Standard

Noch ein kleiner Hinweis zum Algorithmus:

Wenn du eine Zahl N testen willst, ob sie eine Primzahl ist, reicht es aus bis M*M >= N zu testen.

Zur Erklärung:
Sofern die Zahl N bis M keinen Teiler hat, so wird sie darüber auch keinen mehr finden.
Es reicht weitehrin aus, nur 2 und alle ungeraden Zahlen zu testen. Sollte N nicht durch 2 teilbar sein, ist sie durch keine gerade Zahl teilbar! Das halbiert schonmal die Zahlen, die untersucht werden müssen..

Beispiel:
Zahl ist 301. 19*19 ist > 301 => folglich nur bis 17 prüfen.
Zu Prüfen wären als Teiler:
2, 3, 5, 7, 9, 11, 13, 15, 17, Abbruch.

Vielleicht realisierst du das mal.
kramido ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.


Sitemap

().