如何禁止相等的数字

How to forbid equal numbers

我开始学习 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.

谢谢大家:)

虽然尝试编写单个代码块很诱人,但最好不要这样做。相反,编写这样的程序的更好方法 是考虑将任务分解为多个过程或功能 每个只完成任务的一部分。

查看任务的一种方法是将其拆分为子任务,如下所示:

  1. 您提示用户输入一系列数字
  2. 输入每个数字后,检查它是否已经在数组中 如果不是,则将其输入数组,否则提示用户输入另一个数字
  3. 数组填满后,输出数组中的数字

所以,关键是如果有一个函数可以检查是否 数组中已经有一个新数字,如果是 returns 则为 True,否则为 False。如何做到这一点就是你的问题的答案。 你需要小心这一点,因为如果你在 程序,您需要避免将新数字与来自 上一次。我故意没有在下面的示例代码中解决该问题,将其留作 reader 的练习。提示:一种方法是编写一个程序,在每次使用它之前 "clears" 数组,例如通过用不是有效彩票号码的数字填充它,例如负数或零。另一种方法是定义一个记录,其中包括 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.