PDA

Zobacz pełną wersję : Operacje na tablicy 2 wymiarowej [TURBO PASCAL]- proźba o pomoc



slawsur
11-12-06, 11:37
Witam
Natrafiłem na to forum w poszukiwaniu rozwiązania mojego problemu, a kakretniej to mam napisać programik ktłry wykona:
1. Sortowanie talblicy 2 wymiarowej

1. Wierszami
2. Kolumnami
3. W kolejności wierszy

2. Suma elementłw tablicy 2 wymiarowej

1. Wszystkich
2. O parzystych numerach wierszy
3. O parzystych numerach kolumny
4. O parzystych numerach wierszy i kolumn
5. Pod głłwną przekątna
6. Pod drugą przekątna
7. Pod obiema przekątnymi

Jako źe jestem początkującym programistą mam z tym spory kłopot
Jeśli ktoś z Was młgłby mi pomłc byłbym bardzo wdzięczny
Z głry dziękuę

Zefir_psv
11-12-06, 20:11
tablica[0..n-1, 0..n-1]

x - kolumna; y - wiersz.

Sortowanie: napisz funkcje sortujaca (np. sort. babelkowe);

for x := 0 to n-1 do
sortuj_kolumne(x);

Reszta:

for x := 0 to n-1 do
for y := 0 to n-1 do
begin
...
end;

Wszystkie instrukcje mieszcza sie w "..."

Parzyste numery wierszy/kolumn -> (x mod 2)=0 lub (y mod 2)=0

Pod glowna przekatna: kolejne elementy tablicy: [x, y+1], ale wtedy zmien granice for dla y na n-2

itd.

Siriah
11-12-06, 22:45
No i drugi... :/
Ludzie! Po co Wy do szkłł chodzicie? Przecieź to proste rzeczy są! Teraz za Ciebie ktoś robotę odwali, a Ty dalej nie będziesz umiał... A co będzie jak ktoś Ci będzie chciał wytłumaczyć operacje na wskaźnikach? czy inne "obiektowe programowanie"?
Tak jak napisałem w podobnym poście (http://forum.di.com.pl/showpost.php?p=68603&postcount=5)

Jurgi
12-12-06, 00:35
Ujmę to łagodniej, choć treściowo się zgodzę.
Swego czasu odrobinę programowałem (dla przyjemności, nie edukacyjnie) i wiem z własnego doświadczenia, źe wszelkie wykłady, tłumaczenia (nie młwiąc juź o źyczliwym wyręczaniu) są w nauce programowania mało istotne. Tu trzeba siąść i samemu w pocie młzgownicy obmyślać rozwiązania. Istotą jest imho wdroźenie umysłu do odmiennego rodzaju myślenia. To jest jak przejście w inny stan świadomości. To coś, jak - dajmy na to - gra w szachy. Moźna się jej nauczyć tylko grając i podejmując wyzwania.
No, chyba źe chodzi o zaliczenie, a nie o nauczenie…

slawsur
12-12-06, 15:47
Zefir_psv wielkie dzięki Sporo się wyjaśniło A co do reszty postłw to trochę inaczej to wygląda z mojej perspektywy Z programowaniem wogłle nie miałem doczynienia a teraz muszę naraz i w b.krłtkim czasie nauczyć się baz danych (SQL), programowania, XHTML, CSS, linuksa i jeszcze kilku innych rzeczy a to wszystko po pracy (zazwyczaj po dwudziestej) Ja nie proszę o gotowca wystarczy to co zrobił Zefir_psv zwłaszcza źe część programu juź mam Więc proszę o troche wyrozumiałości dla takich jak ja

Jurgi
12-12-06, 15:59
Bywa. Przyjmujemy wyjaśnienie. :)

slawsur
15-12-06, 15:58
A oto co stworzyem:

Program sort2;
Uses
Crt;
Const
K = 5;
W = 3;
Type
Tablica = Array[1..W,1..K] of Byte;

Var
T, T1 : Tablica;
i, j, l, temp : Byte;
m : integer;
suma : integer;

Procedure wyswietl(var T : Tablica);
Var
i, j : integer;
Begin
for i := 1 to W do
begin
for j := 1 to K do
write(T[i,j]:3);
writeln;
end;
End; {Wyswietl}

Begin {Main}
Clrscr;
Randomize;
suma := 0;
for i := 1 to W do
for j := 1 to K do
begin
T[i, j] := Random(100);
suma := suma + T[i, j];
end;
Wyswietl(T);
T1 := T;

{sortowanie wierszami}
for l := 1 to W do
for i := 1 to K do
for j := 1 to K-1 do
if T[l, j] > T[l, j+1] then
begin
temp := T[l, j];
T[l, j] := T[l, j+1];
T[l, j+1] := temp;
end;
Writeln('Sortowanie wierszami, naci˜nij dowolny klawisz');
Readkey;
Wyswietl(T);
T := T1;

{sortowanie kolumnami}
for l := 1 to K do
for i := 1 to W do
for j := 1 to W-1 do
if T[j, l] > T[j+1, l] then
begin
temp := T[j, l];
T[j, l] := T[j+1, l];
T[j+1, l] := temp;
end;
Writeln('Sortowanie kolumnami, naci˜nij dowolny klawisz');
Readkey;
Wyswietl(T);
T := T1;

{sortowanie caˆo˜ci}
for m := 1 to W*K do
begin
for l := 1 to W do
for i := 1 to K do
for j := 1 to K-1 do
if T[l, j] > T[l, j+1] then
begin
temp := T[l, j];
T[l, j] := T[l, j+1];
T[l, j+1] := temp;
end;
for l := 1 to W-1 do
if T[l, K] > T[l+1, 1] then
begin
temp := T[l, K];
T[l, K] := T[l+1, 1];
T[l+1, 1] := temp;
end;
end;
Writeln('Sortowanie caˆo˜ci, naci˜nij dowolny klawisz');
Readkey;
Wyswietl(T);
T := T1;

writeln(' ');
writeln('Suma wszystkich komrek = ',suma:6);

suma := 0;
for i := 2 to W do
if not(Odd(i)) then
for j := 1 to K do
suma := suma + T[i, j];
writeln('Suma parzystych wierszy = ',suma:6);

suma := 0;
for i := 2 to K do
if not(Odd(i)) then
for j := 1 to W do
suma := suma + T[j, i];
writeln('Suma parzystych kolumn = ',suma:6);

suma := 0;
for i := 2 to W do
if not(Odd(i)) then
for j := 2 to K do
if not(Odd(j)) then
suma := suma + T[i, j];
writeln('Suma parzystych kolumn i wierszy = ',suma:6);

{suma pod gˆwn przektn}

suma := 0;
if W > K then
begin
temp := K;
for i := K + 1 to W do
for j := 1 to K do
suma := suma + T[i, j];
end
else
temp := W;
for i := 2 to temp do
for j := 1 to i - 1 do
suma := suma + T[i, j];
writeln('Suma pod gˆwn przektn = ', suma:6);


{suma pod drug przektn}

suma := 0;
if W > K then
begin
temp := K;
for i := K + 1 to W do
for j := 1 to K do
suma := suma + T[i, j];
end
else
temp := W;
for i := 2 to temp do
for j := K downto K + 2 - i do
suma := suma + T[i, j];
writeln('Suma pod drug przektn = ', suma:6);


{suma pod dwoma przektnymi}

suma := 0;
if W >= K then
begin
if W > 2 then
begin
for i := (k div 2) + 2 to K do
for j := K - i + 2 to i - 1 do
suma := suma + T[i, j];
if W > K then
for i := K + 1 to W do
for j := 1 to K do
suma := suma + T[i, j];
end;
end
else
begin
if K >= 2 * W - 1 then
begin
for i := 2 to W do
begin
for j := 1 to i - 1 do
suma := suma + T[i, j];
for j := K - i + 2 to K do
suma := suma + T[i, j];
end;
end;
end;

writeln('Suma pod dwoma przektnymi = ', suma:6);

Readkey;
End.

Moe jakie uwagi??

Zefir_psv
15-12-06, 16:50
Nie widze jak to dziala. Jak dziala dla kazdego zestawu danych, to zadnych uwag - to Twoja praca na zaliczenie. Jesli dziala - swietnie.