少しCS1プログラムの仕様変更

ファストフード店のマネージャートラックの販売を支援するプログラムが必要です。コンセントのみフライドポテトとハンバーガー、ハンバーガーの食事$ 5.95です。お客様は、ハンバーガーの食事を任意の数の順序があります。プログラム命令の価格を計算するためであり、また、最大の単一注文の合計の注文の記録を維持することです。このプログラムは、単純なメニューオプションを選択するスタイルのループを使用することです:

  

(1)のご注文

(2)プリント、これまでの合計

(3)終了

順序オプションを食事に必要な数のプロンプトで、結果があります。廃棄処分される任意の無効な入力データ(値"= 0)されます。プログラムを再度実行オプションを使用してユーザーにプロンプトすることです。有効な入力データの総売上高の更新の結果がありますし、必要に応じて、最大の注文の記録を更新できます。プログラムは、注文番号と注文のコストに対応する必要があります。総計オプションの総売上高と最大の注文の詳細を印刷してください。終了オプションは、プログラムを終了します。無効なオプションの選択が報告され、次にプログラムのプロンプトを繰り返す入力します(元の仕様では、出力には、正確な形式の入力と出力に必要な表示に含まれます。)明らかに、Perlプログラムは、whileループの場合... ... elsif ... else構造を含む必要があります。

#!/共有/ bin / perlで低コスト= 5.95ドルワット$ orderNum = 0; $ maxorder = 0; $ totalsales = 0;ながら、(1)(印刷'ようこそCS1バーガーズ1。確認で2。プリント3の合計。を終了し、選択を入力します:'; $順序=  ;場合($順序== 1)("どのように多くの食事をしたいか?印刷"; $サイズ=  ;($の場合のサイズ"= 0)(次;)$ orderNum + +;印刷"あなたの顧客番号:$ orderNum \ N"のです; $ ordercost = $コスト* $サイズ;印刷"現在残高:\ $ $ ordercost \ N"の$ maxorder =($サイズ"$ maxorder)? $サイズ:$ maxorder $ totalsales + = $ ordercost;)elsif($順序== 2)(印刷"は$ orderNum顧客\ N"にされた;
印刷"合計金額:\ $ $ totalsales \ N"は、料理を"。"1回の注文:$ maxorder料理\ Nで";)elsif($順序== 3)での注文の印刷"の最大数(最後;)他(それは悪い選択だった。印刷"...再び、"てみてください;))印刷"バイバイ!\ Nで";

(再度アクセスするときにこのような何かは、1週間がかかったハード割り当てされた?)機能は、コード内であることに注意する:'永遠'whileループは、選択オプション3の最後のステートメントで終了することを覚えてる。を使用するamultiの行の文字列定義には、プロンプト文字列の宣言を簡略化する。使用入力入力の自動強制数値の値に戻ります。の場合... ... elsif ...条件else構造(おそらく、この課題の元のバージョンでのcase文が意図したもの)。と最後の文のボディ内の次ループプルーフは、Perl、Cの三項演算子を維持しています()?... :...文字列にデータ値の補間

この割り当ては、より高いレベルの件名、実際からだったが、あまりにも多くのプログラミング構造の基本的な必要があります。プログラムのデータファイルとディレクトリに関する読み取りにされているUnixのlsコマンドから得リットル。入力1!''から(のいずれかのパイプ- lをSTDINから読み取ることがしたり、ファイルをls - lを介して生産からリダイレクト)されます。例は、入力データです:

- RXは- × - × 1ルートビン20796 2000年1月6日acctcom - RXは- × - × 37ルートビン5256 2000年1月6日のadb lrwxrwxrwx 1ルートルート29 2000年11月30日cachefspack - ".. / libに/ fsに/ CacheFSの/ cachefspack drwxr - xr - xに2ルートビン512 6月10日15時08 sparcv7

プログラム行は、単純なファイルやディレクトリに関連するプロセスのことです。リンクなどの特別なディレクトリエントリは、無視される。プログラムは、各処理の入力ライン出力ラインを生成することです。この出力行は、8進数コードをUNIXのパーミッションに使用される形式でファイルのパーミッションを書き換えることです;かどうかの行は、ファイルまたはディレクトリへの関係を示すためであり、エントリの名前を印刷することです。すべての入力の行が処理されていると、プログラムがそのファイルやディレクトリの数のカウントを印刷する終了です。データがあるはず上記の出力:

511ファイルacctom 511ファイルのadb 755ディレクトリsparcv7

この割り当てのためのソリューションの最初のバージョンが再度の内のすべての処理が実行されるwhileループに基づいています。ループ、STDINから行を読み込む時、空行(エンド受信すると終了、ファイルの状態)です。処理が入力されている特定の文字に依存して、Perlの標準のsubstr関数は、入力ラインから文字を選択するために使用されます。

#!/共有/ bin / perlで、ファイル$ = 0; $ディレクトリ= 0ワット;中($ str =  )(chomp($ str); $文字= SUBSTRは($ str、0,1);場合($文字式" - ")($タイプ=""ファイルを、ファイル$ + +;)elsif($文字式'd'を)($タイプ="ディレクトリ"; $ディレクトリ+ +;)他(次;)$ code1 = 0;所有者の8進数のコードを作成#の場合(の"r"式SUBSTRは($ str、1,1))($ code1 + = 4;)の場合("w"を式SUBSTRは($ str、2,1))($ code1 + = 2;)("x"の式SUBSTRは($ str、3,1))($ code1 + = 1; )$ Code2を= 0;グループの8進数のコードを作成#の場合(の"r"式SUBSTRは($ str、4,1))($ Code2を+ = 4;)の場合("w"を式SUBSTRは($ str、5,1 ))($ Code2を+ = 2;)("x"の式SUBSTRは($ str、6,1))($ Code2を+ = 1;)$ code3 = 0;場合("R"は、他の8進数のコードを作成#式SUBSTRは($ str、7,1))($ code3 + = 4;)の場合("w"を式SUBSTRは($ str、8,1))($ code3 + = 2;)("x"の式SUBSTRを($ str、9,1))($ code3 + = 1;)$コード= $ code1。 $ Code2を収録。 $ code3;行の末尾に$の名前のファイル名を抽出する#= SUBSTRは($ str、$順位+1);
印刷"$(コード)\(タイプ)\"$(名前)\ Nのトン;)印刷"$ファイルのファイル、および$ディレクトリのディレクトリ\ Nで"; $トン

($ str =中 )(chomp($ str); $文字= SUBSTRは($ str、0,1);場合($文字式" - ")($タイプ=""ファイルを、ファイル$ + +;)elsif($文字式'd'を)($タイプ="ディレクトリ"; $ディレクトリ+ +;)他(次;)$コード= 0;
私= 1($用$私は"10; $私+ +)($コード*= 2;場合(" - "ねSUBSTRは($ str、$私は、1))($コード+ +;))$順位= rindex( = SUBSTRは($ str、$順位+1); printfの"%図書館%"を$ str、""); $名$コードは、"\(タイプ)\"$(名前)\ Nのトン$トン;)

printf文では、最初の引数'%図書館%s'は書式指定文字列で、これは、文字列が続く8進数での数値の値の出力を指定します。他の引数は、コード、および型の文字列(ファイルまたはディレクトリ)とは、エンティティ名です。もちろん、それを行う別の方法です。以来、形式の文字列を二重引用符Perl文字列ですが、値を補間することができます。次のバリアントとしてのが良いでしょう:

printfの"%図書館\(型)\ $(名)\ N"は、$コードトン$トン
記事は、ロナルドスミスが提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、"スライトリーCS1プログラム"の仕様変更の自動ソフトウェアによって翻訳された。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 215 users browsing the articles directory