Перейти к содержанию

Задача по С++


Soft

Рекомендуемые сообщения

Не получается организовать нахождение индекса в массиве. Вот такое условие:

Дан массив А[N]. Определить индекс и значение наибольшего попадающего в интервал (-5,0) элемента. В случае отсутствия такового предусмотреть соответствующее сообщение.

Вот код, но индекс считает не верно, не пойму в чём дело. Индекс это порядковый номер элемента массива, который попадает в данный интервал (-5,0).
 

#include <iostream> 
int main() 
{ 
    const int N=6; 
    int A[N]={9,11,-5,2,-2,1};  //массив для теста
    int arr[N];
    int max; 
    int index; 
    int i=0, j=0; 
    for (i=0; i<N; ++i) 
        if(A[i]>=-5&&A[i]<=0) 
            arr[j++]=A[i]; 
    if(j==0) 
        std::cout<<"No element"<<std::endl; 
    else 
    { 
        max=arr[0];  
        index=0;
        for (i=1; i<j; ++i) 
            if(max<arr[i]) 
            {  
                max=arr[i]; 
                index = i; 
            } 
            std::cout<<"Max element "<<max<<std::endl; 
            std::cout<<"Index is "<<"["<< index << "]"; 
    } 
    std::cout<<std::endl;
}
Изменено пользователем Soft
Ссылка на комментарий
Поделиться на другие сайты


#include <iostream>
int main()
{
const int N=6;
int A[N]={9,11,-5,2,-2,1}; //массив для тест
int arr[N];
int max;
int index;
int i=0, j=0;
for (i=0; i<N; ++i)
if(A[i]>=-5&&A[i]<=0)
arr[j++]=A[i];
if(j==0)
std::cout<<"No element"<<std::endl;
else
{
max=-6;
index=0;
for (i=0; i<N; ++i)
if(max<A[i] && A[i]>=-5&&A[i]<=0)
{
max=A[i];
index = i;
}
std::cout<<"Max element "<<max<<std::endl;
std::cout<<"Index is "<<"["<< index << "]";
}
std::cout<<std::endl;
  • Спасибо (+1) 1
  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

Если интервал (-5;0), тогда согласно математике должно быть 

if(A[i]>-5&&A[i]<0)

 

Да и в цикле по идее  должно быть

for (i=0; i<N-1; ++i)

 

А вообще использование второго массива не есть хорошо. Ибо исходная нумерация сбивается, отсюда и неверный результат

 


for (i=0; i<N; ++i)

Не может здесь быть N ;)

  • Спасибо (+1) 1
Ссылка на комментарий
Поделиться на другие сайты

 

 


Если интервал (-5;0), тогда согласно математике должно быть
Согласен.

 

 


Да и в цикле по идее должно быть
Не согласен.

 

 


Не может здесь быть N ;)
Why?
Ссылка на комментарий
Поделиться на другие сайты

 

 


Не согласен.
А да, там строгое неравенство. Ошибку признаю :)

 

 

 


Why?
Для записи в новый массив используется счетчик с переменной j. Потому должна быть именно эта переменная.
Ссылка на комментарий
Поделиться на другие сайты

@Skarbovoy

 

#include <iostream>

int main()
{
const int N=6;
int A[N]={9,11,-5,2,-2,1};
int arr[N];
int max;
int index;
int i=0, j=0;
for (i=0; i<N; ++i)
if(A>=-5&&A<=0)
arr[j++]=A;
if(j==0)
std::cout<<"No element"<<std::endl;
else
{
max=-6;
index=0;
for (i=0; i<N; ++i)
if(max<A && A>=-5&&A<=0)
{
max=A;
index = i;
}
std::cout<<"Max element "<<max<<std::endl;
std::cout<<"Index is "<<"["<< index << "]";
}
std::cout<<std::endl;
}

выдаёт не верный индекс, так как максимальный элемент в данном массиве -2, то его индекс должен равняться 5.

 

Вроде бы исправил. 

Изменено пользователем Soft
Ссылка на комментарий
Поделиться на другие сайты

Нет такого в коде :)

Ну это можно вписать вместо N, чтобы не прогадать.

выдаёт не верный индекс, так как максимальный элемент в данном массиве -2, то его индекс должен равняться 5.

Выводи index + 1

Со всеми исправлениями :lol:

    #include <stdio.h>
     
    int A[]={9,11,-5,2,-2,1};
     
    int main(){
        bool exist = false;
        int max = -6;
        int maxIndex = 0;
        for(int i = 0; i < sizeof(A) / sizeof(int); ++i){
            if(A[i] > -5 && A[i] < 0 && max < A[i]){
                exist = true;
                max=A[i];
                maxIndex = i;
            }
     
        }
        if(exist){
            printf("Max element is %d\n", max);
            printf("Index of max element %d\n", maxIndex +1);
        }
        else{
            printf("No element\n");
        }
        return 0;
    }
  • Спасибо (+1) 1
  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

@Skarbovoy,

да я сразу это понял. И сделал так

.... {
max = A [ i ];
index = i +1;
}
std :: cout << "Max element " << max << std :: endl ;
std :: cout << "Index is " << "[" << index << "]" ; ...
@Skarbovoy, мы так изучаем ознакомительно. И твой код не особо понятен для меня :) Но зато коротко ;) Изменено пользователем Soft
Ссылка на комментарий
Поделиться на другие сайты

#include <iostream>
using namespace std;
int main(){
	int N, n;
	double A[100];
	cin>>N;
	int max;
	int index;
	int i=0, j=0;
	for (i=0; i<N; ++i) cin>>A[i];
		if(A[i]>=-5&&A[i]<=0)
			N=n;
			A[i]=n++;
	if(n==0)
		cout<<"No element"<<endl;
	else
	{
		max=-6;
		index=0;
		for (i=0; i<N; ++i)
			if(max<A[i]&&A[i]>=-5&&A[i]<=0)
			{
				max=A[i];
				index = i+1;
			}
			cout<<"Max element "<<max<<endl;
			cout<<"Index is "<<"["<< index << "]";
	}
	cout<<endl;
}
попытался организовать ввод с клавиатуры, но вроде получилось. А при вводе данных, при которых должно выводится сообщение "No element", выводятся данные

max=-6;
index=0;
что и должны обеспечивать работу этого цикла.

Все выходные голову ломал, вроде и задача не сложная, но не получается.

Изменено пользователем Soft
Ссылка на комментарий
Поделиться на другие сайты

#include <iostream>
using namespace std;
int main(){
	int N;
	int tmp;
	//int A[100];
	cin >> N;
	int max;
	int index = -1;
	for (int i=0; i<N; ++i){
        cin >> tmp;
        if(tmp >= -5 && tmp <= 0 && (max < tmp || index == -1)){
            index = i+1;
            max = tmp;
        }
	}
	if(index == -1){
        cout << "No element" << endl;
    }
    else{
        cout << "Max element " << max << endl;
        cout << "Index is " << "[" << index << "]" << endl;;
    }
    return 0;
}

:lol:

  • Спасибо (+1) 1
  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Похожий контент

    • Mrak
      От Mrak
      Всем привет!
       
      Подскажите пожалуйста, как с помощью Siri создать задачу в Google tasks?
       
      Мотивировка:
      Голосовой помощник идеально справляется с добавлением задач (напоминаний) во встроенные напоминания. Говоришь: привет сири, напомни мне завтра сходить за хлебом в 14 часов. Будет создано напоминание. Можно сказать "добавь в семейные напоминания на завтра сходить за хлебом". И он добавит в синхронизируемые общие напоминания семьи, чтобы кто-то сходил. В мире обеспеченных людей всё это должно работать идеально, ведь напоминания синхронизируются на всех устройствах эпл. Но на работе комп с виндой. Нет на нём эпловских напоминаний. Зато есть гугловый календарь и задачи. Они работают и на айфоне. И календарь идеально синхронизируется с айфоном (просто пользуешься учёткой гугла во встроенном календаре). Однако, с задачами так не выйдет. Ручками добавляются. Через гугл календарь добавляются. А голосом по любому быстрее. Прям намного. Раз этак в 10. Поэтому хочется научиться голосом на айфоне создавать задачи в гугл календаре. Если это технически возможно, конечно. Прошу помощи. 
       
    • ГГеоргий
      От ГГеоргий
      Добрый день
      Речь и дет о связке KSC + KICS for Win
      уже не первый раз фиксируем следующую проблему -
      некоторые функции не настраиваются с KSC, однако настраиваются в локальной консоли управления KICS
      Впервые столкнулись с этой проблемой когда настраивали защиту usb устройств - при настройке с KSC, задача компонента не отрабатывает как нужно. Она запускается, и затем сразу завершается со статусом "успешно". Предположительно она должна находится в статусе "запущено" для контроля usb.
      Затем мы настраиваем всё то же самое с консоли локальной КИКСа - и получаем уже нужный нам результат. Задача переходит в состояние "выполняется" и блочит\пропускает флешки.
      Настройки абсолютно идентичные. KSC видит то, что мы на локальной делаем. Локальная тоже видит настройки которые мы на KSC делаем. То есть они буквально идентичны.
      Теперь столкнулись с такой же проблемой при задаче "контроль целостности на основе эталона"
      задача с KSC каждый раз запускается по новой (заново снимая перечень файлов)
      Вто время как задача с локальной консоли уже отрабатыывает хорошо - первый запуск снимает эталон, а второй уже мониторит изменения
      Как это должно работать?
      события эти были в разные дни и на разных уСкрины.zipстройствах, но проблема общая
      KSC всегда стоял на линукс а KICS на вин 10
    • ping_pig
      От ping_pig
      Добрый день!
       
      Подскажите пожалуйста, кто-нибудь смог настроить удаление ПО через задачу в KSC?
      В частности интересует централизованное удаление браузера Google Chrome.
      Команда для удаления программы, которую надо вводить в мастере создания задач, типа:
      "C:\Program Files\Google\Chrome\Application\103.0.5060.114\Installer\setup.exe" --uninstall --channel=stable --system-level --verbose-logging
      не отрабатывает(
      Задача висит минут 40-45, доходя при этом до 32 % и завершается со сбоем: "Удаленная деинсталляция на устройстве завершена с ошибкой: Время ожидания окончания процесса удаления программы истекло. Задача удаления на этом устройстве считается завершенной неудачно."
       
      Удаление через msiexec  и [Product_code] не подходит, браузер установлен не из msi(((
       
      Так же такая ситуация и с некоторыми другими прогами, например AnyDesk.
      Некоторое стороннее ПО удаляется корректно.
       
      Хотелось бы делать удаление некоторого ПО централизованно.
      Может у кого получилось так делать или есть другие рабочие варианты, был бы благодарен за подсказки и помощь.
       
      Ранее (3-4 года назад) на форуме была подобная тема, но так и не нашли там решение.
    • Sapfira
      От Sapfira
      Тема для тех, кто уже обновился до версии 21.18
      Пишу в беседке, а не в помощи по продуктам, так как не считаю это за проблему, просто интересное явление.
      В общем, вот:
       
    • Marcus
×
×
  • Создать...