Основы программирования на С++ для начинающих

Задачи: Одномерные массивы C++

Приступая к решению задач, ознакомьтесь со статьями Массивы в C++  и Генератор случайных чисел rand(), если еще не читали их.   Постарайтесь решать предложенные задачи самостоятельно и смотреть наши решения только в крайнем случае.

1. Создать массив типа int на 10 элементов и заполнить его случайными числами от 7 до 14. После заполнения перезаписать все числа, которые больше  десяти:  от хранимого значение отнять 10.  Например  в  ячейке хранится число 12: 12 – 10 = 2. Записать в эту ячейку 2 Записывая новое значение, используйте составные (комбинированные) операторы.

2. Заполнить массив из 50-ти элементов нечётными числами от 1 до 99. (используйте операцию остаток от деления, чтобы проверить число на чётность)

3. Объявить три массива. Первые два заполнить случайными значениями  от 10 до 30. В элементы третьего массива записать сумму соответствующих элементов первых двух массивов. (в нулевую ячейку третьего – сумму нулевых ячеек первого и второго массивов и так далее). Затем найти среднее арифметическое элементов третьего массива, максимальное значение и минимальное значение, которые он хранит.

113 thoughts on “Задачи: Одномерные массивы C++

  1. Хороший сайт, статьи написаны понятно и доступно. Но! Неудобно, что уроки идут в спутанной последовательности: я была на уроке цикл while, по стрелочке дальше попадаем на строки, ссылку на урок массивы видим прямо в статье, в следующей на random, а если пойти по стрелке далее попадаем опять на приветствие (1 статья). Достаточно путаная дорожка, мой совет сделать правильную последовательность статей по темам при переходе по активным стрелкам, что под статьей.

      1. Спасибо за ответ. Да, я видела на главной. Просто привыкла урок прошла => жми на следующий :) А так приходиться возвращаться на главную.

  2. Всем привет. Дело в том , что не правильно считает не только максимальное, минимальное и среднее, но и сумму каждого элемента 1-го и 2-го массива в 3-ем. В чем проблема?)
    #include
    #include
    #include
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, "rus");

    int Ar1 [30] = {};
    int Ar2 [30] = {};
    int Ar3 [30] = {};
    const int lowerLimit = 10;
    const int upperLimit = 30;

    srand(time(NULL));
    cout << "Массив Ar1: ";
    for (int i = 0; i < 30; i++)
    {
    Ar1[i] = lowerLimit + rand() % (upperLimit - lowerLimit + 1);
    cout << Ar1[i] << " | ";
    }
    cout << endl << endl;

    cout << "Массив Ar2: ";
    for (int i = 0; i < 30; i++)
    {
    Ar2[i] = lowerLimit + rand() % (upperLimit - lowerLimit + 1);
    cout << Ar1[i] << " | ";
    }
    cout << endl << endl;

    cout << "Массив Ar3: ";
    for (int i = 0; i < 30; i++)
    {
    Ar3[i] = Ar1[i] + Ar2[i];
    cout << Ar3[i] << " | ";
    }
    cout << endl << endl;
    float sum = 0;
    int srednee = 0;
    int max = Ar3[0];
    int min = Ar3[0];
    for ( int i = 0; i < 30; i++)
    {
    sum += Ar3[i];
    if (Ar3[30] > max)
    {
    max = Ar3[i];
    }

    }
    srednee = sum / 30;
    cout << "Макс = " << max << endl;
    cout << "Мин = " << min << endl;
    cout << "Среднее = " << srednee << endl;

    system("pause");
    return 0;
    }

    1. 1) По поводу суммы элементов 1-го и 2-го массива и их записи в ячейки 3-го массива. Смотри внимательно на строку 29. В цикле ты заполняешь второй массив, а на экран выводишь данные первого.
      2) Максимум. Смотри строку 47: Ar3[30] > max ? Замени на Ar3[i] > max
      3) Поиск минимального значения в коде не прописан. Допиши и будет тебе минимальное :)

  3. В третьем задании я постарался всё в одном for сделать, считая что у автора так и будет. Каково же было удивление, что в ответе их 4. Видимо, это было сделано, чтобы таким новичкам, как мы, было понятнее.
    for (int i=0; i<max;i++)
    {
    arr[i]=1+rand()%100;
    arr2[i]=1+rand()%100;
    arr3[i]=arr[i]+arr2[i];
    a+=arr3[i];

    if (min<arr3[i])
    {}
    else {min=arr3[i];}
    cout<<arr3[i]<<"|";
    }
    b=a/max;
    cout<<"\nsred = "<<b<<endl;
    cout<<"min = "<<min<<endl;
    return 0;
    }
    Извиняюсь за малопонятный код, я писал его прямо в телефоне, в онлайн компиляторе.

    1. Не беспокойся, просто я имею кое-какой опыт. Некоторым поначалу сложно понять, зачем вообще переменная нужна. В общем, побольше практики надо, каждый оператор разбирай в отдельности.

  4. не могу никак от 7 до 14 заполнить рандомно … Сможет кто объсянить?

    1. #include
      #include
      #include
      using namespace std;

      int main()
      {
      setlocale(LC_ALL, "rus");
      int arr[10] = {};

      srand(time(NULL));

      for (int i = 0; i < 10; i++) { arr[i] = 7 + rand() % 8; cout << arr[i] << " || "; } cout << endl; }

      rand() % 8 будет генерировать числа от 1 до 7

  5. Есть легкий способ справляться с генерированными числами (так называемые псевдо-числа)

    [code]#include// у кого ctime
    using namespace std;
    void main()
    {
    setlocale(LC_ALL, “ru”);
    srand(time(NULL));

    for(int i=0; i<size; i++)
    {
    array[i]=rand()%(x-y)+(y) //x – наибольшее число задано нам
    //y – наименьшее число задано нам
    cout << " array[" << i << "] = " << array[i] << "\n"; // вывод на экран
    }

    //например заданы числа от 10 до 20
    for(int i=0; i<size; i++)
    {
    array[i] = rand()%(20-10)+(10); //20 – наибольшее число задано нам
    //10 – наименьшее число задано нам
    cout << " array[" << i << "] = " << array[i] << "\n"; // вывод на экран
    }
    [/code]

    1. Брать остатки от деления (%) rand() в любых формах и проявлениях – это дурная практика! При этом нарушается равномерный закон распределения rand(). В самых простейших случаях это проходит безнаказанно, но, например, при моделировании – это даёт совершенно искажённые результаты.

  6. По поводу второй задачи, вроде вот так гораздо проще решить.

    1. все понял, просто в условии должно быть написано : заполнить … рандомными нечётными числами от 1 до 99.

  7. А почему в коде первой задачи стоит условие больше или равно, если в условии сказано, что перезаписать необходимо те элементы массива, в которых числа строго БОЛЬШЕ десяти?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *