Pascal 如何在一行的循环中写入以逗号分隔的数字?
我正在用FreePascal做一个素数程序 如何用I1和I2来输出数字除法,而不是用逗号来分隔2行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
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.