Решение задач на операторы цикла для обработки массивов в C++

Решение задач на операторы цикла для обработки одномерных массивов. Циклы for, while, do…while


Содержание



1. Нахождение суммы элементов массива из n вещественных чисел

1.1. Решение с использованием цикла for
// сумма элементов массива вещественных чисел
const int MaxN = 100;
int n;
float A[MaxN];
float sum; // результат - сумма элементов массива

// задать значение n
n = 10;

// заполнение массива A произвольными значениями
for (int i=0; i<n; i++)
    A[i] = 0.1f * i;

// сначала обнулить значение sum
sum = 0;

// цикл вычисления суммы
for (int i=0; i<n; i++)
    sum = sum + A[i];

1.2. Решение с использованием цикла while

Решение задачи с использованием цикла while

// сумма элементов массива вещественных чисел - цикл while
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив
float sum; // результат - сумма элементов массива
int i; // дополнительная переменная

// задать значение n
n = 10;

// заполнение массива A произвольными значениями через цикл while
i=0;
while (i<n)
{
    A[i] = 0.1f*i;
    i++;
}

// сначала обнулить значение sum и i
sum = 0;
i = 0;

// цикл while для вычисления суммы
while (i<n)
{
    sum += A[i];
    i++;
}

1.3. Решение задачи. Цикл do…while
// сумма элементов массива вещественных чисел - цикл do..while
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив
float sum; // результат - сумма элементов массива
int i; // дополнительная переменная

// задать значение n
n = 10;

// заполнение массива A произвольными значениями через цикл do..while
i=0;
do
{
    A[i] = 0.1f*i;
    i++;
}
while (i<n);

// сначала обнулить значение sum и i
sum = 0;
i = 0;

// цикл do..while для вычисления суммы
do
{
    sum += A[i];
    i++;
}
while (i<n);

2. Нахождение среднего арифметического элементов массива из n вещественных чисел

Чтобы найти среднее арифметическое элементов массива, сначала нужно найти сумму элементов массива, а потом эту сумму поделить на число элементов массива.

2.1. Решение. Цикл for

В примере пропущен ввод массива и количества элементов массива n.

// среднее арифметическое элементов массива вещественных чисел - цикл for
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив
float avg; // результат - среднее арифметическое
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// сумма вычисляется в переменной avg
avg = 0;

// цикл for для вычисления суммы
for (i=0; i<n; i++)
{
    avg += A[i];
}

// вычисление среднего арифметического
avg = avg / n;

2.2. Решение. Цикл while

В примере пропущен ввод массива и количества элементов массива n.

// среднее арифметическое элементов массива вещественных чисел - цикл while
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив
float avg; // результат - среднее арифметическое
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// заполнение массива A произвольными значениями через цикл do..while
i=0;
do
{
    A[i] = 0.1f*i;
    i++;
}
while (i<n);

// сумма вычисляется в переменной avg
avg = 0;
i = 0;

// цикл while для вычисления суммы
while (i<n)
{
    avg += A[i];
    i++;
}

// вычисление среднего арифметического
avg = avg / n;

2.3. Решение. Цикл do…while

В примере пропущен ввод массива и количества элементов массива n.

// среднее арифметическое элементов массива вещественных чисел - цикл do..while
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив
float avg; // результат - среднее арифметическое
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// сумма вычисляется в переменной avg
avg = 0;
i = 0;

// цикл do..while для вычисления суммы
do
{
    avg += A[i];
    i++;
}
while (i<n);

// вычисление среднего арифметического
avg = avg / n;

3. Поэлементное копирование массивов

3.1. Цикл for

В данном примере приводится фрагмент кода, копирующий массив A из 10 вещественных чисел (float) в массив B.

// поэлементное копирование массивов - цикл for
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив-источник
float B[Max]; // массив-назначение
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// цикл копирования A => B
for (i=0; i<n; i++)
{
    B[i] = A[i];
}

3.2. Цикл while

Фрагмент копирования массива A в массив B с использованием цикла while

// поэлементное копирование массивов - цикл while
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
float A[Max]; // массив-источник
float B[Max]; // массив-назначение
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// цикл копирования A => B
i=0;
while (i<n)
{
    B[i] = A[i];
    i++;
}

3.3. Цикл do…while

Реализация копирования массивов с использованием цикла do…while

// поэлементное копирование массивов - цикл do...while
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
double A[Max]; // массив-источник
double B[Max]; // массив-назначение
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// цикл копирования A => B
i=0;
do
{
    B[i] = A[i];
    i++;
}
while (i<n);

4. Обращение массива (получить результирующий массив, обратный к исходному)

Пусть имеются два массива с именами A и B. Массив A задается. Получить результирующий массив B, обратный к исходному массиву A (элементы массива B идут в обратном порядке по отношению к массиву A).

В данном примере приводится реализация обращения массива с помощью трех известных операторов цикла.

// Получение обратного массива
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
double A[Max]; // массив-источник
double B[Max]; // массив-назначение
int i; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

// решение задачи с помощью цикла do...while обратного копирования A => B
i=0;
do
{
    B[i] = A[n-i-1];
    i++;
}
while (i<n);

// решение с помощью цикла for
for (i=0; i<n; i++)
    B[i] = A[n-i-1];

// решение с помощью цикла while
i=0;

while (i<n)
{
    B[i] = A[n-i-1];
    ++i;
}

5. Обращение массива без использования дополнительного массива

Задан массив A с n вещественных чисел. Реализовать операцию обращения массива без использования дополнительного массива.
В приведенном ниже коде реализовано обращение массива с использованием операторов циклов for, while, do…while.

Пусть задано следующее описание типов данных

// Обращение массива A
const int Max = 100; // максимально-допустимое количество элементов массива
int n; // n = 1..Max - заданное количество элементов массива
double A[Max]; // массив-источник
int i; // дополнительная переменная
double t; // дополнительная переменная

// ввод массива A и количества элементов массива n
// ...

Тогда решение задачи с использованием цикла do…while

// решение задачи с помощью цикла do...while обратного копирования A => B
i=0;
do
{
    t = A[i];
    A[i] = A[n-i-1];
    A[n-i-1] = t;
    i++;
}
while (i < (n/2));

Решение задачи с использованием цикла for

// решение с помощью цикла for
for (i=0; i<n/2; i++)
{
    t = A[i]; // использование дополнительной переменной t
    A[i] = A[n-i-1];
    A[n-i-1] = t;
}

Решение задачи с использованием цикла while.

// решение с помощью цикла while
i=0;

while (i<n/2)
{
    t = A[i];
    A[i] = A[n-i-1];
    A[n-i-1] = t;
    i++;
}


Связанные темы