Информатика и технология программирования


Смысл переменных - часть 3



for (s=1,...;...;...;) { Получить k; s=s*k; }

Заметим, что смысл переменной не меняется в зависимости от того, какими конструкциями окружен сам фрагмент. В приведенных них примерах накапливается сумма значений, полученных разными способами и от разных источников :


for (s=0,i=0; i&#60n; i++) // Сумма элементов массива


s+=A[i];


for (s=0,i=0; i&#60n &#38&#38 A[i]&#62=0; i++) // Сумма элементов массива до первого


s+=A[i]; // отрицательного



for (s=0,i=0; i&#60n; i++) // Сумма положительный элементов


if (A[i]&#62 0) s+=A[i]; // массива



for (s=0,x=0; x&#60=1; x+=0.1) // Сумма значений функции sin


s+=sin(x); // в диапазоне 0..1 с шагом 0.1



for (s=0,...;...;...) { получить k; if (k&#62s) s=k; }

Для доказательства этого факта можно привлечь метод математической индукции : действительно, если на очередном шаге s содержит максимальное значение, полученное на предыдущих шагах, то после выполнения if (k&#62s) s=k; она будет содержать такой же максимум, но уже с учетом текущего шага. Типичный пример - нахождение максимального элемента массива.


for (s=0,i=0; i&#60 10; i++) if (A[i]&#62s) s=A[i];

Рассмотрим более сложные вариации на эту тему. Следующий фрагмент запоминает не само значение максимума, а номер элемента в массиве, где оно находится .


for (i=1,k=0; i&#60 10; i++) if (A[i]&#62A[k]) k=i;

И, наконец, если в просматриваемой последовательности в поиске максимума /минимума используются не все элементы, а ограниченные дополнительным условием (например, минимальный из положительных), в программе должен быть учтен факт того, что она начинает работу при отсутствии элемента, выбранного в качестве максимального /минимального


for (i=0,k=-1; i&#60 10; i++) // k=-1 - нет элемента, принятого за минимальный


{ if (A[i]&#60 0) continue;
if (k==-1 || A[i]&#60A[k]) k=i;
}




Начало  Назад  Вперед