Создать Функции Для Вычисления Среднего Значения И Определения Простог

Тема в разделе "C/C++/C#", создана пользователем Ruslan737, 9 апр 2012.

  1. Ruslan737

    Ruslan737 New Member

    Регистрация:
    4 апр 2012
    Сообщения:
    4
    Симпатии:
    0
    Помогите пожалуйста написать программу на С++)
    Из положительных значений двух целочисленных массивов различной размерно-
    сти сформировать общий массив. Найти среднее арифметическое элементов, рас-
    положенных в массиве до первого простого числа. Создать функции для вычисле-
    ния среднего значения и определения простого числа.
     
  2. jlahcejlot

    jlahcejlot Гость

    Пример ввода и диапазоны значений теперь не модно писать ?
     
  3. Ruslan737

    Ruslan737 New Member

    Регистрация:
    4 апр 2012
    Сообщения:
    4
    Симпатии:
    0
    Сделал)))Может кому-нибудь пригодится)
    Код (C++):
    #include <cstdlib>
    #include <iostream>
    #include <time.h>
    #include <cmath>

    using namespace std;

    //Инициализация массива
    void arrInit(int* arr, int size){
    for(int i = 0; i < size; i++){
    *arr = rand()%19-9;
    arr++;
    }
    return;
    }

    // Проверка является ли число простым
    bool simpleCheck(int x){
    bool flag = true;
    for(int i = 2; i < x-1; i++){
    if(x % i == 0){
    flag = false;
    break;
    }
    }
    return flag;
    }

    // Подсчёт среднего
    double arrAverage(int* arr, int size){
    int summ = 0;
    double avg = 0;
    for(int i = 0; i < size; i++){
    if(simpleCheck(*arr))
    break;
    summ += *arr;
    avg = summ/(i+1.0);
    arr++;
    }
    return avg;
    }

    int main(int argc, char* argv[]){
    srand((unsigned)time(0));
    int size1 = 4, size2 = 6;
    int* arr1 = new int[size1];
    int* arr2 = new int[size2];
    // Инициализация массивов случайными значениями
    arrInit(arr1, size1);
    arrInit(arr2, size2);
    // Вычисление размера результирующего массива
    int posCount = 0;
    for(int i = 0; i < size1; i++)
    if(arr1[i] > 0)
    posCount++;          
    for(int i = 0; i < size2; i++)
    if(arr2[i] > 0)
    posCount++;
    // Заполнение рез. массива положительными значениями из первых двух массивов
    int* resArr = new int[posCount];
    int* ptr = resArr;
    for(int i = 0; i < size1; i++)
    if(arr1[i] > 0){
    *ptr = arr1[i];
    ptr++;
    }
    for(int i = 0; i < size2; i++)
    if(arr2[i] > 0){
    *ptr = arr2[i];
    ptr++;
    }
    cout << arrAverage(resArr, posCount) << endl;
    system("pause");
    return 0;
    }
     
  4. Ruslan737

    Ruslan737 New Member

    Регистрация:
    4 апр 2012
    Сообщения:
    4
    Симпатии:
    0
    Помогите пожалуйста немного переделать эту программу)Мне нужна с динамическими массивами,и можно её написать как-нибудь попроще,на начальном уровне?
     
  5. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    у тебя и так динамически выделяется рамять под массивы
    можно сделать чтобы размерности первых 2ух массивов
    вводилось с клавиатуры
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Ruslan737
    создавать море одинаковых тем не обязательно, Вам уже ответили, притом правильно.
    Не хватает лишь освобождения памяти в программе.
     
  7. Ruslan737

    Ruslan737 New Member

    Регистрация:
    4 апр 2012
    Сообщения:
    4
    Симпатии:
    0
    Форум тормозил,я создавал тему,он выдавал ошибку при попытке сохранения темы,так и получилось что написано их очень много

    Добавлено:
    переделайте пожалуйста программу)Чтобы размерности первых двух массивов вводились с клавы
     
  8. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
    //
    #include <cstdlib>
    #include <iostream>
    #include <time.h>
    #include <cmath>

    using namespace std;

    //Инициализация массива
    void arrInit(int* arr, int size){
    for(int i = 0; i < size; i++){
    *arr = rand()%19-9;
    arr++;
    }
    return;
    }

    // Проверка является ли число простым
    bool simpleCheck(int x){
    bool flag = true;
    for(int i = 2; i < x-1; i++){
    if(x % i == 0){
    flag = false;
    break;
    }
    }
    return flag;
    }

    // Подсчёт среднего
    double arrAverage(int* arr, int size){
    int summ = 0;
    double avg = 0;
    for(int i = 0; i < size; i++){
    if(simpleCheck(*arr))
    break;
    summ += *arr;
    avg = summ/(i+1.0);
    arr++;
    }
    return avg;
    }

    int main(int argc, char* argv[]){
    srand((unsigned)time(0));
    int size1, size2;
    cout<<"Введите размерности двух массивов:";
    cin>>size1>>size2;
    int* arr1 = new int[size1];
    int* arr2 = new int[size2];
    // Инициализация массивов случайными значениями
    arrInit(arr1, size1);
    arrInit(arr2, size2);
    // Вычисление размера результирующего массива
    int posCount = 0;
    for(int i = 0; i < size1; i++)
    if(arr1[i] > 0)
    posCount++;          
    for(int i = 0; i < size2; i++)
    if(arr2[i] > 0)
    posCount++;
    // Заполнение рез. массива положительными значениями из первых двух массивов
    int* resArr = new int[posCount];
    int* ptr = resArr;
    for(int i = 0; i < size1; i++)
    if(arr1[i] > 0){
    *ptr = arr1[i];
    ptr++;
    }
    for(int i = 0; i < size2; i++)
    if(arr2[i] > 0){
    *ptr = arr2[i];
    ptr++;
    }
    cout << arrAverage(resArr, posCount) << endl;
    system("pause");
    return 0;
    }
    //
     
  9. Ruslan737

    Ruslan737 New Member

    Регистрация:
    4 апр 2012
    Сообщения:
    4
    Симпатии:
    0
    Спасибо:)
     
  10. Ruslan737

    Ruslan737 New Member

    Регистрация:
    4 апр 2012
    Сообщения:
    4
    Симпатии:
    0
    А почему она вылетает после ввода размерностей массивов?
     
Загрузка...

Поделиться этой страницей