Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (03.12.2011 в 15:03)
Можно поступить следующим образом
#include <stdio.h>
#include <iostream>
using namespace std;

// Прототипы функций
int is_prime_number(int number);
int max_element(int *arr, int number);
void fullfill_array(int *arr, int number);
// Два варианта среднего арифметического: с исключением
// максимального значения и без него
int arithmetic_mean(int *arr, int number, int max);
int arithmetic_mean(int *arr, int number);
// Главная функция
int main(void)
{
  // Объявляем переменные
  int *fstarr, *sndarr, result;
  int fstn, sndn, i, maxfst, maxsnd, count;

  // Формируем и заполняем первый массив
  cout << "Количество элементов в первом массиве = ";
  cin >> fstn;
  fstarr = new int[fstn];
  fullfill_array(fstarr, fstn);
  // Формируем и заполняем второй массив
  cout << "Количество элементов во втором массиве = ";
  cin >> sndn;
  sndarr = new int[sndn];
  fullfill_array(sndarr, sndn);

  // Ищем максимальный элемент первого массива
  maxfst = max_element(fstarr, fstn);
  // В зависимости от того является ли максимальное
  // значение простым числом, выводим результат
  if(is_prime_number(fstarr[maxfst]))
  {
    // Максимальное значение является простым числом
    cout << "Среднее арифметическое первого массива = "
         << arithmetic_mean(fstarr, fstn, fstarr[maxfst])
         << endl;
  }
  else
  {
    // Максимальное значение не является простым числом
    cout << "Среднее арифметическое первого массива = "
         << arithmetic_mean(fstarr, fstn)
         << endl;
  }
  // Ищем максимальный элемент второго массива
  maxsnd = max_element(sndarr, sndn);
  // В зависимости от того является ли максимальное
  // значение простым числом, выводим результат
  if(is_prime_number(sndarr[maxsnd]))
  {
    // Максимальное значение является простым числом
    cout << "Среднее арифметическое первого массива = "
         << arithmetic_mean(sndarr, sndn, sndarr[maxsnd])
         << endl;
  }
  else
  {
    // Максимальное значение не является простым числом
    cout << "Среднее арифметическое первого массива = "
         << arithmetic_mean(fstarr, fstn)
         << endl;
  }

  // Освобождаем динамически выделенную память
  delete [] fstarr;
  delete [] sndarr;

  // Остановка перед закрытием окна
  system("PAUSE");
  return 0;
}
// Является ли число простым
int is_prime_number(int number)
{
  int i = 0;
  if(number <= 2) return 1;
  for(i = 2; i < number; i++)
  {
    if(!(number % i)) return 0;
  }
  return 1;
}
// Заполняем элементы массива
void fullfill_array(int *arr, int number)
{
  int i;
  for(i = 0; i < number; i++)
  {
     cout << "MASSIV X/" << i + 1 << " = ";
     cin >> arr[i];
  }
}
// Ищем максимальный элемент массива
int max_element(int *arr, int number)
{
  int max = arr[0];
  int Nmax = 0, i = 0;
  for(i = 0; i < number; i++)
  {
    if(max < arr[i])
    {
      max = arr[i];
      Nmax = i;
    }
  }
  return Nmax;
}
// Среднее арифметическое положительных чисел
int arithmetic_mean(int *arr, int number, int max)
{
  int result = 0;
  int count = 0, i = 0;
  for(i = 0; i < number; i++)
  {
    if(arr[i] > 0 && max != arr[i])
    {
      result += arr[i];
      count++;
    }
  }
  if(count) return result / count;
  else return 0;
}
// Среднее арифметическое положительных чисел
int arithmetic_mean(int *arr, int number)
{
  int result = 0;
  int count = 0, i = 0;
  for(i = 0; i < number; i++)
  {
    if(arr[i] > 0)
    {
      result += arr[i];
      count++;
    }
  }
  if(count) return result / count;
  else return 0;
}
Тут правда элементы физически не удаляются, они просто игнорируются... если нужно удаление, то лучше использовать STL (если это, конечно, допускается).


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: