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

Задача по С++


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

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

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



Войти
×
×
  • Создать...