Предмет: Информатика,
автор: uPOINT
Cоставить программу записи в массив B номеров четных элементов массива A.
Как можно проще, пожалуйста
Ответы
Автор ответа:
0
Const
N = 13;
Var
A,B:array[1..N] of integer;
i,j:integer;
Begin
j:=0;
Write('Массив A(',N,'):');
For i:= 1 to N do
Begin
A[i]:=random(N);
Write(' ',A[i]);
if A[i] mod 2 = 0 then
Begin
j:=j+1;
B[j]:=i;
End;
End;
WriteLn;
Write('Массив B(',j,'):');
For i:= 1 to j do
Write(' ',B[i])
End.
Пример работы программы:
Массив A(13): 1 11 9 11 12 2 6 12 0 10 8 11 10
Массив B(8): 5 6 7 8 9 10 11 13
N = 13;
Var
A,B:array[1..N] of integer;
i,j:integer;
Begin
j:=0;
Write('Массив A(',N,'):');
For i:= 1 to N do
Begin
A[i]:=random(N);
Write(' ',A[i]);
if A[i] mod 2 = 0 then
Begin
j:=j+1;
B[j]:=i;
End;
End;
WriteLn;
Write('Массив B(',j,'):');
For i:= 1 to j do
Write(' ',B[i])
End.
Пример работы программы:
Массив A(13): 1 11 9 11 12 2 6 12 0 10 8 11 10
Массив B(8): 5 6 7 8 9 10 11 13
Автор ответа:
0
1. Современное решение
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(ReadInteger('n='),-50,50); a.Println;
var b:=a.Select((x,i)->(x,i)).Where(xi->xi[0].IsEven)
.Select(xi->xi[1]+1).ToArray;
b.Println
end.
Пример работы
n= 15
46 -35 43 17 34 48 17 46 15 -45 13 -50 -46 13 42
1 5 6 8 12 13 15
2. Школьное решение в стиле "ТурбоПаскаль 1983г."
const
nn=500;
var
i,n,k:integer;
a,b:array[1..nn] of integer;
begin
Write('n=');
Read(n);
Randomize;
k:=0;
for i:=1 to n do begin
a[i]:=Random(101)-50;
Write(a[i],' ');
if a[i] mod 2 = 0 then begin
k:=k+1;
b[k]:=i
end
end;
Writeln;
for i:=1 to k do
Write(b[i],' ');
Writeln
end.
Может, оно кому-то проще, но 23 строки против 5 - явно не упрощение)))
Не говоря о том, что дольше писать и больше шансов наделать ошибок.
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(ReadInteger('n='),-50,50); a.Println;
var b:=a.Select((x,i)->(x,i)).Where(xi->xi[0].IsEven)
.Select(xi->xi[1]+1).ToArray;
b.Println
end.
Пример работы
n= 15
46 -35 43 17 34 48 17 46 15 -45 13 -50 -46 13 42
1 5 6 8 12 13 15
2. Школьное решение в стиле "ТурбоПаскаль 1983г."
const
nn=500;
var
i,n,k:integer;
a,b:array[1..nn] of integer;
begin
Write('n=');
Read(n);
Randomize;
k:=0;
for i:=1 to n do begin
a[i]:=Random(101)-50;
Write(a[i],' ');
if a[i] mod 2 = 0 then begin
k:=k+1;
b[k]:=i
end
end;
Writeln;
for i:=1 to k do
Write(b[i],' ');
Writeln
end.
Может, оно кому-то проще, но 23 строки против 5 - явно не упрощение)))
Не говоря о том, что дольше писать и больше шансов наделать ошибок.
Похожие вопросы
Предмет: Английский язык,
автор: silkinkirill
Предмет: Математика,
автор: ammir7
Предмет: Английский язык,
автор: arnay35
Предмет: Математика,
автор: lizavdovina00