Форум программистов, компьютерный форум CyberForum.ru

Массив размерностью 100 заполнить случайными числами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
TNegal
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 5
22.10.2013, 13:52     Массив размерностью 100 заполнить случайными числами #1
Помогите с заданием,кому не трудно.

Массив размерностью 100 заполнить случайными числами, лежащими в диапазоне
от –10 до 10. Во всех последовательностях положительных чисел заменить значения элементов
с максимальным и минимальным значением на среднее для этой последовательности

Буду благодарен)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2013, 13:52     Массив размерностью 100 заполнить случайными числами
Посмотрите здесь:

Массив размерностью 30 заполнить случайными числами, лежащими в диапозоне от -100 до 100 C++
C++ заполнить линейный массив случайными числами С++
заполнить функцию случайными числами от 0 до 100, конец записи 0 C++
C++ Заполнить массив случайными числами, лежащими в интервале от 0 до 100
C++ Заполнить одномерный массив X 10 случайными числами от -5 до 7
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
es_
 Аватар для es_
198 / 198 / 46
Регистрация: 14.01.2013
Сообщений: 446
22.10.2013, 15:32     Массив размерностью 100 заполнить случайными числами #2
С виду вроде среднее задание для студентов, но при решении наступил на не мало подводных камней..
Поэтому получился некомпактный код. В принципе можно переделать покомпактнее, но думаю и так сойдёт:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <ctime>
 
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    srand(time(NULL));
    int const n=100;
    int mas[n],i,j,max=0,min=10,sred=0,istart=0,ifinish=0;
    bool y=true;
    for (i=0;i<n;i++)
    {
        mas[i]=rand() % 21 - 10;
    }
    cout<<"Рандомный массив:"<<endl;
    for (i=0;i<n;i++)
    {
        cout<<mas[i]<<" ";
        if((i+1)%10==0)
        {
            cout<<endl;
        }
    }
    for (i=0;i<n;i++)
    {
        if(mas[i]>0 && y)
        {
            istart=i;
            y=false;
        }
        if(mas[i]<=0 && !y)
        {
            ifinish=i;y=true;
            if(ifinish-istart>1)
            {
                max=mas[istart];min=mas[istart];
                for(j=istart;j<ifinish;j++)
                {
                    sred+=mas[j];
                    if(min>mas[j])
                    {
                        min=mas[j];
                    }
                    if(max<mas[j])
                    {
                        max=mas[j];
                    }
                }
                sred=sred/(ifinish-istart);
                for(j=istart;j<ifinish;j++)
                {
                    if(mas[j]==max || mas[j]==min)
                    {
                        mas[j]=sred;
                    }
                }
                sred=0;
            }
            ifinish=0;istart=0;
        }
        if (mas[i]>0 && i==n-1 && !y)
        {
            ifinish=i;
                max=mas[istart];min=mas[istart];
                for(j=istart;j<=ifinish;j++)
                {
                    sred+=mas[j];
                    if(min>mas[j])
                    {
                        min=mas[j];
                    }
                    if(max<mas[j])
                    {
                        max=mas[j];
                    }
                }
                sred=sred/((ifinish+1)-istart);
                for(j=istart;j<=ifinish;j++)
                {
                    if(mas[j]==max || mas[j]==min)
                    {
                        mas[j]=sred;
                    }
                }
                sred=0;
        }
    }
    cout<<"\nПреобразованный массив:"<<endl;
    for (i=0;i<n;i++)
    {
        cout<<mas[i]<<" ";
        if((i+1)%10==0)
        {
            cout<<endl;
        }
    }
    system("PAUSE > void");
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.10.2013, 16:16     Массив размерностью 100 заполнить случайными числами #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <random>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
template<typename It, typename Cmp>
std::pair<It, It> find_range(It first, It last, Cmp comp)
{
   if (first == last)
   {
      return std::make_pair(last, last);
   }
   It range_start = last, range_end = last;
   while (first != last)
   {
      if (comp(*first))
      {
         if (range_start == last)
         {
            range_start = first;
         }
      }
      else
      {
         if (range_start != last)
         {
            range_end = first;
            break;
         }
      }
      ++first;
   }
   return std::make_pair(range_start, range_end);
}
 
int main()
{
   const size_t size = 100;
   std::mt19937 gen(time(0));
   std::uniform_int_distribution<> distr(-10, 10);
   std::vector<int> v(size);
   std::generate(v.begin(), v.end(), [&distr, &gen]() { return distr(gen); });
   std::cout << "generated: ";
   std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
   auto lambda = [](int val) { return val > 0; };
   auto range = find_range(v.begin(), v.end(), lambda);
   while (range.first != v.end())
   {
      auto average = std::accumulate(range.first, range.second, 0) / std::distance(range.first, range.second);
      auto minmax = std::minmax_element(range.first, range.second);
      std::replace_if(range.first, range.second, [&minmax](int val)
      {
         return val == *minmax.first || val == *minmax.second;
      }, average);
      range = find_range(range.second, v.end(), lambda);
   }
   std::cout << "after replace vector is: ";
   std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
22.10.2013, 17:11     Массив размерностью 100 заполнить случайными числами #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <algorithm>
#include <iterator>
#include <random>
#include <vector>
#include <numeric>
 
int main()
{
    typedef std::vector<int> v_int;
    typedef std::vector<int>::iterator v_it;
    typedef std::ostream_iterator<int> output_int;
 
    const size_t N = 100;
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<> uid(-10, 10);
    v_int v(N);
 
    auto print_v = [](const v_int& p_vec)
    {
        std::copy(std::begin(p_vec), std::end(p_vec), output_int(std::cout, " "));
        std::cout << std::endl;
    };
    auto findPos = [](v_it begin, v_it end)
    {
        return std::find_if(begin, end, [](const v_it::value_type x) {return x > 0; });
    };
    auto findNotPos = [](v_it begin, v_it end)
    {
        return std::find_if(begin, end, [](const v_it::value_type x) {return x <= 0; });
    };
 
    std::generate(std::begin(v), std::end(v), [&uid, &gen] { return uid(gen); });
    print_v(v);
 
    v_it beg = findPos(v.begin(), v.end()), end = findNotPos(beg, v.end());
    while (beg != std::end(v))
    {
        if (beg + 1 != end)
        {
            v_it::value_type sum = std::accumulate(beg, end, 0);
            v_it::value_type ave = sum / (end - beg);
            auto p = std::minmax_element(beg, end);
            *p.first  = ave;
            *p.second = ave;
        }
 
        beg = findPos(end, v.end());
        end = findNotPos(beg, v.end());
    }
 
    std::cout << "\nResult:\n";
    print_v(v);
}
TNegal
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 5
24.10.2013, 12:48  [ТС]     Массив размерностью 100 заполнить случайными числами #5
Спасибо огромное)
Очень выручили)
Yandex
Объявления
24.10.2013, 12:48     Массив размерностью 100 заполнить случайными числами
Ответ Создать тему
Опции темы

Текущее время: 23:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru