Код про зерна на шахматной доске содержит неприятную необнаруженную ошибку, которая видна невооруженным взглядом, если внимательно посмотреть на вычисления. Начальное значение переменной 'result' равно 1. На первой итерации главного цикла к ней прибавляется значение 2 (т.е. 2^1), на второй итерации к ней прибавляется значение 4 (2^2), затем 8, 16 и т.д. и т .п На 64-й итерации главного цикла к 'result' будет прибавлено, как несложно догадаться, 2^64. Таким образом, эта программа пытается вычислять сумму 1+2+4+8+...+2^63+2^64. Это очевидным образом неправильно. Правильная сумма должна содержать слагаемые вплоть до 2^63, но не 2^64. Другими словами данная программа пытается вычислить количество зерен на 65-клеточной шахматной доске. Почему же финальное значение 'result' получается правильным? А потому, что вычисление степени двойки происходит в рамках 64-битного беззнакового типа 'unsigned long long'. Величина 2^64 не помещается в диапазон типа 'unsigned long long'. При вычисленнии последнего слагаемого происходит переполнение и заворот беззнакового целого с результатом 0. Таким образом, вместо добавления в сумму значения 2^64 эта программа на последней итерации цикла прибавляет в сумму 0. Понятно, что 0 сумму не меняет и ответ остается правильным. То, что на последнем этапе вычисления значение суммы не меняется осталось незамеченным потому, что отладочная печать в данной программе делается _до_ того, как вычислено новое значение 'result'. Т.е. по какой-то странной причине автор кода все время печатает "предыдущее" значение 'result'. Финальное значение 'result' мы не видим. Если вы используете а данной программе более широкий целочисленный тип (например тип '__int128_t' в компиляторе GCC) и тем самым исключите переполнение при вычислении степени, а также добавить печать финального значения 'result', то вы увидите, что это значение 'result' неверно. Как я сказал выше, программа на самом деле вычисляет количество зерен на 65-клеточной шахматной доске :) Чтобы это программа не занималась подобной бессмыслицей, следует исправить условие повторения главного цикла на строгое 'j < 63', а отладочную печать внутри цикла (ели она вам там нужна) перенести ниже, после вычисления нового значения 'result'. Отдельно стоит заметить, что завел константу 'N' для описания количества клеток на доске, что есть хорошая идея. Тем не менее константа 'N' не используется вообще нигде в коде (???) Также идея переинициализировать значение 'pow' единицей _в_ _конце_ главной итерации порождает странный неудобочитаемый код. 'pow' должно инициализироваться непосредственно перед вычислением. Да и объявлено в таком варианте 'pow' должно быть внутри главного цикла, ибо снаружи оно никому не нужно.
Минут 15 сидел, не понимал для чего же второй цикл был нужен, когда понял что он нужен для того чтобы приумножать значение pow перед тем как прибавлять его к результату еще пару минут тупил почему же выполняется только первая операция после цикла, вспомнил что Денис говорил что если не открывать { } скобки то выполняется только первый оператор и все стало на свои места. Тупняк был конкретный, но было весело самому додуматься. Спасибо, отличные уроки.
Спасибо за уроки) Вот моя альтернатива по поводу зерен int main () { int x = 2; // Номер хода unsigned long long a = 1; // a=1 начальное количество зерен for(int i(0); i < 63; i++) // 0-63 (64 раза надо умножить переменную "а" на 2) { cout
Большое спасибо за подробные разъяснения! Выскажу свое мнение - в заключительном упражнении по зернам не всем и не сразу будет понятна конструкция с двумя "for" и переменными "i и j". Предлагаю свой более прозрачный вариант: const int a(2), n(64); // основные константы - множитель и число клеток unsigned long long cell(1), general(1); // начальные значения для 1-й клетки cout
Дим, спасибо за уроки! Все нравится, но не понял про цикл внутри цикла, можешь на простейшем примере объяснить, как он выполняет первые 4 операции допустим unsigned int a = 3; for (int i = 0; i < 20; i++) { for (int j = 0; j < i; j++) a *= 2; cout
Еще раз повторюсь, что мне очень нравятся твои уроки. Но мне кажется, что функцию sqrt можно использовать без подключения cmath. Мне всегда казалось что это стандартная функция (как сложение, вычитание, ...). Я проверил. У меня подключены только iostream и conio.h и я спокойно использую функцию sqrt.
Спасибо за доступное изложение! У меня возведение в степень получилось так: int a,b; cout > a; cout > b; unsigned long long result=a, pow; for (int i(1); i
Добрый день! А почему если цикл записать в условие, то при вводе текста else не работает? #include #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); int n; unsigned long result = 1; if (!(cin >> n) || (n >= 0)) { for (int i = 1; i
Подскажите пожалуйста моя задача решена верно или нет? В условии что вы озвучили 30:31 должно выйти 1, 2, 4, 8... то есть логично что дальше будут цифры удваиваться. Но у Вас уже на третьей клетке 7 зерен, а на 4... 15, как итог в конце сильно разнящиеся цифры с поставленным условием задачи 37:09. #include "stdafx.h" #include #include #include using namespace std; int main() { setlocale (LC_ALL,"rus"); const int N = 64; unsigned long long Zerno = 1; cout
Спасибо за урок, вот мой пример со степенями #include #include #include using std :: cout; using std :: cin; using std :: endl; int main() { setlocale (LC_ALL, "Russian"); unsigned long long a, res; int z,x; char q; cout a; x=a; cout > z; for (int i=2; i
Извините... Один вопрос- сделал калькулятор с циклом while через if и else первое действие у меня сумма а последнее деление (в цикле). Так вот когда я выбираю сумму или что то другое прога просчитывает потом делает деление а потом цикл повторяется. Как сделать так чтобы цикл останавливался посчитав значение и потом снова спрашивал действие??
Задача в конце урока, ее я решил, но добавил две проверки, что бы нельзя было вводить 0 или меньше, и допустим ограничитель строк(допустим вывели больше 30 строк он скажет об этом) int s; cout > s) || (s
помогите понять. скачал сервер на C++. Обычный тестовый, без логики входной информации, на сокете. Инициализируется сокет - это все понятно. Я про сокет практически знаю из VB все. Работал вплотную и с UDP и с TCP практика есть, и файлы по своему протоколу ганяю и могу дистанционно доставать что хочу и управлять. Хочу сервер на C++. Меня удивила обычная конструкция цыкла for(;;){} Я так понял что это вечный цыкл. Догадался от JS, там точно так же. Вроде все понятно. Ставлю точку остановки внутри цикла. Программа не останавливатся. А когда обращаюсь к сокету по 127.0.0.1 по 80 порту, то срабатывает останов в моей точке. И тут я вообще недопонимаю нихрена. А как так? В визуал бейсике я могу также цыклить, но зависает тогда все. Нужно делать как минимум DoEvents чтобы дать возможность другим процессам работать. К примеру я люблю давать прерывание на таймер, чтоб он что-то перепроверил, чтоб на экране что-то анимировалось или просто вывелась информация. Тут я не понял смысла цыкла.
Уважаемый Denis Markov . пытаюсь самостоятельно выучить язык программирования с помощью Ваших видео уроков. Спасибо большое, всё доступно объясняете. Но не могли бы Вы мне помочь в решении этого задания, а точнее объясните как это должно происходить поэтапно. Вот собственно сама задача - Дано целое число N которое больше 0. Найти сумму 1 + 1/2 + 1/3 + ... + 1/N (вещественное число) ....... как правильно с дробями работать через циклы ?
Спасибо за ваши уроки. На мой взгляд каждый раз считать степень не лучшее решение, вот так несколько лучше. И 2 в 64 все же не влазит, не подскажите как его посчитать и вывести int main(int argc, char** argv) { const int N = 64; unsigned long long result = 1, pow = 1; int i(0); do{ pow *= 2; result += pow; ++i; cout
Скажите пожалуйста, а как мне создать диалоговое окно типо, программа спрашивает у меня, Как настроение, а я пишу допустим, не выспался, а оно отвечает, Очень Жаль, или я пишу что я побегал и победил, а она пишет я рад за тебя! Буду рад ответу, на ранние спасибо!
скажите пожалуйста,,, а почему в for еще один for ???,,, и что это значит???,,, не понятно про100 для чего здесь 'j' и 'pow' .. еще эта строка не понятна (pow*= 2)… я этот урок не поняла,,,, объясните пожалуйста,,, это важно… заранее спасибо…
Цикл внутри цикла называется вложенным циклом и его идея очень проста, на каждой итерации цикла мы запускаем новый цикл. Тоесть если внешний for имеет 5 итераций, а вложенный for 7 итераций, то всего будет 5*7=35 итераций. А в задаче переменная pow хронила 2^n, чтобы найти данное число мы должны 2 умножить на само себя n раз, вот и появляется вложенный цикл. 2^5 = 2*2*2*2*2. Поэтому на каждой итерации внешнего цикла, запускали вложенный цикл, чтобы возвести 2 в n степень.
как сделать что бы выходило из программы только при нажатии на 'n', а на все остальные буквы выдавало не верный ввод. пытался сам сделать но что то не доходит ((
решил несколько по другому. понимаю, что пример вложенного цикла, но он тут сильно лишний unsigned long long result(0), pow(1); for (int i(0); i < 64; i++) { result += pow; cout
Да что такое не-стыковки. Ты же говорил что на 1 клетку 1 зерно, на вторую 2 зерна, на третью 4 зерна, а на четвертую клетку 8 зерен итд. Значит по этой логике должно получится совсем другое число. Если я не прав пожалуйста объясни чего я не понял? Вот какой код я написал. #include < iostream> using namespace std; int main() { unsigned long long a = 1; unsigned long long b = 1; while (a
Справился со вторым заданием, сенсей! #include #include using std::cout; using std::cin; using std::endl; using std::ios_base; int main() { setlocale(LC_ALL, "Russian"); const int x = 2; //константа для вывода таблицы степеней 2 int n = 0;//количество выполнения цикла unsigned long long result = x; int j = 0; //для циклов while и do while cout > n)) { cout
мой вариант степени не только 2, но добавил чтобы любое число можно было ставить. (домашка) #include #include using namespace std; int main() { setlocale(LC_ALL, "ukr"); cout n; for (int i = 0; i < n; i++) { p = p * a; cout
Не понял описания задачки о мини-калькуляторе, где как я понял нужно сделать было и switch и if-else. Ломал голову, как туда еще и if-else запилить с функционалом, пока не придумал вот это. Может кому интересно будет: #include #include "conio.h" using namespace std; int main() { setlocale(0, "russian"); int a, b; char c; cout > a; cin >> c; cin >> b; if (b == 0) if ((c == '/') || (c=='%')) { cout
Здравствуйте, у меня возникла проблема. Я не могу построить программу. Ну точнее она запускается, но там пусто и в кампеляторе пишет 'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64 tdll.dll', Cannot find or open the PDB file 'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file 'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file 'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Cannot find or open the PDB file 'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Cannot find or open the PDB file Можно ли что-нибудь с этим сделать? Я пробовал переустановить, чтобы восстановить возможно потерянные файлы, но не помогло.
конечно, очень полезные уроки и как программисту я хочу сказать спасибо) но - "ложить" меня убило, плюс, 2 в нулевой степени = 1. так, к сведению) а в целом спасибо)
Подскажите пожалуйста, почему после создания программы в разширении .exe она не работает на других компах? что нужно сделать, чтоб другие компы воспринимали?
Ты только *.exe на других компьютерах ставил? Если да, то прихвати еще *.cpp или *.h файл. (В котором ты код писал). По идее должно работать, если все включенные в программе библиотеки есть на компьютере.
Во первых спасибо за уроки, они очень помогают в изучении C++ и они очень интересны. Во вторых есть вопрос про шахматиста и зерна. Я долго думал зачем 2 цикла. Вы сказали, что это цикл внутри цикла следовательно в итоге циклов 64*64? От этого же зависит быстродействие? А если во втором цикле j присвоить 0 и сразу сделать равным 0 то останется 60 циклов? Вот что у меня получилось. const int N = 64; unsigned long long res = 1, paw = 1; for (int i = 1; i
Помогите! Я откомпилировал свою программу в Visual Studio и отправил друзьям, у них на при запуске exe файлы, который я отправил, выдаётся ошибка, типа не является файлом win32, и даже когда я создаю новый проект и выбираю консольное окно win32 и отправляю снова, у них та же ошибка, в чём дело?
Нет, не установили. Смысл тогда программы писать, если их запустить люди не могут без Visual Studio? Может какие-то файлы надо в папку засунуть или ещё что-то?
когда ты начинаешь программу указываешь все #include пишешь int main() {какая то функция} если у тебя перед функцией main стоит int то результатом должно быть число. поэтому в конце мы возвращаем return 0; как успешное окончание. мы можем записать void main () {} тогда нам ничего возвращать не нужно так как void говорит компилятору что функция ничего не возвращает.
Денис, зачем Вы так намудрили в задаче с зернами? Все сделал намного проще, вместо где-то 33 строк кода у меня вышло 15. #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); unsigned long long x=1; int i; for(i=1;i
Valik Troyan Действительно ваш вариант короче и проще, но я немного исправил#include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); unsigned long long x=1; int i; cout
Может кто-то прочтет: Данный материал хорош, но не для новичков, который только начали изучать язык. Здесь фигурируют уже вложенные циклы, которые еще нужно понять, а так сразу и не въедешь в тему. Поэтому лучше узнать про циклы где-то еще.
Я так сделал, правда понадобился, но я вижу, что он уже включен int main() { setlocale(LC_ALL, "Russian"); unsigned long long res = 0, a; for(int i = 0; i < 64; i++) { a = pow(2,i); res += a; } cout
Не сказал бы что логические операции с логическими операторами && || это "минус" именно плюсов, все языки имеют этот вид оптимизации исполнителя, это в масштабных проектах реально увеличивает скорость. И да, даже не самый быстродейственный интерпретируемый, без JIT язык под рназванием JS имеет такое свойство, сам урок хороший спасибо!
Денис, очень нравятся твои уроки, спасибо! Но в дз из прошлого урока ты допустил ошибку в формуле. D = (b*b) (ты не смог возвести в степень и решил в коэф b. подставить 2, что плохо) p.s. вставив любое др число в коэф b, например 3, то формула уже будет недействительна. Сам долго мучился в поисках знака "возведения в степень, но так и не нашел. P.S. Знак "^" не работает.
+Tolegen Churchitbaev Сори, первый комент не тебе, вот правильный const int M=100; const int N=100; int i,j; ///матрица double **mat = new double*[M]; for (i=0;i
include #include using namespace std; int main() { int a, b, c,x1,x2; cout > a; cout > b; cout > c; x1=((-b-sqrt(b*b-4*a*c))/2*a; x2=((+b+sqrt(b*b-4*a*c))/2*a; cout
1. Тип int: int a, b, c,x1,x2; результаты должны быть вещественным числом. то есть типа double. 2 приоритет операций и лишняя скобка x1=((-b-sqrt(b*b-4*a*c))/2*a; Сначала он разделит на 2 а потом умножит на a. Нужно так x1=(-b-sqrt(b*b-4*a*c))/(2*a);
Всё очень усложнено с последней задачей, код в реальности намного проще int main() { unsigned long long pow = 1, result = 0; for (int i = 1; i < 64; i++) { pow *= 2; result += pow; cout
В целом уроки хороши, но зачем ставить цикл в цикле (вариант с зернами на доске), когда можно записать проще и понятнее, например вот так=> const int N = 64; unsigned long long zerno = 1, vsego = 1; for (int i = 1; i
Что бы понять что такое комплексные числа посмотрите какой нибудь фильм про развитие математики(абстракции нашего мира). Ноль вам понятен хотя его раньше не было, отрицательные числа тоже понятны и их тоже раньше считали чем то фантастическим. Поймите математика это абстракция так будет проще понимать всё что угодно но при этом подкреплено всё логикой.
Владимир Токарь во первых,ты не подключил русский язык во вторых,зачем тебе тут целое число i,если ты его не используешь?зачем подключил всю библиотеку std, если используешь только cout и cin?зачем cmath? 3,ты не задал exit(а чем задавать(int,double,char и другие) подумай сам).
Антон Ступак Спасибо большое :) Я 0 в этом, начал вот пробовать. Зачем подключил ? Осталось все с прошлых программ. Попробую разобраться сам, спасибо за помощь!
Владимир Токарь если хочешь понимать,что пишешь,то не копируй ничего с прошлых программ,а пиши все с 0 так сказать,и в голове думай что означает строка которую ты написал,и тогда начнешь понимать( ну я так все понимаю прекрасно)
12:55 в этом месте не введешь символ, так как там boolean тип. 1чка проскочила, а символ никак. Класно обьясняешь. Учусь какраз. Чесно ненавижу Сишку после идеального знания VB. Никаких include и using не надо. Упростили все. Уверен что просто дело в компиляторе. Поддержки VB имеет меншьше, хотя я делал на нем все что захочу. Перепробовал практически все темы. Только видео не грабал с экрана. А так даже музыкальные файлы сравнивал на идентичность разбирая музыку на гистрограмму. Мне нравится конструкция от С ";" и include штука нужная, но вот не люблю из за того, что вообще не интересно помнить и прописывать те библиотеки в include. Лучше бы их просто подключил флажком в меню и все. Или компилятор бы помог. Ну реально еще такое издевательство на андроид программировании. Вот Ява Скрипт вообще идеально удачно сделали, хоть он только парсит и ничего большего. Стринговые переменные в Сшке как то тупо через те std:: это вообще 20тый век оставили. Я в шоке. Нетерпится протестовать на скорость объекты. На VB если написать объекты и потом через точку обращаться к объекту, то скорость заметно падает если a+b=c сравнивать и o.a+o.b; ?o.c Тоесть у VB не работает объект как ссилка. Ну в VB проблематично с массивами, точнее неудобно, настолько, насколько в С вообще все неудобно.
Блок схема - это просто, а вот блок схуема - это креативненько.
коэфицент тоже креативненько)))
33:00 любое число в нулевой степени равняется единице
facepalm,любое число в нулевой степени, за исключением нуля, равно единице
@@ОлегАлбаут не равняется а ПРИБЛИЖАЕТСЯ. В реальных расчётах мало разницы, но принципиально (в теоретике) она есть.
Код про зерна на шахматной доске содержит неприятную необнаруженную ошибку, которая видна невооруженным взглядом, если внимательно посмотреть на вычисления. Начальное значение переменной 'result' равно 1. На первой итерации главного цикла к ней прибавляется значение 2 (т.е. 2^1), на второй итерации к ней прибавляется значение 4 (2^2), затем 8, 16 и т.д. и т .п На 64-й итерации главного цикла к 'result' будет прибавлено, как несложно догадаться, 2^64.
Таким образом, эта программа пытается вычислять сумму 1+2+4+8+...+2^63+2^64. Это очевидным образом неправильно. Правильная сумма должна содержать слагаемые вплоть до 2^63, но не 2^64. Другими словами данная программа пытается вычислить количество зерен на 65-клеточной шахматной доске.
Почему же финальное значение 'result' получается правильным? А потому, что вычисление степени двойки происходит в рамках 64-битного беззнакового типа 'unsigned long long'. Величина 2^64 не помещается в диапазон типа 'unsigned long long'. При вычисленнии последнего слагаемого происходит переполнение и заворот беззнакового целого с результатом 0. Таким образом, вместо добавления в сумму значения 2^64 эта программа на последней итерации цикла прибавляет в сумму 0. Понятно, что 0 сумму не меняет и ответ остается правильным.
То, что на последнем этапе вычисления значение суммы не меняется осталось незамеченным потому, что отладочная печать в данной программе делается _до_ того, как вычислено новое значение 'result'. Т.е. по какой-то странной причине автор кода все время печатает "предыдущее" значение 'result'. Финальное значение 'result' мы не видим.
Если вы используете а данной программе более широкий целочисленный тип (например тип '__int128_t' в компиляторе GCC) и тем самым исключите переполнение при вычислении степени, а также добавить печать финального значения 'result', то вы увидите, что это значение 'result' неверно. Как я сказал выше, программа на самом деле вычисляет количество зерен на 65-клеточной шахматной доске :)
Чтобы это программа не занималась подобной бессмыслицей, следует исправить условие повторения главного цикла на строгое 'j < 63', а отладочную печать внутри цикла (ели она вам там нужна) перенести ниже, после вычисления нового значения 'result'.
Отдельно стоит заметить, что завел константу 'N' для описания количества клеток на доске, что есть хорошая идея. Тем не менее константа 'N' не используется вообще нигде в коде (???)
Также идея переинициализировать значение 'pow' единицей _в_ _конце_ главной итерации порождает странный неудобочитаемый код. 'pow' должно инициализироваться непосредственно перед вычислением. Да и объявлено в таком варианте 'pow' должно быть внутри главного цикла, ибо снаружи оно никому не нужно.
Спасибо, за столь подробное объяснение!
Как может возникнуть ошибка, если на первой клетке 1 зерно, на первой и второй в сумме 3 зерна и т. д.??
Спасибо тебе большое за этот прекрасный курс, очень всё круто преподносишь.
чувак, большое спасибо тебе за твои уроки
Минут 15 сидел, не понимал для чего же второй цикл был нужен, когда понял что он нужен для того чтобы приумножать значение pow перед тем как прибавлять его к результату еще пару минут тупил почему же выполняется только первая операция после цикла, вспомнил что Денис говорил что если не открывать { } скобки то выполняется только первый оператор и все стало на свои места. Тупняк был конкретный, но было весело самому додуматься. Спасибо, отличные уроки.
Судя по твоему объяснению, почему бы его не приумножить в первом цикле?
Цикл в цикле в цикле это как сон внутри сна, внутри сна ;)
не. это еще хуже :)
Спасибо, Денчик, очень интересно! Всё получается.
Спасибо за уроки)
Вот моя альтернатива по поводу зерен
int main ()
{
int x = 2; // Номер хода
unsigned long long a = 1; // a=1 начальное количество зерен
for(int i(0); i < 63; i++) // 0-63 (64 раза надо умножить переменную "а" на 2)
{
cout
Большое спасибо за подробные разъяснения!
Выскажу свое мнение - в заключительном упражнении по зернам не всем и не сразу будет понятна конструкция с двумя "for" и переменными "i и j". Предлагаю свой более прозрачный вариант:
const int a(2), n(64); // основные константы - множитель и число клеток
unsigned long long cell(1), general(1); // начальные значения для 1-й клетки
cout
Суть упражнения была показать что можно использовать вложенные циклы, ну оптимизация конечно у тебя лучше
Denis Markov
На эту тему есть красивое упражнение - таблица умножения с одним вложенным циклом. Кому интересно, попробуйте придумать сами, ну или посмотрите код и сделайте по памяти. Наткнулся в учебнике Хенкеманса, Ли. Сразу захотелось повторить)
Выглядит так:
| 1 2 3 ...
-----------------
1 | 1 2 3 ...
2 | 2 4 6 ...
3 | .. .. .. ...
Код:
cout
Денис к тебе вопрос.Можно ли если ты уже скомпилировал программу как нибудь декомпилировать эту программу или посмотреть ее код/скрипт?
Вообще корень может быть отрицательным, просто получится комплексное число
Кстати да! Если z^2=-25, то будет z = 5*i
mrcomedytiger Вообще-то может i^2 = -1; это называется мнимое единицей
Denis Markov я хоть и в восьмом классе, но хочу сказать :хочешь поспорить с учеными ?
Максим М не парься. Позже узнаешь что такое мнимая единица.
Максим М, пацан, не парься, для твоего мозга, пока, это очень сложно.
Спасибо, за ответ. С нетерпением жду новых уроков.
в зависимости от типа данных если char введется символ '1' , если int,double - 21 или 21.00 , если строка "21+35"
Дим, спасибо за уроки! Все нравится, но не понял про цикл внутри цикла, можешь на простейшем примере объяснить, как он выполняет первые 4 операции
допустим
unsigned int a = 3;
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < i; j++)
a *= 2;
cout
data[0]-16 - это выражение результат которого должен быть целый тип, а
Еще раз повторюсь, что мне очень нравятся твои уроки. Но мне кажется, что функцию sqrt можно использовать без подключения cmath. Мне всегда казалось что это стандартная функция (как сложение, вычитание, ...). Я проверил. У меня подключены только iostream и conio.h и я спокойно использую функцию sqrt.
Спасибо за доступное изложение!
У меня возведение в степень получилось так:
int a,b;
cout > a;
cout > b;
unsigned long long result=a, pow;
for (int i(1); i
Ден, скажи будь ласка в чому помилка? Це по д/з.
int main() {
setlocale(LC_ALL, "Russian");
cout
Добрый день!
А почему если цикл записать в условие, то при вводе текста else не работает?
#include
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n;
unsigned long result = 1;
if (!(cin >> n) || (n >= 0))
{
for (int i = 1; i
Добрый день, какую книгу вы посоветуете в довесок к вашему курсы? А так же возможно посоветуйте книгу или курс по алгоритмам с нуля.
Школьная информатика в помощь (учебник с алгоритмами)
С домашним заданием, конечно, красава. Вроде и учишь толково, но так лажаешь с этим. :D Чего только стоит "схуема", "клавиатурыф", "отоброзить".
Подскажите пожалуйста моя задача решена верно или нет? В условии что вы озвучили 30:31 должно выйти 1, 2, 4, 8... то есть логично что дальше будут цифры удваиваться. Но у Вас уже на третьей клетке 7 зерен, а на 4... 15, как итог в конце сильно разнящиеся цифры с поставленным условием задачи 37:09.
#include "stdafx.h"
#include
#include
#include
using namespace std;
int main()
{
setlocale (LC_ALL,"rus");
const int N = 64;
unsigned long long Zerno = 1;
cout
Это правильное и самое простое решение. Сложения в условии задачи не было
Спасибо за урок, вот мой пример со степенями
#include
#include
#include
using std :: cout;
using std :: cin;
using std :: endl;
int main()
{
setlocale (LC_ALL, "Russian");
unsigned long long a, res;
int z,x;
char q;
cout a;
x=a;
cout > z;
for (int i=2; i
обоже..
ты компилировал? 0_0
Извините... Один вопрос- сделал калькулятор с циклом while через if и else первое действие у меня сумма а последнее деление (в цикле). Так вот когда я выбираю сумму или что то другое прога просчитывает потом делает деление а потом цикл повторяется. Как сделать так чтобы цикл останавливался посчитав значение и потом снова спрашивал действие??
Задача в конце урока, ее я решил, но добавил две проверки, что бы нельзя было вводить 0 или меньше, и допустим ограничитель строк(допустим вывели больше 30 строк он скажет об этом)
int s;
cout > s) || (s
Реально полезное видео!
Доброго времени суток. Вопрос конечно не в тему, но всетаки подскажите, что означают двойные треугольные скобки в этом выражении (data[0] - 16)
помогите понять. скачал сервер на C++. Обычный тестовый, без логики входной информации, на сокете. Инициализируется сокет - это все понятно. Я про сокет практически знаю из VB все. Работал вплотную и с UDP и с TCP практика есть, и файлы по своему протоколу ганяю и могу дистанционно доставать что хочу и управлять. Хочу сервер на C++. Меня удивила обычная конструкция цыкла for(;;){} Я так понял что это вечный цыкл. Догадался от JS, там точно так же. Вроде все понятно. Ставлю точку остановки внутри цикла. Программа не останавливатся. А когда обращаюсь к сокету по 127.0.0.1 по 80 порту, то срабатывает останов в моей точке. И тут я вообще недопонимаю нихрена. А как так? В визуал бейсике я могу также цыклить, но зависает тогда все. Нужно делать как минимум DoEvents чтобы дать возможность другим процессам работать. К примеру я люблю давать прерывание на таймер, чтоб он что-то перепроверил, чтоб на экране что-то анимировалось или просто вывелась информация. Тут я не понял смысла цыкла.
Уважаемый Denis Markov . пытаюсь самостоятельно выучить язык программирования с помощью Ваших видео уроков. Спасибо большое, всё доступно объясняете. Но не могли бы Вы мне помочь в решении этого задания, а точнее объясните как это должно происходить поэтапно. Вот собственно сама задача - Дано целое число N которое больше 0. Найти сумму 1 + 1/2 + 1/3 + ... + 1/N (вещественное число) ....... как правильно с дробями работать через циклы ?
такой вопрос, а програмы делать можешь научиться? или только для того что бы считать как на калькуляторе всякие там задачки нужен этот С++ а?
Георгий Хортайл с++ нужен только для сложных научных расчётов, для написания программ используется ассемблер
IBlackCatter а ну ок тогда! не знал просто
Mr Askot не слушай всяких невежд!
Спасибо за ваши уроки.
На мой взгляд каждый раз считать степень не лучшее решение, вот так несколько лучше.
И 2 в 64 все же не влазит, не подскажите как его посчитать и вывести
int main(int argc, char** argv) {
const int N = 64;
unsigned long long result = 1, pow = 1;
int i(0);
do{
pow *= 2;
result += pow;
++i;
cout
Спасибо!, очень интересно!
unsigned long long i(1), b(1), result(1);
const int N = 64;
do
{
cout
Скажите пожалуйста, а как мне создать диалоговое окно типо, программа спрашивает у меня, Как настроение, а я пишу допустим, не выспался, а оно отвечает, Очень Жаль, или я пишу что я побегал и победил, а она пишет я рад за тебя! Буду рад ответу, на ранние спасибо!
скажите пожалуйста,,, а почему в for еще один for ???,,, и что это значит???,,, не понятно про100 для чего здесь 'j' и 'pow' .. еще эта строка не понятна (pow*= 2)… я этот урок не поняла,,,, объясните пожалуйста,,, это важно… заранее спасибо…
Цикл внутри цикла называется вложенным циклом и его идея очень проста, на каждой итерации цикла мы запускаем новый цикл. Тоесть если внешний for имеет 5 итераций, а вложенный for 7 итераций, то всего будет 5*7=35 итераций. А в задаче переменная pow хронила 2^n, чтобы найти данное число мы должны 2 умножить на само себя n раз, вот и появляется вложенный цикл. 2^5 = 2*2*2*2*2. Поэтому на каждой итерации внешнего цикла, запускали вложенный цикл, чтобы возвести 2 в n степень.
+Денис Дьячков , согласен, для начинающего лучше отображать все скобки, а то я тоже вникал долго в то что pow находится во второмцикле
Во втором цикле for работает только строчка pow *= 2; Строчка
cout
Как работает cin в случае когда вводим "21+35"? Он считывает число пока может?
как сделать что бы выходило из программы только при нажатии на 'n', а на все остальные буквы выдавало не верный ввод. пытался сам сделать но что то не доходит ((
решил несколько по другому. понимаю, что пример вложенного цикла, но он тут сильно лишний
unsigned long long result(0), pow(1);
for (int i(0); i < 64; i++)
{
result += pow;
cout
Да что такое не-стыковки. Ты же говорил что на 1 клетку 1 зерно, на вторую 2 зерна, на третью 4 зерна, а на четвертую клетку 8 зерен итд. Значит по этой логике должно получится совсем другое число. Если я не прав пожалуйста объясни чего я не понял? Вот какой код я написал.
#include < iostream>
using namespace std;
int main()
{
unsigned long long a = 1;
unsigned long long b = 1;
while (a
Справился со вторым заданием, сенсей!
#include
#include
using std::cout;
using std::cin;
using std::endl;
using std::ios_base;
int main() {
setlocale(LC_ALL, "Russian");
const int x = 2; //константа для вывода таблицы степеней 2
int n = 0;//количество выполнения цикла
unsigned long long result = x;
int j = 0; //для циклов while и do while
cout > n)) {
cout
каким образом число зерен увеличивается, если мы pow каждый раз приравниваем к единице?
2 ^ 0 = 1 (а не 0)
Спасибо вам за ваши видео-уроки!)
мой вариант степени не только 2, но добавил чтобы любое число можно было ставить. (домашка)
#include
#include
using namespace std;
int main() {
setlocale(LC_ALL, "ukr");
cout n;
for (int i = 0; i < n; i++) {
p = p * a;
cout
Задание с шахматами удалось решить намного проще
unsigned long long j;
for (int i=1;i
ерунда какая то
Nick Barton почему ерунда? результат тот же
согласен. Круто
+Oleksandr Golodiuk или чтобы узнать сколько на каждом квадрате и отдельно общую сумму:
unsigned long long j = 1, sum = 0;
for(int i = 1; i
Зачем перед getch ставить нижнее подчеркивание? У меня и без него работает
Не понял описания задачки о мини-калькуляторе, где как я понял нужно сделать было и switch и if-else. Ломал голову, как туда еще и if-else запилить с функционалом, пока не придумал вот это. Может кому интересно будет:
#include
#include "conio.h"
using namespace std;
int main()
{
setlocale(0, "russian");
int a, b;
char c;
cout > a; cin >> c; cin >> b;
if (b == 0)
if ((c == '/') || (c=='%'))
{
cout
Здравствуйте, у меня возникла проблема. Я не могу построить программу. Ну точнее она запускается, но там пусто и в кампеляторе пишет
'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64
tdll.dll', Cannot find or open the PDB file
'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Cannot find or open the PDB file
'Lesson 5.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Cannot find or open the PDB file
Можно ли что-нибудь с этим сделать? Я пробовал переустановить, чтобы восстановить возможно потерянные файлы, но не помогло.
Возможно нужно убрать " ; " за скобками неравенства цикла while.
конечно, очень полезные уроки и как программисту я хочу сказать спасибо) но - "ложить" меня убило, плюс, 2 в нулевой степени = 1. так, к сведению) а в целом спасибо)
Ты музыку к интро и аутро сам писал??
Подскажите пожалуйста, почему после создания программы в разширении .exe она не работает на других компах? что нужно сделать, чтоб другие компы воспринимали?
тоже самое
Ты только *.exe на других компьютерах ставил? Если да, то прихвати еще *.cpp или *.h файл. (В котором ты код писал). По идее должно работать, если все включенные в программе библиотеки есть на компьютере.
Во первых спасибо за уроки, они очень помогают в изучении C++ и они очень интересны.
Во вторых есть вопрос про шахматиста и зерна. Я долго думал зачем 2 цикла. Вы сказали, что это цикл внутри цикла следовательно в итоге циклов 64*64? От этого же зависит быстродействие?
А если во втором цикле j присвоить 0 и сразу сделать равным 0 то останется 60 циклов?
Вот что у меня получилось.
const int N = 64;
unsigned long long res = 1, paw = 1;
for (int i = 1; i
Помогите! Я откомпилировал свою программу в Visual Studio и отправил друзьям, у них на при запуске exe файлы, который я отправил, выдаётся ошибка, типа не является файлом win32, и даже когда я создаю новый проект и выбираю консольное окно win32 и отправляю снова, у них та же ошибка, в чём дело?
Нет, не установили. Смысл тогда программы писать, если их запустить люди не могут без Visual Studio? Может какие-то файлы надо в папку засунуть или ещё что-то?
Евгений Онегин просмотр-- окно свойств-- релиз вин32
Подскажите что означает "return 0" и "return -1" и в каких случаях используются и для чего? как и getch() не совсем уловил.
Это завершение программы, если код 0 то программа завершилась успешно, остальные цифры ставишь на ошибки
когда ты начинаешь программу указываешь все #include пишешь int main() {какая то функция}
если у тебя перед функцией main стоит int то результатом должно быть число.
поэтому в конце мы возвращаем return 0; как успешное окончание.
мы можем записать void main () {}
тогда нам ничего возвращать не нужно так как void говорит компилятору что функция ничего не возвращает.
Галина Панкова за void main нужно бить по рукам
iTrololo666 да но это работает
Галина Панкова а потом вдруг в один прекрасный момент перестанет...
Спасибо Вам!
Денис, зачем Вы так намудрили в задаче с зернами?
Все сделал намного проще, вместо где-то 33 строк кода у меня вышло 15.
#include
#include
using namespace std;
int main()
{ setlocale(LC_ALL, "Russian");
unsigned long long x=1; int i;
for(i=1;i
Valik Troyan Действительно ваш вариант короче и проще, но я немного исправил#include
#include
using namespace std;
int main()
{ setlocale(LC_ALL, "Russian");
unsigned long long x=1; int i;
cout
+Valik Troyan Только x надо объявить равным 0.
помоему всеравно что-то будет не так :) А точнее для первой клетки вам прога выдаст уже значение и для второй ... что как-бы не есть гуд...
Помогите плиз, я хочу продолжить программу, а оно мне пишет "продолжить программу" отвечаю y опять тоже самое
Добрый день дошел до циклов и не пойму откуда берется i?
i - переменная, которая управляет первым циклом for
исправь в титрах ошибки, а то "схуему" как-то не очень красиво
+Bro els +
а что значит операция присваиваижаниа (прашу ответить)
Может кто-то прочтет:
Данный материал хорош, но не для новичков, который только начали изучать язык.
Здесь фигурируют уже вложенные циклы, которые еще нужно понять, а так сразу и не въедешь в тему.
Поэтому лучше узнать про циклы где-то еще.
Я так сделал, правда понадобился, но я вижу, что он уже включен
int main()
{
setlocale(LC_ALL, "Russian");
unsigned long long res = 0, a;
for(int i = 0; i < 64; i++)
{
a = pow(2,i);
res += a;
}
cout
и 2 в 0-ой степени это 1, а не 0)
Как на счет деления без остатка? 5/6 не должно равняться нулю
case '/': if (S1%S2 == 0)
cout
Я так и не понял, зачем было пилить этот цикл for (j = 0; j
Не сказал бы что логические операции с логическими операторами && || это "минус" именно плюсов, все языки имеют этот вид оптимизации исполнителя, это в масштабных проектах реально увеличивает скорость. И да, даже не самый быстродейственный интерпретируемый, без JIT язык под рназванием JS имеет такое свойство, сам урок хороший спасибо!
Зачем писать перед cout и cin std :: ? если можно написать using namespace std;
сделал калькулятор и выдает ошибку оператор switch не содержит метку "case" или "default" в чем проблема???
оператор не может быть пустым.
Почему для 65 клеток и больше повторяется результат для 64й клетке?
33:06
2 в нулевой степени единица.
Денис, очень нравятся твои уроки, спасибо! Но в дз из прошлого урока ты допустил ошибку в формуле.
D = (b*b) (ты не смог возвести в степень и решил в коэф b. подставить 2, что плохо) p.s. вставив любое др число в коэф b, например 3, то формула уже будет недействительна.
Сам долго мучился в поисках знака "возведения в степень, но так и не нашел.
P.S. Знак "^" не работает.
В матрице размером N×M упорядочить строки по возрастанию суммы их элементов. Помогите пожалуйста
+Tolegen Churchitbaev
double *count=new double[N];
for(int i=0;i
+Tolegen Churchitbaev Сори, первый комент не тебе, вот правильный
const int M=100;
const int N=100;
int i,j;
///матрица
double **mat = new double*[M];
for (i=0;i
Полинка спасибо
А почему у тебя невернЯА операция?
include
#include
using namespace std;
int main() {
int a, b, c,x1,x2;
cout > a;
cout > b;
cout > c;
x1=((-b-sqrt(b*b-4*a*c))/2*a;
x2=((+b+sqrt(b*b-4*a*c))/2*a;
cout
1. Тип int: int a, b, c,x1,x2; результаты должны быть вещественным числом. то есть типа double.
2 приоритет операций и лишняя скобка x1=((-b-sqrt(b*b-4*a*c))/2*a; Сначала он разделит на 2 а потом умножит на a. Нужно так x1=(-b-sqrt(b*b-4*a*c))/(2*a);
Denis Markov Спасибо) отличные уроки)
почему у тебя в этой строке" x2=((+b+sqrt(b*b-4*a*c))/2*a; " стоит +b Bank of America
Потому что у тебя /2*a
const int N = 64;//шахматное поле
unsigned long long Result = 0 , Pow = 1;
for (int i = 1; i
+Сергей Генри
Тогда объясни почему не работает такой вариант?
unsigned long long res = 1, pow = 1;
for (int i(1); i
+Мацуда Тота unsigned long long res = 0, pow = 1;
for (int i(1); i
Вместо || можно написать | , тогда будут проверяться оба условия, так же и с &&.
Ошибка: в твоей if и else (где рубли) при вводе 11 выдаёт у вас 11 рубль
Да, Денис не предусмотрел исключение, когда последние две цифры числа лежат в отрезке от 12-ти до 14-ти.
Спасибо большое..Классный уррок..У меня почему то консоль вывоlа очень быстро закрываеться , почему...?
Как создать видео чат?
а почему новые уроки с нуля?
Всё очень усложнено с последней задачей, код в реальности намного проще
int main()
{
unsigned long long pow = 1, result = 0;
for (int i = 1; i < 64; i++)
{
pow *= 2;
result += pow;
cout
_getch(); забыл =)
Что-то изобретатель приофигел))
В целом уроки хороши, но зачем ставить цикл в цикле (вариант с зернами на доске), когда можно записать проще и понятнее, например вот так=>
const int N = 64;
unsigned long long zerno = 1, vsego = 1;
for (int i = 1; i
спасибо огромное
Что бы понять что такое комплексные числа посмотрите какой нибудь фильм про развитие математики(абстракции нашего мира). Ноль вам понятен хотя его раньше не было, отрицательные числа тоже понятны и их тоже раньше считали чем то фантастическим. Поймите математика это абстракция так будет проще понимать всё что угодно но при этом подкреплено всё логикой.
У меня выдает ошибку с quit
'quit' : undeclared identifier
как исправить ?
#include
#include
#include
using namespace std;
int main()
{
int i(1);
do
{
cout > exit && exit == 'y');
_getch();
return 0;
}
Владимир Токарь во первых,ты не подключил русский язык
во вторых,зачем тебе тут целое число i,если ты его не используешь?зачем подключил всю библиотеку std, если используешь только cout и cin?зачем cmath?
3,ты не задал exit(а чем задавать(int,double,char и другие) подумай сам).
Антон Ступак Спасибо большое :) Я 0 в этом, начал вот пробовать. Зачем подключил ? Осталось все с прошлых программ. Попробую разобраться сам, спасибо за помощь!
Владимир Токарь если хочешь понимать,что пишешь,то не копируй ничего с прошлых программ,а пиши все с 0 так сказать,и в голове думай что означает строка которую ты написал,и тогда начнешь понимать( ну я так все понимаю прекрасно)
пацаны што ет такое я блин все норм ввожу ну прям все а мне пишет што 1 ошыбка ну все прям в точ и ет повсюду ну типа на всех прогах што делать?
а такое решение можно считать правильным?
int Ruble;
cout > Ruble;
cout
Почему просто не напишешь using namespace std;
на 35:53 почему pow = 1???????
вобшето програма про зерен ненужная ведь сраз же видно результат = 2в 63 степени + 2 в 62 и так до 0 а это предел типа unsigned long long
И кстати, 64 клетку посчитало как и 63.
Нужно еще больше диапазон, чем unsigned long long.
Что-то намудрили тут с зернами... Код в "две строки" и без мозголомства и циклов в циклах:
unsigned long long z = 1, sum = 1;
for ( int i(1); i
потанцевав с бубном, я сделал домашку!
блок схуема)
как вам такой вывод степеней двойки
#include
#include
#include
#include
using std::cin;
using std::cout; //
я так и не понял для чего присваивать pow 1 после каждого цикла
все догнал)
А я не догнал что то(( Подскажи пожалуйста
А, сё, посмотрел внимательнее и понял))
1. Дано шестизначне число, визначити та вивести позицію цифри, що задає користувач.(Как сделать?)
где скачать с++???
троль штоле?
Ілона Досин хах я уже давно скачал!
Без регистрации и СМС
Любое число в нулевой степени равно единице, а не нулю).
12:55 в этом месте не введешь символ, так как там boolean тип. 1чка проскочила, а символ никак. Класно обьясняешь. Учусь какраз. Чесно ненавижу Сишку после идеального знания VB. Никаких include и using не надо. Упростили все. Уверен что просто дело в компиляторе. Поддержки VB имеет меншьше, хотя я делал на нем все что захочу. Перепробовал практически все темы. Только видео не грабал с экрана. А так даже музыкальные файлы сравнивал на идентичность разбирая музыку на гистрограмму. Мне нравится конструкция от С ";" и include штука нужная, но вот не люблю из за того, что вообще не интересно помнить и прописывать те библиотеки в include. Лучше бы их просто подключил флажком в меню и все. Или компилятор бы помог. Ну реально еще такое издевательство на андроид программировании. Вот Ява Скрипт вообще идеально удачно сделали, хоть он только парсит и ничего большего. Стринговые переменные в Сшке как то тупо через те std:: это вообще 20тый век оставили. Я в шоке. Нетерпится протестовать на скорость объекты. На VB если написать объекты и потом через точку обращаться к объекту, то скорость заметно падает если a+b=c сравнивать и o.a+o.b; ?o.c Тоесть у VB не работает объект как ссилка. Ну в VB проблематично с массивами, точнее неудобно, настолько, насколько в С вообще все неудобно.