[Pascal] liczby 3-cyfrowe,pierwsze bez 3 i 8.......

Odpowiedz Nowy wątek
2006-11-27 08:40
0

zad
program ma wypisac wszystkie 3 cyfrowe liczby pierwsze w ktorych zadna z tych liczb nie zawiera 3 i 8.

program dziala i wypisuje liczby pierwsze ale tylko takie ktore nie maja na koncu 3 i 8, ale nie sprawdza czy liczby w srodku nie maja 3 i 8.
Gdzie zrobilam blad?? Bardzobym prosila o szybka odp bo niedlugo mam zajecia a musze to zrobic.

program liczby;
uses crt;
var  i,j:integer;
     czy:boolean;
begin
clrscr;

for i:=100 to 999  do
begin
czy:=true;

    for j:=2 to round(sqrt(i))  do
    if i mod j=0 then
    begin
      czy:=false;
      break;
    end
    else
       repeat
      begin
        if (i mod 10=3) or (i mod 10=8) then
                       {wedlug mnie w tym miejscu powinien byc
                       begin a po break powinien byc end; ale
                       jak tak zrobie to mi wogole nie dziala
                       program}
          czy:=false;
          break;

          i:=i div 10;
      end;
      until i=0;
if czy then  write(i:4);
end;

readkey;
end.

Pozostało 580 znaków

2006-11-27 11:19
0
i_v_a napisał(a)
if (i mod 10=3) or (i mod 10=8) then
{wedlug mnie w tym miejscu powinien byc
begin a po break powinien byc end; ale
jak tak zrobie to mi wogole nie dziala
program}
czy:=false;
break;

Begin i end przydałyby się. Nie powiem.

i_v_a napisał(a)

i:=i div 10;

Nie może działać bo zmieniasz zmienną pętli w jej wnętrzu. Na szczęście masz wcześniej break'a więc nie zdąrza, ale jak dasz potrzebnego begin i end, to dochodzi do tej linii i się pewnie zwiesza...

Pozostało 580 znaków

2006-11-27 12:06
0
program Pierwsze;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
  Spr:Integer;

 function czyPierwsza(Liczba:Integer):boolean;
 var
  i :Integer;
  Pierwsza:boolean;
 begin
 i:=1;
 Pierwsza :=True;
  repeat
    i:=i+1 ;
    if Liczba mod i =0 then Pierwsza:=False;
   until   (i= Liczba-1) or (Not Pierwsza);
 result:=Pierwsza; // w Turbo pascalu byłoby  czyPierwsza:=Pierwsza
 end;

 function Zawiera38(Liczba:Integer):boolean;
var
  S:String;
  i:integer;
 begin
 Result:=False;  // w turbo pascalu Zawiera38 :=False;
 S:=Inttostr(Liczba);  // gdyby to było w turbo pascalu należy skorzystać z funkcji Str
 for i:=1 to length(S) do
 if( S[i] ='3') or( S[i]='8') then
   begin
   Result:=True; // w turbo pascalu Zawiera38 :=True;
   break;
   end;
 end;

begin

Write('1,');
for spr:=2 to 999 do
if( czypierwsza(spr)) and (not Zawiera38(Spr))  then
 Write(Spr,',');

readln;

end.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0