Работа с операторами, управляющими конструкциями, целочисленными массивами

Страницы работы

Фрагмент текста работы

аналогии символ «;», встречающийся в программе «сам по себе» обозначает пустой оператор, не производящий никаких действий. Пустой оператор используется там, где по синтаксису требуется наличие оператора, но никаких действий производить не нужно. Например, в цикле, где все необходимое делается в его заголовке:

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++)                 // заполнение основного массива случайными

Похожие материалы

Информация о работе