logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[FreePascal] FreePascal: gotoxy nie działa poprawnie przy wyświetlaniu tablicy mnożenia

koszalek_opalek 25 Mar 2009 02:42 1080 2
REKLAMA
  • #1 6329139
    koszalek_opalek
    Poziom 10  
    Posty: 43
    Ocena: 1
    Zrobiłem tablicę z obliczeniami. Wg mnie powinno działać prawidłowo, nie działa jednak:
      TABL. MNOZ.
      ---------------------------------
     |   1*  1 =  1   |   2*  1 =  2   |   3*  1 =  3   |   4*  1 =  4   |   5*  1 =  5   |
     |   1*  2 =  2   |   2*  2 =  4   |   3*  2 =  6   |   4*  2 =  8   |   5*  2 = 10   |
     |   1*  3 =  3   |   2*  3 =  6   |   3*  3 =  9   |   4*  3 = 12   |   5*  3 = 15   |
     |   1*  4 =  4   |   2*  4 =  8   |   3*  4 = 12   |   4*  4 = 16   |   5*  4 = 20   |
     |   1*  5 =  5   |   2*  5 = 10   |   3*  5 = 15   |   4*  5 = 20   |   5*  5 = 25   |
     |   1*  6 =  6   |   2*  6 = 12   |   3*  6 = 18   |   4*  6 = 24   |   5*  6 = 30   |
     |   1*  7 =  7   |   2*  7 = 14   |   3*  7 = 21   |   4*  7 = 28   |   5*  7 = 35   |
     |   1*  8 =  8   |   2*  8 = 16   |   3*  8 = 24   |   4*  8 = 32   |   5*  8 = 40   |
     |   1*  9 =  9   |   2*  9 = 18   |   3*  9 = 27   |   4*  9 = 36   |   5*  9 = 45   |
     |   1* 10 = 10   |   2* 10 = 20   |   3* 10 = 30   |   4* 10 = 40   |   5* 10 = 50   |
      ---------------------------------
     |   6*  1 =  6   |  10*  1 = 10   |
     |   6*  2 = 12   |  10*  2 = 20   |
     |   6*  3 = 18   |  10*  3 = 30   |
     |   6*  4 = 24   |  10*  4 = 40   |
     |   6*  5 = 30   |  10*  5 = 50   |
     |   6*  6 = 36   |  10*  6 = 60   |
     |   6*  7 = 42   |  10*  7 = 70   |
     |   6*  8 = 48   |  10*  8 = 80   |
     |   6*  9 = 54   |  10*  9 = 90   |
     |   6* 10 = 60   |  10* 10 =100   |
      ---------------------------------
     koniec programu
    
    D:\>

    Powinno sie niżej rozwinąć do setki w prawo, by była kompletna tablica. Obrys sie rozszerzy gdy będzie reszta liczb. Od kilku godzin tworzę ten kod w ramach nauki ale nie potrafię tego przegryźć.

    Kod:
    USES CRT;
    
    VAR
    a,b,c,c2,d,o,x:longint;
    prawo:string;
    
    CONST
    odsteppion='|';
    odsteppoz='-';
    
    label miejsce1,PETLA,PETLA2;
    
    BEGIN
    clrscr;
    a:=0; {pierwsza liczba}
    b:=0; {druga liczba}
    c:=2; {odleglosc od lewej}
    d:=4; {odleglosc od góry}
    
    gotoxy(c+1,d-2);
    writeln('TABL. MNOZ.');
    {/////////////////////}
    PETLA:  {obrys poziomy; petla, ponieważ wzialem wartosc c z koncówki programu}
    IF X=11 THEN
    begin
    gotoxy(2,3);
    		o:=0;
    		write(' ');
    		repeat
    		o:=o+1;
    		write(odsteppoz);
    		until o=c+14;
    gotoxy(2,14);
    		o:=0;
    		write(' ');
    		repeat
    		o:=o+1;
    		write(odsteppoz);
    		until o=c+14;
    gotoxy(2,25);
    		o:=0;
    		write(' ');
    		repeat
    		o:=o+1;
    		write(odsteppoz);
    		until o=c+14;
    GOTO PETLA2; {powrót do koncówki programu}
    end;
    {/////////////////////}
    miejsce1:
    a:=a+1;
    REPEAT
    if b=10 then b:=0;
    b:=b+1;
    gotoxy(c,d);
    write(odsteppion);
    writeln(a:4,'*',b:3,' =',a*b:3,prawo);
    
    d:=d+1; {przejscie do nowej linii}
    UNTIL b=10;
    
    if a<5 then
    		begin
    				if (a>=1) and (a<5) then
    						begin
    						c:=c+17; {dodaj 17 do odleglosci od lewej}
    						d:=4; {przyjecie odleglosci 4 od góry, dla kazdej nowej
    								osobnej kolumny}
    						end;
    				if a=4 then prawo:='   |';
    		end;
    {ODTĄD JEST COŚ ŹLE:}
    if a>4 then
    		begin
    		d:=15;
    		c:=2;
    				if a>5 then
    						begin
    						c:=c+17;
    						end;
    				if a=9 then prawo:='   |';
    		end;
    
    if a<10 then goto miejsce1;
    {DO TĄD. Miał ten kawałek kodu rozpisać drugą, dolną połowę tablicy}
    
    {////////////////////////}
    X:=11;
    GOTO PETLA; {po wykonaniu tablicy skok w górę,
    można obrysować też z tego miejsca ale dla ćwiczeń tam obrysowałem}
    PETLA2: 
    gotoxy(2,26);
    writeln('koniec programu');
    {////////////////////////}
    END.


    P.S.
    {ODTĄD JEST COŚ ŹLE:}
    if a>4 then
    		begin
    		c:=2;
    		d:=15;
    				if (a>5) and (a<10) then
    						begin
    						c:=c+17;
    						end;
    				if a=9 then prawo:='   |';
    		end;
    
    if a<10 then goto miejsce1;
    {DO TĄD. Miał ten kawałek kodu rozpisać drugą, dolną połowę tablicy}


    Usunąłem d:=15; i jest teraz tak:
     TABL. MNOZ.
     ----------------
    |   1*  1 =  1   |   2*  1 =  2   |   3*  1 =  3   |   4*  1 =  4   |   5*  1 =  5   |
    |   1*  2 =  2   |   2*  2 =  4   |   3*  2 =  6   |   4*  2 =  8   |   5*  2 = 10   |
    |   1*  3 =  3   |   2*  3 =  6   |   3*  3 =  9   |   4*  3 = 12   |   5*  3 = 15   |
    |   1*  4 =  4   |   2*  4 =  8   |   3*  4 = 12   |   4*  4 = 16   |   5*  4 = 20   |
    |   1*  5 =  5   |   2*  5 = 10   |   3*  5 = 15   |   4*  5 = 20   |   5*  5 = 25   |
    |   1*  6 =  6   |   2*  6 = 12   |   3*  6 = 18   |   4*  6 = 24   |   5*  6 = 30   |
    |   1*  7 =  7   |   2*  7 = 14   |   3*  7 = 21   |   4*  7 = 28   |   5*  7 = 35   |
    |   1*  8 =  8   |   2*  8 = 16   |   3*  8 = 24   |   4*  8 = 32   |   5*  8 = 40   |
    |   1*  9 =  9   |   2*  9 = 18   |   3*  9 = 27   |   4*  9 = 36   |   5*  9 = 45   |
    |   1* 10 = 10   |   2* 10 = 20   |   3* 10 = 30   |   4* 10 = 40   |   5* 10 = 50   |
     ----------------|
    |   6*  2 = 12   |
    |   6*  3 = 18   |
    |   6*  4 = 24   |
    |   6*  5 = 30   |
    |   6*  6 = 36   |
    |   6*  7 = 42   |
    |   6*  8 = 48   |
    |   6*  9 = 54   |
    |   6* 10 = 60   |
    				 |   7*  1 =  7   |
     ----------------|   7*  2 = 14   |
    				 |   7*  3 = 21   |										   koniec programu
    				 |   7*  4 = 28   |
    :\>			  |   7*  5 = 35   |
    				 |   7*  6 = 42   |
    				 |   7*  7 = 49   |
    				 |   7*  8 = 56   |
    				 |   7*  9 = 63   |
    				 |   7* 10 = 70   |
    				 |   8*  1 =  8   |
    				 |   8*  2 = 16   |
    				 |   8*  3 = 24   |
    				 |   8*  4 = 32   |
    				 |   8*  5 = 40   |
    				 |   8*  6 = 48   |
    				 |   8*  7 = 56   |
    				 |   8*  8 = 64   |
    				 |   8*  9 = 72   |
    				 |   8* 10 = 80   |
    				 |   9*  1 =  9   |
    				 |   9*  2 = 18   |
    				 |   9*  3 = 27   |
    				 |   9*  4 = 36   |
    				 |   9*  5 = 45   |
    				 |   9*  6 = 54   |
    				 |   9*  7 = 63   |
    				 |   9*  8 = 72   |
    				 |   9*  9 = 81   |
    				 |   9* 10 = 90   |
    				 |  10*  1 = 10   |
    				 |  10*  2 = 20   |
    				 |  10*  3 = 30   |
    				 |  10*  4 = 40   |
    				 |  10*  5 = 50   |
    				 |  10*  6 = 60   |
    				 |  10*  7 = 70   |
    				 |  10*  8 = 80   |
    				 |  10*  9 = 90   |
    				 |  10* 10 =100   |
  • REKLAMA
  • #2 6329490
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 42
    Popatrz na przedstawiony kod i na jego podstawie możesz zmieniać swój.
    
    uses crt;
    var i,j,w,xp,x0,y0:integer;
    begin
     clrscr;
     x0:=1;y0:=6;xp:=8;
     gotoxy(30,2);
     write('tabliczka mnozenia');
     gotoxy(33,3);
     write('0 <= a <inf');
     gotoxy(34,4);
     write('0*a=0;  1*a=a ');
     gotoxy(5,22);
     write('press any key');
     for i:=2 to 10 do
     for j:=1 to 10 do
      begin
      gotoxy(x0,y0);
      w:=i*j;
      write(i,'*',j,'=',w);
      y0:=y0+1;
      if j mod 10=0 then begin
      x0:=x0+xp;y0:=6;end;
    
      end;
     readkey;
     end.
    
  • #3 6341930
    koszalek_opalek
    Poziom 10  
    Posty: 43
    Ocena: 1
    Dzięki, wezmę sie za to jeszcze raz ;)
REKLAMA