Pascal 如何在一行的循环中写入以逗号分隔的数字?

Pascal 如何在一行的循环中写入以逗号分隔的数字?,pascal,freepascal,Pascal,Freepascal,我正在用FreePascal做一个素数程序 如何用I1和I2来输出数字除法,而不是用逗号来分隔2行 var P:Integer; I:Integer; J:Integer; A:Integer; begin writeln('Prime number program'); writeln; writeln('Insert number'); readln(P); for I:=2 to P-1 do begin

我正在用FreePascal做一个素数程序

如何用I1和I2来输出数字除法,而不是用逗号来分隔2行

var
  P:Integer;
  I:Integer;
  J:Integer;
  A:Integer;

  begin

    writeln('Prime number program');
    writeln;
    writeln('Insert number');
    readln(P);

    for I:=2 to P-1 do
    begin
      J:=P Mod I;
      if (J=0) then
      begin
        writeln(P,' divides with ',I);
        a:=a+1
      end;
    end;

    if a=0 then
      begin
      writeln(P,' is prime number')
      end;
  end.

我知道这不是教你一些东西的好方法,但这是:

program Project1;
uses
  SysUtils;
var
  S: string;
  I: Integer;
  Count: Integer;
  Input: Integer;
begin
  Writeln('Prime number program');
  Writeln;
  Writeln('Insert a number:');
  Readln(Input);

  for I := 2 to Input-1 do
  begin
    if (Input mod I = 0) then
    begin
      Count := Count + 1;
      if (S <> '') then
        S := S + ', ';
      S := S + IntToStr(I);
    end;
  end;

  if (Count = 0) then
    Writeln(Input, ' is a prime number.')
  else
    Writeln(Input, ' is not a prime number. It divides with ', S, '.');
  Readln;
end.
程序项目1;
使用
SysUtils;
变量
S:字符串;
I:整数;
计数:整数;
输入:整数;
开始
Writeln(“素数程序”);
书面语;
Writeln('插入一个数字:');
Readln(输入);
对于I:=2输入-1 do
开始
如果(输入模I=0),则
开始
计数:=计数+1;
如果是“”,则
S:=S+',';
S:=S+IntToStr(I);
结束;
结束;
如果(计数=0),则
Writeln(输入“是一个素数”。)
其他的
Writeln(输入“不是质数,它用”S“.”除);
Readln;
结束。
所有程序:

program Prime;
var
  prime: boolean;
  I, P: Integer;
begin
  Writeln('Prime number program');
  Writeln;
  Writeln('Insert a number:');
  Readln(P);
  prime := true;


  for i := 2 to p - 1 do
  if(p mod i = 0) then prime := false;
  if prime then writeln("prime");
           else writeln("not prime");
  Readln;
end.

不需要检查N以下的所有数字,sqrt(N)以下的奇数就足够了

program PrimeTest;

var N, I, Divisor: LongInt;
    Prime: Boolean;

begin
   writeln('Prime number program');
   writeln;
   write('Insert number: ');
   readln(N);

   Divisor := 1;
   Prime := True;
   if N < 5 then
   begin
      Prime := (N = 2) or (N = 3);
      if N = 4 then Divisor := 2;
   end else if Odd(N) then
   begin
      I := 3;
      while I*I <= N do
      begin
         if N mod I = 0 then
         begin
            Prime := False;
            Divisor := I;
            break;
         end;
         I := I + 2;
      end;
   end else begin
      Prime := False;
      Divisor := 2;
   end;

   if Prime then writeln(N, ' is a prime number')
            else writeln(N, ' is divisible by ', Divisor);
end.
程序测试;
变量N,I,除数:LongInt;
素数:布尔;
开始
writeln(“素数程序”);
书面语;
写入('插入编号:');
readln(N);
除数:=1;
素数:=真;
如果N<5,则
开始
素数:=(N=2)或(N=3);
如果N=4,则除数:=2;
如果为奇数(N),则结束else
开始
I:=3;

而我,我,你试过什么?您的代码无法跟踪是否已达到某个因子。你需要这样做,如果你没有找到一个因子,只显示“is prime”行。更新的问题很简单,在你的循环中测试a=0。如果真Write(P,'除以',I)或者Write(',',,I)基本上,Writeln打印换行,而Write不打印。顺便说一句,您的主要测试程序设计得不太好(太多的测试,很容易加速),只输出一个因素。原始程序输出所有因子。@CodesInChaos,是的,我就是这样得到这个问题的。将根据更新修复此问题。@TLama此程序只输出一个因素。@TLama此程序提供了一个找不到的错误标识符“IntToStr”。您在标记问题时是否真的使用了Freepascal?还有,你确定我写了
IntToString
?这不是问题的答案:
“如何输出数字除以I1,I2以逗号分隔而不是两行?”
program PrimeTest;

var N, I, Divisor: LongInt;
    Prime: Boolean;

begin
   writeln('Prime number program');
   writeln;
   write('Insert number: ');
   readln(N);

   Divisor := 1;
   Prime := True;
   if N < 5 then
   begin
      Prime := (N = 2) or (N = 3);
      if N = 4 then Divisor := 2;
   end else if Odd(N) then
   begin
      I := 3;
      while I*I <= N do
      begin
         if N mod I = 0 then
         begin
            Prime := False;
            Divisor := I;
            break;
         end;
         I := I + 2;
      end;
   end else begin
      Prime := False;
      Divisor := 2;
   end;

   if Prime then writeln(N, ' is a prime number')
            else writeln(N, ' is divisible by ', Divisor);
end.
program PrimeTest;

var N, I, J, Index, M: LongInt;
    Factor, Power: array[1 .. 32] of LongInt;

begin
   writeln('Prime number program');
   writeln;
   write('Insert number: ');
   readln(N);

   M := N;
   Index := 0;

   if N mod 2 = 0 then
   begin
      J := 0;
      while N mod 2 = 0 do
      begin
         Inc(J);
         N := N div 2;
      end;
      Inc(Index);
      Factor[Index] := 2;
      Power[Index] := J;
   end;

   I := 3;
   while I*I <= N do
   begin
      if N mod I = 0 then
      begin
         J := 0;
         while N mod I = 0 do
         begin
            Inc(J);
            N := N div I;
         end;
         Inc(Index);
         Factor[Index] := I;
         Power[Index] := J;
      end;
      I := I + 2;
   end;

   if (N > 1) or (Index = 0) then
   begin
      Inc(Index);
      Factor[Index] := N;
      Power[Index] := 1;
   end;

   if M = 1 then writeln('1 is not prime')
   else if (Index > 1) or ((Index > 0) and (Power[1] > 1)) then
   begin
      if Power[1] = 1 then write(M, ' = ', Factor[1])
                      else write(M, ' = ', Factor[1], '^', Power[1]);
      for I := 2 to Index do
      begin
         if Power[I] = 1 then write(' * ', Factor[I])
                         else write(' * ', Factor[I], '^', Power[I]);
      end;
      writeln;
   end else writeln(M, ' is prime');
end.