« 1 2 »
Autor Zpráva
Gauner
Profil *
Ahoj, mám takový dotaz, po dlouhý době jsem zase něco začal zkoumat v PHP a pro obnovení vědomostí jsem se rozhodl, že si naprogramuji program, který určí, zda-li dotyčné číslo je anebo není prvočíslem. To jsem víceméně zvládl bez problému, avšak rozhodl jsem se, že tomu zkusím dát ještě něco a chci, aby mi to vypsalo všechna prvočísla zadanému prvočíslu předcházející. Zkoušel jsem nějaké finty přes for, ale pokaždé jsem napsal nesmysl, nemohl byste mě někdo navést ke správnému zápisu? Když tak vřele děkuji.
ah01
Profil
Pokud neukážeš co si napsal, tak jediné k čemu tě můžeme navést, je nějaký algoritmus, který toto řeší, např.: Eratosthenovo síto.
Radovan789
Profil *
Gauner:
Můžeš sem aspoň napsat ten script který určí prvočíslo ? Urychlylo by to práci.
xmark
Profil
function jeprvocislo($vstup) {
  // tvůj algoritmus pro zjištění prvočísla
}

for ($i = 1; $i <= 100; $i++) {
  if (jeprvocislo($i)) {
    echo $i;
      }
}
Gauner
Profil *
NA Eratosthenovo síto jsem už také koukal, avšak nevím, jak bych ho mohl zapojit, do mého algoritmu. Já mám obyčejný krátký algoritmus, který zjistí s formuláře, zda zadané číslo je prvočíslo, či není. Je to založené na smyslu, že číslo dělím od jeho počáteční hodnoty nahoru a pokud naleznu číslo, kterým je dělitelný beze zbytku (kromě 1 a toho čísla), tak mi to vypíše, že to není prvočíslo. Teď jsem přišel na to, že tenhle algoritmus musím zakomponovat do nějakého cyklu, avšak nevím, jakým způsobem. Já se omlouvám, řeším všechno složitě, nechtěl jsem sem vkládat můj kód, poněvadž chci, abych se nad tím problémem zamyslel a částečně na to přišel i sám, protože pouhé opisování mi nic nedá. :)
Gauner
Profil *
<?php
for($i = 0; $i <= $cislo; $i++)
 {
  $overeni = true;
  $delitel = 2;
  while ($delitel <= ceil(sqrt($cislo)))
     {
       if ($cislo % $delitel == 0)
          {
          $overeni = false;
          $delitel = $cislo + 1;
          }
          else
          {
          $delitel++;
          }    
     }
  }     
?>
Gauner
Profil *
ach, ten cyklus hned na začátku do toho nepatří. :)
Gauner
Profil *
a potom následuje: Když je ověření, tak je číslo prvočíslem, když ne, tak není.
Radovan789
Profil *
Gauner:
<?php

$prvocislo = "127"; // Nějaké prvočíslo

function jePrvocislo($cislo) {
$overeni = true;
$delitel = 2;
while ($delitel <= ceil(sqrt($cislo)))
{
if ($cislo % $delitel == 0)
{
$overeni = false;
$delitel = $cislo + 1;
}
else
{
$delitel++;
}
}

return $overeni;

}

for ($i = 1; $i <= $prvocislo; $i++) {
  if (jeprvocislo($i)) {
    echo $i." ";
  }
}
?>

xmark
Profil
Radovan789:
$prvocislo = "127";

Máš nějaký zvláštní důvod psát číslo v uvozovkách?
Radovan789
Profil *
Gauner:
A ještě ti musím říct že 1 není prvočíslo tak si ten algoritmus uprav.
Radovan789
Profil *
xmark:
Ne.
Gauner
Profil *
Dobře, děkuji. Tohle funguje, avšak kdybych chtěl použít php kód, bez těch funkcí, jak bych to musel změnit?
Radovan789
Profil *
Gauner:
Proč bys to měnil ? Funkce jeprvocislo($i) ti vrátí TRUE nebo FALSE, je to to nejjednoduší řešení, zvláště co se týká přehlednosti kódu. Ale kdybys to tak opravdu chtěl tak:

for ($i = 1; $i <= $prvocislo; $i++) {

$overeni = true;
$delitel = 2;
while ($delitel <= ceil(sqrt($cislo)))
{
if ($cislo % $delitel == 0)
{
$overeni = false;
$delitel = $cislo + 1;
}
else
{
$delitel++;
}
}

  if ($overeni) {
    echo $i." ";
  }
}
Gauner
Profil *
Je mi to trapné přiznat, jsem sotva začátečník a zatím jsem se ještě nenaučil používat. Tím spíš, že jsem se zatím obešel bez nich. Ono to slouží jako co? :)
Radovan789
Profil *
a $cislo změnit za $prvocislo
Radovan789
Profil *
Gauner:
funkce je část kódu kterou můžeš kdykoliv vyvolat a vrátí se ti něco, například:

echo sqrt(9);
// Vypíše 3

// Tvoje vlastní sestrojená funkce
echo jePrvocislo(9);
// Vypíše false
_es
Profil
Gauner:
Prečo nepoužiješ PHP kód z odkazu ah01 na Wikipédiu, ktorý robí presne to, čo chceš?
Gauner
Profil *
Tak se omlouvám, že stále otravuji, ovšem naskytl se problém. Jestliže použiji tento kód, tak je funkční, avšak trochu zvláštně. Program funguje tak, že jestliže zapíšu neprvočíslo, nic se nestane, avšak jestliže zapíši prvočíslo, tak se vypíše řada čísel po jedné až do toho zadaného prvočísla.
Radovan789
Profil *
Gauner:
Mě to jede, problém bude asi vtom to co jsem napsal ve [#16] příspěvku.
Gauner
Profil *
To ne, moji $cislo jsem změnil na $prvocislo a $prvocislo inicializuje uživatel. Přesto to vypíše jenom postup čísel po jednotkách. :D
Radovan789
Profil *
Gauner:
Mě to ale pořád funguje vyzkoušej si tohle z číslem 120:
<?php

$prvocislo = "120"; // Ted je to neprvočíslo

function jePrvocislo($cislo) {
$overeni = true;
$delitel = 2;
while ($delitel <= ceil(sqrt($cislo)))
{
if ($cislo % $delitel == 0)
{
$overeni = false;
$delitel = $cislo + 1;
}
else
{
$delitel++;
}
}

return $overeni;

}

for ($i = 1; $i <= $prvocislo; $i++) {
  if (jeprvocislo($i)) {
    echo $i." ";
  }
}
?>

_es
Profil
Radovan789:
$prvocislo = "120"; // Ted je to neprvočíslo
A navyše to ani nie je číslo, ale textový reťazec.
Gauner
Profil *
A funguje vám to i s tím kódem bez použití funkcí? :)
Alphard
Profil
Radovan789:
Mě to ale pořád funguje vyzkoušej si tohle z číslem 120:

Mně to vypíše
1 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
což je chybné.
Radovan789
Profil *
_es:
Pro PHP možná ale pro mě a autora příspěvku ne. Nerozumím podstatě věcí tvého příspěvku.
Radovan789
Profil *
Alphard:
Je to tak jak jsi autor příspěvku přál, tedy podle jeho algoritmu.
Gauner
Profil *
<?php
for ($i = 1; $i <= $prvocislo; $i++)
{
$je = true;
$delenec = 2;
while ($delenec <= ceil(sqrt($prvocislo)))
{
if ($prvocislo % $delenec == 0)
{
$je = false;
$delenec = $prvocislo + 1;
}
else
{
$delenec++;
}

}
if ($je)
{
echo $i." ";
}
}
?>

Vyzkoušejte tento kód, kdy se $prvocislo = 11; vypíše se vám: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.
Alphard
Profil
<?php

function jePrvocislo($cislo)
{
  if(!is_int($cislo) || $cislo < 2) return false;
  $limit = floor(sqrt((int)$cislo));
  for($delitel = 2; $delitel <= $limit; $delitel++)
  {
    if(($cislo % $delitel) === 0)
    {
      return false;
    }
  }
  return true;
}

for ($i = 1; $i < 11; $i++)
{
  if (jePrvocislo($i))
  {
    echo $i, "<br>";
  }
}
Radovan789
Profil *
Gauner:
Budeš muset použít to stou vlastní funkcí protože for ve for nebo while ve for nerozjedeš.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0