2017-10-13 14 views
-1

私はパスカルを習い始め:)と私はしかし、私は同じ番号や星を禁止する方法がわからない...ユーロミリオンズのようなものを作ることに興味があった...禁止する方法同数

Iこれ(下)がそれを解決すると思った...しかしそれは...助けてくれませんでしたか?

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. 

みんなありがとう:)

答えて

3

あなたが持っているとして、それは、単一のコードブロックを試してみて、書き込みに魅力的ですが、そうでない方が良いです。代わりに、 のようなプログラムを書くよりよい方法は、タスクをいくつかの手順または関数 に分割することを考えることです。

  1. あなたは
  2. 各番号を入力すると一連の数字を入力するようユーザーに促しますが、次のようにあなたの仕事を見て

    一つの方法は、サブタスクにそれを分割することですそれ以外の場合は、配列がいっぱいになると、別の番号

  3. ためにユーザを促し、それがない場合は、配列にそれを入力配列 にすでに存在するかどうかを確認し、あなたのアレイ内の数値出力

したがって、重要なことは、 の新しい番号が既に配列にあるかどうかをチェックし、そうでない場合はTrueを返し、それ以外の場合はFalseを返す関数を持つと便利です。それを行う方法はあなたの質問に対する答えです。 プログラムで2回目にアレイを使用する場合は、新しい番号と前回の の配列内容とを比較しないでください。私は意図的に以下のサンプルコードでその問題を解決していないので、読者のための練習として残しておきます。ヒント:1つの方法は、配列を使用する前に配列を「クリア」するプロシージャを書くことです。負の数やゼロのような有効な宝くじ番号ではない数字で記入してください。もう1つの方法は、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. 
関連する問題