2017-10-22 2 views
1

特定の日に商品を購入したすべての顧客を表示するにはどうすればいいですか?コードが動作していないようで、displayByDayPurchasedプロシージャ内でコードを実装しようとしました。申し訳ありませんが、これは簡単な質問ですが、私はまだプログラミングを始めていません。レコードで動作しない条件文

type 

Tday = (monday, tuesday); 

    Tcustomer = record 
     itemPurchased:string; 
     dayPurchased: Tday; 
    end; 

    Tcustomers = array of Tcustomer; 

function readDay(prompt:string): Tday; 
var 
    selection:Integer; 
begin 
    writeln('1. Monday'); 
    writeln('2. Tuesday'); 

    selection := ReadIntegerRange('Select day purcased (1 - 3): ', 1, 3); 
    result := Tday(selection-1); 
end; 

function readCustomers(prompt:string):TCustomers; 
var 
    numOfCustomers:integer; 
    i:integer; 
begin 
    numOfCustomers := ReadInteger('Enter number of customers: '); 
    setLength(result, numOfCustomers); 

    for i := 0 to high(result) do 
    begin 
     writeln(i); 
     result[i].itemPurchased := ReadString('Item Purchased: '); 
     result[i].dayPurchased := readDay(prompt); 
    end; 
end; 

procedure displayByDayPurchased(customers:TCustomers); 
var 
    specific_day:integer; 
begin 
    specific_day := ReadInteger('Enter day to see items purchased'); 

    if (specific_day = customers.dayPurchased[specific_day])then 
    begin 

    end; 
end; 

procedure Main(); 
var 
    customer: Tcustomers; 
begin 
    customer := readCustomers('Read in customers'); 

end; 

begin 
    Main(); 
end. 

答えて

2

私のコードは動作していないよう、IVEはdisplayByDayPurchasedプロシージャ内のコードを実装してみました。

さて、あなたが投稿したコードの中で、あなたのdisplayByDayPurchasedが実際に表示されているレコードをマッチングにつながる何かを実装していない、あなたが持っているすべては空begin ... endブロックです:

if (specific_day = customers.dayPurchased[specific_day])then 
begin 

end; 

とa)一致条件を正しく指定していない、b)Tcustomers配列にdayPurchasedフィールド(Tcustomerレコードはありますが配列はありません)がないため、コンパイルできません。

あなたのコードは、(ReadStringReadIntegerReadIntegerRangeなど)を提供していない非常に多くのものに依存しますので、テスト済みのソリューションを提供することは困難です。

しかし、あなたのdisplayByDayPurchasedの実装は、おそらくこのようなものになります。

procedure displayByDayPurchased(customers:TCustomers); 
var 
    specific_day:integer; 
    i : integer; 
    ADay : Tday; 
begin 
    specific_day := ReadInteger('Enter day to see items purchased'); 
    ADay := Tday(specific_day); // converts integer to TDay value 

    for i := Low(customers) to High(Customers) do begin 
     if customers[i].dayPurchased = ADay then begin 
     writenln(customers[i].itemPurchased); 
     end; 
    end; 
end; 

を私はあなたのTcustomerレコードが実際に顧客の名前が含まれ、そしてXあなたのコードがそれを処理するために修正する必要があると仮定します。

Btw、function readDay(prompt:string): Tdayが間違っていますです。そのためTdayのあなたの定義を、readDayで許容される値はTday列挙の最低値は、実際にも、ゼロにない1.

が対応しているので、あなたが使用しているPascalコンパイラ言いませんでした、0と1でなければなりません最近のほとんどのバージョンでは、Tday(integerValue)のような呼び出しで、整数を列挙のインスタンス値に変換できます。

関連する問題