Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
1

Найти индекс максимального элемента массива

08.11.2014, 17:22. Просмотров 1020. Ответов 10
Метки нет (Все метки)

Не находит правильно индекс максимального элемента, в чём ошибка?
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
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<locale.h>
void main ()
{
    setlocale(LC_ALL,"rus");
    int i,n,min_inex,max_index;
    float *ptr,sum=0,p=1,max,min;
    printf("Пожалуйста,введите размерность массива\n");
    scanf("%d",&n);
    ptr=(float*)malloc(n*sizeof(float));
    if(ptr==NULL)
    {
        printf("Не хватает свободной памяти");
        return;
    }
    for(i=0;i<n;i++)
    {
        printf("Введите элемент массива[%d]\n",i+1);
        scanf("%f",ptr+i);
}
    for(i=0;i<n;i++)
    { if(*(ptr+i)<0) sum+=*(ptr+i);
    }
    printf("Сумма отрицательных элементов массива = %.2f\n",sum);
    max_index=0;
    max=*ptr;
    for(i=1;i<n;i++)
    {
        if (*(ptr+i)>max)
            max=*(ptr+i);
    max_index=i;
    }
    printf("%d\n",max_index);
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2014, 17:22
Ответы с готовыми решениями:

Найти индекс максимального по модулю элемента массива
Помогите пожалуйста, в Си вообще не разбираюсь В одномерном массиве, состоящем...

Найти индекс максимального отрицательного элемента массива (используя указатели)
Дан массив целых чисел состоящий из N элементов (N = 20). Найти индекс...

Вычислить индекс максимального по модулю элемента массива
Uslovie: В одномерном динамическом массиве, состоящем из n вещественных...

Индекс максимального элемента динамического массива (отладить код)
Здравствуйте. Программа некорректно считает индекс массива (вместо индекса...

Узнать индекс максимального элемента второй половины массива
Нам нужно узнать номер максимального элемента второй половины массива t с 20...

10
korvin_
2302 / 1802 / 336
Регистрация: 28.04.2012
Сообщений: 6,284
08.11.2014, 17:26 2
Цитата Сообщение от artart96 Посмотреть сообщение
в чём ошибка?
В том, что ты забыл объединить
C
1
2
max=*(ptr+i);
max_index=i;
в один блок.
1
magnum1992
43 / 43 / 19
Регистрация: 22.05.2011
Сообщений: 156
Записей в блоге: 5
08.11.2014, 17:31 3
А массив правильно вводится? Сумма отрицательных элементов совпадает?
0
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.11.2014, 22:20  [ТС] 4
Цитата Сообщение от korvin_ Посмотреть сообщение
Код C
1
2
max=*(ptr+i);
max_index=i;
Всё равно не работает.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,320
08.11.2014, 22:39 5
Цитата Сообщение от artart96 Посмотреть сообщение
не работает
Что такое "не работает"?
0
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.11.2014, 22:54  [ТС] 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что такое "не работает"?
Не правильно считает индекс.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,320
08.11.2014, 23:01 7
Цитата Сообщение от artart96 Посмотреть сообщение
Не правильно считает индекс.
Ну вы, я смотрю, в "пользовательском интерфейсе" своей программы индексы массива печатаете так, как будто они начинаются с единицы, а не с нуля

C
1
printf("Введите элемент массива[%d]\n",i+1);
Замечательно.

Но потом, когда приходит время печатать индекс максимального элемента, вы почему-то "забываете" об этой маленькой детали и печатаете голый С-шный индекс в массиве

C
1
printf("%d\n",max_index);
Разумеется, внешне будет казаться, что индекс вычислен неправильно. Раз уж вы решили делать вид, что массивы у вас индексируются с единицы, то и индекс максимального тогда тоже надо не забыть скорректировать, т.е. прибавить к нему 1 перед выводом, не так ли?

А в остальном все правильно работает, если вы исправили ошибку, указанную korvin_.
0
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.11.2014, 23:24  [ТС] 8
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Разумеется, внешне будет казаться, что индекс вычислен неправильно. Раз уж вы решили делать вид, что массивы у вас индексируются с единицы, то и индекс максимального тогда тоже надо не забыть скорректировать, т.е. прибавить к нему 1 перед выводом, не так ли?
Хорошо,изменил вот так,но индекс вычисляется всё равно не правильно, измените,как надо,потому что я видимо не совсем понимаю:
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
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<locale.h>
void main ()
{
    setlocale(LC_ALL,"rus");
    int i,n,min_index,max_index,k;
    float *ptr,sum=0,p=1,max,min;
    printf("Пожалуйста,введите размерность массива\n");
    scanf("%d",&n);
    ptr=(float*)malloc(n*sizeof(float));
    if(ptr==NULL)
    {
        printf("Не хватает свободной памяти");
        return;
    }
    for(i=0;i<n;i++)
    {
        printf("Введите элемент массива[%d]\n",i+1);
        scanf("%f",ptr+i);
}
    for(i=0;i<n;i++)
    { if(*(ptr+i)<0) sum+=*(ptr+i);
    }
    printf("Сумма отрицательных элементов массива = %.2f\n",sum);
    max=*(ptr+i);
    k=0;
    for(i=1;i<n;i++)
    {
        if (*(ptr+i)>max)
            max=*(ptr+i);
            k=i;
    }
    max_index=k+1;
    printf("%d\n",max_index);
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4848 / 2492 / 696
Регистрация: 18.10.2014
Сообщений: 4,320
08.11.2014, 23:40 9
Цитата Сообщение от artart96 Посмотреть сообщение
изменил вот так
Ну, здрасьте!

Вам же ясно сказали: объединить в один блок. А вы просто пробельчиков добавили чтобы все ровненько стало? Дополнительные пробелы в языке С ничего не значат и ничего не меняют.

Вы вообще знаете, что такое "блок"?

C
1
2
3
4
5
6
7
8
for(i=1;i<n;i++)
{
  if (*(ptr+i)>max)
  {
    max=*(ptr+i);
    k=i;
  }
}
Более того, если уж на то пошло, то '{}' для всего 'for' как раз таки являются лишними

C
1
2
3
4
5
6
for(i=1;i<n;i++)
  if (*(ptr+i)>max)
  {
    max=*(ptr+i);
    k=i;
  }
Как вам удалось написать ваш код, не понимая таких элементарных вещей?

И дополнительную переменную 'k' для всего этого заводить было совсем не обязательно. Все бы прекрасно работало и с 'max_index' как и раньше, просто при печати надо было сделать

C
1
printf("%d\n",max_index + 1);
И в C всегда 'int main()'. Не 'void main()', не 'double main()', не 'кукареку main()', а 'int main()'.
0
artart96
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.11.2014, 23:44  [ТС] 10
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вам же ясно сказали: объединить в один блок. А вы просто пробельчиков добавили чтобы все ровненько стало?
Понял,спасибо,я только учусь.Я проверял ситуацию,когда первое число максимальное и программа находила не правильный ответ, а сейчас увидел,что проверка в цикле у меня шла со второго элемента.
0
magnum1992
43 / 43 / 19
Регистрация: 22.05.2011
Сообщений: 156
Записей в блоге: 5
09.11.2014, 11:45 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от artart96 Посмотреть сообщение
27 max=*(ptr+i);
интересно чему же здесь равно i?

Добавлено через 2 минуты
TheCalligrapher,
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
то '{}' для всего 'for' как раз таки являются лишними
Тем не менее их наличие не приводит к ошибки и пагубно не влияет на программу.

Добавлено через 2 минуты
artart96,
Цитата Сообщение от artart96 Посмотреть сообщение
а сейчас увидел,что проверка в цикле у меня шла со второго элемента.
Так и должно быть. Вы предполагаете что 0 элемент массива максимальный потом проходитесь по массиву начиная с 1-го элемента и сравниваете с максимальным(т.е. 0-вым) если нашли больше чем максимальный заменяете максимальный на найденный.
1
09.11.2014, 11:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2014, 11:45

Определите индекс максимального элемента массива. Затем определите указатель на массив
Напишите программу: определите массив из 10 чисел типа float , введите их с...

Найти индекс центрального элемента массива
Дан массив a, в нем найден центральный элемент х, как найти его индекс в...

Найти мах элемент массива и найти индекс мин элемента
Помогите пожалуйста решить. Ввести массив. Вывести его. Найти мах элемент и...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru