Pereiti prie turinio

Padėkit ištaisyti klaidas pascal programoje


Rekomenduojami pranešimai

Kvailas uždavinys, nes galima suprast dvejopai. Pirma, tai kad imi x iš duoto intervalo, statai į formulę ir tikrini ar gautas skaičius pirminis. Antra, tai kad gauti skaičiai turi tilpti duotame intervale, o x jau imi atsižvelgdamas į tai. Nors man atrodo logiškesnis pirmas variantas, gal pabandyk patikslint. ;)

Bandysiu pagal pirmą variantą daryt ir žiūrėt kas gausis, tik kad didžiausias skaičius pagal tą formulę yra 257, tai kam tie 10000 skirti? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Bandysiu pagal pirmą variantą daryt ir žiūrėt kas gausis, tik kad didžiausias skaičius pagal tą formulę yra 257, tai kam tie 10000 skirti? :)

 

Tu atsižvelgi į tai, kad 0<x<15? Nes jei pagal pirmą variantą darant, tai šią sąlygos dalį reiktų suprast kaip 0<x<10000. ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Atsižvelgiu, nes kitaip kam tas 0<=x<=15 skirtas?

 

Nu tai čia pasakyta, kad patikrinta ir įrodyta, jog skaičiai pirminiai, kai 0<=x<=15, o tau reikia patikrinti ar teisinga, kai 1<=x<=10000. Bet ir tai man ganėtinai nelogiška atrodo, todėl ir sakau, kad kvailas uždavinys. ;)

Redagavo PixeLz
Nuoroda į pranešimą
Dalintis kituose puslapiuose
Nu tai čia pasakyta, kad patikrinta ir įrodyta, jog skaičiai pirminiai, kai 0<=x<=15, o tau reikia patikrinti ar teisinga, kai 1<=x<=10000. Bet ir tai man ganėtinai nelogiška atrodo, todėl ir sakau, kad kvailas uždavinys. ;)

Ačiū, bandysiu parašyti tokią programą, paskutinė bėda su rekursijom, nemoku jų:

 

Duota rekursinė funkcija:

function Rek(x: integer): integer;

var r: integer;

begin

if (x = 1) or (x = 0)

then r := x

else r := Rek(x - 2) + x - x mod 2;

Rek := r

end;

Apskaičiuokite šias funkcijos reikšmes:

a) Rek(2);

b) Rek(4);

c) Rek(5).

Kiek kartų, įskaičiuojant ir pirmąjį kreipinį, bus kreipiamasi į funkciją Rek?

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Ačiū, bandysiu parašyti tokią programą, paskutinė bėda su rekursijom, nemoku jų:

 

Duota rekursinė funkcija:

function Rek(x: integer): integer;

var r: integer;

begin

if (x = 1) or (x = 0)

then r := x

else r := Rek(x - 2) + x - x mod 2;

Rek := r

end;

Apskaičiuokite šias funkcijos reikšmes:

a) Rek(2);

b) Rek(4);

c) Rek(5).

Kiek kartų, įskaičiuojant ir pirmąjį kreipinį, bus kreipiamasi į funkciją Rek?

 

Tai tiesiog į programą įrašyk funkciją ir suskaičiuosi jei nemoki mintinai. ;)

a) Ats.:2, kreipiamasi 2 kartus.

b) Ats.:6, kreipiamasi 3 kartus.

c) Ats.:7, kreipiamasi 3 kartus.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Juokingai graudu, programa jau 5 minutes skaičiuoja rezultatą:

 

program pirminiai;
var x, p, i, s, ats : longint;
function pirm (p, i, s : longint; var ats : longint): longint;
begin
ats := 1;
if ats = 1 then
 begin
  for i := 1 to p do
begin
 if p mod i = 0 then s := s + 1;
end;
if s = 2
 then ats := 1
 else ats := 0;
 end;
pirm := ats;
end;
begin
s := 0;
for x := 1 to 10000 do
 begin
  p := sqr(x) + x + 17;
  ats := pirm (p, i, s, ats);
 end;
if ats = 1 then writeln ('true');
if ats = 0 then writeln ('false');
end.

Įmanoma ją sutvarkyt, kad greičiau veiktų ar nelabai? ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Juokingai graudu, programa jau 5 minutes skaičiuoja rezultatą:

 

program pirminiai;
var x, p, i, s, ats : longint;
function pirm (p, i, s : longint; var ats : longint): longint;
begin
ats := 1;
if ats = 1 then
 begin
  for i := 1 to p do
begin
 if p mod i = 0 then s := s + 1;
end;
if s = 2
 then ats := 1
 else ats := 0;
 end;
pirm := ats;
end;
begin
s := 0;
for x := 1 to 10000 do
 begin
  p := sqr(x) + x + 17;
  ats := pirm (p, i, s, ats);
 end;
if ats = 1 then writeln ('true');
if ats = 0 then writeln ('false');
end.

Įmanoma ją sutvarkyt, kad greičiau veiktų ar nelabai? :)

 

Nelabai suprantu, kaip tavo funkcija veikia. Naudok Eratosteno rėtį. Tai greičiausias būdas. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Padariau su tuo rėčiu ir pamačiau kad blogai veikia dabar :) o reikia šiandien užbaigt programą, bėda tokia: visada false meta, nes dabar nepatenka į funkciją, kadangi pirminis nėra true, bet jeigu funkcijos pradžioj parašai pirminis := true, tada visada jis true ir būna, ką patarsit daryti?

program pirminiai;
var x, p : longint;
 ats : boolean;
function pirminis(p : longint) : boolean;
var d, sn : longint;
begin
if pirminis = true then
 begin
  pirminis := (p mod 2 <> 0) or (p = 2);
  sn := round(sqrt(p)+1);
  d := 3;						 // tikrinamas dalumas ið nelyginiø skaièiø
while pirminis and (d < sn) do
 if p mod d = 0
  then pirminis := false
  else d := d + 2;
 end;
end;
begin
for x := 1 to 10000 do   // ciklas, kuris veikia 10000 kartø ir patikrina visus skaièius pagal formulæ
 begin
  p := sqr(x) + x + 17;  // suskaièiuojamas skaièius pagal formulæ
  ats := pirminis (p);  // tikrinama su funkcija ar skaièius yra pirminis
 end;
write (ats);
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kam tu tą if dar įkišai? Veikia:

program pirminiai;
var x, p : longint;
 ats : boolean;

function pirminis(p : longint) : boolean;
var d, sn : longint;
begin
 pirminis := (p mod 2 <> 0) or (p = 2);
 sn := round(sqrt(p)+1);
 d := 3;
 while pirminis and (d < sn) do
  if p mod d = 0 then
 pirminis := false
  else d := d + 2;
end;

begin
 for x := 1 to 10000 do
 begin
p := sqr(x) + x + 17;
if not pirminis(p) then
  Writeln('Formulė neteisinga, kai x=',x);
 end;
 Writeln('Formulė teisinga');
end.

 

Bet iš esmės labai jau daug skaičių netinka, tai manau, kad ne taip tereikėjo spręst. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
Kam tu tą if dar įkišai? Veikia:

program pirminiai;
var x, p : longint;
 ats : boolean;

function pirminis(p : longint) : boolean;
var d, sn : longint;
begin
 pirminis := (p mod 2 <> 0) or (p = 2);
 sn := round(sqrt(p)+1);
 d := 3;
 while pirminis and (d < sn) do
  if p mod d = 0 then
 pirminis := false
  else d := d + 2;
end;

begin
 for x := 1 to 10000 do
 begin
p := sqr(x) + x + 17;
if not pirminis(p) then
  Writeln('Formulė neteisinga, kai x=',x);
 end;
 Writeln('Formulė teisinga');
end.

 

Bet iš esmės labai jau daug skaičių netinka, tai manau, kad ne taip tereikėjo spręst. :)

Bet negerai veikia, betkokiu atveju jau per vėlu taisyti :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...