1) Обе команды организуют цикл для выполнения серии повторяемых команд (эта серия наз. тело цикла).
Оба цикла сначала проверяют условие (в пока оно задано явно, в повторить N раз проверяется, не достигнуто ли N). Если оно истинно, выполняется тело цикла, а если нет, то переход на оператор, следующий за телом цикла.
2) Повторить N раз – количество повторений цикла известно в момент написания программы. При каждом повторении исполняется одно и та же серия команд, номер повторения при исполнении цикла неизвестен. Цикл выполнится ровно N раз.
Для команды пока число повторений заранее не известно и определяется в ходе выполнения этой команды. Величины, для которых проверяется условие повторения, могут изменяться в теле цикла и влиять на исполняемые команды. Возможен случай, что тело цикла не выполнится ни разу.
3) С команды пока можно реализовать любой цикл, то есть она в любом случае может заменить команду Повторить N раз. Обратное утверждение неверно - в некоторых случаях команда Повторить N раз не может заменить команду пока
#include <iostream>
int main() {
const int SIZE = 10;
bool isSence = false;
int sum = 0;
int count = 0;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand() % 20 - 10; // "рандомно" заполняем массив от -10 до 10
std::cout << arr[i] << "\t"; // выводим массив в консоль
if (arr[i] >= 0)
isSence = true;
}
for (int i = 0; i < SIZE; i++)
{
if ((isSence) && (arr[i] > 0))
sum += arr[i]; //sum = sum + arr[i];
count++;
}
if (isSence)
std::cout << "\nсреднее арифметическое положительных чисел = " << double(sum) / count << std::endl; // явное приведение типов
else
std::cout << "\nВ массиве нету положительных чисел или нету нулей и/или отрицательных чисел" << std::endl;
return 0;
}