[PASCAL] tablice dwu wymiarowe tabliczka mnożenia

Program ma wygladac tak: tablica musi byc o wymiarach (10 x 10), po uruchomieniu programu ma zostać wyświetlona tabliczka mnożenia.

uses crt;


type

tab2=array[1..10,1..10] of byte;




procedure info;

begin

     clrscr;

     writeln('Program generuje i wyswietla tabilce dwuwymiarowa.');

     writeln;

end;


procedure generuj(var tab2x2:tab2);


var

   i,j:byte;


begin


     randomize;

     for j:=1 to 10 do

     begin


          for i:=1 to 10 do

          begin

               tab2x2[i,j]:=random(10);

          end;

     end;

end;


procedure drukuj(tab2x2:tab2);


var

   i,j:byte;


begin

     for j:=1 to 10 do

     begin

         for i:=1 to 10 do

         begin

              write(tab2x2[i,j],' ');

         end;

         writeln;

     end;

end;


var

   tab2x2:tab2;




begin

     info;

     generuj(tab2x2);

     drukuj(tab2x2);

     readln;

end.

tu mam programik na generowanie losowej tablicy 10x10. teraz na podst tego jak zrobić żeby zrobił tabliczkę mnożenia do dziesięciu. proszę o pomoc bo w sumie nie wiem jak to zrobić a nie chodzi tu o użycie 100 zmiennych i wpisanie ręcznie bo to się mija z celem

Na moje to powinno wyglądać jakoś tak:

uses crt;

var i,j:integer;

 tab:array[1..10,1..10] of integer;


begin

clrscr;

for i:=1 to 10 do

  begin

     for j:=1 to 10 do 

       begin

          tab[i,j]:=i*j;

           write(tab[i,j]:4);

       end;

    writeln;

  end;

readln;

end.

nie mam możliwości kompilacji programu więc mogą być jakieś błędy.

uses crt;


var

i,j:integer;


type

tab=array[1..10,1..10] of integer;


begin


for i:=1 to 10 do

  begin

     for j:=1 to 10 do

       begin

          tab[i,j]:=i*j;

          write(tab[i,j]:3);

       end;

    writeln;

  end;

readln;

end.

uporządkowałem troszkę ale nie trybi w tym miejscu

tab[i,j]:=i*j;

pisze ze oczekiwany “(”

Bo „tab” to zmienna, a nie typ, jak zadeklarowano.

const

	N = 10;

var

	a: array[1..N, 1..N] of byte;

	i, j: 1..N;


begin

	for i := 1 to N do

	begin

		for j := 1 to N do

		begin

			a[i, j] := i * j;

			write(a[i, j]:4);

		end;

		writeln;

	end;

	readln;

end.

super działa, dzięki za pomoc

Tylko po kiego tu tablica?

var y,x:Integer;

Alex: bo wypełniana miała być tablica zapewne, a wypisywanie na ekran to tylko podgląd tego, co jest w tablicy.

Skoro tak to w twoim przykładzie, trzeba powtórzyć pętle. Bo w tej samej pętli wypełniasz i wypisujesz tablicę - kompletny bezsens :stuck_out_tongue_winking_eye:

Nikt Ci nie mówił o tym że użycie kolejnej pętli to zwiększenie ilości obliczeń przez co zwiększenie czasu działania programu? Ten program jest oczywiście banalny ale na takich programach można się nauczyć ograniczania ilości zbędnych iteracji. Miała być użyta tablica i została, po co kolejną pętle która zrobi to samo a tylko zwiększy ilość obliczeń.

Tu nie została użyta tablica, mam na myśli jako tablica. Tu został użyty element tablicy (owszem inny element na każdym kroku) jako zmienna tymczasowa na dodatek zupełnie zbędna w tym kontekście. Użycie dodatkowej pętli mniej spowalnia program niż użycie tablicy 10x10 jako jednej tymczasowej zmiennej double.

Polska język, trudna język

PS. Przepraszam, ale nie mogłem się powstrzymać :wink:

Tablica może zajmować pamięć, ale w zasadzie wpływu na czas wykonywania się programu nie ma.

Oczywiście, absolutnie niema wpływu. Tylko mnożenie numeru wiersza przez ilość kolumn w tablice; dodanie do tego numeru kolumny; pomnożenie wyniku przez 8; dodanie adresu początku tablicy. To wszystko przy przypisaniu, a potem jeszcze raz przy pobieraniu wartości. Ale co to za wpływ, można tym wszystkim się nie przyjmować.

Hm. Najpierw przekonujesz nas, że można wypełnić tablicę wartościami, bez używania tablicy. Potem sugerujesz, że bardziej opłaca się rozbijać na dwie pętle (testowałeś?, bo to nawet na logikę jest nadkładaniem instrukcji).

To, że tablica leży w pamięci, nie ma znaczenia dla czasu wykonywania się, a odniosłem wrażenie, że porównałeś zajętość pamięci do czasu wykonywania się.

Jak na razie, to skaczesz od jednego tematu do drugiego, a nic konkretnego z tego nie wynika. Ani dla nas, ani dla autora tematu.