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

Задача по С++


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
Ссылка на комментарий
Поделиться на другие сайты

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

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



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

    • Little_Wound
      От Little_Wound
      Здравствуйте!
      1. Установил KSC 15. Задаю поиск устройств (на машинах нет агента или кес) по диапазону ip адресов. Находит как то выборочно (машины часть на винде, часть на астре). По какому принципу идёт поиск и что может мешать ему "увидеть" машину в сети?
      2. Сделал Инсталляционные пакеты Kaspersky Network Agent for Linux aarch64 deb (Русский)_15.1.0.20748 и Kaspersky Endpoint Security 12.2 для Linux (Русский)_12.2.0.2412, создал задачу Задача удаленной установки приложения, но она отрабатывает с ошибкой: Удаленная установка на устройстве завершена с ошибкой: Installation script error. Чем вызвана данная ошибка?
       

    • Silverqt
      От Silverqt
      Добрый день Уважаемые форумчане, недавно обнаружил у себя майнер на ПК, понял это по характерной "усиленной" работе пк в простое и загрузке ЦП в 99%. Самостоятельно в безопасном режиме прошел проверку через VRT от Kaspersky и ESET Online Scanner. Так же самостоятельно попытался отыскать необычный процесс через  Farbar Recovery Scan Tool но к сожалению ничего не обнаружил. ПК работает в штатном режиме, но мне не доступны такие команды как: gpedit.msc и Планировщику задач Windows. Помогите пожалуйста вернуть к ним доступ. FRST.txt и Addition.txt от FRST прикрепляю FRST.txtAddition.txt
    • Bercolitt
      От Bercolitt
      В отчете Kaspersky Plus "Мониторинг активности" пропадают строки "Задача остановлена". Когда-то такое уже было, но прошло. 

    • Александр В. Л.
      От Александр В. Л.
      Здравствуйте. Имеется KSC 15.1 , в качестве БД используется MS SQLExpress 2022. Вроде, всё работает, но постоянно выскакивает ошибка задачи "Резервное копирование данных Сервера администрирования" :  
      База данных повреждена. Generic db error: "5030 'Не удалось монопольно заблокировать базу данных KAV для выполнения операции.{42000};' LastStatement='DBCC CHECKDB('KAV') WITH NO_INFOMSGS;'" Подскажите, пожалуйста, как это починить?
    • sakhComya
      От sakhComya
      Добрый день. Не могу развернуть и настроить установку агентов в школьной сети.
      Задача по установке агента пишет разные данные. Скришот 1. Однако у большинства судя по всему он выполнился.
      При этом сами компьютеры в разделе устройств показаны как отсутствующие.  Скриншот2.
      Побывал сделать по гайду из https://forum.kaspersky.com/topic/установка-агента-через-gpo-40623 - ничего не вышло.
       
       


×
×
  • Создать...