#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main()
{
bool question;
setlocale(0, "");
cout << "Здравствуйте! Вы проходите тест "Кто хочет стать милионером ? ". У вас есть право на одну подсказку, она будет появляться каждые 5 вопросов. Ну что ж, начнём?" << endl;
cout << "Сколько патентов на изобретения Томас Эдисон получил в США?" << endl;
if (question == 1903)
cout << "Верно! Переходим к следующему этапу..."
else {
cout << "Подумайте ещё.";
get_pass();
}
cout << "В какой год после основания Рима родился Иисус?" << endl;
if (question == 753)
cout << "Верно! Переходим к следующему этапу..." << endl;
else {
cout "Подумайте ещё.";
get_pass();
}
cout << "Сколько лет было самому старому человеку в мире?" << endl;
if (question == 256)
cout << "Верно! Переходим к следующему этапу..." << endl;
else {
cout "Подумайте ещё.";
get_pass();
}
cout << "Какая галактика движется прямо на нашу, Млечный Путь?" << endl;
if (question == "Галактика Андромеды")
cout << "Верно! Переходим к следующему этапу..." << endl;
else {
cout "Подумайте ещё.";
get_pass();
}
cout << "Сумма чисел от 1 до 1000. Вы можете использовать подсказку!" << endl;
if (question == 500500)
cout << "Верно! Переходим к следующему этапу..." << endl;
else if (question == "Подсказка")
cout << "Эту цифру можно разделить на две 500." << endl;
else {
cout "Подумайте ещё.";
get_pass();
}
cout << "Самый популярный пароль в мире." << endl;
if (question == "qwerty")
cout << "Верно! Переходим к следующему этапу..." << endl;
else if (question == "password")
cout << "Верно! Переходим к следующему этапу..." << endl;
else {
cout "Подумайте ещё.";
get_pass();
}
system("pause");
return 0;
}
Создаю программу по типу вопрос-ответ. Через некоторое время понял, что весь код сводится к сплошной копипасте. Есть ли возможность сократить код? И правильный ли он вообще?
Зачем задавать глупые вопросы? Код неправильный. И это покажет первая же попытка его откомпилировать. Или даже раньше IDE (если это достаточно интеллектуальная IDE, например MS Visual Studio) подчеркнёт ошибки.
Из всех многочисленных ляпов откомментировать хочу два:
В программе нет ни одного оператора, который получал бы ввод от пользователя. Поэтому вся эта викторина — штучка сама в себе.
Переменная question нигде не получает значения. Т.е. в общем случае содержит случайное значение. Сравнивать значение типа bool с числом в данном случае бессмысленно: целое, отличное от 0, всегда будет интерпретироваться как true, в противном случае, как false. Сравнение значение типа bool с const char * — синтаксическая ошибка.
Сократить код можно, если наборы из вопроса, правильного ответа и подсказки представить в виде массива. Т.е получится либо массив экземпляров структур или классов (что предпочтительнее), либо двумерный массив.
Ещё лучше не держать этот массив в памяти, а по необходимости очередную порцию вопрос-ответ-подсказка подчитывать из внешнего файла, например текстового.
Ещё совет: в качестве контейнеров для текстовых строк используй класс string из STL. Это избавит от головной боли при выделении буфера для С-строк, контроле за границей буфера, сравнении С-строк и пр.
Ещё совет: всегда используй для ответов строки. В данном случае тебе не нужны числа, как числа. Хватит и их символьного представления. Этим ты избавишься от разного типа данных при получении и обработке ответа пользователя.
А далее, если имеется ввиду «первое число» «символ операции-1» «второе число» «символ операции-2» «третЬе число», то надо либо дважды использовать оператор switch для выбора операции между первым и вторым операндом, и результатом первой операции и третьим операндом, либо, что лучше, написать функцию, которая принимает три аргумента: два операнда и символ операции, и возвращает результат операции над операндами и применить её дважды.
1)что означает "string"?
2)почему "std" записывается перед "string" и между ними ставиться :?
3)что означают строки:
using std ::cout;
using std ::cin;
using std ::endl;
4)что такое int arr?
5)что значат эти строки?
cout<<"["<<i+1<<"]"<<":";
cin>>arr[i];
cout<<"\n Ваш массив:";
6)что такое n?
в чем отличие ++i от i++?
cout<<arr[i]?
7)Почему мы пишем в массивах for (int i=0),а не for (i=0)?
И еще, можно посмотреть пример кода? (лучше, написать функцию, которая принимает три аргумента: два операнда и символ операции, и возвращает результат операции над операндами и применить её дважды.)
Читал, Герберт Шилдт «Полный справочник по C++», похоже этот справочник для программистов знающих хотя бы основы программирования и которым есть с чем сравнить. Я там почти ничего не понял из его объяснений. Все сумбурно. Может подскажете книгу для начинающих программистов?
Slonopotam, спс за наводку. Пока читаю Стефана Р.Дэвиса, потом может и до них доберусь.)
Александр
Пока дошёл до 4 урока «Циклы».
И решил ввести значение переменной i в ручную (не через код)
Через цикл for все работает а через do while нет. Не много погодя пришла мысль что do while не пременим к такой раскладке. Код напишу вручную т.к. с мобилки.
#include <iostream>
using namespace std;
int main (){
setlocale (0,"");
int i;
int sum;
cout<<"Введите значение переменной i "<<endl;
cin>>i;
do {i++;
sum += i;}
while (i>1000)
cout<<"Сумма чисел от "<<i<<"до 1000 ="<<sum<<endl;
return 0;
}
Александр, (1) оформляй код в соответствии с правилами разметки! (2) Пиши с соблюдением правил орфографии и пунктуации. Отмаз про мобилу не принимается. (3) Циклом do-while сэмулировать работу цикла for можно, но уж совсем коряво. Поскольку цикл for проверяет условие продолжения цикла до выполнения тела цикла, а цикл do-while — после. А вот цикл while — вполне себе годится.
Подскажите, что такое профамма??? в интернете так и не понял опечатка это или так называют все программы которые являются программами вычисления. В википедии об этом ни слова...
sam
Здравствуйте. Подскажите пожалуйста где ошибка?
#include <iostream>
int main()
{
std::cout << "Hello Kamil!";
system ("PAUSE >> void");
}
Stiv@Vits, судя по Гуглу, «профамма» — это неправильно распознанное OCR слово «программа». Забей.
sam, собственно говоря, в программе ошибки нет. Есть ошибка в команде MSDOS-shell: команда должна звучать так "pause >nul". Но лично я считаю, что вывод подсказки Press any key for continue... более чем оправдан.
Роман
#include <iostream>
int main()
std::cout;
std::endl;
{
cout << "Hello Kamil!";
system ("PAUSE >> void");
}
Danuta
чтобы не писать везде std::
перед int main(void main) нужно написать: using namespace std;
Xask
чтобы не писать везде std:: перед int main(void main) нужно написать:
using namespace std;
Согласен. И тогда можно использовать просто system("pause");
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Создаю программу по типу вопрос-ответ. Через некоторое время понял, что весь код сводится к сплошной копипасте. Есть ли возможность сократить код? И правильный ли он вообще?
Зачем задавать глупые вопросы? Код неправильный. И это покажет первая же попытка его откомпилировать. Или даже раньше IDE (если это достаточно интеллектуальная IDE, например MS Visual Studio) подчеркнёт ошибки.
Из всех многочисленных ляпов откомментировать хочу два:
В программе нет ни одного оператора, который получал бы ввод от пользователя. Поэтому вся эта викторина — штучка сама в себе.
Переменная
question
нигде не получает значения. Т.е. в общем случае содержит случайное значение. Сравнивать значение типаbool
с числом в данном случае бессмысленно: целое, отличное от 0, всегда будет интерпретироваться какtrue
, в противном случае, какfalse
. Сравнение значение типаbool
сconst char *
— синтаксическая ошибка.Сократить код можно, если наборы из вопроса, правильного ответа и подсказки представить в виде массива. Т.е получится либо массив экземпляров структур или классов (что предпочтительнее), либо двумерный массив.
Ещё лучше не держать этот массив в памяти, а по необходимости очередную порцию вопрос-ответ-подсказка подчитывать из внешнего файла, например текстового.
Ещё совет: в качестве контейнеров для текстовых строк используй класс
string
из STL. Это избавит от головной боли при выделении буфера для С-строк, контроле за границей буфера, сравнении С-строк и пр.Ещё совет: всегда используй для ответов строки. В данном случае тебе не нужны числа, как числа. Хватит и их символьного представления. Этим ты избавишься от разного типа данных при получении и обработке ответа пользователя.
Ещё совет: почитай статью «Символы кириллицы в консоли Windows». Судя по всему ты пользуешься именно этой осью.
PS. А для проверки ответов, по хорошему, лучше использовать регулярные выражения. Но тут уж грузить не буду ))
Подскажите как правильно записать м=??
Правильно
А далее, если имеется ввиду «первое число» «символ операции-1» «второе число» «символ операции-2» «третЬе число», то надо либо дважды использовать оператор
switch
для выбора операции между первым и вторым операндом, и результатом первой операции и третьим операндом, либо, что лучше, написать функцию, которая принимает три аргумента: два операнда и символ операции, и возвращает результат операции над операндами и применить её дважды.У меня скопилось еще несколько вопросов:
И еще, можно посмотреть пример кода? (лучше, написать функцию, которая принимает три аргумента: два операнда и символ операции, и возвращает результат операции над операндами и применить её дважды.)
Stiv@Vits, ответы на эти твои вопросы и ещё на множество других есть в книгах. Например, Герберт Шилдт «Полный справочник по C++». Гугл тебе в помощь.
Пример кода (не проверял):
Читал, Герберт Шилдт «Полный справочник по C++», похоже этот справочник для программистов знающих хотя бы основы программирования и которым есть с чем сравнить. Я там почти ничего не понял из его объяснений. Все сумбурно. Может подскажете книгу для начинающих программистов?
Stiv@Vits Харви М. Дейтел, Пол Дж. Дейтел — Как программировать на C++
Slonopotam, спс за наводку. Пока читаю Стефана Р.Дэвиса, потом может и до них доберусь.)
Пока дошёл до 4 урока «Циклы».
И решил ввести значение переменной i в ручную (не через код)
Через цикл for все работает а через do while нет. Не много погодя пришла мысль что do while не пременим к такой раскладке. Код напишу вручную т.к. с мобилки.
За флуд ссори. Так вот, правильная, нет мысль?
Александр, (1) оформляй код в соответствии с правилами разметки! (2) Пиши с соблюдением правил орфографии и пунктуации. Отмаз про мобилу не принимается. (3) Циклом
do-while
сэмулировать работу циклаfor
можно, но уж совсем коряво. Поскольку циклfor
проверяет условие продолжения цикла до выполнения тела цикла, а циклdo-while
— после. А вот циклwhile
— вполне себе годится.Подскажите, что такое профамма??? в интернете так и не понял опечатка это или так называют все программы которые являются программами вычисления. В википедии об этом ни слова...
Здравствуйте. Подскажите пожалуйста где ошибка?
Stiv@Vits, судя по Гуглу, «профамма» — это неправильно распознанное OCR слово «программа». Забей.
sam, собственно говоря, в программе ошибки нет. Есть ошибка в команде MSDOS-shell: команда должна звучать так
"pause >nul"
. Но лично я считаю, что вывод подсказкиPress any key for continue...
более чем оправдан.чтобы не писать везде std::
перед int main(void main) нужно написать: using namespace std;
Не переносимо
Только если понимаете что Вы действительно делаете,
в т.ч. учесть, что имена будут не квалифицированными.
И без этого можно было + не переносимая команда.
Много писать чтоли?
Или просто здорового кода не видели?