Zapamietywanie zmian w tablicy

0

Witam,
ma taki problem. Otoż posiadam dwie tablice:

var
liczby: array[1..100] of integer;
napisy: array[1..100] of string;

Mój problem zobrazuje na trzech pierwszych indeksach tablic.

liczby[1] := 10;
liczby[2] := 4;
liczby[3] := 13;

napisy[1] := 'jakiś tekst 1 - ';
napisy[2] := 'jakiś tekst 2 - ';
napisy[3] := 'jakis tekst 3 - ';

i teraz wstawiam to do memo i otrzymuje coś takiego:

jakiś tekst 1 - 10
jakiś tekst 2 - 4
jakiś tekst 3 - 13

czyli indeksy tablica są tak jakby przyporzadowane sobie nawzajem 1 z liczby jest przyporzadkowany pod 1 z napisy itd.

Problem polega na tym ze tablica numery jest sortowana. czyli po posortowaniu tablica numery bedzie wygladać nastepujaco:

numery[1] := 4;
numery[2] := 10;
numery[3] := 13;

a wiec po wstawieniu do memo bedzie to wygladać tak:

jakiś tekst 1 - 4
jakis tekst 2 - 10
jakiś tkest 3 - 13

ALE JA YTAK NIE CHCE!! Ponieważ ja chce aby indeksy tablic nadal były sobie kolejno wzajemnie przyporzadkowane. Czyli chce aby zawartośc memo wygladałą tak:

jakiś tekst 2 - 4
jakiś tekst 1 - 10
jakiś tekst 3 - 13

Czyli zmiany indekstów z tablicy numery zostały przenbiestione do tablicy napisy. Chodzi mi o to aby zapamietac jakoś przebieg zmian w tablicy numery i potem go przeniesc do tablicy napisys aby te indeksty byly przyporzadkowane.

Mam nadzieje ze udało mi sie wytłumaczyc moj problem i ze otrzymam odpowiedz.
pozdrawiam.

0

zrób sobie rekord i pozniej tablice rekordow, bedzie prosciej

0

Tak tylko ze zważajac na poziom mojego zaawansowania.... i tak nie wiem jak to zrobić.

0

W czasie sortowania tablicy numery również zmieniaj pozycje w tablicy napisy - w ten sam sposób.

0

Tak tylko ze zważajac na poziom mojego zaawansowania.... i tak nie wiem jak to zrobić.

zrob tak

Type
TRekord = record
tekst:string;
liczba:integer;
end;

a potem tablica:array of TRekord;

pote sortujesz wg tablica[index].liczba a tekst masz pot tablica[index].tekst

0

Niestety nie działa. mam tak:

type
 TRecord = record
  poz1: integer;
  tekst: string;
 end;
var
 j, i, tmp, q: integer; 
 tablica: array[1..10] of Trecord;
begin
 j := 1;
 q := 0;

 tablica[1].tekst := 'Indeks 1 powinien miec liczbe 10 a ma liczbe: ';
 tablica[2].tekst := 'Indeks 2 powinien miec liczbe 6 a ma liczbe: ';
 tablica[3].tekst := 'Indeks 3 powinien miec liczbe 17 a ma liczbe: ';
 tablica[4].tekst := 'Indeks 4 powinien miec liczbe 498 a ma liczbe: ';
 tablica[5].tekst := 'Indeks 5 powinien miec liczbe 24 a ma liczbe: ';
 tablica[6].tekst := 'Indeks 6 powinien miec liczbe 31 a ma liczbe: ';
 tablica[7].tekst := 'Indeks 7 powinien miec liczbe 9 a ma liczbe: ';
 tablica[8].tekst := 'Indeks 8 powinien miec liczbe 1076 a ma liczbe: ';
 tablica[9].tekst := 'Indeks 9 powinien miec liczbe 210 a ma liczbe: ';
 tablica[10].tekst := 'Indeks 10 powinien miec liczbe 120 a ma liczbe: ';

 tablica[1].poz1 := 10;
 tablica[2].poz1 := 6;
 tablica[3].poz1 := 17;
 tablica[4].poz1 := 498;
 tablica[5].poz1 := 24;
 tablica[6].poz1 := 31;
 tablica[7].poz1 := 9;
 tablica[8].poz1 := 1076;
 tablica[9].poz1 := 210;
 tablica[10].poz1 := 120;

 {sortowanie}
   while j <= High(tablica) - 1 do
   begin
     if tablica[j].poz1 > tablica[j + 1].poz1 then
      begin
        tmp := tablica[j].poz1;
        tablica[j].poz1 := tablica[j + 1].poz1;
        tablica[j + 1].poz1 := tmp;
        inc(q);
         if j > 1 then
          dec(j, 2);
       end
     else if q > 0 then
       begin
         j := j + q - 1;
         q := 0;
       end;
      inc(j);
    end;

   for i := 1 to 10 do
     Memo1.Lines.Add(tablica[i].tekst + Inttostr(tablica[i].poz1));

i po czyms takim zawartosc memo wyglada tak:

Indeks 1 powinien miec liczbe 10 a ma liczbe: 6
Indeks 2 powinien miec liczbe 6 a ma liczbe: 9
Indeks 3 powinien miec liczbe 17 a ma liczbe: 10
Indeks 4 powinien miec liczbe 498 a ma liczbe: 17
Indeks 5 powinien miec liczbe 24 a ma liczbe: 24
Indeks 6 powinien miec liczbe 31 a ma liczbe: 31
Indeks 7 powinien miec liczbe 9 a ma liczbe: 120
Indeks 8 powinien miec liczbe 1076 a ma liczbe: 210
Indeks 9 powinien miec liczbe 210 a ma liczbe: 498
Indeks 10 powinien miec liczbe 120 a ma liczbe: 1076

wiec tablica.poz1 sie posrtowało ale tekst nie. Co robie źle?

0

Zamieniasz w czasie sortowania same liczby - więc sortuje Ci same liczny...
Jeśli już tą drogą - to zamieniaj całe komórki tablicy - czyli:
tablica[i] := tablica[i+1]... i tak dalej

0

tablica[i] := tablica[i+1]... i tak dalej

Nie działa otzrzymuje bład:

[Error] Unit3.pas(1346): Incompatible types

0

Pewno nie zmieniłeś typu zmiennej tmp na TRecord.
ma byc:

var //...
      tmp:TRecord;
//
// reszta
//
{sortowanie}
   while j <= High(tablica) - 1 do
   begin
     if tablica[j].poz1 > tablica[j + 1].poz1 then
      begin
        tmp := tablica[j];
        tablica[j] := tablica[j + 1];
        tablica[j + 1] := tmp;
        inc(q);
         if j > 1 then
          dec(j, 2);
       end
     else if q > 0 then
       begin
         j := j + q - 1;
         q := 0;
       end;
      inc(j);
    end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1