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

В массиве все элементы, стоящие после максимального, уменьшить на 1 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 19:00     В массиве все элементы, стоящие после максимального, уменьшить на 1 #1
В задаче требуется написать, отладить и протестировать программу, обеспечивающую выполнение следующих действий
1. Ввод одномерного массива
2 Вывод исходного массива
3. Обработка массива в соотвествии с заданием
Выод параметров массива, которые требуется найти по заданию
5. Вывод массива после внесенных изменений
В программе требуется обязательно использовать функции. Использование глобальных переменных запрещено. При обработке вспомогательными массивами по возможности не пользоваться. В программе нужно обеспечить выбор способа заполнения исходного массива: с клавиатуры,случайное заполнение,загрузка из файла
Задание:
В массиве все элементы, стоящие после максимального,уменьшить на 1
Пример: из массива А[5]: 3 2 1 5 4 должен получиться массив 3 2 1 5 3
Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2010, 19:00     В массиве все элементы, стоящие после максимального, уменьшить на 1
Посмотрите здесь:

C++ В массиве целых чисел найти элементы, стоящие после элементов со значением, кратным минимальному
В 1d массиве уменьшить в двое элементы кратные 2 и стоящие перед max элементам C++
C++ Все четные элементы, стоящие левее минимального, уменьшить в 2 раза
C++ Уменьшить все четные элементы матрицы на значение максимального элемента
Обнулить элементы матрицы стоящие после максимального элемента C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 19:22     В массиве все элементы, стоящие после максимального, уменьшить на 1 #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
//================================================
#include <iostream>
#include <cstdlib>
#include <ctime>
//================================================
void keybord(int *Arr, int n)
{
    for(int i = 0; i < n; ++i)
    {
        std::cout << "Arr[" << i << "] = ";
        std::cin >> Arr[i];
    }
 
    std::cout << "Array: ";
    for(int i = 0; i < n; ++i)
    {
        std::cout << Arr[i] << ' ';
    }
}
//================================================
void random(int *Arr, int n)
{
    srand(static_cast<unsigned int>(time(0)));
    std::cout << "Array: ";
    for(int i = 0; i < n; ++i)
    {
        Arr[i] = rand()%100+1+i;
        std::cout << Arr[i] << ' ';
    }
}
//================================================
void foo(int *Arr, int n)
{
    int index = 0;
 
    for(int i = 0; i <n; ++i)
    {
        if(Arr[index] < Arr[i])
        {
            index = i;
        }
    }
 
    for(int i = index+1; i < n; ++i)
    {
        Arr[i]--;
    }
}
//================================================
int main()
{
    int *Arr, n, x;
    std::cout << "Enter size array: ";
    std::cin >> n;
    Arr = new int[n];
 
    std::cout << "1.Enter element of array(keybord)" << std::endl
                   << "2.Enter element of array(random)" << std::endl;
 
    std::cout << "> ";
    std::cin >> x;
 
    switch(x)
    {
        case 1:
                   keybord(Arr, n);
                   break;
        case 2:
                   random(Arr, n);
                   break;
        default:
                   std::cerr << "Error" << std::endl;
                   return 1;
    }
 
    foo(Arr, n);
 
    std::cout << "\nAfter: ";
    for(int i = 0; i < n; ++i)
    {
        std::cout << Arr[i] << ' ';
    }
 
    return 0;
}
//================================================
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 19:34     В массиве все элементы, стоящие после максимального, уменьшить на 1 #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
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
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <cstdlib>
 
void fill_from_keyb(int* Arr, int n)
{
    std::cout<<"<: \n";
    for(int i=0; i<n; ++i)
        std::cin>>Arr[i];
}
 
void fill_by_rand(int* Arr, int n)
{
    int max, min;
    std::cout<<"Enter min, max values of rand\n";
    std::cin>>min>>max;
    for(int i=0; i<n; ++i)
    {
        Arr[i]=min+rand()%(max-min+1);
    }
}
 
void fill_from_file(int* Arr, int n)
{
    std::string FileName;
    std::cout<<"Enter filename\n";
    std::cin>>FileName;
    std::ifstream ifs(FileName.c_str());
    if(!ifs)
        throw std::logic_error("Can` t open file\n");
    int i=0;
    while(!ifs.eof())
    {
        if(!ifs.eof())
            ifs>>Arr[i];
    }   
}
 
void output(int* Arr, int n)
{
    std::cout<<"Array\n";
    for(int i=0; i<n; ++i)
        std::cout<<Arr[i]<<' ';
    std::cout<<'\n';
}
 
void transform(int* Arr, int n)
{
    int max=*Arr;
    int max_ind=0;
    for(int i=0; i<n; ++i)
    {
        if(Arr[i]>max)
        {
            max=Arr[i];
            max_ind=i;
        }
    }
    for(int i=max_ind+1; i<n; ++i)
    {
        Arr[i]-=1;
    }
}
 
int main()
{
        srand(static_cast<unsigned>(time(0)));
    int* Arr;
    int n;
    std::cout<<"Enter n: ";
    std::cin>>n;
    Arr=new int[n];
    int choise=0;
    std::cout<<"Enter 1 for fill array from keyboard\n"
        <<"Enter 2 for fill array from file\n"
        <<"Enter 3 for fill array by random\n";
    std::cin>>choise;
    switch(choise)
    {
    case 1:
        fill_from_keyb(Arr, n);
        break;
    case 2:
        {
            try
            {
                fill_from_file(Arr, n);
            }
            catch(const std::exception& e)
            {
                std::cerr<<e.what()<<'\n';
                return 1;
            }
        }
        break;
    case 3:
        fill_by_rand(Arr, n);
        break;
    default:
        {
            std::cout<<"There is no such option\n";
            return 1;
        }
    }
    output(Arr, n);
    transform(Arr, n);
    output(Arr, n);
    return 0;
}
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 19:35  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #4
asics

что то не то раню прогу в компиляторе Vvedite a: ввожу 3 2 1 5 4 нажимаю Enter
vvedite b: далее пишет vvedite h: Press any key и все а ответ почему то не выходит 3 2 1 5 3 который должен получиться
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 19:40     В массиве все элементы, стоящие после максимального, уменьшить на 1 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
zmei89, Я что-то не наблюдаю в своём коде такого
Vvedite a: vvedite b: vvedite h:
Откудо вы это взяли ?

Добавлено через 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
103
104
105
106
107
108
109
110
//================================================
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
//================================================
void keybord(int *Arr, int n)
{
    for(int i = 0; i < n; ++i)
    {
        std::cout << "Arr[" << i << "] = ";
        std::cin >> Arr[i];
    }
 
    std::cout << "Array: ";
    for(int i = 0; i < n; ++i)
    {
        std::cout << Arr[i] << ' ';
    }
}
//================================================
void random(int *Arr, int n)
{
    srand(static_cast<unsigned int>(time(0)));
    std::cout << "Array: ";
    for(int i = 0; i < n; ++i)
    {
        Arr[i] = rand()%100+1+i;
        std::cout << Arr[i] << ' ';
    }
}
//================================================
void from_file(int *Arr, int n)
{
    std::ifstream ifs("1.txt");
 
    std::cout << "Array: ";
    if(!ifs)
    {
        std::cerr << "Error" << std::endl;
    }
    else
    {
        for(int i = 0; i < n; ++i)
        {
            ifs >> Arr[i];
            std::cout << Arr[i] << ' ';
        }
    }
}
//================================================
void foo(int *Arr, int n)
{
    int index = 0;
 
    for(int i = 0; i <n; ++i)
    {
        if(Arr[index] < Arr[i])
        {
            index = i;
        }
    }
 
    for(int i = index+1; i < n; ++i)
    {
        Arr[i]--;
    }
}
//================================================
int main()
{
    int *Arr, n, x;
    std::cout << "Enter size array: ";
    std::cin >> n;
    Arr = new int[n];
 
    std::cout << "1.Enter element of array(keybord)" << std::endl
                   << "2.Enter element of array(random)" << std::endl
                   << "3.Enter element of array(from file)" << std::endl;
 
    std::cout << "> ";
    std::cin >> x;
 
    switch(x)
    {
        case 1:
                   keybord(Arr, n);
                   break;
        case 2:
                   random(Arr, n);
                   break;
        case 3:
                   from_file(Arr, n);
                   break;
        default:
                   std::cerr << "Error" << std::endl;
                   return 1;
    }
 
    foo(Arr, n);
 
    std::cout << "\nAfter: ";
    for(int i = 0; i < n; ++i)
    {
        std::cout << Arr[i] << ' ';
    }
 
    return 0;
}
//================================================
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 19:47     В массиве все элементы, стоящие после максимального, уменьшить на 1 #6
asics,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void from_file(int *Arr, int n)
{
    std::ifstream ifs("1.txt");
 
    std::cout << "Array: ";
    if(!ifs)
    {
        std::cerr << "Error" << std::endl;
    }
    else
    {
        for(int i = 0; i < n; ++i)
        {
            ifs >> Arr[i];
            std::cout << Arr[i] << ' ';
        }
    }
}
Функция не будет работать правильно. После вывода ошибки о том, что файл не закрылся должно идти завершение функции а то и всей программы. Исключения здесь вроде в тему.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 19:49     В массиве все элементы, стоящие после максимального, уменьшить на 1 #7
ForEveR, Я просто еще з исключениями не знаком,так-что пока как-то так
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 19:51  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #8
вот так компилятор выдает,сам не пойму от куда там введите берется
Миниатюры
В массиве все элементы, стоящие после максимального, уменьшить на 1  
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 19:52     В массиве все элементы, стоящие после максимального, уменьшить на 1 #9
zmei89, А я вам скажу откуда... Какая IDE? У вас код не компилируется и запускается предыдущая версия рабочего вашего кода.
Ах да. Файл то должен быть CPP а не C
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 19:54     В массиве все элементы, стоящие после максимального, уменьшить на 1 #10
zmei89, Блин,ты что-то намутил,только не понятно з каким кодом,просто скопируй мой или ForEveR`а код и все будет норм.Я так понял у тебя кодеблокс,вот я тоже свой код написал в этой среде так-что должно канать.
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 20:04  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #11
вроде еще чего то не хватает
Миниатюры
В массиве все элементы, стоящие после максимального, уменьшить на 1  
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 20:32  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #12
ForEveR
в твой версии проги у меня ошибку выдает
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 20:52     В массиве все элементы, стоящие после максимального, уменьшить на 1 #13
zmei89, Какие ?У меня все работает.
Миниатюры
В массиве все элементы, стоящие после максимального, уменьшить на 1  
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 20:56  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #14
Цитата Сообщение от asics Посмотреть сообщение
zmei89, Какие ?У меня все работает.
но он должен вывести ответ 3 2 1 5 3,а он не выводит
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 21:00     В массиве все элементы, стоящие после максимального, уменьшить на 1 #15
zmei89, Смотри:сначала прога просит тебя ввести размер масива(вводи 5),потом выбирай как этот масив будет заполнен(допусти мы хотим случайные числа тогда у этого знака > пишем 2),ну вот и все,зделай так как я написал и покажы,скрин что получиться.
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 21:03  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #16
Цитата Сообщение от asics Посмотреть сообщение
zmei89, Смотри:сначала прога просит тебя ввести размер масива(вводи 5),потом выбирай как этот масив будет заполнен(допусти мы хотим случайные числа тогда у этого знака > пишем 2),ну вот и все,зделай так как я написал и покажы,скрин что получиться.
вот такое значение получилось
Миниатюры
В массиве все элементы, стоящие после максимального, уменьшить на 1  
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
18.11.2010, 21:08     В массиве все элементы, стоящие после максимального, уменьшить на 1 #17
Ну так и должно быть - первый максимальный елемент 92,елементы которыи идут после него уменшылись на 1.
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
18.11.2010, 21:11  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #18
Цитата Сообщение от asics Посмотреть сообщение
Ну так и должно быть - первый максимальный елемент 92,елементы которыи идут после него уменшылись на 1.
Спасибо! а я думал он должен вывести такую комбинацию 3 2 1 5 3
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 823
21.11.2010, 14:21  [ТС]     В массиве все элементы, стоящие после максимального, уменьшить на 1 #19
Цитата Сообщение от zmei89 Посмотреть сообщение
Спасибо! а я думал он должен вывести такую комбинацию 3 2 1 5 3
std тут не подходит нужно через printf и scanf использовать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2010, 14:24     В массиве все элементы, стоящие после максимального, уменьшить на 1
Еще ссылки по теме:

C++ В массиве уменьшить все элементы между двумя отрицательными значениями
В массиве из 10 целых чисел заменить все элементы, стоящие на четных местах, на минимальный элемент C++
Все элементы массива, стоящие после минимального, заменить нулями C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.11.2010, 14:24     В массиве все элементы, стоящие после максимального, уменьшить на 1 #20
zmei89, Ты издиваешся ?Не мог сразу сказать что надо на Си ?!
Yandex
Объявления
21.11.2010, 14:24     В массиве все элементы, стоящие после максимального, уменьшить на 1
Ответ Создать тему
Опции темы

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