а ксати нащет пароля, розьясни мне все ети строчки ато я не очень их понемаю(( в особенно как попросить ввести пользователя ввести его , и как сделать так что бы его можно было повторно ввести))
Ввод пароля можно организовать при помощи циклов for, while, do while. Про циклы можно прочитать на нашем форуме здесь в книге, которую ты читаешь, или погуглить.
Сам ввод можно построить так:
1) Вводить пока не введется, то есть если пользователь не знает или забыл пароль то запрос на ввод пароля будет вечным;
2) Вводить заданное кол-во раз;
3) Вводить пока пользователь не введет отказ от ввода пароля.
Первый вариант мы отбросим (т.к. он некудышний) и возьмем второй. То есть если мы модифицируем твою программу (переписанною мною) программа с вводом пароля у нас получится такая
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
const string password = "qwerty"; // для пароля определяем константу
int main()
{
setlocale(0, "");
string userPassword;
int counter = 3; // это счетчик кол-ва вводов пароля
// цикл do while вводим пароль либо 3 раза либо правильный
do{
cout << "Введите пароль (у вас " << counter << " попытк" << (1 == counter ? "а" : "и") << "): ";
getline(cin, userPassword); // ввод пароля
if (userPassword != password){ // если пароль не правильный вывести сообщение
cout << "Пароль не верный!!!\n";
counter--; // и уменьшить счетчик на единицу
}
else{
cout << "Доступ разрешен.\n\n"; // если пароль правильный вывести сообщение
}
}while (!(userPassword == password) && 0 != counter); // выйти из программы если пароль правильный или счетчик равен 0
if (userPassword == password){ // если пароль правильный то входим в программу
// здесь можно организовать следующий цикл, чтобы можно было решать уравнения много раз
cout << "Выберите вариант: "
<< "\n1) х + a = c"
<< "\n2) a + x = c"
<< "\n3) x - a = c"
<< "\n4) a - x = c"
<< "\n5) a * x = c"
<< "\n6) x * a = c"
<< "\n7) a / x = c"
<< "\n8) x / a = c\nВаш вариант: ";
int var;
cin >> var;
if (0 < var && var <= 8){
double a, c;
cout << "\nВведите число а: ";
cin >> a;
cout << "Введите число с: ";
cin >> c;
if (1 == var)
cout << "\nx + " << a << " = " << c << "\nx = " << c - a << '\n';
else if (2 == var)
cout << '\n' << a << " + x = " << c << "\nx = " << c - a << '\n';
else if (3 == var)
cout << "\nx - " << a << " = " << c << "\nx = " << c + a << '\n';
else if (4 == var)
cout << '\n' << a << " - x = " << c << "\nx = " << a - c << '\n';
else if (5 == var)
cout << '\n' << a << " * x = " << c << "\nx = " << c / a << '\n';
else if (6 == var)
cout << "\nx * " << a << " = " << c << "\nx = " << c / a << '\n';
else if (7 == var)
cout << '\n' << a << " / x = " << c << "\nx = " << a / c << '\n';
else if (8 == var)
cout << "\nx / " << a << " = " << c << "\nx = " << c * a << '\n';
}
else
cout << "\nТакого варианта нет!\n";
}
cout << "\nДо свидания.\n";
system("pause");
return 0;
}
а и еще одна просьба))) обьясни как сделать так что бы можно было повторять действие ))) (нап. решить уровнение еще раз)
Это опять таки можно сделать при помощи циклов. Кстати при вводе пароля, в предыдущей программе, лучше использовать цикл while или for, а не do while т.к. мы заранее знаем, сколько раз мы будем вводить пароль (НЕ ПРИНЦИПИАЛЬНО). Так можно переписать с циклом while
while (!(userPassword == password) && 0 != counter){ // выйти из программы если пароль правильный или счетчик равен 0
cout << "Введите пароль (у вас " << counter << " попытк" << (1 == counter ? "а" : "и") << "): ";
getline(cin, userPassword); // ввод пароля
if (userPassword != password){ // если пароль не правильный вывести сообщение
cout << "Пароль не верный!!!\n";
counter--; // и уменьшить счетчик на единицу
}
else{
cout << "Доступ разрешен.\n\n"; // если пароль правильный вывести сообщение
}
}
а вот так с циклом for
for (int counter = 3; counter; counter--){
cout << "Введите пароль (у вас " << counter << " попытк" << (1 == counter ? "а" : "и") << "): ";
getline(cin, userPassword); // ввод пароля
if (userPassword != password){ // если пароль не правильный вывести сообщение
cout << "Пароль не верный!!!\n";
counter--; // и уменьшить счетчик на единицу
}
else{
cout << "Доступ разрешен.\n\n"; // если пароль правильный вывести сообщение
}
}
А вот выбор решения уравнения организуем с помощью цикла do while. Но всегда перед тем как использовать цикл нужно подумать над тем как мы будем выходить из него. При вводе пароля мы заранее определили кол-во вводов. Здесь подойдем к решению вопроса с другой стороны. Если мы вошли в расчетную часть значит мы знаем пароль, поэтому для выхода из цикла решения уравнений попросим пользователя ввести пароль для выхода из программы, а для продолжения расчетов <Enter>.
На основании вышесказанного перепишем программу так
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
const string password = "qwerty"; // для пароля определяем константу
int main()
{
setlocale(0, "");
string userPassword;
int counter = 3; // это счетчик кол-ва вводов пароля
// цикл do while вводим пароль либо 3 раза либо правильный
while (!(userPassword == password) && 0 != counter){ // выйти из программы если пароль правильный или счетчик равен 0
cout << "Введите пароль (у вас " << counter << " попытк" << (1 == counter ? "а" : "и") << "): ";
getline(cin, userPassword); // ввод пароля
if (userPassword != password){ // если пароль не правильный вывести сообщение
cout << "Пароль не верный!!!\n";
counter--; // и уменьшить счетчик на единицу
}
else{
cout << "Доступ разрешен.\n\n"; // если пароль правильный вывести сообщение
}
}
if (userPassword == password){ // если пароль правильный то входим в программу
do{
cout << "Выберите вариант: "
<< "\n1) х + a = c"
<< "\n2) a + x = c"
<< "\n3) x - a = c"
<< "\n4) a - x = c"
<< "\n5) a * x = c"
<< "\n6) x * a = c"
<< "\n7) a / x = c"
<< "\n8) x / a = c\nВаш вариант: ";
int var;
(cin >> var).get();
if (0 < var && var <= 8){
double a, c;
cout << "\nВведите число а: ";
(cin >> a).get();
cout << "Введите число с: ";
(cin >> c).get();
if (1 == var)
cout << "\nx + " << a << " = " << c << "\nx = " << c - a << '\n';
else if (2 == var)
cout << '\n' << a << " + x = " << c << "\nx = " << c - a << '\n';
else if (3 == var)
cout << "\nx - " << a << " = " << c << "\nx = " << c + a << '\n';
else if (4 == var)
cout << '\n' << a << " - x = " << c << "\nx = " << a - c << '\n';
else if (5 == var)
cout << '\n' << a << " * x = " << c << "\nx = " << c / a << '\n';
else if (6 == var)
cout << "\nx * " << a << " = " << c << "\nx = " << c / a << '\n';
else if (7 == var)
cout << '\n' << a << " / x = " << c << "\nx = " << a / c << '\n';
else if (8 == var)
cout << "\nx / " << a << " = " << c << "\nx = " << c * a << '\n';
}
else
cout << "\nТакого варианта нет!\n";
cout << "\nДальше? (<Enter> для продолжения, qwerty для выхода): ";
getline(cin, userPassword);
}while(password != userPassword);
}
cout << "\nДо свидания.\n";
system("pause");
return 0;
}
Теперь добавим обработку нулевых значений при которых не могут быть найдены решения и получим такой код
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
const string password = "qwerty"; // для пароля определяем константу
int main()
{
setlocale(0, "");
string userPassword;
int counter = 3; // это счетчик кол-ва вводов пароля
// цикл do while вводим пароль либо 3 раза либо правильный
while (!(userPassword == password) && 0 != counter){ // выйти из программы если пароль правильный или счетчик равен 0
cout << "Введите пароль (у вас " << counter << " попытк" << (1 == counter ? "а" : "и") << "): ";
getline(cin, userPassword); // ввод пароля
if (userPassword != password){ // если пароль не правильный вывести сообщение
cout << "Пароль не верный!!!\n";
counter--; // и уменьшить счетчик на единицу
}
else{
cout << "Доступ разрешен.\n\n"; // если пароль правильный вывести сообщение
}
}
if (userPassword == password){ // если пароль правильный то входим в программу
do{
cout << "Выберите вариант: "
<< "\n1) х + a = c"
<< "\n2) a + x = c"
<< "\n3) x - a = c"
<< "\n4) a - x = c"
<< "\n5) a * x = c"
<< "\n6) x * a = c"
<< "\n7) a / x = c"
<< "\n8) x / a = c\nВаш вариант: ";
int var;
(cin >> var).get();
if (0 < var && var <= 8){
double a, c;
cout << "\nВведите число а: ";
(cin >> a).get();
cout << "Введите число с: ";
(cin >> c).get();
if (1 == var)
cout << "\nx + " << a << " = " << c << "\nx = " << c - a << '\n';
else if (2 == var)
cout << '\n' << a << " + x = " << c << "\nx = " << c - a << '\n';
else if (3 == var)
cout << "\nx - " << a << " = " << c << "\nx = " << c + a << '\n';
else if (4 == var)
cout << '\n' << a << " - x = " << c << "\nx = " << a - c << '\n';
else if (5 == var){
if (!a || (!a && !c))
cout << "\nРешения не существует!\n";
else
cout << '\n' << a << " * x = " << c << "\nx = " << c / a << '\n';
}
else if (6 == var){
if (!a || (!a && !c))
cout << "\nРешения не существует!\n";
else
cout << "\nx * " << a << " = " << c << "\nx = " << c / a << '\n';
}
else if (7 == var){
if (!a || !c || (!a && !c))
cout << "\nРешения не существует!\n";
else
cout << '\n' << a << " / x = " << c << "\nx = " << a / c << '\n';
}
else if (8 == var){
if (!a || (!a && !c))
cout << "\nРешения не существует!\n";
else
cout << "\nx / " << a << " = " << c << "\nx = " << c * a << '\n';
}
}
else
cout << "\nТакого варианта нет!\n";
cout << "\nДальше? (<Enter> для продолжения, qwerty для выхода): ";
getline(cin, userPassword);
}while(password != userPassword);
}
cout << "\nДо свидания.\n";
system("pause");
return 0;
}
Вот то что я от тебя хотел увидеть.
Но я думаю, теперь ты сможешь оптимизировать эту программу так, чтобы она не ответы x = 2 выводила, а после введенных двух переменных выводила общий вид уравнения и просила тебя ввести правильный ответ при верном ответе программа выводит сообщение, что это правильный ответ, а при неверном ответе — что это неправильный ответ.
Дерзай ;)
Саша
мда... я ето все не пойму(( вот обьясни мне что ето???
(cin >> a).get();
Саня
if (!a || !c || (!a && !c)) как понимать етот код??? «Если не а или не с или неа и не с» ну как??? я етого не могу понять
Саня
и как тут понимать .get ?
(cin >> a).get();
Саня
щас я попробую сделать то что ты хотел)
Саня
ти пока обьясни а я тебе завтра скину код, ато роботи дофига с етим кодом))))
Саня
писать мне мое дз не надо) я сам над етим работаю))
Саня
Alf, помоги ато чето я запутался)))сделал канешно не все (нету варианта уровнения с нулем и нету повторного ввода уровнения, может еще штото пропустил) когда пишеш правильный ответ оно пишет «Верно!» без конца)))А когда пишеш не правильно не выводит сообщение о неправильности(( вот код:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
const string password = "qwerty";
int main()
{
setlocale(0, "");
string userPassword;
int counter = 3;
do{
cout << "Введите пароль (у вас " << counter << " попытк" << (1 == counter ? "а" : "и") << "): ";
getline(cin, userPassword);
if (userPassword != password){
cout << "Пароль не верный!!!\n";
counter--;
}
else{
cout << "Доступ разрешен.\n";
}
}while (!(userPassword == password) && 0 != counter);
if (userPassword == password){
cout << "Выберите вариант: "
<< "\n1) х + a = c"
<< "\n2) a + x = c"
<< "\n3) x - a = c"
<< "\n4) a - x = c"
<< "\n5) a * x = c"
<< "\n6) x * a = c"
<< "\n7) a / x = c"
<< "\n8) x / a = c\nВаш вариант: ";
int var;
cin >> var;
if (0 < var && var <= 8){
double a, c;
cout << "\nВведите число а: ";
cin >> a;
cout << "Введите число с: ";
cin >> c;
double x;
if (var == 1) {
cout << " Чему равен x ?\n" << " x = " << c << " - " << a << endl;
cout << " x = ";
cin >> x;
while ( x == c - a) {
if ( x == c - a ) {
cout << "\n Верно!" << endl;
} else {
cout << " Не верно!\n x = ";
cin >> x;
}
}
} else if (var == 2) {
cout << " Чему равен x ?\n" << " x = " << c << " - " << a << endl;
cout << " x = ";
cin >> x;
while (x == c - a) {
if (x == c - a) {
cout << " Вверно!" << endl;
} else {
cout << " Не верно!\n x = ";
cin >> x;
}
}
} else if (var == 3) {
cout << " Чему равен x ?\n" << " x = " << c << " + " << a << endl
<< " x = ";
cin >> x;
while ( x == c + a) {
if (x == c + a) {
cout << " Верно!" << endl;
} else {
cout << "Не верно!\n x =" << endl;
cin >> x;
}
}
} else if (var == 4) {
cout << " Чему равен x ?\n" << " -x = " << c << " - " << a << endl
<< " -x = " << c - a << endl
<< " x = ";
cin >> x;
while ( -x == c - a) {
if ( -x == c - a) {
cout << " Верно! " << endl;
} else {
cout << " Не верно\n x =" << endl;
cin >> x;
}
}
} else if (var == 5){
cout << " Чему равен x ?\n" << " x = " << c << " : " << a << endl
<< " x = ";
cin >> x;
while (x == c / a) {
if ( x == c / a) {
cout << "Верно" << endl;
} else {
cout << " Не верно!\n x = ";
cin >> x;
}
}
} else if (var == 6) {
cout << " Чему равен x ?\n" << " x = " << c << " : " << a << endl
<< " x = ";
cin >> x;
while (x == c / a) {
if (x == c / a) {
cout << " Верно!" << endl;
} else {
cout << " Неверно!" << endl;
cin >> x;
}
}
} else if (var == 7) {
cout << " Чему равен x ?\n" << " x = " << a << " : " << c << endl
<< " x = ";
cin >> x;
while ( x == a / c){
if ( x == a / c) {
cout << " Верно!" << endl;
} else {
cout << " Не верно!\n x = ";
cin >> x;
}
}
} else if (var == 8){
cout << " Чему равен x ?\n" << " x = " << c << " * " << a << endl
<< " x = ";
cin >> x;
while (x == c * a) {
if ( x == c * a) {
cout << "Верно!" << endl;
} else {
cout << " Не верно! \n x = ";
cin >> x;
}
}
} else {
cout << "Нет такого варианта!" << endl;
}
}
}
system("pause");
return 0;
}
Alf
if (!a || !c || (!a && !c)) как понимать етот код??? «Если не а или не с или неа и не с» ну как??? я етого не могу понять
Если а не равно нулю или с не равно нулю или а и с неравны нулю
Саня, я понял, что тебе нужно заниматься и заниматься.
По твоему коду можно книгу об ошибках написать :(
Здесь
if (!a || !c || (!a && !c)) как понимать етот код??? «Если не а или не с или неа и не с» ну как??? я етого не могу понять
ты не понимаешь что такое логические выражения. Нуль может быть введен тобою в переменную a или c. Но если ноль будет в одной из этих переменных то в проверочное условие if мы не попадем т.к. нуль является ложным условием false. Поэтому я применил знак логическое отрицание !, что меняет значение false на true истинное (значение true это любое не нулевое значение).
Здесь
и как тут понимать .get ? (cin >> a).get();
я вижу, что ты не понимаешь как организован объект ввода cin, а конкретно ввод строк после числового ввода. Если кратко, то выражение (cin >> a).get(); нужно понимать так. cin >> a это ввод переменной после чего ты нажимаешь <Enter>. Эта команда попадает в поток как управляющая последовательность \n и если бы не было функции get() присоединенной к оператору (cin >> a).get(), то программа дойдя до операторов
cout << "\nДальше? (<Enter> для продолжения, qwerty для выхода): ";
getline(cin, userPassword);
вызвала бы объект cin, который ввел бы из потока управляющую последовательность \n в переменную userPassword, а это по «нашему» замыслу есть продолжение цикла и цикл будет повторяться бесконечно. А так функция get() благополучно считывает управляющую последовательность из потока и у нас есть возможность сделать ввод.
В общем Саня я не знаю какую ты скачал книгу, но ты наверное не читаешь ее совсем. Я тебе сброшу сюда архив с книгой Стивена Прата.
Задание тебе прочитать 2, 3, 4 и 5 главы!!! и задавать вопросы ТОЛЬКО по темам книги.
Дерзай!!!
Саня
(((не могу открить(((ладно, я сначала свою кигу прочту а потом уже буду заниматься програмированием)))вобшем тему на форуме не удаляй я тебе потом отпишу (когда ето будет не знаю, может через неделю, может через три , но не дольше я так думаю) а вообше, большое спасибо Тебе))))буду учить)))если понадобится помощь напишу)) (сори за орфографию, я просто не с Росии)
Alf щас проверю твою книгу сам немного непомнимаю в программирование точней как непонимаю забываю всегда
ваня
Помогите как менять палку / в другое напровление непойму как
Alf
Обратная косая черта ставиться следующим образом:
1. Устанавливается английская раскладка клавиатуры;
2. Нажимается кнопочка, которая находится слева от буквы Э.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Продолжение (Начало в комментариях)
И так, Саня.
Ввод пароля можно организовать при помощи циклов
for
,while
,do while
. Про циклы можно прочитать на нашем форуме здесь в книге, которую ты читаешь, или погуглить.Сам ввод можно построить так:
1) Вводить пока не введется, то есть если пользователь не знает или забыл пароль то запрос на ввод пароля будет вечным;
2) Вводить заданное кол-во раз;
3) Вводить пока пользователь не введет отказ от ввода пароля.
Первый вариант мы отбросим (т.к. он некудышний) и возьмем второй. То есть если мы модифицируем твою программу (переписанною мною) программа с вводом пароля у нас получится такая
Об этом можно прочитать допустим здесь
Это опять таки можно сделать при помощи циклов. Кстати при вводе пароля, в предыдущей программе, лучше использовать цикл
while
илиfor
, а неdo while
т.к. мы заранее знаем, сколько раз мы будем вводить пароль (НЕ ПРИНЦИПИАЛЬНО). Так можно переписать с цикломwhile
а вот так с циклом
for
А вот выбор решения уравнения организуем с помощью цикла
do while
. Но всегда перед тем как использовать цикл нужно подумать над тем как мы будем выходить из него. При вводе пароля мы заранее определили кол-во вводов. Здесь подойдем к решению вопроса с другой стороны. Если мы вошли в расчетную часть значит мы знаем пароль, поэтому для выхода из цикла решения уравнений попросим пользователя ввести пароль для выхода из программы, а для продолжения расчетов <Enter>.На основании вышесказанного перепишем программу так
И вычисляем сколько душе угодно ;)
Теперь добавим обработку нулевых значений при которых не могут быть найдены решения и получим такой код
Вот то что я от тебя хотел увидеть.
Но я думаю, теперь ты сможешь оптимизировать эту программу так, чтобы она не ответы
x = 2
выводила, а после введенных двух переменных выводила общий вид уравнения и просила тебя ввести правильный ответ при верном ответе программа выводит сообщение, что это правильный ответ, а при неверном ответе — что это неправильный ответ.Дерзай ;)
мда... я ето все не пойму(( вот обьясни мне что ето???
if (!a || !c || (!a && !c)) как понимать етот код??? «Если не а или не с или неа и не с» ну как??? я етого не могу понять
и как тут понимать .get ?
(cin >> a).get();
щас я попробую сделать то что ты хотел)
ти пока обьясни а я тебе завтра скину код, ато роботи дофига с етим кодом))))
писать мне мое дз не надо) я сам над етим работаю))
Alf, помоги ато чето я запутался)))сделал канешно не все (нету варианта уровнения с нулем и нету повторного ввода уровнения, может еще штото пропустил) когда пишеш правильный ответ оно пишет «Верно!» без конца)))А когда пишеш не правильно не выводит сообщение о неправильности(( вот код:
Если
а
не равно нулю илис
не равно нулю илиа
ис
неравны нулюа где тут 0?
Саня, я понял, что тебе нужно заниматься и заниматься.
По твоему коду можно книгу об ошибках написать :(
Здесь
ты не понимаешь что такое логические выражения. Нуль может быть введен тобою в переменную
a
илиc
. Но если ноль будет в одной из этих переменных то в проверочное условиеif
мы не попадем т.к. нуль является ложным условиемfalse
. Поэтому я применил знак логическое отрицание!
, что меняет значениеfalse
наtrue
истинное (значениеtrue
это любое не нулевое значение).Здесь
я вижу, что ты не понимаешь как организован объект ввода
cin
, а конкретно ввод строк после числового ввода. Если кратко, то выражение(cin >> a).get();
нужно понимать так.cin >> a
это ввод переменной после чего ты нажимаешь <Enter>. Эта команда попадает в поток как управляющая последовательность\n
и если бы не было функцииget()
присоединенной к оператору(cin >> a).get()
, то программа дойдя до оператороввызвала бы объект
cin
, который ввел бы из потока управляющую последовательность\n
в переменнуюuserPassword
, а это по «нашему» замыслу есть продолжение цикла и цикл будет повторяться бесконечно. А так функцияget()
благополучно считывает управляющую последовательность из потока и у нас есть возможность сделать ввод.В общем Саня я не знаю какую ты скачал книгу, но ты наверное не читаешь ее совсем. Я тебе сброшу сюда архив с книгой Стивена Прата.
Задание тебе прочитать 2, 3, 4 и 5 главы!!! и задавать вопросы ТОЛЬКО по темам книги.
Дерзай!!!
(((не могу открить(((ладно, я сначала свою кигу прочту а потом уже буду заниматься програмированием)))вобшем тему на форуме не удаляй я тебе потом отпишу (когда ето будет не знаю, может через неделю, может через три , но не дольше я так думаю) а вообше, большое спасибо Тебе))))буду учить)))если понадобится помощь напишу)) (сори за орфографию, я просто не с Росии)
Дерзай, Саня, удачи ;)
Alf щас проверю твою книгу сам немного непомнимаю в программирование точней как непонимаю забываю всегда
Помогите как менять палку / в другое напровление непойму как
Обратная косая черта ставиться следующим образом:
1. Устанавливается английская раскладка клавиатуры;
2. Нажимается кнопочка, которая находится слева от буквы Э.
Вывод на экран
ALF вопрос ты за скоко выучил язык? с++