我开始学习Pascal :)我对制作一种Euromillion感兴趣...但是,我不知道如何禁止相同的数字或星星......
我认为这(下面)会解决它......但它没有...帮助?
Program euromillion;
var num: array [1..5] of integer;
Procedure numbers;
var i, j: integer;
Begin
write ('Digite o número 1: ');
readln (num[1]);
for i:=2 to 5 do
for j:=1 to (i-1) do
Begin
repeat
write ('Digite o número ', i, ': ');
readln (num[i]);
until (num[i]>=1) and (num[i]<=50) and ((num[i]=num[j])=false);
End;
End;
Begin
numbers;
readln();
End.
谢谢你们:)
答案 0 :(得分:3)
尽管尝试编写单个代码块很有诱惑力,但最好不要这样做。相反,更好的方式来编写这样的程序 是考虑将任务分解为许多程序或功能 每个只执行任务的一部分。
查看任务的一种方法是将其拆分为子任务,如下所示:
所以,关键是要有一个检查是否有的功能会有所帮助 一个新数字已经在数组中,如果是,则返回True,否则返回False。如何做到这一点就是你问题的答案。 你需要小心这个,因为如果你第二次使用数组 程序,您需要避免将新数字与数组内容进行比较 上一次。我故意在下面的示例代码中没有解决该问题,将其留作读者练习。提示:一种方法是编写一个&#34;清除&#34;每次使用它之前的数组,例如通过填写无效彩票号码的数字,如负数或零。另一种方法是定义一个包含NumberArray和Count字段的记录,该字段记录到目前为止输入了多少个数字:这样可以避免将新数字与所有元素进行比较。 数组,允许您通过在调用ReadNumbers之前将Count字段重置为零来重新使用该数组。
program LotteryNumbers;
uses crt;
type
TNumberArray = array[1..5] of Integer;
var
Numbers : TNumberArray;
Number : Integer;
function IsInArray(Number : Integer; Numbers : TNumberArray) : Boolean;
var
i : Integer;
begin
Result := False;
for i:= Low(Numbers) to High(Numbers) do begin
if Numbers[i] = Number then begin
Result := True;
break;
end;
end
end;
procedure ReadNumbers(var Numbers : TNumberArray);
var
i : Integer;
NewNumber : Integer;
OK : Boolean;
begin
// Note: This function needs to have a check added to it that the number
// the user enters is a valid lottery number, in other words that the
// number is between 1 and the highest ball number in the lottery
for i := Low(Numbers) to High(Numbers) do begin
repeat
OK := False;
writeln('enter a number');
ReadLn(NewNumber);
OK := not IsInArray(NewNumber, Numbers);
if not OK then
writeln('Sorry, you''ve already chosen ', NewNumber);
until OK;
Numbers[i] := NewNumber;
end;
end;
procedure ListNumbers(Numbers : TNumberArray);
var
i : Integer;
begin
for i := Low(Numbers) to High(Numbers) do
writeln(Numbers[i]);
end;
begin
ReadNumbers(Numbers);
ListNumbers(Numbers);
writeln('press any key');
readkey;
end.