Пример 2.3

В одномерном массиве a размерностью n, вычислить сумму элементов массива, меньших заданного значения В и стоящих на местах, кратных трем.

Решение

Объединим алгоритмы ввода – вывода массива (рисунок 2.2) и вычисления суммы (рисунок 2.7). Для сокращения записи графической схемы алгоритма ввода и вывода массива, здесь и в дальнейшем используем простые блоки вида:

В алгоритме для вычисления искомой суммы рассматриваются только те элементы, которые в массиве стоят на местах, кратных трем, при этом необходимо учитывать что нумерация элементов массива в С начинается с нуля т.е. элемент массива с индексом a[0] это первый элемент массива. Таким образом, элементы стоящие на местах кратных трем – а2, а5, а8, …, индекс элемента массива (он же – параметр цикла) должен последовательно принимать значения 2, 5, 8, …, т.е. изменяться от 2 с шагом 3, что и достигается изменениями в блоках 2 и 6 алгоритма вычисления суммы (рисунок 2.7). Так в блоке 2 запишем i=2, в блоке 3 (i<n)< i=""></n)<>, а в блоке 6 – (step=3) i=i+3. Для суммирования из рассмотренных элементов только тех, которые меньше заданного В, используется ветвление с условием аi (блок 4). Окончательный алгоритм вычисления суммы заданных элементов примет, следующий вид (рисунок 2.8). В задаче будем использовать динамический способ задания массива. В данном примере для обращения к элементам массива используются указатели. Как уже отмечалось в разделе 1.1, имя массива является указателем на его первый элемент.

  Используемые переменные: n – число элементов массива; a[] – динамический массив; s – сумма элементов массива; B – заданное число; i – параметр цикла; #include main() { int n,i; float s, B; puts("Введите число элементов массива a"); scanf("%d",&n); float *a=new float[n]; for (i=0;i<n;i++)< p=""></n;i++)<> { printf("Введите число a[%2d]=",i); scanf("%f",a+i); } puts("Введите B"); scanf("%f",&B); s=0; for(i=2;i< p=""><> if(*(a+i) puts("Массив a"); for(i=0;i<n;i++)< p=""></n;i++)<> printf("%.1f ",*(a+i)); printf(" "); printf("Сумма чисел, меньших %.1f, стоящих на местах, кратных 3, равна %.2f ",B,s); delete[] a; // освобождение памяти return(0); }

17) Перестановка двух элементов массива

Для перестановки двух элементов массива x[] с индексами k и m, необходимо использование дополнительной переменной (tmp), для хранения копии одного из элементов (рисунок 2.3 а), но можно обойтись и без использования дополнительной переменной tmp. В этом случаи алгоритм перестановки имеет следующий вид (рисунок 2.3 б).

В большинстве случаев предпочтительнее использовать первый способ, поскольку он не содержит дополнительных вычислений, что особенно важно при перестановке вещественных чисел.

tmp=x[k]; x[k]=x[m]; x[m]=tmp; x[k]=x[k]+x[m]; x[m]=x[k]-x[m]; x[k]=x[k]-x[m];
(а) (б)

Рисунок 2.3 Алгоритм и фрагмент программы перестановки двух элементов массива c использованием дополнительной переменной (а) и без нее (б)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: