Pascal 交替打印数字
Pascal print numbers alternately
我的任务是交替打印输入中的每个数字,首先是索引为偶数的数字,然后是索引为奇数的数字。我已经解决了,但是只有一行数字,但是我要读n行数字。
预期输入:
2
3 5 7 2
4 2 1 4 3
预期输出:
7 5 2
1 3 2 4
其中2是行数,3和4是数字的数字,5,7,2和2,1,4,3是这些数字。
Program numbers;
Uses crt;
var k,n,x,i,j: integer;
var tab : Array[1..1000] of integer;
var tab1 : Array[1..1000] of integer;
var tab2 : Array[1..1000] of integer;
begin
clrscr;
readln(k);
for i:=1 to k do
begin
read(n);
for j:=1 to n do
begin
read(tab[j]);
if(j mod 2 = 0) then
tab1[j]:=tab[j]
else
begin
tab2[j]:=tab[j];
end;
end;
end;
for j:=1 to n do
if tab1[j]<>0 then write(tab1[j], ' ');
for j:=1 to n do
if tab2[j]<>0 then write(tab2[j], ' ');
end.
让我们清理格式,并使用记录来跟踪输入的每一“行”。
program numbers;
uses
crt;
type
TLine = record
count : integer;
numbers : array[1..1000] of integer
end;
var
numLines, i, j : integer;
lines : Array[1..1000] of TLine;
begin
clrscr;
readln(numLines);
for i := 1 to numLines do
begin
read(lines[i].count);
for j := 1 to lines[i].count do
read(lines[i].numbers[j])
end
end.
我们可以读入每一行。现在,我们如何一起打印奇数和偶数索引?好吧,我们 可以 对每个索引进行数学计算, 或 我们可以只增加 2
而不是 1
使用while 循环。
program numbers;
uses
crt;
type
TLine = record
count : integer;
numbers : array[1..1000] of integer
end;
var
numLines, i, j : integer;
lines : Array[1..1000] of TLine;
begin
clrscr;
readln(numLines);
// Read in lines.
for i := 1 to numLines do
begin
read(lines[i].count);
for j := 1 to lines[i].count do
read(lines[i].numbers[j])
end;
// Print out lines.
for i := 1 to numLines do
begin
j := 1;
while j <= lines[i].count do
begin
write(lines[i].numbers[j], ' ');
j := j + 2
end;
j := 2;
while j <= lines[i].count do
begin
write(lines[i].numbers[j], ' ');
j := j + 2
end;
writeln
end
end.
现在如果我们运行这个:
2
3 4 5 6
4 6 2 4 1
4 6 5
6 4 2 1
我们可以注意到的一件事是,除了起始索引之外,以下循环对于奇数索引和偶数索引都是相同的。
while j <= lines[i].count do
begin
write(lines[i].numbers[j], ' ');
j := j + 2
end;
这是使用程序的完美场所。我们称它为 PrintEveryOther
并让它从一个索引开始并打印一行。
program numbers;
uses
crt;
type
TLine = record
count : integer;
numbers : array[1..1000] of integer
end;
var
numLines, i, j : integer;
lines : Array[1..1000] of TLine;
procedure PrintEveryOther(start : integer; line :TLine);
var
i : integer;
begin
i := start;
while i <= line.count do
begin
write(line.numbers[i], ' ');
i := i + 2
end
end;
begin
clrscr;
readln(numLines);
for i := 1 to numLines do
begin
read(lines[i].count);
for j := 1 to lines[i].count do
read(lines[i].numbers[j])
end;
for i := 1 to numLines do
begin
PrintEveryOther(1, lines[i]);
PrintEveryOther(2, lines[i]);
writeln
end
end.
我的任务是交替打印输入中的每个数字,首先是索引为偶数的数字,然后是索引为奇数的数字。我已经解决了,但是只有一行数字,但是我要读n行数字。
预期输入:
2
3 5 7 2
4 2 1 4 3
预期输出:
7 5 2
1 3 2 4
其中2是行数,3和4是数字的数字,5,7,2和2,1,4,3是这些数字。
Program numbers;
Uses crt;
var k,n,x,i,j: integer;
var tab : Array[1..1000] of integer;
var tab1 : Array[1..1000] of integer;
var tab2 : Array[1..1000] of integer;
begin
clrscr;
readln(k);
for i:=1 to k do
begin
read(n);
for j:=1 to n do
begin
read(tab[j]);
if(j mod 2 = 0) then
tab1[j]:=tab[j]
else
begin
tab2[j]:=tab[j];
end;
end;
end;
for j:=1 to n do
if tab1[j]<>0 then write(tab1[j], ' ');
for j:=1 to n do
if tab2[j]<>0 then write(tab2[j], ' ');
end.
让我们清理格式,并使用记录来跟踪输入的每一“行”。
program numbers;
uses
crt;
type
TLine = record
count : integer;
numbers : array[1..1000] of integer
end;
var
numLines, i, j : integer;
lines : Array[1..1000] of TLine;
begin
clrscr;
readln(numLines);
for i := 1 to numLines do
begin
read(lines[i].count);
for j := 1 to lines[i].count do
read(lines[i].numbers[j])
end
end.
我们可以读入每一行。现在,我们如何一起打印奇数和偶数索引?好吧,我们 可以 对每个索引进行数学计算, 或 我们可以只增加 2
而不是 1
使用while 循环。
program numbers;
uses
crt;
type
TLine = record
count : integer;
numbers : array[1..1000] of integer
end;
var
numLines, i, j : integer;
lines : Array[1..1000] of TLine;
begin
clrscr;
readln(numLines);
// Read in lines.
for i := 1 to numLines do
begin
read(lines[i].count);
for j := 1 to lines[i].count do
read(lines[i].numbers[j])
end;
// Print out lines.
for i := 1 to numLines do
begin
j := 1;
while j <= lines[i].count do
begin
write(lines[i].numbers[j], ' ');
j := j + 2
end;
j := 2;
while j <= lines[i].count do
begin
write(lines[i].numbers[j], ' ');
j := j + 2
end;
writeln
end
end.
现在如果我们运行这个:
2
3 4 5 6
4 6 2 4 1
4 6 5
6 4 2 1
我们可以注意到的一件事是,除了起始索引之外,以下循环对于奇数索引和偶数索引都是相同的。
while j <= lines[i].count do
begin
write(lines[i].numbers[j], ' ');
j := j + 2
end;
这是使用程序的完美场所。我们称它为 PrintEveryOther
并让它从一个索引开始并打印一行。
program numbers;
uses
crt;
type
TLine = record
count : integer;
numbers : array[1..1000] of integer
end;
var
numLines, i, j : integer;
lines : Array[1..1000] of TLine;
procedure PrintEveryOther(start : integer; line :TLine);
var
i : integer;
begin
i := start;
while i <= line.count do
begin
write(line.numbers[i], ' ');
i := i + 2
end
end;
begin
clrscr;
readln(numLines);
for i := 1 to numLines do
begin
read(lines[i].count);
for j := 1 to lines[i].count do
read(lines[i].numbers[j])
end;
for i := 1 to numLines do
begin
PrintEveryOther(1, lines[i]);
PrintEveryOther(2, lines[i]);
writeln
end
end.