Pascal program liczący działa ale wykonuję źle obliczenia

Chodzi o to, że program ma 5 razy wylosować a[1] oraz b[1] i za każdym razem gdy np a[1] jest większe dodać do a[2] jeden punkt i na końcu wyświetlić wynik. Niby wszystko cacy ale program liczy nawet do 10 razy ;/ i czasem dostaję wynik np 0:10 gdzie maksymalny powinien być 0:5 co wyznacza wartość C. Pomocy

W ogóle dostaje tylko trzy te same wyniki albo 5:5 albo 0:10 albo 0:5 (5:0, 10:0).

Program Licz;

uses crt;


var

a:array[1..2] of integer;

b:array[1..2] of integer;

c:integer;


begin

clrscr;

a[2]:=0;

b[2]:=0;

repeat;

randomize;

c:=c+1;

a[1]:=random(400)+450;

b[1]:=random(400)+400;



if a[1] > b[1] then

a[2]:=a[2]+1

else

if b[1] > a[1] then

b[2]:=b[2]+1

else

if b[1] = a[1] then

a[2]:=a[2]+1;

b[2]:=b[2]+1;


until c=5 ;



If c=5 then

begin


Writeln(a[2], ':', b[2]);

readkey;

end;

end.

Wprawdzie nie piszę w Pascalu, więc nie wiem czy to o to chodzi, ale rzuca się w oczy brak inicjalizacji zmiennej c.

No to za wiele nie pomogło mi. Zwykły offtop zrobiłes

To nie był OT. Zmienną c musisz zainicjalizować. Poza tym wywołanie funkcji randomize przenieś na sam początek kodu (np. zaraz za begin). Po tym jak to zrobisz poczytaj jak się używa instrukcji if else i poczytaj co to są zakresy (begin end;), bo tutaj głównie masz bałagan. Zacznij też stosować wcięcia w kodzie.

W szkole wykładowca tłumaczył to 100razy więc nie potrzebuję czytać a bałaganu tu nie widzę w C++ stosuję else i nie mam żadnych problemów. Zainicjowałem zmienną c i nie zmieniło to nic.

Przeniosłem randomize i to już coś dało wyniki są poprawne z tym, że w skali 2:1 ;o;o

Naprawiłem to uzywając “div”. Więc ogólnie dzięki za pomoc.

A ja Ci mówię, że nie wiesz jak się używa if else. Brakuje jednego zakresu, a gdzie to Ci nie powiem. Poszukaj sam :slight_smile: Zmienną c zainicjalizowałeś wartością 0?

Tak

Ale jest inny problem. b[2] jest za każdym razem większe bądź równe a[2] co jest dziwne jeżeli usatwie np a[2] jako 500 a b[2] jako 300 to program będzie widział obie sumy jako równe ;| kod wygląda teraz tak

Program Licz;

    uses crt;


    var

    a:array[1..3] of integer;

    b:array[1..2] of integer;

    c:integer;


    begin

    randomize;

    clrscr;

    a[2]:=0;

    b[2]:=0;

   c:=0;


    repeat;

   c:=c+1;

    a[1]:=random(400)+460;

    b[1]:=random(400)+380;



    if a[1] > b[1] then

    a[2]:=a[2]+1

    else

    if b[1] > a[1] then

    b[2]:=b[2]+1

    else

    if b[1] = a[1] then

    a[2]:=a[2]+1;

    b[2]:=b[2]+1;


    until c=5;



    If c=5 then

    begin


    a[2]:=a[2] div 2;

    b[2]:=b[2] div 2;

    Writeln(a[2], ':', b[2]);

    readkey;

    end;

    end.

EDIT://////

TE “C” CHYBA I TAK TRZEBA WYWALIĆ BO MI CHODZI O TO ŻEBY ANI A[2] ANI B[2] NIE PRZEKROCZYŁO WARTOŚCI 5 W OSTATECZNYM WYNIKU

Nie czytasz co piszę. Spójrz na tą poniższą instrukcję i zastanów się w jaki sposób należy tutaj użyć zakresu (begin end;)

if b[1] = a[1] then

    a[2]:=a[2]+1;

    b[2]:=b[2]+1;

Jak to poprawisz to będzie dobrze. Ten cały div jest niepotrzebny.

Ok już mam. Ale efekt końcowy mam inny niż załozylem tzn dostaje np

2:3, 3:2, 5:0, 0:5

A chodzi mi o to aby ani a[2] ani b[2] nie przekroczyło 5 (i nie przekracza ale …) i o to by ta wartość C była losowa tzn aby móc otrzymac np 1:0, 1:2

Dodaj sobie deklarację jeszcze jednej zmiennej. Nazwij ją np. max. Niech będzie typu integer tak jak c. W miejscu gdzie inicjalizujesz c dodaj inicjalizację zmiennej max max:=random(5)+1;. W miejscu gdzie jest warunek kończący pętlę zamień c=5; na c=max;. Zmień if c=5 then na if c<=5 then.

Jak to zrobisz to poczytaj o tym jak stosować wcięcia i zastanów się, czy ten program da się napisać przy użyciu mniejszej ilości linijek kodu.

Wielkie dzięki za pomoc. Działa perfect po zrobieniu paru przykładów. Pewnie się da prościej, ale jestem nie doświadczonym jeszcze programistą (w Pascalu).

Oczywiście że można uprościć.

Program Licz;


var a,b:array[1..2] of integer;

c:integer;


begin

  randomize;

  a[2]:=0;

  b[2]:=0;

  repeat

     c:=c+1;

     a[1]:=random(400)+450;

     b[1]:=random(400)+400;

     if a[1] >= b[1] then a[2]:=a[2];

     if b[1] >= a[1] then b[2]:=b[2];

  until c=5 ;

  writeln(a[2], ':', b[2]);

  readkey;

end.


//lib jeszcze prościej z tym samym wynikiem:


Program Licz;

begin

  randomize;

  writeln(Random(6),':',Random(6));

  readkey;

end;