2014-04-29 33 views
-4

我要编写一个程序,要求用户输入“N”号,然后比较号码找到我使用二路最大数量,同时:读n个和比较帕斯卡

while i>n do read(number); i:=i+1; 

是真的?如何保存号码并进行比较? 用于离如果用户有4号节省他们这样的:

一个:=数字1; b:= number2; ...

+1

你的问题是难以理解的,请转述 – DadyFuji

+0

另外,你必须考虑你的算法。如果我告诉你一堆数字并要求你告诉我最小的数字,你不需要全部记住它们,你只需要记录最小的数字。 – Davidmh

+0

你有没有任何课程,阅读任何书籍,或者完成了Pascal的任何教程? – lurker

回答

1

从集合中找出第二大数字的算法(假设这就是你之后的事情)相对简单。

get number into ultimate, on end-of-file exit 
get number into penult, on end-of-file exit 
if penult is greater than ultimate: 
    swap ultimate and penult 

while true: 
    get number into num, on end-of-file return penult 
    if num is greater than ultimate: 
     set penult to ultimate 
     set ultimate to num 
    else: 
     if num is greater than penult: 
      set penult to num 

换句话说,保持前两位数字[ultimate, penult]的“清单”和未来的每个号插槽成列表,如果它原来是属于那里。

一旦用完了数字,该列表的第二项就是整个集合中的第二高数字。

在你不想重复占用两个插槽(如1,2,1给你1为第二高,你真的想2)截止机会,你可以扔掉那些重复的,如果他们匹配:

get number into ultimate, on end-of-file exit 
set penult to ultimate 
while penult is equal to ultimate: 
    get number into penult, on end-of-file exit 
if penult is greater than ultimate: 
    swap ultimate and penult 

while true: 
    get number into num, on end-of-file return penult 
    if num is greater than ultimate: 
     set penult to ultimate 
     set ultimate to num 
    else: 
     if num is greater than penult and num is not equal to ultimate: 
      set penult to testnum 

重写在帕斯卡尔,我会离开你的练习,因为它可能是课堂作业。