Nabeel Munir Ответов: 2

Здравствуйте, мне нужна помощь с программой на C++.


Мне нужно написать программу, вывод которой должен быть таким: каждый первый элемент массива равен 1, а каждый второй-0. Мне нужно проверить в массиве, если элемент нечетный, то распечатать 1, а если элемент нечетный, то распечатать 0. Мне нужно проверить это условие в if condition.Точно так же, как конечный автомат. Мне это не удается. Любая помощь будет оценена по достоинству.

Что я уже пробовал:

using namespace std;

int main(){
	
	cout<<"Enter the size of array"<<"\n";
	
	int n,i;
	cin>>n;
	int array[n];
	for( i=0; i<n;i++){
	if(array[i] % 2!=0 && array[i] % 2==0){
		
	}
	cout<<"1,0";
			
}

}

0x01AA

один.) if(array[i] % 2!=0 && array[i] % 2==0) на словах:
если значение нечетное, а значение четное

б.) цитата: "Мне нужно проверить в массиве, есть ли элемент странный затем выведите 1 и если элемент является странный затем распечатайте 0"

Richard MacCutchan

Ваша главная проблема заключается в том, что вы никогда не вводите никаких значений в массив.

0x01AA

Очень хороший момент, который я пропустил :-O

Nabeel Munir

Здравствуйте, не могли бы вы быть немного конкретнее?

После попытки использовать приведенный ниже код:
для(i= 0; i < n; i++)
{
if(array[i] % 2 !=0 || array[i] % 2 ==0){
cout<<"1,0,";
}
}
когда я выполняю код, например пользователь вводит размер массива = 4, вывод, который он дает, равен 1,0,1,0,1,0,1,0... Что все еще неверно. что мне нужно, так это то, что если пользователь вводит значение 4, то вывод должен быть: 1,0,1,0. каждый нечетный должен быть 1, каждый четный должен быть 0.

0x01AA

- каждый нечетный должен быть равен 1, каждый четный-0."
Индекс массива или содержимое массива?

Что это сейчас такое if(array[i] % 2 !=0 || array[i] % 2 ==0)?
Так будет всегда истинный....

Либо число нечетное, либо четное. Чтобы проверить на четность (value % 2) == 0 хватить. И если результат этой проверки ложен, вы знаете, что число нечетное....

Richard MacCutchan

Вы создали массив из n элементов, но никогда не вкладывали в него никаких значений. Поэтому любые результаты, которые вы получаете, бессмысленны. Как только у вас есть массив, вы должны заполнить его числами от 1 до n. И если тест все-таки неправильно. Вам нужно проверить только одно условие, нечетное или четное, а не для обоих.

Попробуйте сначала написать спецификацию и шаги, необходимые для вашей программы. Затем вы можете использовать эту информацию для построения кода простым логическим способом.

2 Ответов

Рейтинг:
8

KarstenK

Если вы хотите ввести размер массива, вам нужно выделить динамическую память.

int *array = new int[n];
//work it 
delete array;
И вам нужен цикл, чтобы заполнить массив.

Совет: используйте фигурные скобки в своих операциях для ясности и избежания ошибок.


Рейтинг:
16

0x01AA

Смотрите также мои комментарии. Предполагая, что вам нужно напечатать "1" для нечетных чисел и "0" для четных чисел, вам даже не нужно if.

Это потому что
1 % 2 приводит к 1
2 % 2 приводит к 0
3 % 2 результата в 1
4 % 2 приводит к 0
.. и так далее. Обратитесь, например, к wiki для получения подробной информации об операторе по модулю.


Версия I Проверка значений массива
Теперь я не знаком с этим cout но что-то вроде этого должно сделать свою работу:

for(i= 0; i < n; i++)
{
   cout << array[i] % 2;
}


[Edit0]
Версия II Проверьте индекс
for(i= 0; i < n; i++)
{
   cout << i % 2;
}


[Edit1]
Версия III Проверьте индекс'
for(i= 0; i < n; i++)
{
   cout << (i + 1) % 2;
}


Примечание: Имейте в виду комментарий Richard MacCutchan - Профиль Специалиста[^] : "Ваша главная проблема заключается в том, что вы никогда не вводите никаких значений в массив."


Nabeel Munir

@0x01AA,не могли бы вы быть немного более конкретными? Мне нужен код, чтобы пройти через каждый индекс в массиве и проверить, является ли индекс нечетным, он должен печатать 1, а если четным, то он должен печатать 0. если я иду на cout << array[i] % 2;, который вы предложили, и выполняю программу и вводю, например, размер массива: 4, то вывод, который она дает, равен: 0010.
И что вы подразумеваете под этим,ваша главная проблема заключается в том, что вы никогда не вводите никаких значений в массив."

0x01AA

См. версию II в обновленном ответе. Для этого случая массив сам по себе бесполезен, что выглядит странно (другими словами, 1% 2) для меня :-)

Nabeel Munir

Это работает, но дает противоположный результат, например: 0 1 0 1. Мне нужно 1 0 1 0.

0x01AA

Смотрите версию III и ___пожалуйста___ постарайтесь понять ее, а не просто скопировать!! ;)

Nabeel Munir

Да, это то, что я хочу сделать, я хочу понять, как это работает. Вот почему мне тоже нужны некоторые объяснения.

0x01AA

Теперь это ваш выбор принять ответ или нет ;)

Nabeel Munir

Я принимаю ваш ответ, но я действительно хочу понять, как он работает.

0x01AA

Спасибо. Смотри комментарий ниже.

Nabeel Munir

Это работает, но как, не могли бы вы объяснить? i-это индекс массива, и % 2 я понимаю, но что делает + 1, проверяет ли он следующий индекс?

0x01AA

Нет, он не проверяет следующий индекс. Это просто частный случай для x % 2, чтобы инвертировать результат. Чтобы действительно понять это, вам нужно сначала освоиться с оператором по модулю. Вы понимаете Modulo opreator? Можете ли вы описать, что означает операция по модулю?

Nabeel Munir

Да, я знаю, что делает модуль ( % ). Он возвращает остаток после деления двух чисел.

0x01AA

Тогда вам также должно быть легко понять, почему x % 2 и (x+1) % 2 "инвертируют" результат. Возьмите лист бумаги и запишите x= 0...5, а в качестве второго ряда также x+1. В третьем ряду отметьте x%2 на 4-м (x+1)%2. Имейте в виду, что x%2-это особый случай, предназначенный для "инвертирования" результата. Сделайте то же самое, например, с x%3 и (x+1)%3. Это не инвертирует результат, но дает что-то вроде "задержки"/"сдвига"/"смещения"....

Честно говоря, как не носитель английского языка, у меня есть некоторые проблемы, чтобы объяснить все это интуитивно, извините за это :(

Richard MacCutchan

Все это не имеет значения до тех пор, пока массив не будет фактически инициализирован некоторыми действительными данными.

0x01AA

Если вы действительно прочитали все комментарии, то в конце ОП интересовался только индексом. Значения массива - даже больше массива - были вне вопроса, и я не вижу/не понимаю, почему этот массив когда-либо упоминался....

Richard MacCutchan

Это было упомянуто, потому что это самая важная часть программы. Использование блока памяти без ввода в него каких-либо значений-это просто пустая трата времени.

Nabeel Munir

Здравствуйте, сэр, не могли бы вы быть немного конкретнее?

Richard MacCutchan

Я был очень конкретен, идите и посмотрите на мой последний комментарий к вашему вопросу выше.

Nabeel Munir

Ох. теперь я понимаю, что вы имеете в виду, я сделал то, что вы сказали сделать. Теперь я понимаю. большое вам спасибо, сэр. :)