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

Вычислить номер максимального элемента массива - C++

Восстановить пароль Регистрация
 
hadouken
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 10
26.10.2011, 07:00     Вычислить номер максимального элемента массива #1
День добрый. Уже несколько дней ломаю голову с одной задачей, но всё безрезультатно
Прошу помочь. Задача:

В одномерном массиве, состоящем из n целых элементов, вычислить:
1) номер максимального элемента;
2) сумму элементов, расположенных после максимального элемента.

1.Использовать динамические массивы (размер массива вводится пользователем с
проверкой ввода);
2.Выявить ограничения на вводимые пользователем значения и, если таковые имеются, не
допустить их ввода.
3. Реализовать меню пользователя, состоящее как минимум из 4-х пунктов:
-a. ввод элементов массива;
-b. обработка массива;
-c. вывод массива на экран
-d. выход.
4. По выбору пользователя заполнять массив случайными величинами, либо значениями,
введенными пользователем с клавиатуры.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 07:00     Вычислить номер максимального элемента массива
Посмотрите здесь:

C++ В одномерном массиве, состоящем из N целых элементов, вычислить номер максимального элемента массива
Вычислить номер максимального по модулю элемента массива C++
C++ Вычислить номер максимального по модулю элемента массива
Вычислить номер максимального по модулю элемента массива C++
Вычислить номер максимального по модулю элемента массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
26.10.2011, 07:17     Вычислить номер максимального элемента массива #2
1.Использовать динамические массивы (размер массива вводится пользователем с
проверкой ввода);
Пример кода создающего динамический массив
C++
1
2
3
4
5
6
7
8
9
int size;
cin>>size;   //вводим размер с клавиатуры
int * myArray; // указатель на переменную int
myArray = new int [size]; // выделяем память на массив
 
for (i=0; i<size; i++)  //таким образом выводим массвив
     cin>>myArray[i];  //на печать
 
delete[] myArray;  // не забудьте очистить память когда она вам больше не нужна
2.Выявить ограничения на вводимые пользователем значения и, если таковые имеются, не
допустить их ввода.
по всей видимости проверить чтобы пользователь не ввел букву вместо цифры или например чтобы нельзя было указать слишком большое значение размера массива.

- в третьем пункте думаю все ясно.

4. По выбору пользователя заполнять массив случайными величинами, либо значениями,
введенными пользователем с клавиатуры.
воспользуйтесь функциями srand() и rand(). ВОТ ТУТ ЕСТЬ ПРИМЕР
hadouken
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 10
26.10.2011, 07:24  [ТС]     Вычислить номер максимального элемента массива #3
Цитата Сообщение от greeezz Посмотреть сообщение
по всей видимости проверить чтобы пользователь не ввел букву вместо цифры или например чтобы нельзя было указать слишком большое значение размера массива.
+ значения должны быть неотрицательными.
За всё остальное спасибо большое.

Но можете подсказать что нибудь на счёт этого?
В одномерном массиве, состоящем из n целых элементов, вычислить:
1) номер максимального элемента;
2) сумму элементов, расположенных после максимального элемента.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 07:49     Вычислить номер максимального элемента массива #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от hadouken Посмотреть сообщение
Но можете подсказать что нибудь на счёт этого?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int iter, sum = 0, max = -1000000;
 
for (int i = 0; i < size - 1; ++i){
    if (array[i] >= max)
    {
         sum = 0;
         iter = i;   // 1вопрос
         max = array[i];
    }
    sum += array[i + 1]; // 2 вопрос
}
 
sum = (array[size - 1] >= max) ? 0 : sum; // на случай когда максимальный элемент сымй последний в массиве.
iter = (sum) ? iter : size - 1; //последний элемент массива в цикле не считается
//преимущество в том, что для вычисления суммы и индекса делается только один
//проход по массиву вместо двух
hadouken
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 10
26.10.2011, 08:04  [ТС]     Вычислить номер максимального элемента массива #5
Уже лучше но программа выдаёт большие числа. И при сумме оно должно тогда получится ещё больше, но - оно отличается максимум на пару десятков...

Могу выложить полностью код программы который у меня получился если надо.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 08:12     Вычислить номер максимального элемента массива #6
Цитата Сообщение от hadouken Посмотреть сообщение
Могу выложить полностью код программы который у меня получился если надо.
отличная мысль. так и надо было сделать изначально.
hadouken
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 10
26.10.2011, 08:18  [ТС]     Вычислить номер максимального элемента массива #7
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
#include "stdafx.h"
 
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <stdlib.h>
#include <time.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    srand(time(NULL));
 
    int menu = 0;
    int ent = 0;
    int calc = 0;
    int iter = 0;
    int sum = 0;
    int max = -1000000; 
 
    int size;
    printf("Введите размер массива: ");
    scanf("%d", &size);
    int * array;
    array = new int [size];
 
    do
    {
        printf("1. Ввод элементов массива с клавиатуры.\n");
        printf("2. Ввод элементов массива случайным образом.\n");
        printf("3. Обработка массива.\n");
        printf("4. Вывод массива на экран.\n");
        printf("------------------------\n ");
        printf("0. Выход.\n");
 
        scanf("%d", &menu);
 
        switch (menu)
        {
        case 1:
            printf("Введите %d значений.\n", size);
            for (int i = 0, i < size, i++){
                printf("Введите элемент №%d", i++);
                scanf("%d", %array[i]);
            }
            ent = 1;
            calc = 0;
            break;
        case 2:
            for (int i = 0; i < size; i++)
            {
                array[i] = rand() % 10;
            }
            ent = 1;
            calc = 0;
            break;
        case 3:
            if (1 == ent)
            {
                for (int i = 0; i < size - 1; ++i)
                {
                    if (array[i] >= max)
                    {
                        sum = 0;
                        iter = i;
                        max = array[i];
                    }
                    sum += array[i + 1];
                }
 
                sum = (array[size - 1] >= max) ? 0 : sum;
                iter = (sum) ? iter : size - 1;
                calc = 1;
            }
            else
            {
                printf("Сначало нужно ввести данные.\n");
                printf("Выберите пункт меню 1 или 2.\n\n");
            }
            break;
        case 4:
            if (1 == calc)
            {
                printf("Максимальный элемент: %d\n", &max);
                printf("Сумма элементов после максимального: %d\n", &sum);
            }
            else
            {
                printf("Сначало нужно произвести расчёт.\n");
                printf("Выберите пункт меню 3.\n\n");
            }
            break;
        case 0:
            break;
        default:
            printf("Неверный пункт меню.\n");
        }
 
    }while(menu != 0);
 
    delete[] array;
 
    return 0;
}
Вот такие дела
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 08:20     Вычислить номер максимального элемента массива #8
hadouken, что не работает. приведите пример ввода вывода. menu сделайте типом char, чтобы избежать некорректного ввода.
max, sum, iter вынесены из цикла, поэтому при повторной работе с массивом уже содержат в себе значения предыдущих расчетов.
hadouken
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 10
26.10.2011, 08:27  [ТС]     Вычислить номер максимального элемента массива #9
alkagolik, ввожу допустим размер массива 10, => пункт меню 2 (элементы задаются случайным образом) => пункт меню. 3 (обработка массива. там тот код что вы мне дали) => 4 пункт при выводе такие значения: Максимальный элемент: 1571596 и Сумма элементов после максимального: 1571608
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 08:39     Вычислить номер максимального элемента массива #10
у вас много ошибок. я переписываю. выводит не то, потому что вы выводите адреса а не значения. вот переписал. добавил 5 кейс. Обратите внимание на строки 9 и 30. Возможно компилятор выдаст предупреждение, не стоит сильно переживать о нем. Все будет работать как часы.
код
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    srand(time(NULL));
 
    char menu = 0;
    int ent = 0;
    int calc = 0;
    int iter, sum, max;
 
    int size;
    int * array;
    printf("Введите размер массива: ");
    scanf("%d", &size);
 
    array = (int*)malloc(size * sizeof(int));
 
    do
    {
        printf("1. Ввод элементов массива с клавиатуры.\n");
        printf("2. Ввод элементов массива случайным образом.\n");
        printf("3. Обработка массива.\n");
        printf("4. Вывод массива на экран.\n");
        printf("------------------------\n ");
        printf("0. Выход.\n");
 
        scanf("%d", &menu);
 
        switch (menu)
        {
            case 1:
                printf("Введите %d значений.\n", size);
                iter = 0; sum = 0; max = -1000000;
 
                for (int i = 0; i < size; i++)
                {
                    printf("Введите элемент №%d", i++);
                    scanf("%d", &array[i]);
                }
                ent = 1;
                calc = 0;
                break;
            case 2:
                iter = 0; sum = 0; max = -1000000;
                for (int i = 0; i < size; i++)
                    array[i] = rand() % 10;
                ent = 1;
                calc = 0;
                break;
            case 3:
                if (1 == ent)
                {
                    for (int i = 0; i < size - 1; ++i)
                    {
                        if (array[i] >= max)
                        {
                            sum = 0;
                            iter = i;
                            max = array[i];
                        }
                        sum += array[i + 1];
                    }
 
                    sum = (array[size - 1] >= max) ? 0 : sum;
                    iter = (sum) ? iter : size - 1;
                    calc = 1;
                }
                else
                {
                    printf("Сначало нужно ввести данные.\n");
                    printf("Выберите пункт меню 1 или 2.\n\n");
                }
                break;
            case 4:
                if (1 == calc)
                {
                    printf("Максимальный элемент: %d\n", max);
                    printf("Сумма элементов после максимального: %d\n", sum);
                }
                else
                {
                    printf("Сначало нужно произвести расчёт.\n");
                    printf("Выберите пункт меню 3.\n\n");
                }
                break;
            case 5:
                for (int i = 0; i < size; ++i)
                    printf("%i ", array[i]);
 
                puts("\n");
                break;
            case 0:
                break;
            default:
                    printf("Неверный пункт меню.\n");
        }
 
    }while(menu != 0);
 
    free(array);
 
    return 0;
}


пример работы
Введите размер массива: 10
1. Ввод элементов массива с клавиатуры.
2. Ввод элементов массива случайным образом.
3. Обработка массива.
4. Вывод массива на экран.
------------------------
0. Выход.
2
1. Ввод элементов массива с клавиатуры.
2. Ввод элементов массива случайным образом.
3. Обработка массива.
4. Вывод массива на экран.
------------------------
0. Выход.
3
1. Ввод элементов массива с клавиатуры.
2. Ввод элементов массива случайным образом.
3. Обработка массива.
4. Вывод массива на экран.
------------------------
0. Выход.
5
9 5 9 5 7 5 5 0 8 6

1. Ввод элементов массива с клавиатуры.
2. Ввод элементов массива случайным образом.
3. Обработка массива.
4. Вывод массива на экран.
------------------------
0. Выход.
4
Максимальный элемент: 9
Сумма элементов после максимального: 36
1. Ввод элементов массива с клавиатуры.
2. Ввод элементов массива случайным образом.
3. Обработка массива.
4. Вывод массива на экран.
------------------------
0. Выход.
hadouken
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 10
26.10.2011, 08:52  [ТС]     Вычислить номер максимального элемента массива #11
alkagolik, Ящика пива хватит?
Безмерно благодарен. Сейчас буду просматривать свои ошибки и запоминать.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.10.2011, 09:04     Вычислить номер максимального элемента массива #12
hadouken, там еще неточность. добавьте вывод номера максимального элемента (iter), как требует задание, а вывод значения максимума думаю можно оставить.

Добавлено через 3 минуты
вам осталось только реализовать эти пункты и вывод номера элемента
Цитата Сообщение от hadouken Посмотреть сообщение
1.Использовать динамические массивы (размер массива вводится пользователем с
проверкой ввода
);
2.Выявить ограничения на вводимые пользователем значения и, если таковые имеются, не
допустить их ввода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 10:14     Вычислить номер максимального элемента массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.10.2011, 10:14     Вычислить номер максимального элемента массива #13
1) номер максимального элемента;
2) сумму элементов, расположенных после максимального элемента.

C++
1
2
3
std::vector<int> vec = {1,2,3,4,5,4,3,2,1};
std::cout << "Number of max element is: " << std::max_element(vec.begin(), vec.end()) - vec.begin() << std::endl;
std::cout << "Sum after max element is: " << std::accumulate(std::max_element(vec.begin(), vec.end()) + 1, vec.end(), 0) << std::endl;
Yandex
Объявления
26.10.2011, 10:14     Вычислить номер максимального элемента массива
Ответ Создать тему
Опции темы

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