Cześć. W jaki sposób zamienić wartości tablicy w sposób:pierwsza z ostatnią, druga z przedostatnią, itd?
Robisz for r div 2. Zamieniasz element i-ty z elementem r-i+1 (gdzie r to rozmiar tablicy), musisz dodawać 1 bo elementy są numerowane od 1, jak byś tego nie zrobił to byś zamieniał pierwszy z przedostatnim itd.
Zaraz, zaraz. Jak to ma wyglądać?
for r dif 2? for r:=1 to 8 do r dif 2? czy jak? Bo dalszą część twojego posta rozumiem.
for i:=1 to r div 2 do
(od 1 do połowy / ew mniejszej połowy z tablicy rób). Div to dzielenie bez reszty, nie pamiętam jak to było w pascalu, ale znak dzielenia może również zadziałać
program komorki;
uses crt;
var
A:ARRAY[1..8] of integer;
i:integer;
begin
clrscr;
for i:=1 to 8 do A[i]:=i;
for i:=1 to 8 do write(A[i],',');
readln;
for i:=1 to (8 dif 2) do A[i[:=A[8-i+1];
write(A[i],',');
readln;
end.
Wyskakuje błąd przy 8 dif 2. Chyba program tego nie kuma, gdy są nawiasy, to błąd brzmi, że po 8 powinien być nawias zamknięty. Jak nie ma nawiasów, to jest błąd, że po 8 powinno być do. Dla znaku dzielenia identycznie.
DIV !, gdzie ja napisałem dif ;s
A co do znaku dzielenia, to pisz bez spacji.
Nie mówiąc też o:
A[i[:=
I ostatni write jest poza pętlą.
A ja z uporem maniaka będę forsował swoje podejście:
poczatek:=1;
koniec:=n;
while poczatek
begin
pom:=A[poczatek];
A[poczatek]:=A[koniec];
A[koniec]:=pom;
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
Podobnie jak w wątku http://forum.dobreprogramy.pl/free-pascal-wpisanie-liczb-tablicy-t518901.html zastosowałem tutaj ten sam mechanizm (a kod zrobił się krótszy).
Nie wiem, czy ja was nie rozumiem, czy wy mnie. Pablo_Wawa- zastosowałem się do twojego pomysłu:
program komorki;
uses crt;
var
A:ARRAY[1..8] of integer;
i,poczatek,koniec,pom:integer;
begin
clrscr;
for i:=1 to 8 do A[i]:=i;
for i:=1 to 8 do write(A[i],',');
readln;
poczatek:=1;
koniec:=8;
while poczatek
begin
pom:=A[poczatek];
A[poczatek]:=A[koniec];
A[koniec]:=pom;
write(A[poczatek],',',A[koniec],',');
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
I wyświetla mi się tak:
1,2,3,4,5,6,7,8
8,1,7,2,6,3,5,4
A chodzi mi o takie coś:
1,2,3,4,5,6,7,8
8,7,6,5,4,3,2,1- pierwsza z ostatnią, druga z przedostatnią, itd.
Ehh, wyświetlasz w złej kolejności. Kto ci powiedział by dać tam writeln ?
Wyświetlając zamieniane elementy, zawsze będziesz wyświetlał ostatni, pierwszy, przedostatni, drugi itd
Wyświetlaj poza pętlą zamieniającą i będzie ok.
Zaraz to zrobię, tylko dla porządku- w moim kodzie nie widzę żadnego writeln.
Ach, przyzwyczajenie. Chodzi o write.
■■■■■■■, zaraz mi głowa pęknie. Jak dać write poza pętlą? Przecież tak, to tylko mi się raz wyświetli. Dać to do nowej pętli? I co ma być w tym write?
Myślę, że rozumiem. Najpierw przyporządkowuję wartościom ich indeksy, a potem to tak przez mgłę, bo niedawno poznałem zmienną tymczasową. Najpierw przyporządkowuję elementowi i element ostatni, zwiększam indeks początkowy o 1 w górę, końcowy o 1 w dół. Teraz jak to wypisać? Gdybym wszystko wiedział co i jak, to by problemu nie było.
Coś zmieniłem w kodzie, ale dalej źle pokazuje:
1,2,3,4,5,6,7,8
8,7,6,5,1,2,3,4
Do połowy tablicy działa dobrze, wtedy się kończy, bo poczatek zrównał się z koniec.
program komorki;
uses crt;
var
A:ARRAY[1..8] of integer;
i,poczatek,koniec,pom:integer;
begin
clrscr;
for i:=1 to 8 do A[i]:=i;
for i:=1 to 8 do write(A[i],',');
readln;
poczatek:=1;
koniec:=8;
while poczatek
begin
pom:=A[poczatek];
A[poczatek]:=A[koniec];
A[koniec]:=pom;
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
poczatek:=1;
koniec:=8;
while poczatek
begin
write(A[poczatek],',');
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
poczatek:=1;
koniec:=8;
while poczatek
begin
write(A[koniec],',');
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
readln;
end.
Ktoś mi doradzi? Ok, jakoś już to zrozumiałem, ale będę musiał teraz dobrze to przestudiować, by do końca zrozumieć.
program komorki;
uses crt;
var
A:ARRAY[1..8] of integer;
i,poczatek,koniec,pom:integer;
begin
clrscr;
for i:=1 to 8 do A[i]:=i;
for i:=1 to 8 do write(A[i],',');
readln;
poczatek:=1;
koniec:=8;
while poczatek
begin
pom:=A[poczatek];
A[poczatek]:=A[koniec];
A[koniec]:=pom;
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
poczatek:=1;
koniec:=8;
while poczatek
begin
write(A[poczatek],',');
poczatek:=poczatek+1;
end;
readln;
end.
A czemu tak to komplikujesz? Używaj normalnego kodu wyświetlającego zawartość tablicy, poniżej całość kodu:
program komorki;
uses crt;
var
A:ARRAY[1..8] of integer;
i,poczatek,koniec,pom:integer;
begin
clrscr;
for i:=1 to 8 do A[i]:=i;
for i:=1 to 8 do write(A[i],',');
readln;
poczatek:=1;
koniec:=8;
while poczatek
begin
pom:=A[poczatek];
A[poczatek]:=A[koniec];
A[koniec]:=pom;
poczatek:=poczatek+1;
koniec:=koniec-1;
end;
for i:=1 to 8 do write(A[i],',');
readln;
end.
A ja mam poważne wątpliwości.
Po początkowym wypełnieniu tablicy, wypisujesz jej zawartość.
Odwaracasz kolejność wartości w tablicy i… nie wiesz jak wypisać jej zawartość???
Proponuję wziąć kartkę i ołówek i ręcznie wykonywać program zapisując kolejne wartości zmiennych.
Dzięki. Nie byłem pewny, czy dla elementu i w końcu jest przyporządkowywana wartość początkowa, czy końcowa.