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

Задача по С++


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

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

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

 

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

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

 

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

 


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

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

Ссылка на сообщение
Поделиться на другие сайты

 

 


Если интервал (-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;
    }
Ссылка на сообщение
Поделиться на другие сайты

@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:

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

    • dkhilobok
      От dkhilobok
      Го бодрствовать в нашу параллельную реальность — виртуальный офис «‎Лаборатории Касперского» ?
      В нём есть всё то же, что есть у нас на самом деле. И лифт, и буфет, и задачки для знатоков C++, Python, JavaScript.
      Что уж там, даже Евгений Касперский в нём есть ?

      В квесте вопросы разных уровней, и все — интересные! ⠀
      В общем, вам сюда! Мы создали
       
      kaspersky (1).mp4
    • siways
      От siways
      Добрый день. 
      Создаю программу на C# для тестирования на тему программирования, но не могу сделать так чтоб информация введенная пользователем сравнивалась с элементом массива в котором указан правильный ответ. 
       
      В коде указаны два одномерных массива. В одном вопросы,а в другом ответы на них (ответы стоят рандомные, не обращайте внимание там может стоять любое слово): 
      String[] vopros = new string[5]; vopros[0] = "В основе концепции объектно - ориентированного программирования лежит понятие"; vopros[1] = "Перевод программ с языка высокого уровня на язык более низкого уровня обеспечивает программа"; vopros[2] = "Алгоритм, в котором действия выполняются друг за другом, не повторяясь называется:"; vopros[3] = "Логический тип данных объявляется служебным словом"; vopros[4] = "Раздел переменных определяется служебным словом"; //Масив ответов. String[] Answer = new string[5]; Answer[0] = "1"; Answer[1] = "2"; Answer[2] = "3"; Answer[3] = "4"; Answer[4] = "5"; Ниже указан цикл вывода вопросов, а так же условие в котором переменная i должна сравниваться с массивом Answer (i- это ввод ответа пользователем, а Answer - это массив в котором есть элементы с ответами на вопросы). Если кто нибудь знает как сравнить элементы массива и введенный пользователем ответ, буду очень благодарен за помощь.
      String i; int S = 0; foreach (string output in vopros) //Цикл { Console.Write ("\n" + output + "\n"); //Вывод вопросов. i = Console.ReadLine (); //Ввод ответа пользователем if (Answer == i) //Если ответ равняется элементу массива, то +1 бал, если нет 0 { S = S + 1; //+1 бал если ответ верен. } else { S = S + 0; //Если ответ не совпадает 0 балов } } Console.Write("\n" + S); //Вывод балов после теста. Я знаю что сравниваю выше в коде не элементы массива, а сам массив, но как сравнить именно элементы нигде не могу найти...
×
×
  • Создать...