аналогии символ «;», встречающийся в программе «сам по себе» обозначает пустой оператор, не производящий никаких действий. Пустой оператор используется там, где по синтаксису требуется наличие оператора, но никаких действий производить не нужно. Например, в цикле, где все необходимое делается в его заголовке:
for (i=0; i<n; i++) s = s + A[i]; // Обычный цикл
for (i=0; A[i]!=0 && i<n; i++); // Цикл с пустым оператором
Управляющая конструкция - линейная последовательность действий является основной в языках программирования, но в синтаксисе она, как правило, задается неявно. Банальность, о которой даже неудобно говорить, звучит так: последовательно записанные действия одного уровня выполняются последовательно.
Массив – совокупность элементов одного типа.
- тип имя_массива[количество_элементов].
- тип – задает тип элемента массива и может быть как стандартный так и определенный пользователем.
- имя_массива – задается пользователем и используется для обращения к массиву, может состоять из символов английского алфавита, цифр и символов подчеркивания но не должно начинаться с цифры и не должно совпадать с зарезервированными словами среды разработки.
- количество_элементов – целочисленная константа определяющая сколько элементов будет в массиве.
Доступ к элементу массива осуществляется с помощью индекса, например A[0] – первый элемент, A[1] – второй элемент, A[n] – n-й элемент массива. Нумерация элементов начинается с нуля. В памяти элементы массива хранится последовательно т.е. A[0], A[1], A[2]…A[n]. Имя массива — это адрес ячейки памяти по которому находится первый элемент.
Входныеданные:
Целочисленный массив Arr, состоящий из 10-ти элементов.
Результат:
Вывод на экран консоли в виде таблицы элементов массива, и указание элемента, разделяющего этот массив на две части в соответствии с заданием.
Метод решения:
Пройти по порядку по всем элементам массива, вычисляя при этом разность сумм элементов в левой и правой частях и сохраняя её в отдельный массив. Затем выбрать из получившегося массива наименьший элемент.
Алгоритм решения:
Для каждого элемента массива считаем сумму левой и правой частей. Вычисляем одну сумму из другой. Полученный результат сохраняем в массив. Находим минимальный элемент в полученном массиве и выводим его позицию.
В начале программы директивой define я определил значение константы N, равное 10 и используемое для определения массива Arr.
Sub – дополнительный массив для сохранения результатов вычисления разности левой и правой частей исходного массива.
k – искомое положение, при котором разность частей массива минимальна.
SUM – функция для заполнения дополнительного массива Sub путём вычисления разности частей исходного массива.
Относительно каждой позиции k в массиве Arr, находим сумму элементов левой части Sum1 и правой части Sum2. Вычисляем разность этих сумм. Если разность отрицательна, то меняем её знак Mod = - Mod. Заносим Mod в дополнительный массив Sub.
Fk() – функция вычисления положения k, при котором выполняется условие задачи.
В качестве аргумента передаём в неё дополнительный массив Sub.
Переменная Min, которой присвоено максимальное значение INT_MAX, предназначена для нахождения минимального элемента массива Sub. В случае, когда очередное значение элемента меньше Min, kприсваивается номер этого элемента. По окончании цикла функция Fk() возвращает значение k. Данное значение выводится в консоль с помощью форматного вывода стандартной функции printf().
#include "stdlib.h"
#include "stdio.h"
#include "time.h" // для сброса SRAND(TIME(0))
#include "conio.h" // консольный ввод-вывод
#include "windows.h" // GOTOXY()
#include "limits.h" // INT_MAX
#define N 10
void gotoxy(int x, int y)
{
COORD scrn;
HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
scrn.X = x; scrn.Y = y;
SetConsoleCursorPosition(hOuput, scrn);
}
void SUM (int *Arr, int *Sub) // заполнение дополнительного массива Sub[]
{
int Mod; // модуль разности частей массива
int Sum1=0, Sum2=0; // суммы первой и второй частей массива
int k = 0, i, j; // k - позиция, разделяющая массив на две части
for (j = 0; j < N-2; j++) // цикл j для дополнительного массива
{
for (i = 0; i < N; i++) // цикл i для основного массива
{
if (i <= k) // Sum1 суммирует элементы при i<=k
{
Sum1 += Arr[i];
}
else // Sum2 суммирует элементы при i>k
{
Sum2 += Arr[i];
}
}
Mod = Sum1 - Sum2; // вычисляем разность частей массива Mod
if (Mod < 0) // и если значение отрицательное,
{
Mod = -(Mod); // то меняем её знак и ...
}
Sub[j] = Mod; // присваиваем очередному элементу дополнительного массива
Sum1 = Sum2 = 0; // … и обнуляем суммы
k++; // следующая позиция k
}
}
int Fk(int Sub[])
{
int k;
int Min = INT_MAX; // минимальное значение разности частей массива
for (int i = 0; i < N-2; i++)
{
if (Sub[i] < Min)
{
k = i;
Min = Sub[k];
}
}
return k;
}
int main()
{
int k=0; // найти k, при котором разность частей массива минимальна
int Arr[N]; // основной массив элементов
int Sub[N - 2]; // дополнительный массив
system("cls"); // очистка окна консоли
srand(time(0));
for (int i = 0; i < N; i++) // заполнение основного массива случайными
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.