Ĺadny brzuch
Problem jest taki, miałem napisać program, który obliczy liczbę liczb super'b'pierwszych w przedziale od 2 do 1000 z wykorzystaniem podprogramów no i napisałem tylko że w tym zbiorze ma być ok 50 liczb super'b'pierwszych a mi znajduje 89:) no i nie bardzo wiem gdzie jest błąd;d. oto kod:
program spierw; uses crt; var l,d:longint; function pierwsza(liczba:longint):boolean; var a:longint; begin pierwsza:=true; if liczba=1 then pierwsza:=false else begin for a:=2 to liczba div 2 do begin if (liczba mod a=0) then pierwsza:=false; end; end;end; function sumadec(liczba:longint):longint; var suma:word; begin suma:=0; while liczba > 0 do begin suma:=suma + liczba mod 10; liczba:=liczba div 10; end; sumadec:=suma; end; function dectobin(liczba:longint):longint; var bin:string; begin repeat if (liczba mod 2=1) then bin:='1' + bin else bin:='0' + bin; liczba:=liczba div 2; until liczba=0; Val(bin,dectobin); end; begin clrscr; d:=0; for l:=2 to 1000 do begin if pierwsza(l)=true then if pierwsza(sumadec(l))=true then if pierwsza(sumadec(dectobin(l)))=true then inc(d); end; writeln('w zakresie od 2 do 1000 jest: ',d,' liczb super"b"pierwszych'); readkey; end.
co tu jest źle? nie chce propozycji nowych programów tylko poprawienie tego:) gwoli wyjaśnienia liczba super'b'pierwsza to taka która jest pierwsza, której suma cyfr jest liczbą pierwszą oraz suma cyfr jej reprezentacji binarnej jest liczbą pierwszą.
edit: akurat o tym błędzie wiedziałem:) już go poprawiłem ale to nie wpływa na wyniki bo 1 nie jest brane w ogóle pod uwagę, ale dzięki chociaż za to :)
Użytkownik szczepan edytował ten post 14 listopad 2007, 20:36
O ile sie nie myle, to Twoj program uznaje liczbe 1 za pierwszą, mimo, ze 1 pierwsze nie jest
(ale moge sie mylic, bo nie kompilowałem)
edit: chociaz to nie powinno miec znaczenia... ale i tak popraw :P
Użytkownik bryn edytował ten post 14 listopad 2007, 20:24
nie programuje w Pascalu juz X czasu i nie moge tego sprawdzic..
ale moge podsunac porpozycje, wypisania tych liczb, ktore ten program wskazuje ze sa pierwsze i przeanalizowanie wynikow - taki debugging ;)
edit @down:
gdyby to bylo w C to bym Ci taki blad wskazall, ale myslalem ze moze Pascal sam ustawia wartosc domyslna
Użytkownik fernandez edytował ten post 15 listopad 2007, 17:57
w funkcji bintodec wystarczyło ustawić początkową wartość:
bin:='';
i już działa :)
Temat do zamknięcia :D
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
program spierw; uses crt; var l,d:longint; function pierwsza(liczba:longint):boolean; var a:longint; begin pierwsza:=true; if liczba=1 then pierwsza:=false else begin for a:=2 to liczba div 2 do begin if (liczba mod a=0) then pierwsza:=false; end; end;end; function sumadec(liczba:longint):longint; var suma:word; begin suma:=0; while liczba > 0 do begin suma:=suma + liczba mod 10; liczba:=liczba div 10; end; sumadec:=suma; end; function dectobin(liczba:longint):longint; var bin:string; begin repeat if (liczba mod 2=1) then bin:='1' + bin else bin:='0' + bin; liczba:=liczba div 2; until liczba=0; Val(bin,dectobin); end; begin clrscr; d:=0; for l:=2 to 1000 do begin if pierwsza(l)=true then if pierwsza(sumadec(l))=true then if pierwsza(sumadec(dectobin(l)))=true then inc(d); end; writeln('w zakresie od 2 do 1000 jest: ',d,' liczb super"b"pierwszych'); readkey; end.
co tu jest źle? nie chce propozycji nowych programów tylko poprawienie tego:) gwoli wyjaśnienia liczba super'b'pierwsza to taka która jest pierwsza, której suma cyfr jest liczbą pierwszą oraz suma cyfr jej reprezentacji binarnej jest liczbą pierwszą.
edit: akurat o tym błędzie wiedziałem:) już go poprawiłem ale to nie wpływa na wyniki bo 1 nie jest brane w ogóle pod uwagę, ale dzięki chociaż za to :)
Użytkownik szczepan edytował ten post 14 listopad 2007, 20:36
O ile sie nie myle, to Twoj program uznaje liczbe 1 za pierwszą, mimo, ze 1 pierwsze nie jest
(ale moge sie mylic, bo nie kompilowałem)
edit: chociaz to nie powinno miec znaczenia... ale i tak popraw :P
Użytkownik bryn edytował ten post 14 listopad 2007, 20:24
nie programuje w Pascalu juz X czasu i nie moge tego sprawdzic..
ale moge podsunac porpozycje, wypisania tych liczb, ktore ten program wskazuje ze sa pierwsze i przeanalizowanie wynikow - taki debugging ;)
edit @down:
gdyby to bylo w C to bym Ci taki blad wskazall, ale myslalem ze moze Pascal sam ustawia wartosc domyslna
Użytkownik fernandez edytował ten post 15 listopad 2007, 17:57
w funkcji bintodec wystarczyło ustawić początkową wartość:
bin:='';
i już działa :)
Temat do zamknięcia :D