2016-11-30 88 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:我可以。他可以使用两个数组,一个用于实数,另一个用于索引。交换一个意味着交换另一个。使用记录当然会更自然,可能会更好,但它可以在没有它们的情况下完成。 –