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

Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
kpoxaa
70 / 31 / 1
Регистрация: 03.08.2012
Сообщений: 446
08.08.2012, 03:40     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! #1
Задача
Нужно написать программу, которая создает одномерный массив, размером в 12 элементов. Затем заполняет его либо с клавиатуры (разрешается вводить числа в интервале от 0 до 99), либо генерирует его содержимое с помощью генератора случайных чисел, в интервале от 0 до 99. Для выбора одного из двух вариантов заполнения, программа задает вопрос пользователю. Затем программа должна инвертировать массив, путем замены значения первого элемента на последний, второго на предпоследний и так далее. Вывод на экран должен происходить ровно два раза: до инверсии и после.
Хочу спросить совета. Что в моем коде нужно исправить, чтобы выглядело более профессионально? Что тут лишнее и как лучше написать?

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
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
 
 
class mass
{
public:
    void add_mas();
    void vivod_mas();
private:
    int mas[12];
};
 
void mass::add_mas()
{
    int vvod;
    cout<<"Hotite zapolnit' massvi avtomati4eski? \n\nDa [0] / NET [1]: ";
    cin>>vvod;
 
    if (vvod==0)
        {
            srand((unsigned)time(NULL));
                for(int i=0;i<12;i++)
                    {
                        int number = rand()%99 + 0;
                        mas[i]=number;
                    }
        }
    else if (vvod==1)
    {
        cout<<"Zapolnite massiv! \n\n12 cifr ot '0' do '99': ";
            for (int i=0;i<12;i++)
                {
                    cin>>mas[i];        
                }
 
            for (i=0;i<12;i++)
                {
                    while (mas[i]<0||mas[i]>99)
                        {
                            system("cls");
                            cerr<<"Error! Vvedite ot 0 do 99! \n\nPerezapis elementa "<<(i+1) <<":";
                            cin>>mas[i];
                        }
                }
    }
    else if (vvod!=0||vvod!=1)
    {
        system("cls");
        add_mas();
    }
                
            
}
void mass::vivod_mas()
{
    system("cls");
 
        for(int i=0; i<12; i++)
            {
                cout<<"["<<mas[i]<<"]";
            }
                cout<<endl;
    int n=12;
    int n2=12;
    int tmp;
 
    for(i=0;i<n/2;i++)
    {
        tmp=mas[i];
        mas[i]=mas[n2-1];
        mas[n2-1]=tmp;
        n2--;
    }
 
    for(i=0; i<12; i++)
            {
                cout<<"["<<mas[i]<<"]";
            }
                cout<<endl;
 
}
 
void main()
{
    mass a;
    a.add_mas();
    a.vivod_mas();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 03:40     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию!
Посмотрите здесь:

C++ Заполнить рандомно массив
C++ нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ?
Как рандомно заполнить одномерный массив единицами и нулями? C++
C++ Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char)
C++ Заполнить рандомно массив и все отрицательные элементы отправить в конец
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrey.K
 Аватар для Andrey.K
338 / 259 / 15
Регистрация: 14.11.2010
Сообщений: 480
08.08.2012, 05:31     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! #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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
 
class mass
{
    private:
    int* mas;
public:
    mass()
    { mas=new int[12]; }
    ~mass()
    {  cout<<"тут разрушится массив"<<endl; delete[] mas; }
    void fill_rnd();
    void fill_user();
    void show_mas();
    void show_invert_mass();
};
void mass::fill_rnd()
{
    srand((unsigned)time(NULL));
    for(int i=0;i<12;i++)
        mas[i]=rand()%99;
}
void mass::fill_user()
{
    for(int i=0;i<12;i++)
    {
        do{
        cout<<"Введите ["<<i+1<<"] элемент: ";cin>>mas[i];
        if(mas[i]<1 || mas[i]>99) { cout<<"Неправильный ввод. Повторите: "<<endl; }
        }while(mas[i]<1 || mas[i]>99);
    }
}
void mass::show_mas()
{
    for(int i=0;i<12;i++)
        cout<<mas[i]<<" ";
    cout<<endl;
}
void mass::show_invert_mass()
{
    for(int i=0,j=11;i<6;i++,j--)
    {
        int temp=mas[i];
        mas[i]=mas[j];
        mas[j]=temp;
    }
    show_mas();
}
int main()
{
    setlocale(0,"rus");
    mass masObj;
    int input;
    do{
        cout<<"1 - Случайное заполнение."<<endl;
        cout<<"2 - Ручное заполнение."<<endl;
        cout<<"Ваш выбор: ";cin>>input;
        if(input<1 || input>2) cout<<"Неправильный выбор. Повторите."<<endl;
        if(input==1)
        {
            masObj.fill_rnd();
            cout<<"Текущий массив: "<<endl;
            masObj.show_mas();
            cout<<"Новый массив: "<<endl;
            masObj.show_invert_mass();
        }
        else if(input==2)
        {
            masObj.fill_user();
            cout<<"Текущий массив: "<<endl;
            masObj.show_mas();
            cout<<"Новый массив: "<<endl;
            masObj.show_invert_mass();
        }
    }while(input<1 || input>2);
    getch();
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.08.2012, 08:42     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! #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
63
64
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <functional>
#include <iterator>
 
struct random_strategy
{
   int operator()()
   {
      return distr(gen);
   }
private:
   static std::mt19937 gen;
   static std::uniform_int_distribution<> distr;
};
 
std::mt19937 random_strategy::gen(time(0));
std::uniform_int_distribution<> random_strategy::distr(0, 99);
 
struct input_strategy
{
   int operator ()()
   {
      int number = 0;
      std::cout << "Input number: ";
      std::cin >> number;
      return number;
   }
};
 
int main()
{
   static const size_t size = 10;
   std::function<int(void)> strategy;
   int choice = 0;
   std::cout << "Enter your choice (0 - random, other - input): ";
   while (!(std::cin >> choice))
   {
      std::cerr << "Wrong input. Try again" << std::endl;
   }
   if (choice == 0)
   {
      random_strategy strat;
      strategy = std::bind(&random_strategy::operator(), strat);
   }
   else
   {
      input_strategy strat;
      strategy = std::bind(&input_strategy::operator(), strat);
   }
   int array[size] = {0};
   std::generate(std::begin(array), std::end(array), strategy);
   auto output = [&array](const std::string& message)
   {
      std::cout << message << std::endl;
      std::copy(std::begin(array), std::end(array), std::ostream_iterator<int>(std::cout, " "));
      std::cout << std::endl;
   };
   output("Before reverse");
   std::reverse(std::begin(array), std::end(array));
   output("After reverse");
}
kpoxaa
70 / 31 / 1
Регистрация: 03.08.2012
Сообщений: 446
08.08.2012, 10:46  [ТС]     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! #4
Угу спасибо. Сейчас попробую так сделать
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2012, 12:13     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! #5
kpoxaa, вот очень простое решение твоей задачи
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
#include <ctime>
#include <iostream>
using namespace std;
 
#define N 12 //îäГ*îìåðГ*ûé Г¬Г*Г±Г±ГЁГў, Г°Г*çìåðîì Гў 12 ýëåìåГ*òîâ
 
void rekurs_swap(int i, int n, int * arr);
 
int main()
{
    int i;//Ñ÷¸ò÷èê
    int iArray[N] = {0};
    int iInput    = -1;
    srand(time(0));
    //Г–ГЁГЄГ« äëÿ âûáîðГ* ïîëüçîâГ*òåëåì ðåæèìГ* ââîäГ*
    while(iInput < 0 || 1 < iInput)
    {
        //system("cls");//ГЏГ® æåëГ*Г*ГЁГѕ
        cout<<"***MENU***\n";
        cout<<"0 - Hand Input \n";
        cout<<"1 - Random Fill\n";
        cin>>iInput;
        //2 ñòðîêè Г*èæå Г*Г* ГўГ±ГїГЄГЁГ© ñëó÷Г*Г©
        cin.sync();
        cin.clear();    
    }
    for(i = 0; i < N; i++)
    {
        cout<<"arr["<<i + 1<<"] = ";
        if(iInput)
            cout<<(iArray[i] = rand()%99)<<endl;
        else
            cin>>iArray[i];
    }
    cout<<"Array after rekyrs swap\n";
    rekurs_swap(0, N, iArray);
    for(i = 0; i < N; i++)
        cout<<iArray[i]<<endl;
    return 0;
}
 
void rekurs_swap(int i, int n, int * arr)
{
    swap(arr[i],arr[n - 1 - i]);//ГќГІГ® îáû÷Г*ûé îáìåГ*
    //ïðîñòî ГѕГ§Г*Гѕ Г±ГІГ*Г*Г¤Г*ðòГ*ГіГѕ ГґГіГ*êöèþ îáìåГ*Г* äâóõ Г§Г*Г*Г·ГҐГ*ГЁГ©
    if(i + 1 < n/2)
        rekurs_swap(i + 1, n, arr);//Вот рекурсивный вызов
 
}
Миниатюры
Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию!  
Yandex
Объявления
08.08.2012, 12:13     Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию!
Ответ Создать тему
Опции темы

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