Аватар для Alex Kireev
28 / 36 / 6
Регистрация: 21.11.2017
Сообщений: 202

Добавление цикла For в программу

09.01.2018, 21:09. Показов 1881. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Дайте пожалуйста намек как в эту программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream> 
#include <conio.h>
#include <string>
using namespace std;
 
int main()  
{
    string pass;
    cout << "Введите пароль:" <<endl;
    int ch = 0;               // Переменная для символа.
    while (true)                // Создание бесконечного цикла.
    {
          ch = _getch();        // Помещаем код нажатой клавиши в переменную.
          if (ch == 13)         // Установка Enter на прерывание цикла.
          {
                 break;         // Прерывание цикла.
          }
          if (ch == 27)   // Установка Esc на закрытие консоли.
          { 
                 exit (0);      // Выход из консоли.
          }
          if (ch == 8)     // Установка Backspace на удаление символов.
          {
                  
               cout << (char)8 << ' ' <<char(8);  
           /*Смещение курсора на одну позицию  в лево вывод пробела и 
           снова смещение курсора влево, то есть при нажатии Backspace 
           символ будет стираться, а курсор перемещаеться. */
               
               if (!pass.empty())
             /*Если строка pass не являеться пустой, то из неё 
             можно удалять  последний символ (Иначе закрывалась консоль.)*/
             
               pass.erase(pass.length()-1); 
               // позволяет удалить последний символ из строки pass
          }
         
          else                   
          { 
          cout << '*';            // Замена символов на *
          pass += (char)ch;       // Преврашение кода из целого числа в символ.
          }
    }          
        if(pass == "123456")           //Проверка пароля. (пароль 123456)
       {
    
       cout << "\nВы вошли в систему!!!" << '\n'; 
}
    else    
 {                      
        cout << "\nПароль не правильный!!!" << '\n'; 
}      
            
    system ("pause"); 
    return 0;
} 
/*
 
_getch();  Функция которые вводит данные через консоль, не 
отображает их на экранею Так как она вводит один символ то 
 исполюзуеться бесконечный цикл while (true).
 
 Удаляем символы.
 pass.erase(pass.length()-1). 
 Передаем в функцию pass.erase число на единицу меньше чем длина текущей строки.
Получение длины строки: pass.length().
Вычитание последнего символа из строки: -1 (Один символ одно нажатие клавиши).
 
pass += (char)ch; То же самое что и pass = pass + (char)ch;
 
Вместо << endl; можно использовать << '\n'; или cout << " ... \n";
 
 */
добавить попытки ввода с этого поста.
Прерывание ввода при израсходовании попыток ввода пароля
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2018, 21:09
Ответы с готовыми решениями:

Добавление значений в массив с использованием цикла while
Изучаю C++ по книге и делая очередное упражнение в конце главы столкнулся с одной проблемой. Код: int main() { double max =...

Сделать программу с использованием цикла While, без цикла For
Дана такая программа: CLS INPUT &quot; Кол. рабочих дней: &quot;, n INPUT &quot; Начальное кол. товара: &quot;, R FOR I = 1 TO n ...

Переписать программу с использованием цикла While, без цикла For
Дана такая программа: uses Crt; var n, R, D,i: integer; begin ClrScr; write(' Кол. рабочих дней: '); readln(n); write ...

25
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
15.01.2018, 22:26
Студворк — интернет-сервис помощи студентам
Алексей, вы еще тут?

Добавлено через 2 минуты
Цитата Сообщение от alex_kireev Посмотреть сообщение
При вводе 3х неправильных ответов должно выйти это сообщение:
"Вы три раза неправильно ввели пароль. Обратитесь к cистемному администратору, или в службу поддержки."
и здесь выбор ответа, сисадмин или поддержка. Но если пользователь вел секретный код то сбрасывается старый пароль и вводиться новый.
Я правильно понял, что у пользователя после трех промахов есть ТРИ варианта - вызов сисадмина, вызов поддержки и ввод секретного пароля. Просто одно за другим идет и мне показалось, что это идет бок-о-бок.
0
 Аватар для Alex Kireev
28 / 36 / 6
Регистрация: 21.11.2017
Сообщений: 202
15.01.2018, 22:42  [ТС]
Цитата Сообщение от TheDmytrius Посмотреть сообщение
Я правильно понял, что у пользователя после трех промахов есть ТРИ варианта - вызов сисадмина, вызов поддержки и ввод секретного пароля. Просто одно за другим идет и мне показалось, что это идет бок-о-бок.
Да это так.
Если сможете сделайте пожалуйста.
Я думал что сам смогу, а сегодня сказали что завтра информатика и надо сдать.
Извяните что так с ответом задержался.
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
15.01.2018, 23:46
Лучший ответ Сообщение было отмечено Alex Kireev как решение

Решение

Вот программа (опять же, с черновиком):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <iostream>
#include <conio.h>
#include <string>
//#include <ctime>
using namespace std;
 
 
int main()
{
setlocale(LC_ALL,"russian");
//srand(time(0));
string pass;
string pass_value = "123456"; //строка, содержащая правильный пароль
int ch = 0; // Переменная для символа.
 
int x;
for(x=0;x<3;++x) 
{
    EnterPassword: //метка, куда переходит процесс выполнения в случае изменения пароля
cout << "\nВведите пароль: " <<endl;
 
while (true) // Создание бесконечного цикла.
                        {
ch = _getch(); // Помещаем код нажатой клавиши в переменную.
if (ch == 13) // Установка Enter на прерывание цикла.
{
break; // Прерывание цикла.
}
if (ch == 27) // Установка Esc на закрытие консоли.
{
exit (0); // Выход из консоли.
}
if (ch == 8) // Установка Backspace на удаление символов.
{
 
cout << (char)8 << ' ' <<char(8);
/*Смещение курсора на одну позицию в лево вывод пробела и
снова смещение курсора влево, то есть при нажатии Backspace
символ будет стираться, а курсор перемещаеться. */
 
if (!pass.empty())
/*Если строка pass не являеться пустой, то из неё
можно удалять последний символ (Иначе закрывалась консоль.)*/
pass.erase(pass.length()-1);
// позволяет удалить последний символ из строки pass
}
 
else
{
cout << '*'; // Замена символов на *
pass += (char)ch; // Преврашение кода из целого числа в символ.
}
 
                            }
 
if(pass == pass_value) //Проверка пароля. (пароль 123456)
{
cout << "\nВы вошли в систему!!!" << '\n';
break; //цикл ввода паролей прерывается, но программа не заканчивается
}
if(pass == "485823")
{
    SecretPassword:
cout << "\nВы ввели секретный код. Введите новый пароль: " << '\n';
pass_value = "";
 
while (true) 
                        {
ch = _getch(); 
if (ch == 13) 
{
break; 
}
if (ch == 27) 
{
exit (0); 
}
if (ch == 8) 
{
cout << (char)8 << ' ' <<char(8);
if (!pass.empty())
pass.erase(pass.length()-1);
}
else
{
cout << '*'; 
pass_value += (char)ch; 
}
                            }
 
/*const char * ar[]={"a","b","c","d","e","f","g","1","2","3","4","5","6","7","8","9","0"};
pass_value = "";
for (int i=0; i<8; i++)
    pass_value += ar[rand() % (sizeof ar/sizeof (char *))]; //алгоритм для случайного нового пароля
cout<<pass_value<<endl;*/
 
 
pass.clear();
x=0;
goto EnterPassword; //после ввода нового пароля процесс выполнения начинается с метки
}
        else if(x == 0 && pass != pass_value) 
            {cout << "\nНеправильный пароль. Осталось две попытки.\n";
            pass.clear(); } //очищаем строку пароля, если он неправильный
        else if(x == 1 && pass != pass_value) 
            {cout << "\nНеправильный пароль. Осталась одна попытка.\n";
            pass.clear(); } //очищаем строку пароля, если он неправильный
        else if(x == 2 && pass != pass_value)
            {
cout << "\nВы три раза неправильно ввели пароль! \n Введите 1 для обращения к cистемному администратору.\n Введите 2 для обращения в службу поддержки.\n";
cout << "Вы также можете ввести секретный пароль для сброса старого. \n";
int action;
cin>>action;
    if (action == 1)
        {
        cout << "Извяните, но системный администратор на выезде. Перенаправляем вас в службу поддержки... \n";
 
        _sleep(4000); //приостановка работы программы на 4000 мс
        cout<<"Loading...";     //эти строки сделаны для симуляции загрузки =) , если работать не будут - удали их!
        _sleep(6000); 
        system("cls"); //очистка экрана консоли
        
        goto Support;
        }
    else if (action == 2)
            {
                Support:
        cout << "Вы обратились в службу поддержки, пожалуйста заполните анкету: \n";
        cout << "Ваше имя:\n";
        string a;
        cin >> a;
        cout <<"Ваша фамилия:\n";
        string b;
        cin >> b;
        cout << "Уважаемый(ая) " << a <<" "<< b << ". Код для смены пароля был выслан на Вашу электронную почту.\n";
            }
    else if (action == 485823)
        goto SecretPassword;
    else 
    {
        cout<<"Вы принебрегли обращением и неправильно ввели секретный пароль. Access denied! \n";
    }
/*
switch(action)
    {
    case 1:
        {
         cout << "Извяните, но системный администратор на выезде. Обратитесь в службу поддержки. \n";
        } break;
    case 2:
        {
        cout << "Вы обратились в службу поддержки, пожалуйста заполните анкету: \n"; //вариант использования оператора множественного выбора switch - отдал предпочтения стандартным ифам, т.к. там проще предвидеть неправильный ввод
        cout << "Ваше имя:\n";
        string a; //строки а и b не были объявлены
        cin >> a;
        cout <<"Ваша фамилия:\n";
        string b;
        cin >> b;
        cout << "Уважаемый(ая) " << a << b << ". Код для смены пароля был выслан на Вашу электронную почту.\n";
        } break;
    case 485823:
        {
            goto SecretPassword;
        } break;
    } */
 
 
            }
 
}
    /*      
        }
        cout << " Системный администратор (y/n)" <<endl;
     char c;
     cin >> c;
     done =(c != 'y'); // аналогично [done = (c=='n');]
     if (c != 'y')
     cout << "Извяните, но системный администратор на выезде. Обратитесь в службу поддержки. \n";
        cout << " Служба поддержки(Y/N)" <<endl;
     char c;
     cin >> c;
     done =(c != 'Y'); // аналогично [done = (c=='N');]
     }
     if (c != 'Y')
{
     cout << "Вы обратились в службу поддержки, пожалуйста заполните анкету: \n";
     cout << "Ваше имя:\n";
     cin >> a;
     cout <<"Ваша фамилия:\n";
     cin >> b;
     cout << "Уважаемый(ая) " << a << b << "Код для смены пароля был выслан на Вашу электронную почту.\n";
     } */
 
system ("pause");
return 0;
}
Вашу часть про сисадмина и поддержку адаптировал на свой лад. Можете сами её адаптировать.
Выбор при промахах сделал. Самостоятельный ввод пароля готов.

Добавлено через 6 минут
Закомментированные алгоритмы перед сдачей удали чтобы препод не слишком переоценил тебя))
1
 Аватар для Alex Kireev
28 / 36 / 6
Регистрация: 21.11.2017
Сообщений: 202
16.01.2018, 14:28  [ТС]
Большое спасибо.
Выручили.

Добавлено через 22 секунды
Завтра напишу как сдал.

Добавлено через 14 часов 35 минут
Здравствуйте.
Большое спасибо за помощь, поставили 3++, но потом исправили на 4.
Цитата Сообщение от TheDmytrius Посмотреть сообщение
чтобы препод не слишком переоценил тебя
Он посмотрел сказал что можно было сделать попроще, но раз я только начал изучать С++ то пойдет.
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
16.01.2018, 16:39
Цитата Сообщение от alex_kireev Посмотреть сообщение
Он посмотрел сказал что можно было сделать попроще, но раз я только начал изучать С++ то пойдет.
С преподавателями вечно так. Все говорят "Попроще!", но что, где и, самое главное, как - "Этты, сынок, сам думай!".
0
 Аватар для Alex Kireev
28 / 36 / 6
Регистрация: 21.11.2017
Сообщений: 202
16.01.2018, 21:22  [ТС]
Цитата Сообщение от TheDmytrius Посмотреть сообщение
"Этты, сынок, сам думай!"
Что верно то верно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2018, 21:22
Помогаю со студенческими работами здесь

Вывод с цикла и добавление в форму
Нужно что бы при клике на логин (onClickUser ) добавляло тот логин на который мы кликули :) Я делаю так, но добавляе почему то только...

Изменение процедуры (добавление цикла)
Всем привет! Еще раз! :) Имеется код, который &quot;берет&quot; текст из edit и разбивает по 7 символов по строке в memo. procedure...

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

составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла с параметрами
помогите составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла...

Написать программу с оператором цикла while
Написать программу. с оператором цикла while; с оператором цикла for; с оператором цикла do while


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

Новые блоги и статьи
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru