- •Основные определения
- •Операции над массивами
- •Массивы и указатели
- •Варианты обращения к элементам массива
- •Примеры вывода элементов массива через указатель
- •Передача одномерного массива в функцию в качестве параметра
- •Способы передачи одномерного массива в качестве параметра
- •Массив указателей на функцию
- •Динамические одномерные массивы
- •Способы определения динамических одномерных массивов
- •Пример нахождения среднего значения элементов динамического массива
- •Перегрузка функций при работе с массивами
- •Шаблоны функций при работе с массивами
- •Поиск в массиве
- •Сортировка массивов
- •Сортировка обменом («пузырьковая» сортировка)
- •Сортировка одномерного массива по некоторому признаку
- •Сортировка вставкой
- •Сортировка выбором
- •Примеры
- •Нахождение номера первого вхождения числа y в массив Х
- •Поиск в массиве максимального элемента и его номера
- •Проверка элементов массива на некоторую закономерность
- •Построение элементов массива в соответствии с некоторой закономерностью.
- •Нахождение количества положительных элементов между максимальным и минимальным элементами целочисленного массива
- •Нахождение суммы элементов вещественного массива, расположенных правее последнего отрицательного элемента
return 0;
}
Тестовые примеры должны включать: a[imin]) расположен левее a[imax]); a[imin]) расположен правее a[imax]);
a[imin]) и a[imax]) совпадают; //ситуация корректно обрабатывается во втором примере (d=0).
Нахождение суммы элементов вещественного массива, расположенных правее последнего отрицательного элемента
Используем динамический массив:
int main() |
|
|
|
|
{ |
|
|
|
|
int n; |
|
|
|
|
cout << "n=?"; |
|
|
|
|
cin >> |
n; |
|
|
|
int i, |
ineg=0; |
new double [n]; |
|
|
double |
sum, *a = |
|
||
cout << "a[i]= ?"; |
cin >> a[i]; |
//ввод массива |
||
for (i |
= 0; i<n; |
i++) |
||
for (i |
= 0; i<n; |
i++) cout << a[i] << " "; |
//вывод массива |
|
for (i |
= 0; i<n; |
i++) |
if (a[i] < 0) ineg = i; |
|
for (sum = 0, i= |
ineg+1; i < n; i++) sum += a[i]; |
|
||
cout << "\nsum: |
" << sum; |
|
||
delete |
[] a; |
|
|
|
_getch(); |
|
|
|
|
return |
0; |
|
|
|
} |
|
|
|
|
С целью оптимизации программы может возникнуть мысль объединить цикл нахождения номера с циклами ввода и контрольного вывода, однако т.к. это разные по смыслу действия, то это ухудшит «ясность» программы. После отладки программы контрольный вывод можно удалить или закомментировать.
Это не очень удачный вариант программы!!!
Программа работает верно для массивов, содержащих отрицательные элементы, но при их отсутствии, завершается аварийно (отсутствует инициализация переменной ineg). В программу необходимо ввести проверку на наличие хотя бы одного отрицательного элемента.
int main()
{ |
|
|
|
int n; |
|
|
|
cout << "input n\n"; cin >> n; |
|
||
double |
sum, *a = new double [n]; |
|
|
int i; |
|
|
|
cout << "input a[i]\n"; |
//ввод массива |
||
for (i |
= 0; i<n; i++) |
cin >> a[i]; |
|
for (i |
= 0; i<n; i++) cout << a[i] << " "; |
//вывод массива |
|
int ineg = -1; |
if (a[i] < 0) ineg = i; |
|
|
for (i |
= 0; i<n; i++) |
|
|
if (ineg != -1) { |
for (sum = 0, i= ineg+1; i < n; i++) sum += a[i]; |
||
|
|
||
|
cout << "\n S=" << sum <<endl; |
||
} |
0\n" << endl; |
|
|
else |
cout << "\n<0: |
|
|
delete |
[] a; |
|
|
_getch(); |
|
|
|
return |
0; |
|
|
} |
|
|
|
Программирование – лекция 12 (лекции Стрикелевой Л.В.) |
31 |
Можно предложить и более рациональное решение этой задачи: просматривать массив в обратном порядке, суммируя его элементы, и завершить цикл, как только встретится отрицательный элемент:
int main() |
|
|
{ |
n; |
|
int i, |
|
|
cout << |
"input n\n"; cin >> n; |
|
double |
*a = new double [n]; |
|
cout << |
"input a[i] :\n "; |
//ввод массива |
for (i |
= 0; i<n; i++) cin >> a[i]; |
bool flag_neg = false; double sum = 0;
for (i = n-1; i>=0; i--) {
if (a[i] < 0) {flag_neg = true; break;} sum +=a[i];
}
if (flag_neg )
cout << "\n S=" << sum << endl; else cout << "\n<0: 0";
delete [] a; _getch(); return 0;
}
В этой программе каждый элемент массива анализируется не более одного раза, а ненужные элементы не просматриваются вообще. Для больших массивов это существенно. Для исчерпывающего тестирования этой программы необходимо ввести три варианта программы: один, несколько и ни одного отрицательного элемента.
Программирование – лекция 12 (лекции Стрикелевой Л.В.) |
32 |