Iteracja nie działa.

0

Witam
Oto moje zadanie:
http://www.mzz.yoyo.pl/ad-wdi-k1.pdf

Zrobiłem taki program który nie chce jednak działać:

program untitled;

var
  n, b, i, d, c, e, f : integer;
begin
  c := 0;
  d := 0;
  f := 0;
  e := -1;
  read(n);
  for i := 2 to 8 do
  begin
    b := n;
    while b >= 0 do
    begin
      if c >= e then
        f := f + 1;
    end;

    b := b div i;
    e := c;
    c := b mod i;
  end;

  if f = 4 then
  begin
    writeln('TAK');
  end;

  if i = 8 then
    writeln('nie');
  //koniec:
  readln;
  read(e);
end.

Czy w Pascal jest takie coś jak break? gdyż zoptymaliowałoby to mój program.
Dziękuje za odpowiedzi

0
  1. Iteracja to po pierwsze, poprawiłem temat.
  2. Formatuj kod i wstawiaj go w odpowiednie znaczniki. Tym razem poprawiłem, ale następnym wątek idzie do Kosza.
  3. Tak, w Pascalu istnieje instrukcja Break;: Break - używaj google na przyszłość.
  4. W treść zadania nie wnikałem, bo nie wiem czego oczekujsz, ponieważ gotowców nie podajemy.
  5. Dzięki formatowaniu i ostrzeżeniu od Delphi wiadomo już, że używasz zmiennej i poza pętlą, a wartości przypisanej do zmiennej e w ogóle nie używasz.
0
olesio napisał(a):
  1. Iteracja to po pierwsze, poprawiłem temat.
  2. Formatuj kod i wstawiaj go w odpowiednie znaczniki. Tym razem poprawiłem, ale następnym wątek idzie do Kosza.
  3. Tak, w Pascalu istnieje procedura Break;: Break - używaj google na przyszłość.
  4. W treść zadania nie wnikałem, bo nie wiem czego oczekujsz, ponieważ gotowców nie podajemy.
  5. Dzięki formatowaniu i ostrzeżeniu od Delphi wiadomo już, że używasz zmiennej i poza pętlą, a wartości przypisanej do zmiennej e w ogóle nie używasz.

Dzięki Poprawiłem swój program:

 program Untitled;
var
n, b, i, c,e, f, d, h: integer;


begin

d:=0;


read(n);

     for i:=2 to 8 do
     begin
     b:=n;
     f:=0;
     h:=0;
     c:=b mod i + 1;
          while b >= 1 do
          begin



          e:=c;
          c:= b mod i;
          //write(c);
          b:= b div i;

              if e>=c  then //czesc zliczajaca
             begin
              f:=f+1;
              //write(f);
              end
              else
                 if f > h then
                 begin
                 h:=f+1;
                 f:=0;
                 end
                 else
                 f:=0;


           end;
       writeln();
       if h=4 then
       begin
       writeln('TAK');
       d:=1;
       break;
       end;

     end;

if d=0 then
writeln ('nie');
//koniec:

readln();
read(e);
end

Dalej jednak czasami ma drobne pomylyki. Sprawdziłem i dobrze zameinia jakąkolwiek liczbe na systemy, bład tkwi gdzięś przy zliczaniu liczb zgodnie z treścia zadania.

0
Baraq napisał(a)

Zrobiłem taki program który nie chce jednak działać:

Baraq napisał(a)

Dalej jednak czasami ma drobne pomylyki.

Nie ma czegoś takiego jak program nie działa - algorytm albo realizuje założenia projektanta, albo nie i nie ma innych możliwości; Jeśli na 1000 prób raz zawiedzie, znaczy to że jest walnięty i gdzieś ma bugi;

Baraq napisał(a)

Sprawdziłem i dobrze zameinia jakąkolwiek liczbe na systemy, bład tkwi gdzięś przy zliczaniu liczb zgodnie z treścia zadania.

Polecam zaprzyjaźnić się z debugger'em - pozwoli Ci to odnaleźć bugi w znacznie szybszym czasie, niż oczekiwanie na odpowiedzi na forum;

olesio napisał(a)
  1. W treść zadania nie wnikałem, bo nie wiem czego oczekujsz, ponieważ gotowców nie podajemy.

Zapomniałeś o @0DFh...

Treść zadania napisał(a)

Uwagi:

  • oceniane beda: czytelnosc, poprawnosc, efektywnosc programu.

Popracuj także nad czytelnością kodu i nazewnictwem zmiennych: n, b, i, c, e, f, d, h: integer; - niezłe WTF...

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