Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одномерный массив. Индекс всех max значений и, сумма отрицательных чисел 
V
    Опции темы
Kruger2
Дата 19.1.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Тему не дописал, жмакнул на запостить:(

Одномерный массив. Вывести max, положение max, min, кол-во повторов max и где они находятся (Т.Е. индекс каждого нужен, а у меня саморазрушающаяся запись получается и только один индекс выдает), сумму отриц элементов.

Хочу получить значение всех индексов максимальных значений. Понятия не имею как, в моем примере значение каждый раз перезаписывается.
Не выводит сумму отриц. значений, точнее неверно выдает ответ( . Тут я подозреваю, что я сравниваю с нулем индексы, а не сами значения. Вопрос только как это исправить?)

Код


# include <stdio.h>
# define SIZE 13

main ()
{
     int a[SIZE]= {-20, 2,6,5,333,234,333,122,134,111,-1,234,333};
     int i, max = a[0], min = a[0], k, j, b;
     
     for (i=0; i <=SIZE - 1; i++) {
// опр-ем макс и мин значение в массиве и индекс макс
      
     if (a[i] > max) {
         max = a[i];
         k = i;
         }
     else if (a[i] < min)
          min = a[i];
     }
printf("max is %d min is %d position is %d\n\n", max, min, k);

//выводит то сколько раз повторяются максимальные элементы
     j = 0;
     for (i=0; i <=SIZE - 1; i++) {
         if (max == a[i])
            j++;
            }
            printf(" %d repeats: %d times\n", max, j);
            
//выводим сумму отрицательных значений
     b=0;
     for (i=0; i <=SIZE - 1; i++){
         if (a[i] < 0)
            b += a[i];
         }
         
     printf("otrit ssum is %d is\n\n" , b);
system ("pause");
return 0;
     }





Добавлено @ 16:53
тьфу ты,  ; после последнего if создало мне пустой оператор.
опять невнимательностьsmile

Значит с отрицательными разобрался.
Помогите вывести значения всех max элементов (333 в моем случае) и индекс каждого из них

Это сообщение отредактировал(а) Kruger2 - 19.1.2011, 17:12
PM MAIL   Вверх
Kruger2
Дата 19.1.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



кажется, что надо ввести ещё один цикл, в котором при каждой встрече значения max, которое к тому моменту уже определено, оно будет выводить это самое макс и индекс этого значения. 
но все попытки реализовать пока не увенчались ничем)

PM MAIL   Вверх
Albor
Дата 19.1.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(Kruger2 @  19.1.2011,  16:11 Найти цитируемый пост)
кажется, что надо ввести ещё один цикл,

Нет, не надо. Делай в один проход. А отдельный цикл у тебя уже есть.
PM MAIL ICQ   Вверх
Kruger2
Дата 19.1.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



этот совет мне никак не помог, я не вижу, как можно сохранить переменную макс, вывести на печать её индекс и затем перейти к следующей макс.
в этом проблема)
PM MAIL   Вверх
Albor
Дата 19.1.2011, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(Kruger2 @  19.1.2011,  16:38 Найти цитируемый пост)
этот совет мне никак не помог

Ладно, не будем пока заморачиваться с одним циклом. Есть уже отдельный и ладно:
Код

//выводит то сколько раз повторяются максимальные элементы
     j = 0;
     for (i=0; i <=SIZE - 1; i++) {
         if (max == a[i]){
            printf(" %d - index of max elements\n", i);//здесь индекс известен и можно его вывести
            j++;
            }
            }
            printf(" %d repeats: %d times\n", max, j);


Это сообщение отредактировал(а) Albor - 19.1.2011, 18:02
PM MAIL ICQ   Вверх
Kruger2
Дата 19.1.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Код

      puts("\nMAX\ti");
     for (i=0; i <=SIZE - 1; i++) {

      
     if (a[i] > max) {
         max = a[i];
         k = i;
         }
     else if (a[i] < min)
          min = a[i];
          
              if (max==a[i])
          printf("%d\t%d\n", max, i);
      }


Добавил ещё одно условие if и сделал табличный вывод
Но, он начинает выводить максимальные числа по мере того как их сравнивает.
Вот что я получаю:


Max   i
-20    0
2       1
6       2
333    4
333    6
333    12

Как бы мне избавиться от -20, 2 и т.д.?

Добавлено через 3 минуты и 32 секунды
Цитата(Albor @  19.1.2011,  17:59 Найти цитируемый пост)
код C++
1:
2:
3:
4:
5:
6:
7:
8:
//выводит то сколько раз повторяются максимальные элементы
     j = 0;
     for (i=0; i <=SIZE - 1; i++) {
         if (max == a[i])
            printf(" %d - index of max elements\n", i);//здесь индекс известен и можно его вывести
            j++;
            }
            printf(" %d repeats: %d times\n", max, j);



Тут он мне просто выдал подсчет с 1 до конца массива.
0 index of max elements
1 index of max elements
...
12 index of max elements

и ничего похожего на то что мне надо)
PM MAIL   Вверх
Kruger2
Дата 19.1.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.1.2011

Репутация: нет
Всего: нет



Я скобки криво расставил, получилось. Спасибо.

Вопрос, почему мой вариант всё таки не получился? как там избавиться от первых значений?

Добавлено через 11 минут и 36 секунд
Всё решил и подправил. Вот конечный результат, вдруг кто то потом искать будет.

Albor, спасибо.

ЗЫ по прежнему интересно почему мой вариант был неверным и как его сдеать верным.



Код

# include <stdio.h>
# define SIZE 13
main ()
{
     
     int a[SIZE]= {-20, 2,6,5,333,234,333,122,134,111,-1,234,333};
     int i, max = a[0], min = a[0], k, j, b, h=0;
     
    
     for (i=0; i <=SIZE - 1; i++) {

      
     if (a[i] > max) {
         max = a[i];
         k = i;
         }
     else if (a[i] < min) {
          min = a[i];
          h=i;
      }
      }
printf("Max is %d and it`s position is %d\n", max, k);
printf("Min is %d and it`s position is %d\n\n", min, h);


puts("Indexes of the max elemets are\n");
      j = 0;
     for (i=0; i <=SIZE - 1; i++) {
         if (max == a[i]){
             printf("%d - index of max elements\n", i);
            j++;
         }   
     }
            
            printf("\n%d (Maximum)repeats: %d times\n", max, j);
            

     b=0;
     for (i=0; i <=SIZE - 1; i++){
         if (a[i] < 0)
            b += a[i];
         }
         
     printf("\nThe sum of negative numbers is %d is\n\n" , b);
     
     
system ("pause");
return 0;
}   
  

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.