hao10 Опубликовано 21 ноября, 2014 Жалоба Поделиться Опубликовано 21 ноября, 2014 И да, к C/C++ этот вопрос не имеет отношения. Не очевидно даже что программа написана на ком-то из них :unsure: Цитата Uuchu no Chikara, Laburadoraito!~ Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 21 ноября, 2014 Автор Жалоба Поделиться Опубликовано 21 ноября, 2014 Так после установки Visual C++ как раз появляется кнопочка дебаггера. Он же и запускается.Причём эта кнопочка появляется в любой виндоус (когда раньше её просто не было).Вот я и задумался несколько лет назад: что бы там такого подправить, чтобы работало? Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 7 мая, 2015 Автор Жалоба Поделиться Опубликовано 7 мая, 2015 (изменено) Я посадил дерево написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)Ещё там работают клавиши <Backspace> и <Enter>.Прошу заценить.https://yadi.sk/d/bmwYbfm-gVCDs У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция... Изменено 7 мая, 2015 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 31 мая, 2015 Автор Жалоба Поделиться Опубликовано 31 мая, 2015 (изменено) Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:https://yadi.sk/d/supY_8Jsgy92yЗадачи записаны в формате программы "Open office 1.0", но вряд ли кто-то будет возражать.3. (p19-1) Угол задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развёрнутого, а также для отрицательных углов. 4. (p19-3) Длина отрезка задана в дюймах, 1 дюйм = 2,54 см. Перевести значение длины в метрическую систему, то есть выразить её в метрах, сантиметрах и миллиметрах. Так, например, 21 дюйм = 0 м 53 см 3,4 мм. 5. (p20-6) Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?Текст программы. Со временем программы будут становиться всё длиннее, длиннее и длиннее. Файл p3Doc.hclass CP3Doc:public CDocument { protected: CP3Doc (); DECLARE_DYNCREATE (CP3Doc); char aa [50]; // место для вводимых символов int ba, bb, bc; // исходные данные - целые числа int ca, cb; // указатель ввода в строку данных, <Enter> int da [3]; // место хранения данных для вывода на экран double db [3]; int ea, eb; void fa (); // перевод данных из символьной формы в цифровую void fb (); void fc (); // Задача p19 - 1 (3) void fd (); // Задача p19 - 3 (4) void fe (); // Задача p20 - 6 (5) };Файл p3Doc.cpp#include "stdafx.h" #include "math.h" #include "p3.h" #include "p3Doc.h" CP3Doc::CP3Doc () { aa [0] = 0; ba = bb = bc = 0; ca = cb = 0; da [0] = 0; } void CP3Doc::fa () { cb = 1; ea = 0; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); ba = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); bb = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); bc = eb; fc (); fd (); fe (); } void CP3Doc::fb () { int a; eb = 0; a = 1; if (aa [ea] == '-') {a = -1; ea++;} while (aa [ea] >= '0' && aa [ea] <= '9') { eb = eb * 10 + aa [ea] - '0'; ea++; } eb *= a; } void CP3Doc::fc () { int a; double b; a = ba; if (ba < 0) a = -a; b = ((bc / 60. + bb) / 60 + a) / 180 * 3.14592653589; if (ba < 0) b = -b; db [0] = b; } void CP3Doc::fd () { int a, b; double c; c = ba * .0254; if (c < 0) c = 0; a = (int) c; c = (c - a) * 100; b = (int) c; c = (c - B) * 10; da [1] = a; da [2] = b; db [1] = c; } void CP3Doc::fe () { double a, b; if (ba == 0 || bb < 1) {db [2] = 0; return;} a = (double) bc / ba; if (a <= 0) {db [2] = 0; return;} b = 1 + bb / 100.; db [2] = log (a) / log (B) / 12; }Файл p3View.cppvoid CP3View::OnDraw (CDC *pDC) { CP3Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); CString a; pDC -> TextOut (5, 5, "Введите три целых числа:"); pDC -> TextOut (5, 30, pdoc -> aa); a.Format ("code = %i", pdoc -> da [0]); pDC -> TextOut (5, 55, a); if (pdoc -> cb) { a.Format ("%i %i %i", pdoc -> ba, pdoc -> bb, pdoc -> bc); pDC -> TextOut (5, 80, a); a.Format ("p19 - 1. Угол равен %.12g радиан.", pdoc -> db [0]); pDC -> TextOut (5, 105, a); a.Format ("p19 - 3. %i дюймов = %i м %i см %g мм.", pdoc -> ba, pdoc -> da [1], pdoc -> da [2], pdoc -> db [1]); pDC -> TextOut (5, 130, a); a.Format ("p20 - 6. Необходимая сумма будет накоплена через %.3g лет.", pdoc -> db [2]); pDC -> TextOut (5, 155, a); } } void CP3View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags) { CP3Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); pdoc -> da [0] = nChar; if (nChar == 8) { if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;} goto aaa; } if (nChar == 13) { pdoc -> fa (); goto aaa; } if (pdoc -> ca < 49) { pdoc -> aa [pdoc -> ca] = nChar; pdoc -> aa [pdoc -> ca + 1] = 0; pdoc -> ca++; } aaa: Invalidate (); CView::OnChar (nChar, nRepCnt, nFlags); } Изменено 31 мая, 2015 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
Shinsaku-To Опубликовано 2 июня, 2015 Жалоба Поделиться Опубликовано 2 июня, 2015 Не стоит называть переменные вот так вот. Все вот эти aa, nChar и прочее. Времена с ограничением до 8 букв давно прошли (ну, в языках общего назначения по крайней мере). Имена переменных должны отображать их смысл, даже если это получается длинно. Благо, автокомплит в и в блокнотах нынче бывает. Без этого тяжело понять, что происходит вообще в программе. Читаемость -- это очень важно для хорошего кода. Цитата Если долго всматриваться в бездну, можно неплохо провести время. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 3 июня, 2015 Автор Жалоба Поделиться Опубликовано 3 июня, 2015 (изменено) Я работал со схемотехникой, так там вообще ничего не понятно. И самое главное, никто ничего не объясняет, хотя по работе надо! Так что то, что тут у меня – это ещё по-божески.А понимать ничего и не надо. Никто не просит вас ковыряться в чужом коде, раз там всё работает. Это же не электротехника, которая может испортиться.Что касается nChar, так это не я придумал, а Visual C++. Так же как и названия классов – тоже его изобретение. Программа называется по-простому: p3.А вот представьте, что у вас три независимых задачи, которые никак друг с другом не связаны. Поможет вам там придумывание имён? Оно только запутает. Это всё равно что в одно произведение напихать разные сюжеты. И потом этот винегрет читать.Автокомплитом не пользуюсь. Пользуюсь языками программирования 1985-го, 1995-го и 2000-го года. Но даже там ограничение на длину переменных, кажется, 32 символа. А может, и больше.Автокомплит есть в Visual C++ 6.0, на котором написана эта программа. То есть если ввести название класса, автокомплит показывает, какие там переменные-члены и функции, и это очень удобно, так как нет Help'а. А откуда ещё узнать, какие функции в этом стандартном классе. Не все диски можно было достать в далёком 2000-ом. А литература, увы, ограничена... Например, там не сказано было, как ввести число с клавиатуры. Я думал над этим 15 лет. И вот наконец придумал (см. 28-ой пост). Изменено 3 июня, 2015 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 3 июня, 2015 Автор Жалоба Поделиться Опубликовано 3 июня, 2015 1) Меня в группы не допускают. А в тех, в которые допускают, программировать вовсе не нужно.2) Для меня важно "здесь и сейчас". Будущее не определено, оттого оно и будущее.3) Ошибка возникала при обработке карты первой версии HOM III (Возрождение Эрафии) в редакторе карт HOM III третьей версии (Тень смерти). Что-то там внутри гд-то неправильно перепаковано. Виноват программист – неверное представление данных. Он, конечно, не ожидал, что его старые карты будут загружать в новом редакторе. Вот и не выявил ошибку при тестировании. Махнул рукой – так сойдёт. 1) Независимые приложения слишком маленькие – шесть строк оригинального кода. Так не пойдёт. Не стоит из-за шести строк программу делать.Пересечение наблюдается в получении данных, которое занимает львиную долю программы.А они и есть модули. В виде функций.Я ещё не научился компоновать программу из разных файлов. В учебнике не написано, а если и написано, то я до этого ещё не добрался.Вот когда придётся долго перелистывать программу, тогда задумаюсь о многих модулях. Хотя Visual C++ и в этом отношении упрощает жизнь программисту, – он предоставляет "автокомплит" и быстрый переход к нужной функции класса из окна классов.2) Да. Но нужно кинуть вперёд, чтобы не мешало. Остальные способы подразумевают фигурные скобки, НО! я следую принципу "не усложнять без необходимости". <Надо вперёд? пошли.>3) Вопрос именования возникает в больших программах. В мелких модулях использую такой способ. Я уже делал раньше программу под MS-DOS, в которой заключено 50 разных мелких программ, так что опыт имеется. А тут visual-среда, что намного упрощает жизнь. Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
Shinsaku-To Опубликовано 3 июня, 2015 Жалоба Поделиться Опубликовано 3 июня, 2015 (изменено) А понимать ничего и не надо. Никто не просит вас ковыряться в чужом коде, раз там всё работает. Ну спрячь его и не показывай, раз не надо. Притом что на самом деле очень часто надо. Ты программировать учишься? Ну вот и учись. Базовый синтаксис языка освоить -- это даже не полдела, с этим медведи в цирке на одноколёсном велосипеде справятся. Мало просто решить задачу. От программиста в подавляющем большинстве случаев требуется чтобы его код был (а) легко читаемый (б) легко модифицируемый. Осмысленные имена переменных -- первый шаг к этому. Собсно, можно по этому повод книгу почитать, к примеру того же МакКоннела, "Совершенный код". Что касается nChar, так это не я придумал, а Visual C++. Так же как и названия классов – тоже его изобретение. Программа называется по-простому: p3. А не надо редактору давать за тебя имена изобретать. Он твоих мыслей и назначения переменных не знает. И потом этот винегрет читать. Винегрет -- это вот aa и прочее. Со мной программист на AS400 работает, в этой системе нельзя называть переменный длиннее 8 символов. И имена из-за это в духе FCCXMY. Вот он матерится, когда ему нужно программы править. Потому что смотришь на эту загадочную аббревиатуру -- и поди пойми что это и зачем. Изменено 3 июня, 2015 пользователем Shinsaku-To (смотреть историю редактирования) Цитата Если долго всматриваться в бездну, можно неплохо провести время. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 3 июня, 2015 Автор Жалоба Поделиться Опубликовано 3 июня, 2015 А не надо редактору давать за тебя имена изобретать. Он твоих мыслей и назначения переменных не знает.Это имя по умолчанию, которое дала Microsoft. Советуете его исправлять? Я предпочитаю не лезть туда, где я не понимаю. Я имена не запоминаю. Они уплывают из моей головы. Поэтому мне приходится аниме 3-4 раза пересматривать, чтобы выучить всё досконально и при этом запомнить, кого как зовут.А когда я вижу 520-ую программу, в которой даётся имя переменной, которая при этом используется всего пару раз... как в моём примере...Если это важная переменная, которая проходит через всю программу – тогда можно что-то придумать. Но придумать всё равно нужно покороче, иначе строчка растянется очень надолго. Ну занесите себе в память, что аа - это то, что вы вводите с клавиатуры, ba - это то, что вы из этой строки извлекаете. Легко ведь запомнить - тем более, что я в комментарии записал (для самого себя, чтоб потом не запутаться). А все остальные переменные - временные, используются один-два раза за программу. Их запоминать не надо. Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
Shinsaku-To Опубликовано 3 июня, 2015 Жалоба Поделиться Опубликовано 3 июня, 2015 Это имя по умолчанию, которое дала Microsoft. Советуете его исправлять? Я предпочитаю не лезть туда, где я не понимаю. Чего именно тут можно не понять? Это просто имя. Оно каким угодно может быть. Но гораздо лучше, если оно будет характеризовать переменную. Ну, например, если у тебя есть переменная, которая хранит номер счёта в формате ЦБ, то разумно назвать её не "dd", а "CBAccount". Потому что ты смотришь на неё -- и тебе ясно что это. Не надо ничего вспоминать, прослеживать, откуда она взялась и прочее. Ну занесите себе в память, что аа - это то, что вы вводите с клавиатуры Ну и почему бы не назвать её, например, "userInput"? И не нужно правил никаких придумывать. Осмысленные имена как раз для того, чтобы НЕ запоминать и при необходимости НЕ разбираться. Цитата Если долго всматриваться в бездну, можно неплохо провести время. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 3 июня, 2015 Автор Жалоба Поделиться Опубликовано 3 июня, 2015 (изменено) Ну и почему бы не назвать её, например, "userInput"?Когда я писал программу, в которой было 50 мелких программ (из учебника по C), я впервые столкнулся с конфликтом имён, когда в одной программе переменная означает одно, в другой другое, и у неё другой тип. Так вот чтобы "развести" этот конфликт, я такую систему и придумал. А в дальнейшем лишь слегка модифицировал под текущие нужды.Твоё предложение разумно, но я уже привык, и ещё от этого увеличивается длина строки. Программа по стилю (в вашем случае) становится ближе к литературному произведению. "Вася пошёл туда-то..." Например.Попробуйте в этой строке заменить все aa на userInput. Что получится? Многоэтажный... слог.while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;В результате длина программы увеличивается раза в четыре. Изменено 3 июня, 2015 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 3 июня, 2015 Автор Жалоба Поделиться Опубликовано 3 июня, 2015 У меня пока планы на будущее. Я не могу прочитать ни одну книгу по программированию. попытаюсь хоть что-то закончить.У меня есть задачник по программированию, но под MS-DOS его нет смысла заканчивать, с ним я уже лет 15 мучаюсь. Надо переходить под Windows. Только в этом году я понял, как туда вводить переменные.А полкниги Visual C++ 6.0 посвящено непонятно чему, с задачником никак не связан. Осваивается интерфейс Windows, кнопки, переключатели и прочее. Не очень-то полезно для решения математических задач, неправда ли? Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
ЛЕГЕНДАРНЫЙ Несущий Ересь Опубликовано 3 июня, 2015 Жалоба Поделиться Опубликовано 3 июня, 2015 Для программирования под Windows можно начать читать Питзольда "Программирование для Виндовс 95". Плюсы изучаю по Шилдту, вроде неплохо, хотя Дейтелы лучше. Цитата - Как бы вы перевели Amagami SS?- Ласково Кусь.- Поздравляю, вы приняты в русский фансаб. [Maschera Team] Мои отзывы и анимелист. Doki Doki Literature Club - лучшая новелка в стиме. Да и вообще лучшая. Группа с моими обзорчиками различной манги. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 3 июня, 2015 Автор Жалоба Поделиться Опубликовано 3 июня, 2015 Литературы у меня навалом. Ни одну прочитать не могу.Хотя пару книжек прочитал лет 10 назад. Реализовал под MS-DOS на C и C++.На ООП нормальных задачек нашёл только две, остальные из пальца высосаны.Одна из задач была похожа на игру "жизнь". Кролики и волки. И у меня работало. Я даже параметры подбирал. Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
Shinsaku-To Опубликовано 3 июня, 2015 Жалоба Поделиться Опубликовано 3 июня, 2015 (изменено) while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; Ну смотри например (по-моему, после char в объявлении должна быть звёздочка, но не помню -- давно очень C++ не трогал. Ну да не суть): while (userInput[index]) { char* currentSymbol = userInput[index]; if ('0' <= currentSymbol && currentSymbol <= '9') break; if (currentSymbol == '-') break; index++; } То есть да, какбэ длинно. Но: мы смотрим на этот цикл и просто его читаем, не напрягаясь. Пока не кончился массив userInput (тут у нас, я так понимаю, null-terminated string?) проверяем. Эта цифра от 0 до 9? Если да, нашли нужное место. Иначе: это дефис? Если да, нашли нужное место. Если не нашли -- переходим к следующему символу. А чтобы понять, что твой цикл однострочный делает, пришлось в него минуту потупить. И он не становится лучше от того, что записан одной строкой. Компактность сегодня вообще до лампочки, компилятор от твоего кода только алгоритм оставит да и тот заоптимизирует вусмерть. А вот этими однострочными упражнениями можно таких шарад понаписать, что потом без поллитры не разберёшься. Ну и баг отладчиком в однострочном выражении искать -- то ещё удовольствие. Так что не надо стесняться. Можно писать длинно, экономия места ни к чему. Изменено 4 июня, 2015 пользователем Shinsaku-To (смотреть историю редактирования) Цитата Если долго всматриваться в бездну, можно неплохо провести время. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shinsaku-To Опубликовано 3 июня, 2015 Жалоба Поделиться Опубликовано 3 июня, 2015 По обучению, например, смотри, так: http://www.videosharp.info/ Видеокурсы по C# (что гораздо актуальнее чем плюсы по 95 винду) в формате "для самых маленьких" с задачами и проверкой этих задач. Частично бесплатные, частично по цене школьного завтрака. Отличный вариант, как по мне. Цитата Если долго всматриваться в бездну, можно неплохо провести время. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 4 июня, 2015 Автор Жалоба Поделиться Опубликовано 4 июня, 2015 Ну, например, если у тебя есть переменная, которая хранит номер счёта в формате ЦБ, то разумно назвать её не "dd", а "CBAccount". Потому что ты смотришь на неё -- и тебе ясно что это. Не надо ничего вспоминать, прослеживать, откуда она взялась и прочее.Как сказал Triela, "Я не буду проще. И не надо ко мне тянуться." Вспоминаю ещё эпизод из своего электротехнического прошлого."Что ты делаешь?" - "Схему читаю." - "Ну, почитай нам вслух." - "А. B2. C4, B5."Вот там действительно всё было непонятно. А тут - так, семечки. Минут десять посидеть, комментарии почитать, что что означает, и всё понятно будет. Главное - определения. Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
Shinsaku-To Опубликовано 4 июня, 2015 Жалоба Поделиться Опубликовано 4 июня, 2015 (изменено) Серьёзная проблема программистов в том, что многие из них считают себя достаточно умными, чтобы программировать. Они ошибаются. Нет для этого достаточно умных. Именно поэтому разрабатывают новые технологии и методики -- чтобы компенсировать. Ну а дальше уж -- каждый сам себе злобный баклан. Изменено 4 июня, 2015 пользователем Shinsaku-To (смотреть историю редактирования) Цитата Если долго всматриваться в бездну, можно неплохо провести время. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 5 июня, 2015 Автор Жалоба Поделиться Опубликовано 5 июня, 2015 Этого нам не говорили. Мне вообще никто ничего не говорил. Программисты вокруг не водятся... Я сам себе программист."The wall".http://amvnews.ru/forum/viewtopic.php?t=4025"Shift time".https://www.animeforum.ru/index.php?app=forums&module=forums§ion=findpost&pid=2876464 Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 13 июня, 2015 Автор Жалоба Поделиться Опубликовано 13 июня, 2015 (изменено) Вот программа, в которую можно ввести с клавиатуры рациональное число. Скачать:https://yadi.sk/d/jn9VynjChEb77Текст программы: Файл “p46Doc.h”class CP46Doc:public CDocument { protected: CP46Doc (); DECLARE_DYNCREATE (CP46Doc); char aa [50]; // место для вводимых символов double ba; // исходные данные - вещественное число int ca, cb, cc; // указатель ввода в строку данных, <Enter>, указатель чтения из строки данных int da [1]; // место хранения данных для вывода на экран double ea; void fa (); // перевод данных из символьной формы в цифровую void fb (); };Файл “p46Doc.cpp”CP46Doc::CP46Doc () { aa [0] = 0; ba = 0; ca = cb = 0; da [0] = 0; } void CP46Doc::fa () { cb = 1; cc = 0; while ((aa [cc] < '0' || aa [cc] > '9') && aa [cc] != '-' && aa [cc] != '.' && aa [cc]) cc++; fb (); ba = ea; } void CP46Doc::fb () { int a; double b; ea = 0; a = 1; b = .1; if (aa [cc] == '-') {a = -1; cc++;} while (aa [cc] >= '0' && aa [cc] <= '9') { ea = ea * 10 + aa [cc] - '0'; cc++; } if (aa [cc] == '.') { cc++; while (aa [cc] >= '0' && aa [cc] <= '9') { ea += (aa [cc] - '0') * b; cc++; b /= 10; } } ea *= a; }Файл “p46View.cpp”void CP46View::OnDraw (CDC *pDC) { CP46Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); CString a; pDC -> TextOut (5, 5, "Input float:"); pDC -> TextOut (5, 30, pdoc -> aa); a.Format ("code = %i", pdoc -> da [0]); pDC -> TextOut (5, 55, a); if (pdoc -> cb) { a.Format ("%g", pdoc -> ba); pDC -> TextOut (5, 80, a); } } void CP46View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags) { CP46Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); pdoc -> da [0] = nChar; if (nChar == 8) { if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;} goto aaa; } if (nChar == 13) { pdoc -> fa (); goto aaa; } if (pdoc -> ca < 49) { pdoc -> aa [pdoc -> ca] = nChar; pdoc -> aa [pdoc -> ca + 1] = 0; pdoc -> ca++; } aaa: Invalidate (); CView::OnChar (nChar, nRepCnt, nFlags); } Изменено 13 июня, 2015 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 29 июня, 2015 Автор Жалоба Поделиться Опубликовано 29 июня, 2015 Очередной шедевр программирования. void CP42View::OnDraw (CDC *pDC) { int aa, ab, ac, ad; unsigned ba; char ca; CP42Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); CString a; aa = 1996; a.Format ("Now %i year.", aa); pDC -> TextOut (5, 5, a); a.Format ("Сейчас %i год.", aa); pDC -> TextOut (200, 5, a); for (aa = 10; aa; aa--) { a.Format ("%i", aa); pDC -> TextOut (5 + (10 - aa) * 30, 30, a); } a.Format ("Start!"); pDC -> TextOut (5, 55, a); a.Format ("Старт!"); pDC -> TextOut (200, 55, a); ba = 60000; aa = ba; a.Format ("aa = %i, ba = %u.", aa, ba); pDC -> TextOut (5, 80, a); ca = 'c'; a.Format ("%c", ca); pDC -> TextOut (5, 105, a); ca = '+'; a.Format ("%c%c", ca, ca); pDC -> TextOut (15, 105, a); aa = 5; ab = 60; aa++; ++ab; a.Format ("aa = %i, ab = %i.", aa, ab); pDC -> TextOut (5, 130, a); a.Format ("aa = %i, ab = %i.", aa++, ++ab); pDC -> TextOut (5, 155, a); aa = 101 <= 105; ab = 101 > 105; a.Format ("true - %i, false - %i.", aa, ab); pDC -> TextOut (5, 180, a); for (aa = 0; aa < 10; aa++) for (ab = 0; ab < 10; ab++) { a.Format ("%i * %i = %i", aa, ab, aa * ab); pDC -> TextOut (5 + aa * 100, 230 + ab * 25, a); } for (aa = 0; aa < 1000; aa++) { ab = aa * aa * aa; if (ab > 10000) break; a.Format ("%i - %i", aa, ab); ac = aa % 3; ad = aa / 3; pDC -> TextOut (5 + ad * 100, 500 + ac * 25, a); } for (aa = 0; aa < 1000; aa++) { if (aa % 7) continue; a.Format ("%i", aa); ab = aa / 7; ac = ab % 8; ad = ab / 8; pDC -> TextOut (5 + ad * 50, 600 + ac * 25, a); } } Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 24 июля, 2015 Автор Жалоба Поделиться Опубликовано 24 июля, 2015 Свершилось! Я решил 7 задач из задачника. Ввод данных представляет собой довольно длинный, нудный процесс; поэтому, чтобы не повторять его 7 раз, я решил сэкономить и дать исходные данные семи задачам сразу. Это значит, что вы вводите данные (6 целых чисел) для всех задач одним махом. И они начинают считать. Пробуйте!Программа написана для Windows 32-bit. Работает во всех версиях от Windows 95 до Windows Vista. Скачать программу, текст программы и условия задач можно здесь:https://yadi.sk/d/_35psXXri4V5H Задачи: 1-1. (1) Угол α задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развёрнутого, а также для отрицательных углов. 1-3. (2) Длина отрезка задана в дюймах, 1 дюйм = 2,54 мм. Перевести значение длины в метрическую систему, то есть выразить её в метрах, сантиметрах и миллиметрах. Так, например, 21 дюйм = 0 м 53 см 3,4 мм. 1-4. (3) Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах в пределах одних суток. Найти продолжительность этого промежутка в тех же единицах измерения. 1-5. (4) В такси одновременно сели три пассажира. Когда вышел первый пассажир, на счётчике было p1 рублей; когда вышел второй – p2 рублей. Сколько должен был заплатить каждый пассажир, если по окончании поездки счётчик показал p3 рублей? Плата за посадку составляет p0 рублей. 1-6. (5) Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина? 1-10. (6) Найти корни квадратного уравнения, заданного своими коэффициентами, с положительным дискриминантом; подстановкой в уравнение убедиться в погрешности вычислений. 1-15. (7) У квадрата ABCD на плоскости известны координаты двух противоположных вершин – точек A и C. Найти координаты точек B и D. Программа: Файл “p1Doc.h” class CP1Doc:public CDocument { protected: CP1Doc (); DECLARE_DYNCREATE (CP1Doc); char aa [50]; // ìåñòî äëÿ ââîäèìûõ ñèìâîëîâ int ba, bb, bc, bd, be, bf; // èñõîäíûå äàííûå - öåëûå ÷èñëà int ca, cb; // óêàçàòåëü ââîäà â ñòðîêó äàííûõ, <Enter> int da [10]; // ìåñòî õðàíåíèÿ äàííûõ äëÿ âûâîäà íà ýêðàí double db [10]; CString dc [10]; int ea, eb; void fa (); // ïåðåâîä äàííûõ èç ñèìâîëüíîé ôîðìû â öèôðîâóþ void fb (); void fc (); // Çàäà÷à p19 - 1 (1) void fd (); // Çàäà÷à p19 - 3 (2) void fe (); // Çàäà÷à p19 - 4 (3) void fg (); // Çàäà÷à p20 - 5 (4) void fh (); // Çàäà÷à p20 - 6 (5) void fi (); // Çàäà÷à p21 - 10 (6) void fj (); // Çàäà÷à p22 - 15 (7) }; Файл “p1Doc.cpp” #include "stdafx.h" #include "math.h" #include "p1.h" #include "p1Doc.h" CP1Doc::CP1Doc () { aa [0] = 0; ba = bb = bc = bd = be = bf = 0; ca = cb = 0; da [0] = 0; } void CP1Doc::fa () { cb = 1; ea = 0; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); ba = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); bb = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); bc = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); bd = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); be = eb; while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++; fb (); bf = eb; fc (); fd (); fe (); fg (); fh (); fi (); fj (); } void CP1Doc::fb () { int a; eb = 0; a = 1; if (aa [ea] == '-') {a = -1; ea++;} while (aa [ea] >= '0' && aa [ea] <= '9') { eb = eb * 10 + aa [ea] - '0'; ea++; } eb *= a; } void CP1Doc::fc () { int a; double b; a = ba; if (ba < 0) a = -a; b = ((bc / 60. + bb) / 60 + a) / 180 * 3.141592653589; if (ba < 0) b = -b; db [0] = b; } void CP1Doc::fd () { int a, b; double c; c = ba * .0254; if (c < 0) c = 0; a = (int) c; c = (c - a) * 100; b = (int) c; c = (c - B) * 10; da [1] = a; da [2] = b; db [1] = c; } void CP1Doc::fe () { int a, b, c, d, e, f; a = ba * 3600 + bb * 60 + bc; b = bd * 3600 + be * 60 + bf; c = b - a; d = c / 3600; c -= d * 3600; e = c / 60; f = c - e * 60; da [3] = d; da [4] = e; da [5] = f; } void CP1Doc::fg () { int a, b, c; a = (ba + bb) / 3; b = (2 * ba - bb + 3 * bc) / 6; c = ba + bd - a - b; da [6] = a; da [7] = b; da [8] = c; } void CP1Doc::fh () { double a, b; db [2] = 0; if (!ba) return; a = (double) bc / ba; if (a <= 0) return; b = 1 + bb / 100.; if (b <= 0) return; db [2] = log (a) / log (B); } void CP1Doc::fi () { double a, b, c; dc [1].Format (""); if (!ba) { if (!bb) { if (!bc) {dc [0].Format ("p21 - 10. Ðåøåíèå - ëþáîå ÷èñëî."); return;} dc [0].Format ("p21 - 10. Ðåøåíèé íåò."); return; } a = -bc / (double) bb; dc [0].Format ("p21 - 10. x = %.4g.", a); dc [1].Format ("%i * x + %i = %.4g.", bb, bc, bb * a + bc); return; } a = bb * bb - 4 * ba * bc; if (a < 0) {dc [0].Format ("p21 - 10. Ðåøåíèé íåò."); return;} if (!a) { a = -bb / 2. / ba; dc [0].Format ("p21 - 10. x = %.4g.", a); dc [1].Format ("%i * x^2 + %i * x + %i = %.4g.", ba, bb, bc, ba * a * a + bb * a + bc); return; } b = (-bb + sqrt (a)) / 2 / ba; c = (-bb - sqrt (a)) / 2 / ba; dc [0].Format ("p21 - 10. x1 = %.4g, x2 = %.4g.", b, c); dc [1].Format ("%i * x1^2 + %i * x1 + %i = %.4g. %i * x2^2 + %i * x2 + %i = %.4g.", ba, bb, bc, ba * b * b + bb * b + bc, ba, bb, bc, ba * c * c + bb * c + bc); } void CP1Doc::fj () { double a, b, c, d; a = (ba + bc) / 2.; b = (bb + bd) / 2.; c = a - ba; d = b - bb; db [3] = a - d; db [4] = b + c; db [5] = a + d; db [6] = b - c; } Файл “p1View.cpp” void CP1View::OnDraw (CDC *pDC) { CP1Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); CString a; pDC -> TextOut (5, 5, "Ââåäèòå øåñòü öåëûõ ÷èñåë:"); pDC -> TextOut (5, 30, pdoc -> aa); a.Format ("code = %i", pdoc -> da [0]); pDC -> TextOut (5, 55, a); if (pdoc -> cb) { a.Format ("%i %i %i %i %i %i", pdoc -> ba, pdoc -> bb, pdoc -> bc, pdoc -> bd, pdoc -> be, pdoc -> bf); pDC -> TextOut (5, 80, a); a.Format ("p19 - 1. Óãîë ðàâåí %.12g ðàäèàí.", pdoc -> db [0]); pDC -> TextOut (5, 105, a); a.Format ("p19 - 3. %i äþéìîâ = %i ì %i ñì %g ìì.", pdoc -> ba, pdoc -> da [1], pdoc -> da [2], pdoc -> db [1]); pDC -> TextOut (5, 130, a); a.Format ("p19 - 4. Äëèíà èíòåðâàëà ðàâíà %i ÷ %i ìèí %i ñ.", pdoc -> da [3], pdoc -> da [4], pdoc -> da [5]); pDC -> TextOut (5, 155, a); a.Format ("p20 - 5. Ïåðâûé ïàññàæèð ïëàòèò %i ð., âòîðîé - %i ð., òðåòèé - %i ð.", pdoc -> da [6], pdoc -> da [7], pdoc -> da [8]); pDC -> TextOut (5, 180, a); a.Format ("p20 - 6. Íåîáõîäèìàÿ ñóììà áóäåò íàêîïëåíà ÷åðåç %.4g ëåò.", pdoc -> db [2]); pDC -> TextOut (5, 205, a); pDC -> TextOut (5, 230, pdoc -> dc [0]); pDC -> TextOut (5, 255, pdoc -> dc [1]); a.Format ("p22 - 15. Êîîðäèíàòû âåðøèí êâàäðàòà: B (%.4g; %.4g), D (%.4g; %.4g).", pdoc -> db [3], pdoc -> db [4], pdoc -> db [5], pdoc -> db [6]); pDC -> TextOut (5, 280, a); } } void CP1View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags) { CP1Doc *pdoc = GetDocument (); ASSERT_VALID (pdoc); pdoc -> da [0] = nChar; if (nChar == 8) { if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;} goto aaa; } if (nChar == 13) { pdoc -> fa (); goto aaa; } if (pdoc -> ca < 49) { pdoc -> aa [pdoc -> ca] = nChar; pdoc -> aa [pdoc -> ca + 1] = 0; pdoc -> ca++; } aaa: Invalidate (); CView::OnChar (nChar, nRepCnt, nFlags); } Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 28 июля, 2015 Автор Жалоба Поделиться Опубликовано 28 июля, 2015 (изменено) Читаю книжку по языку C 15-летней давности. Внезапно оказалось, что тексты программ "заточены" под операционную систему MS-DOS. Перед этим пытался переписать их под Windows, да не больно-то получалось. Поэтому пришлось всё бросить и начать сначала.По дороге в книге встретил однострочные примеры. Вот они. /* p43 Одиночные строки */ /* p43 - p43 */ #include <stdio.h> /* Пример 1. */ main () { int year, month; /* p44 - p49 */ year = 1996; printf ("Сейчас %i год.\n", year); } float func (int, float, long double); float func (int, float, long double); /* p50 - p60 */ if (0 < 1) printf ("0 меньше 1"); if (0 > 1) printf ("0 больше 1"); if (0 == 1) printf ("0 равно 1"); printf ("\n"); char str [80]; /* p63 - p65 */ (float) x / 2; (float) (x / 2); printf ("%05d", 15); scanf ("%i%*c%i", &i, &j); scanf ("%5s", str); /* p65 - p71 */ scanf ("%iplus%i", &i, &j); scanf ("%10[A-Z1-5]%s", s); x = x + 1; ++x; x++; if ((f = x - y) > 0) printf ("Число x больше, чем y.\n"); a = b = c = x * y; /* p72 - p73 */ ch &= 127; ch |= 128; if (ch & 4) printf ("Третий бит содержит 1, состояние \"on\".\n"); max = x > y ? x : y; abs = x > 0 ? x : -x; /* p74 - p80 */ x > y ? x : y = 1; for (i = 0; i < 10; i++) printf ("%i\n", i); for (i = 9; i >= 0; i--) printf ("%i\n", i); for (ch = '0'; ch != 'N';) scanf ("%c", &ch); for (i = 0; i < 10000; i++); /* p83 - p85 */ int a [100]; unsigned arr [40]; long double al [1000]; char ch [80]; char str [11]; strcpy (s1, s2); strcat (s1, s2); /* p86 - p88 */ strcmp (s1, s2); strlen (s); int a [3] [5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int a [3] [5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}}; int a [3] [5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; /* p88 - p88 */ int a [3] [5] = {{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}}; char str [15] = {'B', 'o', 'r', 'l', 'a', 'n', 'd', ' ', 'C', '+', '+'}; char str [15] = "Borland C++"; char str [80] = "Это объявление и инициализация массива символов."; char str [] = "Это объявление и инициализация массива символов."; /* p89 - p92 */ int mass [] = {1, 2, 3, 1, 2, 3, 4}; int arr [] [3] = {1, 2, 3, 5, 6, 7, 8, 9, 0}; int *pi; p = &x; p = (int *) &x; /* p93 - p94 */ p += 3; p1 += 10; int plus [10]; p1 = plus; p1 = &plus [0]; /* p95 - p97 */ int *x [10]; x [2] = &y; char *errors [] = {"Can't open file", "Can't close file", "Allocation error", "System error"}; int **point; f (int x, int y, float z); /* p98 - p106 */ f (int x, int y, float z); register int quick; float global; extern float global; static int count = 10; /* p109 - p114 */ swap (5, 10); main (int argc, char *argv []) {...} main (int argc, char *argv [], char *env []) {...} void main (void) {...} void f (int a, int b, ...); /* p114 */ void f (int a, int b...); Изменено 28 июля, 2015 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
ЛЕГЕНДАРНЫЙ Несущий Ересь Опубликовано 28 июля, 2015 Жалоба Поделиться Опубликовано 28 июля, 2015 А что эти примеры должны иллюстрировать и вообще делать? Цитата - Как бы вы перевели Amagami SS?- Ласково Кусь.- Поздравляю, вы приняты в русский фансаб. [Maschera Team] Мои отзывы и анимелист. Doki Doki Literature Club - лучшая новелка в стиме. Да и вообще лучшая. Группа с моими обзорчиками различной манги. Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 28 июля, 2015 Автор Жалоба Поделиться Опубликовано 28 июля, 2015 Они иллюстрируют правила языка и его использование.Например, оператор ? :, if, for, объявление массивов и строк. Цитата for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.