2016-11-30 30 views
0
type 
    mas = array [1 .. 10000] of real; 

var 
    n: integer; 
    a: mas; 
    Rf: text; 

Procedure Skaityti; 
var 
    i: integer; 
    Df: text; 
begin 
    Assign(Df, 'duom1.txt'); 
    Reset(Df); 
    Readln(Df, n); 
    for i := 1 to n do 
    Read(Df, a[i]); 
    Close(Df); 
end; 

Procedure MinMax(var min, max, nrmin, nrmax, vid: real); 
var 
    i: integer; 
begin 
    min := a[1]; 
    max := a[1]; 
    nrmin := 1; 
    nrmax := 1; 
    for i := 1 to n do 
    begin 
    if min > a[i] then 
    begin 
     min := a[i]; 
     nrmin := i; 
    end; 
    if max < a[i] then 
    begin 
     max := a[i]; 
     nrmax := i; 
    end; 
    vid := vid + a[i]; 
    end; 
    vid := vid/n; 
end; 

var 
    min, max, nrmin, nrmax, vid: real; 

begin 
    Skaityti; 
    MinMax(min, max, nrmin, nrmax, vid); 
    Assign(Rf, 'rez.txt'); 
    Rewrite(Rf); 
    WriteLn(Rf, 'biggest amount  ', max:7:2, ' number ', nrmax:7:0); 
    WriteLn(Rf, 'smallest amount  ', min:7:2, ' number', nrmin:7:0); 
    WriteLn(Rf, 'average amount  ', vid:7:2); 
    WriteLn(Rf); 
    WriteLn(Rf, 'number amount'); 
    Close(Rf); 
end. 

這是代碼,它將一個.txt文件中的元素讀取到一個數組中,我創建了查找它的最大值和最小值的過程。現在我需要創建一個過程,以便從最大到最小以及它旁邊的行號編寫我的數組。它應該看起來像這樣:帕斯卡排列陣列,行號

Row number  value 
    5    1000000 
    6    999999 
    8    888888 

等等。任何想法?

P.S.我可以安排該數組是從最大到最小,但隨後行號會陷入困境:/

回答

0

創建兩個領域,一個是從文件中的值,另一個爲「行」號的記錄類型。

將數組更改爲該記錄類型的數組。

當讀取的for循環在該文件,指定所讀取的值與記錄的值字段和用於循環控制變量的值作爲「行」數。

排序時數組,你對記錄進行排序,從而保持價值和排在一起。

+0

嗯,我們還沒有學到什麼關於在學校的記錄,任何其他方式?我會嘗試去了解現在的記錄 –

+0

不,我真的不能想到任何其他(合理)的方式。專門發明了一種記錄結構,以將密切相關的數據保存在一起。我相信你會發現它的基本形式(你需要)的概念很簡單。 –

+0

@Tom:我可以。他可以使用兩個數組,一個用於實數,另一個用於索引。交換一個意味着交換另一個。使用記錄當然會更自然,可能會更好,但它可以在沒有它們的情況下完成。 –