Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#include "conio.h"
#include "math.h"
#include "windows.h"
#include “stdafx.h”
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
setlocale(LC_ALL, "Russian");
cout<<"\nВведите количество элементов: ";
int i, ineg;
float sum, *a = new float[n]; // 1
cout<< "\nВведите элементы массива: \n\n";
for(i = 0; i < n; i++) cin >> a[i];
for(i = 0; i < n; i++) cout << a[i] << ‘ ‘; // 2
for(i = 0; i < n; i++)
if(a[i] < 0) ineg = i; // 3
for(sum = 0., i = ineg + 1; i < n; i++)
sum += a[i]; // 4
cout<<"\nСумма: "<< sum;
delete[] a;
return 0;
}
Поскольку количество элементов заранее не задано, память под массив выделяется в операторе 1 на этапе выполнения программы с помощью операции new. Выделяется столько памяти, сколько необходимо для хранения n элементов вещественного типа, и адрес начала этого участка заносится в указатель а.
Номер последнего отрицательного элемента массива формируется в переменной ineg. При просмотре массива с помощью оператора 3 в эту переменную последовательно записываются номера всех отрицательных элементов массива, таким образом, после выхода из цикла в ней остается номер самого последнего.
С целью оптимизации программы может возникнуть мысль объединить цикл нахождения этого номера с циклами ввода и контрольного вывода элементов массива, но это не рекомендуется делать, потому что ввод данных, их вывод и анализ - разные по смыслу действия, и смешивание их в одном цикле не прибавит программе ясности. После отладки программы контрольный вывод (оператор 2) можно удалить или закомментировать.
Теперь перейдем к критическому анализу нашей первой попытки решения задачи. Для массивов, содержащих отрицательные элементы, эта программа работает верно, но при их отсутствии, как правило, завершается аварийно. Это связано с тем, что если в массиве нет ни одного отрицательного элемента, переменной ineg значение не присваивается. Поэтому в операторе for (оператор 4) будет использовано значение ineg, инициализированное произвольным образом. Поэтому в программу необходимо внести проверку, есть ли в массиве хотя бы один отрицательный элемент. Для этого переменной ineg присваивается начальное значение, не входящее в множество допустимых индексов массива (например, -1). После цикла поиска номера отрицательного элемента выполняется проверка, сохранилось ли начальное значение ineg неизменным. Если это так, это означает, что условие a[i]<0 в операторе 3 не выполнилось ни разу, и отрицательных элементов в массиве нет:
Дата публикования: 2015-10-09; Прочитано: 219 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!