Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2023, 18:45   #1
ohMy
Новичок
Джуниор
 
Регистрация: 08.04.2023
Сообщений: 1
По умолчанию Найти номер минимального положительного элемента

не могу понять как найти номер минимального положительного элемента

вот что мне удалось сделать

Код:
#include <stdio.h>
#include <ctype.h>
 
int main(int argc, char *argv[])
{
  int n;
  printf("Введите количество элементов >2: \n");
  scanf("%d",&n);
  if(n<3) {printf("Мало элементов!\n");
  return 0;}
  else { printf("Введите массив через пробел: \n");}
  double a[n],s=0;
  for(int i=0;i<n;i++){scanf("%lf",&a[i]);}
  for(int i=0;i<n;i++){s=s+a[i];}
  s=s/n;
  int k=0;
  for (int i=0;i<n;i++)
    if (a[i]<s) k++;
  printf("элементы меньше значения среднего арифметического элемента массива. %u\n",k);
    return 0;
}

Последний раз редактировалось BDA; 08.04.2023 в 20:44.
ohMy вне форума Ответить с цитированием
Старый 08.04.2023, 20:00   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Я правильно понимаю, что вы ищите просто индекс минимального положительного элемента в массиве чисел?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 08.04.2023, 21:57   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Сдута откуда-то прога для вычисления среднего
Цитата:
вот что мне удалось сделать
- и ни малейшей попытки приспособить к своей задаче. Какого рожна тут делает s? Ну на то, что анонсируется ввод одной строкой через пробел, а вводится поэлементно - забьём.
А вместо
Код:
  int k=0;
  for (int i=0;i<n;i++)
    if (a[i]<s) k++;
хорошо бы
Код:
  int k=0, mn;
  mn = -1;
  k = -1 ;
  for (int i=0;i<n;i++)
    { 
        if ( a[i] > 0 ) 
          if  ( (k<0)  || ( a[i] < mn)  )  { k = i; mn = a[i] ; }  ; 
     }
  if (k<0)   printf("Нет таких алиментов, отстаньте !") ;
     else  printf(" Нашёлся, гад! Вот его индекс %u\n",k);
Как-то так. Не очень элегантно, но должно работать.
При сдутии исходного примера оставлено несколько лишних { }
Один оператор можно не обрамлять фигурными скобками.

Последний раз редактировалось digitalis; 08.04.2023 в 22:30.
digitalis вне форума Ответить с цитированием
Старый 10.04.2023, 06:54   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

digitalis, можно без mn и двух if:
Код:
if (a[i] > 0 && (k < 0 || a[i] < a[k])) k = i;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 10.04.2023, 11:43   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Неизвестно, как компилятор сформирует анализ второй скобки: по порядку следования операторов внутри её или же полное вычисление скобки с последующим анализом на true - false, в этом случае в самом начале к=-1, и обращение к a[k] выдаст ошибку. . Не думаю, что это было бы заметно короче моего варианта (или даже вообще не короче), но мой вариант надёжнее и не зависит от реализации компилятора. Проверить варианты - лень, да и Си у меня на компе нет. Вот если бы Delphi
ТСу это уже давно до #&"ы . Так и останется он с 1 сообщением...

Последний раз редактировалось digitalis; 10.04.2023 в 11:57.
digitalis вне форума Ответить с цитированием
Старый 10.04.2023, 12:35   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Ещё один вариант: первый индекс минимального положительного элемента
Код:
int k = -1, n = 10;
for (int i = n - 1; i >= 0; --i) {
    while (i >= 0 && a[i] <= 0) i--;
    if (i >= 0) if (a[i] <= a[(k < 0)?i:k]) k = i;
}
последний индекс минимального положительного элемента
Код:
int k = -1, n = 10;
for (int i = 0; i < n; ++i) {
    while (i < n && a[i] <= 0) i++;
    if (i < n) if (a[i] <= a[(k < 0)?i:k]) k = i;
}
Цитата:
Сообщение от digitalis Посмотреть сообщение
Проверить варианты - лень, да и Си у меня на компе нет. Вот если бы Delphi
https://www.onlinegdb.com/
http://godbolt.org/
https://rextester.com/

Последний раз редактировалось macomics; 10.04.2023 в 12:49.
macomics вне форума Ответить с цитированием
Старый 10.04.2023, 17:50   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Неизвестно, как компилятор сформирует анализ второй скобки
Для каждого языка есть стандарт, а если компилятор ему не следует, то это плохой компилятор. Или отличия должны быть оговорены.
Цитата:
Сообщение от digitalis Посмотреть сообщение
Вот если бы Delphi
Кстати, в дельфи по умолчанию вычисления по короткой схеме (https://en.wikipedia.org/wiki/Short-circuit_evaluation), но поведение можно изменить через Project - Options - Compiler - Complete boolean eval или добавить в файл директиву {$B+}.
Код:
function f(): Boolean;
begin
  ShowMessage('f');
  result := false;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 if f and f then
   ShowMessage('TRUE');
end;
Цитата:
Сообщение от digitalis Посмотреть сообщение
ТСу это уже давно до
Да это мы между собой уже развлекаемся.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 10.04.2023, 21:59   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Познавательно.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++, найти номер последнего минимального элемента массива SkurK Помощь студентам 4 29.09.2020 15:37
Найти номер последнего минимального элемента...(СИ) BTS Общие вопросы C/C++ 4 21.03.2015 16:38
Дана последовательность из n целых чисел. Найти номер минимального элемента в этой последовательности (на Pascal) Nata111 Помощь студентам 3 16.12.2013 20:11
Дана последовательность из n действительных чисел. Найти номер первого минимального элемента. d_dima Помощь студентам 2 19.03.2013 10:48
Найти номер первой из строк, не содержащих ни одного положительного элемента. Oksik_ Помощь студентам 2 06.11.2012 21:18