1

OKなので、Pascalに入力ファイルから整数のセットを読み取らせてから、偶数を取得し、それらを1〜50の範囲で加算しようとしています。私のために働いていません。これが私が持っているものです:入力ファイル番号のリスト1 2 3 4 5 6 7 8 9 11 12 64 13 14 15 16 71 33 34 35 36 41 44 46 82 512 49 50そして私のパスカルプログラム:

program even(input,output,indata); 
uses crt;
Var
  indata:text;
  num, even:integer;
begin
  clrscr;
  assign(indata, 'j:\num.txt');
  reset(indata)0;
  read(indata, num);
  while num>50 do
  begin
         read(indata, num);
         if num mod 2=0 then
         even:=even+num;
  end;
  writeln('Even sum is', even);
  readln( );
end. 

どんな助けでも素晴らしいでしょう!実行すると、「合計も0」というテキストが表示されます。

4

3 に答える 3

1

コンパイルさえできるように、最初にコードを修正する必要があります。呼び出す行にresetは、0終了後に)があります。これは無効な構文です。

最初に変数を初期化evenして、有効な開始点が含まれるようにする必要があります。

次に、whileループ内のロジックを修正する必要があります。後ろ向きです。:-)num < 50最後に停止するかどうかをテストする必要があります。現在のテストではnum > 50、最初の値(1)がループを終了するため、ループが実行されないことを意味しwhileます。

これは、Delphiのプレーンコンソールアプリケーションで機能します。

program Project2;

uses
  SysUtils;

var
  InData: Text;
  num, even: Integer;

begin
  AssignFile(InData, 'D:\TempFiles\numbers.txt');
  reset(indata);
  read(indata, num);
  even := 0;
  while num < 50 do
  begin
    read(indata, num);
    if num mod 2 = 0 then
       even := even + num;
  end;
  writeln('Even sum is ', even);
  readln;
end.

出力を生成します(これは、コードの記述方法に応じて正しいです。ループ64内の値を読み取るためwhile num、必要以上に1回実行され、64さらに追加されevenます。あなたが理解する)。:-)

Even sum is 96.
于 2013-03-27T00:49:03.140 に答える
0

数十年の間Pascalを行っていませんが、私が思い出すと:

あなたが言っている:

while num > 50 do

最初の数値は1なので、ループをスキップして、初期値の「even」(0)を出力します。

あなたが意味したかもしれません:

while num < 50 do

しかし、それでも最初の値50以上で終了します。

すべての数字を読むつもりで、50を超える数字を除外すると、次のようになります。

program even(input,output,indata); 
uses crt;
Var
  indata:text;
  num, even:integer;
begin
  clrscr;
  assign(indata, 'j:\num.txt');
  reset(indata)0;  

  (* read all of the numbers *)
  while not eof(indata) do
  begin
         read(indata, num);

         (* skip those greater than 50 *)
         if num <= 50
         begin
             if num mod 2=0 then
             even:=even+num;
         end;
  end;
  writeln('Even sum is', even);
  readln( );
end. 
于 2013-03-26T23:44:47.123 に答える
0

以前のポスターは良いアドバイスをしてくれましたが、最後に(前にend.)追加します

CloseFile(infile)またClose(infile)

(Pascalのバージョンによって異なります)。これはおそらくプログラムの出力には影響しませんが、将来のために始めるのに良い習慣です-テキストファイルに(から読むのではなく)書き込んでいて閉じない場合、一部のテキストが欠落していることに気付くかもしれません、または、ファイルが読み取れなくなります。

于 2013-03-27T11:14:52.430 に答える