Одно из решений, возможно, не самое эффективное #include <iostream> #include <iomanip> int main() { using namespace std;
//исходная последовательность const int N = 8; double Arr[N] = { 14.2, -3.4, 7.8, -3.1, 8.2, 98.22, -7, 12 };
//вывод на экран исходной последовательности for (int i = 0; i < N; ++i) cout << Arr[i] << " "; cout << endl;
//подсчитаем количества отрицательных и неотрицательных элементов int kpos = 0; int kneg = 0; for (int i = 0; i < N; ++i) if (Arr[i] < 0) ++kneg; else ++kpos;
//создадим массивы отрицательных и неотрицательных элементов double * ArrNeg = new double[kneg]; double * ArrPos = new double[kpos];
int kn = 0, kp = 0; for (int i = 0; i < N; i++) if (Arr[i] < 0) ArrNeg[kn++] = Arr[i]; else ArrPos[kp++] = Arr[i];
cout << "Enter a, b, c or d: "; char ch; cin >> ch;
if (ch == 'a' || ch == 'b' || ch == 'c' || ch == 'd') { switch (ch) { //пункт а) case 'a': for (int i = 0; i < kneg; ++i) Arr[i] = ArrNeg[i]; for (int i = 0; i < kpos; ++i) Arr[i + kneg] = ArrPos[i]; break;
//пункт б) case 'b': for (int i = 0; i < kneg; ++i) Arr[i] = ArrNeg[--kn]; for (int i = 0; i < kpos; ++i) Arr[i + kneg] = ArrPos[i]; break;
//пункт в) case 'c': for (int i = 0; i < kneg; ++i) Arr[i] = ArrNeg[i]; for (int i = 0; i < kpos; ++i) Arr[i + kneg] = ArrPos[--kp]; break;
//пункт г) case 'd': for (int i = 0; i < kneg; ++i) Arr[i] = ArrNeg[--kn]; for (int i = 0; i < kpos; ++i) Arr[i + kneg] = ArrPos[--kp]; break; } } else cout << "You entered wrong symbol\n";
for (int i = 0; i < N; ++i) cout << Arr[i] << " "; cout << endl; delete[] ArrNeg; delete[] ArrPos; return 0; }
Первый алгоритм: const n=30; var a:array[1..30] of integer; s:longint; i:integer; begin { формируем массив } Randomize; Writeln('Элементы массива:'); for i:=1 to n do begin a[i]:=Random(51)-25; Write(a[i]:4) end; Writeln; { собственно, алгоритм } s:=a[1]*a[2]; i:=3; while i<=n-1 do begin s:=s+a[i]*a[i+1]; i:=i+2 end; Writeln('Сумма пар произведений равна ',s) end.
Тестовое решение: Элементы массива: 1 10 -9 -12 -2 20 21 14 5 19 21 -14 -10 -17 5 -9 -8 17 18 11 -21 -3 -15 -10 -15 -16 -15 2 3 21 Сумма пар произведений равна 846
Второй алгоритм const n=30; var a:array[1..30] of integer; smax,imax:longint; i:integer; begin { формируем массив } Randomize; Writeln('Элементы массива:'); for i:=1 to n do begin a[i]:=Random(51)-25; Write(a[i]:4) end; Writeln; { собственно, алгоритм } smax:=a[1]+a[2]; imax:=1; for i:=2 to n-1 do if smax<a[i]+a[i+1] then begin smax:=a[i]+a[i+1]; imax:=i end; Writeln('Номер первого из пары элементов с максимальной суммой: ',imax) end.
Тестовое решение: Элементы массива: 23 13 -11 -1 -18 20 -23 1 -21 -10 7 15 -2 24 -18 -22 -13 12 -16 22 19 -14 -14 -14 19 15 8 -15 -19 -22 Номер первого из пары элементов с максимальной суммой: 20
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку