#include <cstdlib> Иногда нумерация дублируется вопросов.
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
system("chcp 1251>nul");
int a,A,B,C,D,E;
// const int //Размер массива
a=5;
srand(time(NULL)); //Инициализация генератора случайных чисел
int nums[a]; // Создание массива
for (int a=1;a<=5;a++){
nums[a] =1+rand()%(31);
cout<< "\t Вопрос № - "<< nums[a] <<endl;
cout<<"\n";
}
A=nums[1];
B=nums[2];
C=nums[3];
D=nums[4];
E=nums[5];
if(A==B&&C&&D&&E){ // Не работает
A=32;
}
else{
A=nums[1];
}
if(B==C&&D&&E){
B=33;
}
else{
B=nums[2];
}
if(C==D&&E){
C=34;
}
else{
C=nums[3];
}
if(D==E){
D=35;
}
else{
D=nums[4];
}
cout<<"\n"<<"\t A="<< A<<endl;
cout<<"\n"<<"\t B="<< B<<endl;
cout<<"\n"<<"\t C="<< C<<endl;
cout<<"\n"<<"\t D="<< D<<endl;
cout<<"\n"<<"\t E="<< E<<endl;
cout<<"\n"<<"\t nums="<<nums[1] <<endl;
cout<<"\n"<<"\t nums="<<nums[2] <<endl;
cout<<"\n"<<"\t nums="<<nums[3] <<endl;
cout<<"\n"<<"\t nums="<<nums[4] <<endl;
cout<<"\n"<<"\t nums="<<nums[5] <<endl;
return 0;
}
Вопрос:После запуска генератора сл.чисел выводится одинаковые числа. Чтобы
этого не происходило добавил проверку с оператором if. Однако при сравнении
в 1-ом и 2-ом оператор не работает, почему не понимаю. Программа ошибок не
находит.
Выражение A == B && C && D && E с учётом приоритета операций (приоритет == выше чем приоритет &&, который в свою очередь выше чем приоритет ||) и с учётом ассоциативности оператора && (также как и у || — слева направо) будет эквивалентно следующему:
(((A == B) && C) && D) && E
Также здесь следует учесть что оператор && (как и ||) вычисляется по сокращённой схеме (short-circuit evaluation).
Для оператора && это означает, что правый операнд вычисляется в том и только в том случае, если левый true.
Для оператора || это означает, что правый операнд вычисляется в том и только в том случае, если левый false.
Более того, левый операнд является упорядоченным перед правым операндом, т.е. все вычисления и побочные эффекты связанные с левым операндом выполняются до всех вычислений и побочных эффектов связанных с правым операндом.
С учётом написанного, порядок вычисления приведённого выше выражения следующий:
A == B ложно, то дальнейшие вычисления не производятся, и выражение A == B && C && D && E ложно, иначеC ложно, то дальнейшие вычисления не производятся, и выражениеA == B && C && D && E ложно, иначеD ложно, то дальнейшие вычисления не производятся, и выражение A == B && C && D && E ложно, иначеE ложно, то дальнейшие вычисления не производятся, и выражение A == B && C && D && E ложно, иначеA == B && C && D && E истинно.В вашей программе есть несколько ошибок.
Во-первых, размер массива nums должен быть константным выражением, т.е. переменную a следует объявить с квалификатором const:
const int a = 5;
Во-вторых, массивы в C++ нумеруются с нуля. Первый элемент в массиве nums имеет индекс 0, а последний элемент имеет индекс 4. Попытка обращения к несуществующему пятому элементу массива — неопределённое поведение — так делать не нужно.
В-третьих, вы пытаетесь проверить, равна ли переменная A хотя бы одной из переменных B, C, D или E, используя следующее условие:
if (A == B && C && D && E)
и это не верно. В первой части ответа я написал как вычисляется это условие.
Чтобы добиться последовательного сравнения переменной A со всеми остальными переменными используйте логическое или, а именно бинарный оператор ||:
if (A == B || A == C || A == D || A == E)
С учётом приоритета операторов приведённое выше выражение интерпретируется так:
if ( (A == B) || (A == C) || (A == D) || (A == E) )
а с учётом ассоциативности так:
if ( ( ( (A == B) || (A == C) ) || (A == D) ) || (A == E) )
т.е. тело if выполнится в том и только в том случае, если A равно хотя бы одной из переменных B, C, D или E.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости