1

OK so I am trying to get Pascal to read a set of integers from a input file then take the even numbers and add them together with in the range of 1-50. Not working for me. Here is what I have: List of input file numbers 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 And my pascal program:

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. 

Any help would be great! When I run it I get text as "Even sum is 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

以前的海报给出了很好的建议,但我会在最后添加(之前end.

CloseFile(infile)或者Close(infile)

(取决于您的 Pascal 版本)。这可能不会影响程序输出,但对于将来养成一个好习惯 - 如果您正在写入(而不是读取)文本文件并且不关闭它,您可能会发现缺少一些文本,或文件变得不可读。

于 2013-03-27T11:14:52.430 回答
0

几十年来没有做过帕斯卡,但如果我记得:

你在说:

while num > 50 do

并且您的第一个数字是 1,因此它只是跳过循环并打印“偶数”的初始值,即 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 回答