2017-01-18 6 views
1
program R3cord; 
    type rekord = record 
    end; 

    var i,d,j,c,x,y,a : integer; 

    mas : array[1..5] of rekord; 
begin 
    x := 4; 
    y := 5; 

    for i := 1 to y do 
    Read(mas[i]); 

    for i := 1 to x do 
    begin 
    d := i; 

    for j := i + 1 to y do 
     if mas[j] > mas[d] then 
     d := j; 

    c := mas[i]; mas[i] := mas[d]; mas[d] := c; 
    end; 

    for i := 1 to 5 do 
    Write(mas[i],' '); 
end. 

У меня здесь проблемы, так как вы можете видеть, как эта программа будет читать вход пользователя и будет сортировать его в порядке убывания. Мне нужно иметь номер строки рядом с номером, который был до сортировки. Я прочитал, что запись хороша для него, но я не могу найти никаких учебников, как это сделать.Паскаль массив записей

+0

Хорошо, я исправил эту часть. Я имел в виду: когда я ввожу цифры, у каждого из них будет номер строки. массив, например, {5,4,6}, номера строк будут 1,2 и 3. И мне нужно, чтобы они оставались такими, как они есть (номера строк) после сортировки, чтобы это было {4,5,6} и номера строк: 2,1,3. Теперь ты понимаешь ? – Vilmis

ответ

1

Во-первых, в вашей записи ничего нет. Я думаю, что вы хотите:

type 
    rekord = record 
     value: Integer; 
     row: Integer; 
    end; 

И когда вы читаете это в:

for i := 1 to 5 do 
begin 
    Read(mas[i].value); 
    mas[i].row = i; 
end 

выше будет нумеровать строки 1, 2, 3, ...

И в своем роде:

if mas[j].value > mas[d].value 

Когда вы меняете, обязательно поменяйте всю запись, как вы сейчас делаете. Не просто меняйте значения.

+0

Большое спасибо, но номера строк не сортируются, они останутся 1,2,3,4,5. Я знаю, что когда номера переключаются, номера строк тоже должны переключаться, как это сделать? – Vilmis

+0

@Vilmis: Вы пробовали это? Если вы внесите изменения, которые я предложил, а затем запустите код, я думаю, вы обнаружите, что он работает так, как ожидалось. –

+0

https://i.gyazo.com/9e445f235edc1b1951f308f57d9426a0.png Да, я сделал, сделал ли я что-то не так? – Vilmis