int RowWithMax(double m[n][n], int j)
{
double max_el = m[j][j];
int max_i = j;
for (int i = j; i < n; i++)
{
if (abs(m[i][j]) > abs(max_el))
{
max_el = m[i][j];
max_i = i;
}
}
return max_i;
}
void RowChange(double m[n][n], double f[n], int i1, int i2)
{
for (int j = 0; j < n; j++)
{
/*m[i1][j] = m[i1][j] + m[i2][j];
m[i2][j] = m[i1][j] - m[i2][j];
m[i1][j] = m[i1][j] - m[i2][j];*/
swap(m[i1][j], m[i2][j]);
}
swap(f[i1], f[i2]);
}
double StraightRun(double m[n][n], double f[n], int i) //прямой метод
{
double el;
double det = 1;
int reverse = 0;
int max_i = RowWithMax(m, i);
if (i != max_i)
{
RowChange(m, f, i, max_i);
//reverse++;
det *= (-1);
}
el = m[i][i];
det *= el;
f[i] /= el;
for (int i1 = n - 1; i1 >= i; i1--)
{
m[i][i1] /= el;
}
for (int i2 = i + 1; i2 < n; i2++)
{
el = m[i2][i];
f[i2] -= f[i] * el;
for (int j = n - 1; j >= i; j--)
{
m[i2][j] -= el * m[i][j];
}
}
return det/**pow(-1, reverse)*/;
}
var
arr:array[1..1000] of integer;
i,N:integer;
max:integer;
begin
max:=1;
write('Укажите кол-во эл-ов - ');
read(N);
for i:=1 to N do//Присваивание и вывод массива
begin
arr[i]:=1+random(100);
write(arr[i],' ');
if arr[i]>max then max:=arr[i];
end;
writeln;
writeln('Максимальный эл-т - ',max);
for i:=1 to N do//Увеличение чет. эл-ов
begin
if arr[i] mod 2=0 then arr[i]:=arr[i]+max;
write(arr[i],' ');
end;
end.
Объяснение:
i,j,n:integer;
a:array[1..1000] of boolean;
begin
Write('Введите верхнюю границу чисел (до 1000): ');
Read(n);
for i:=1 to n do a[i]:=True;
i:=2;
while sqr(i)<=n do begin
j:=sqr(i);
if a[i] then
while j<=n do begin a[j]:=False; j:=j+i end;
Inc(i)
end;
for i:=1 to n do
if a[i] then Write(i,' ')
end.
Тестовое решение:
Введите верхнюю границу чисел (до 1000): 100
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97