Перейти к содержанию
Обновление форума
Опубликовано
comment_2956854

Тема для обсуждения программ на языке C.

 

---------------------------------------------------

 

Для рисования окружностей в теме Heroes III нужна программа.

http://amvnews.ru/forum/viewtopic.php?t=3888

Эта программа рассчитывает границу 1/8 окружности заданного радиуса в целых числах. Вот эта программа.

 

http://sa.uploads.ru/t/9hxWu.jpg

 

Скачать:

https://yadi.sk/d/jzUo02Szcaw6g

В архиве:

 

текст программы;

сама программа (работающая!);

итоговый файл данных;

скриншот программы;

откорректированный выходной файл (с косметическими изменениями для удобства работы с ним).

 

Программа написана на языке C под DOS.

Изменено пользователем MrStitch (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • Ответов 91
  • Просмотры 27,7 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Популярные посты

  • Юра К, не придуривайся и научись гуглить. Qt - это кроссплатформенный фреймворк с богатым набором библиотек. Сейчас большинство тех, кто программирует на C++, им пользуется, и при поиске работы это уч

  • Ну спрячь его и не показывай, раз не надо. Притом что на самом деле очень часто надо.   Ты программировать учишься? Ну вот и учись. Базовый синтаксис языка освоить -- это даже не полдела, с этим медв

  • Серьёзная проблема программистов в том, что многие из них считают себя достаточно умными, чтобы программировать. Они ошибаются. Нет для этого достаточно умных. Именно поэтому разрабатывают новые техно

Рекомендуемые сообщения

Опубликовано
  • Автор
comment_2958474

Так после установки Visual C++ как раз появляется кнопочка дебаггера. Он же и запускается.

Причём эта кнопочка появляется в любой виндоус (когда раньше её просто не было).

Вот я и задумался несколько лет назад: что бы там такого подправить, чтобы работало?

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 5 месяцев спустя...
Опубликовано
  • Автор
comment_2987360

Я посадил дерево написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)

Ещё там работают клавиши <Backspace> и <Enter>.

Прошу заценить.

https://yadi.sk/d/bmwYbfm-gVCDs

 

У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция...

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 4 недели спустя...
Опубликовано
  • Автор
comment_2991613

Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:

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.h

class 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.cpp

void 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);
}

 

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_2992057

Не стоит называть переменные вот так вот. Все вот эти aa, nChar и прочее. Времена с ограничением до 8 букв давно прошли (ну, в языках общего назначения по крайней мере). Имена переменных должны отображать их смысл, даже если это получается длинно. Благо, автокомплит в и в блокнотах нынче бывает.

 

Без этого тяжело понять, что происходит вообще в программе. Читаемость -- это очень важно для хорошего кода.

Если долго всматриваться в бездну, можно неплохо провести время.

Опубликовано
  • Автор
comment_2992097

Я работал со схемотехникой, так там вообще ничего не понятно. И самое главное, никто ничего не объясняет, хотя по работе надо! Так что то, что тут у меня – это ещё по-божески.

А понимать ничего и не надо. Никто не просит вас ковыряться в чужом коде, раз там всё работает. Это же не электротехника, которая может испортиться.

Что касается nChar, так это не я придумал, а Visual C++. Так же как и названия классов – тоже его изобретение. Программа называется по-простому: p3.

А вот представьте, что у вас три независимых задачи, которые никак друг с другом не связаны. Поможет вам там придумывание имён? Оно только запутает. Это всё равно что в одно произведение напихать разные сюжеты. И потом этот винегрет читать.

Автокомплитом не пользуюсь. Пользуюсь языками программирования 1985-го, 1995-го и 2000-го года. Но даже там ограничение на длину переменных, кажется, 32 символа. А может, и больше.

Автокомплит есть в Visual C++ 6.0, на котором написана эта программа. То есть если ввести название класса, автокомплит показывает, какие там переменные-члены и функции, и это очень удобно, так как нет Help'а. А откуда ещё узнать, какие функции в этом стандартном классе. Не все диски можно было достать в далёком 2000-ом. А литература, увы, ограничена... Например, там не сказано было, как ввести число с клавиатуры. Я думал над этим 15 лет. И вот наконец придумал (см. 28-ой пост).

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_2992274

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;
Опубликовано
comment_2992330

А понимать ничего и не надо. Никто не просит вас ковыряться в чужом коде, раз там всё работает.

 

Ну спрячь его и не показывай, раз не надо. Притом что на самом деле очень часто надо.

 

Ты программировать учишься? Ну вот и учись. Базовый синтаксис языка освоить -- это даже не полдела, с этим медведи в цирке на одноколёсном велосипеде справятся. Мало просто решить задачу. От программиста в подавляющем большинстве случаев требуется чтобы его код был (а) легко читаемый (б) легко модифицируемый. Осмысленные имена переменных -- первый шаг к этому.

 

Собсно, можно по этому повод книгу почитать, к примеру того же МакКоннела, "Совершенный код".

 

 

Что касается nChar, так это не я придумал, а Visual C++. Так же как и названия классов – тоже его изобретение. Программа называется по-простому: p3.

 

А не надо редактору давать за тебя имена изобретать. Он твоих мыслей и назначения переменных не знает.

 

 

И потом этот винегрет читать.

 

Винегрет -- это вот aa и прочее. Со мной программист на AS400 работает, в этой системе нельзя называть переменный длиннее 8 символов. И имена из-за это в духе FCCXMY. Вот он матерится, когда ему нужно программы править. Потому что смотришь на эту загадочную аббревиатуру -- и поди пойми что это и зачем.

Изменено пользователем Shinsaku-To (смотреть историю редактирования)

Если долго всматриваться в бездну, можно неплохо провести время.

Опубликовано
  • Автор
comment_2992339
А не надо редактору давать за тебя имена изобретать. Он твоих мыслей и назначения переменных не знает.
Это имя по умолчанию, которое дала Microsoft. Советуете его исправлять? Я предпочитаю не лезть туда, где я не понимаю.

 

Я имена не запоминаю. Они уплывают из моей головы. Поэтому мне приходится аниме 3-4 раза пересматривать, чтобы выучить всё досконально и при этом запомнить, кого как зовут.

А когда я вижу 520-ую программу, в которой даётся имя переменной, которая при этом используется всего пару раз... как в моём примере...

Если это важная переменная, которая проходит через всю программу – тогда можно что-то придумать. Но придумать всё равно нужно покороче, иначе строчка растянется очень надолго.

 

Ну занесите себе в память, что аа - это то, что вы вводите с клавиатуры, ba - это то, что вы из этой строки извлекаете. Легко ведь запомнить - тем более, что я в комментарии записал (для самого себя, чтоб потом не запутаться). А все остальные переменные - временные, используются один-два раза за программу. Их запоминать не надо.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_2992341

Это имя по умолчанию, которое дала Microsoft. Советуете его исправлять? Я предпочитаю не лезть туда, где я не понимаю.

 

 

Чего именно тут можно не понять? Это просто имя. Оно каким угодно может быть. Но гораздо лучше, если оно будет характеризовать переменную. Ну, например, если у тебя есть переменная, которая хранит номер счёта в формате ЦБ, то разумно назвать её не "dd", а "CBAccount". Потому что ты смотришь на неё -- и тебе ясно что это. Не надо ничего вспоминать, прослеживать, откуда она взялась и прочее.

 

Ну занесите себе в память, что аа - это то, что вы вводите с клавиатуры

 

 

Ну и почему бы не назвать её, например, "userInput"? И не нужно правил никаких придумывать. Осмысленные имена как раз для того, чтобы НЕ запоминать и при необходимости НЕ разбираться.

 

 

Если долго всматриваться в бездну, можно неплохо провести время.

Опубликовано
  • Автор
comment_2992342
Ну и почему бы не назвать её, например, "userInput"?

Когда я писал программу, в которой было 50 мелких программ (из учебника по C), я впервые столкнулся с конфликтом имён, когда в одной программе переменная означает одно, в другой другое, и у неё другой тип. Так вот чтобы "развести" этот конфликт, я такую систему и придумал. А в дальнейшем лишь слегка модифицировал под текущие нужды.

Твоё предложение разумно, но я уже привык, и ещё от этого увеличивается длина строки. Программа по стилю (в вашем случае) становится ближе к литературному произведению. "Вася пошёл туда-то..."

 

Например.

Попробуйте в этой строке заменить все aa на userInput. Что получится? Многоэтажный... слог.

while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;

В результате длина программы увеличивается раза в четыре.

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_2992351

У меня пока планы на будущее. Я не могу прочитать ни одну книгу по программированию. попытаюсь хоть что-то закончить.

У меня есть задачник по программированию, но под MS-DOS его нет смысла заканчивать, с ним я уже лет 15 мучаюсь. Надо переходить под Windows. Только в этом году я понял, как туда вводить переменные.

А полкниги Visual C++ 6.0 посвящено непонятно чему, с задачником никак не связан. Осваивается интерфейс Windows, кнопки, переключатели и прочее. Не очень-то полезно для решения математических задач, неправда ли?

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_2992358
Для программирования под Windows можно начать читать Питзольда "Программирование для Виндовс 95". Плюсы изучаю по Шилдту, вроде неплохо, хотя Дейтелы лучше.

- Как бы вы перевели Amagami SS?

- Ласково Кусь.

- Поздравляю, вы приняты в русский фансаб.

 

[Maschera Team]

 

Мои отзывы и анимелист.

 

Doki Doki Literature Club - лучшая новелка в стиме. Да и вообще лучшая.

 

Группа с моими обзорчиками различной манги.

Опубликовано
  • Автор
comment_2992362

Литературы у меня навалом. Ни одну прочитать не могу.

Хотя пару книжек прочитал лет 10 назад. Реализовал под MS-DOS на C и C++.

На ООП нормальных задачек нашёл только две, остальные из пальца высосаны.

Одна из задач была похожа на игру "жизнь". Кролики и волки. И у меня работало. Я даже параметры подбирал.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_2992369

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? Если да, нашли нужное место. Иначе: это дефис? Если да, нашли нужное место. Если не нашли -- переходим к следующему символу.

 

А чтобы понять, что твой цикл однострочный делает, пришлось в него минуту потупить. И он не становится лучше от того, что записан одной строкой. Компактность сегодня вообще до лампочки, компилятор от твоего кода только алгоритм оставит да и тот заоптимизирует вусмерть. А вот этими однострочными упражнениями можно таких шарад понаписать, что потом без поллитры не разберёшься. Ну и баг отладчиком в однострочном выражении искать -- то ещё удовольствие.

 

Так что не надо стесняться. Можно писать длинно, экономия места ни к чему.

Изменено пользователем Shinsaku-To (смотреть историю редактирования)

Если долго всматриваться в бездну, можно неплохо провести время.

Опубликовано
comment_2992372

По обучению, например, смотри, так: http://www.videosharp.info/

 

Видеокурсы по C# (что гораздо актуальнее чем плюсы по 95 винду) в формате "для самых маленьких" с задачами и проверкой этих задач. Частично бесплатные, частично по цене школьного завтрака. Отличный вариант, как по мне.

Если долго всматриваться в бездну, можно неплохо провести время.

Опубликовано
  • Автор
comment_2992517
Ну, например, если у тебя есть переменная, которая хранит номер счёта в формате ЦБ, то разумно назвать её не "dd", а "CBAccount". Потому что ты смотришь на неё -- и тебе ясно что это. Не надо ничего вспоминать, прослеживать, откуда она взялась и прочее.
Как сказал Triela, "Я не буду проще. И не надо ко мне тянуться."

 

Вспоминаю ещё эпизод из своего электротехнического прошлого.

"Что ты делаешь?" - "Схему читаю." - "Ну, почитай нам вслух." - "А. B2. C4, B5."

Вот там действительно всё было непонятно. А тут - так, семечки. Минут десять посидеть, комментарии почитать, что что означает, и всё понятно будет. Главное - определения.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_2992565

Серьёзная проблема программистов в том, что многие из них считают себя достаточно умными, чтобы программировать. Они ошибаются. Нет для этого достаточно умных. Именно поэтому разрабатывают новые технологии и методики -- чтобы компенсировать.

 

Ну а дальше уж -- каждый сам себе злобный баклан.

Изменено пользователем Shinsaku-To (смотреть историю редактирования)

Если долго всматриваться в бездну, можно неплохо провести время.

Опубликовано
  • Автор
comment_2992643

Этого нам не говорили. Мне вообще никто ничего не говорил. Программисты вокруг не водятся...

 

Я сам себе программист.

"The wall".

http://amvnews.ru/forum/viewtopic.php?t=4025

"Shift time".

https://www.animeforum.ru/index.php?app=forums&module=forums&section=findpost&pid=2876464

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 2 недели спустя...
Опубликовано
  • Автор
comment_2994218

Вот программа, в которую можно ввести с клавиатуры рациональное число. Скачать:

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);
}

 

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 3 недели спустя...
Опубликовано
  • Автор
comment_2996092

Очередной шедевр программирования.

 

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;
  • 4 недели спустя...
Опубликовано
  • Автор
comment_3000176

Свершилось! Я решил 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;
Опубликовано
  • Автор
comment_3000788

Читаю книжку по языку 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...);

 

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_3000795
А что эти примеры должны иллюстрировать и вообще делать?

- Как бы вы перевели Amagami SS?

- Ласково Кусь.

- Поздравляю, вы приняты в русский фансаб.

 

[Maschera Team]

 

Мои отзывы и анимелист.

 

Doki Doki Literature Club - лучшая новелка в стиме. Да и вообще лучшая.

 

Группа с моими обзорчиками различной манги.

Опубликовано
  • Автор
comment_3000815

Они иллюстрируют правила языка и его использование.

Например, оператор ? :, if, for, объявление массивов и строк.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3001070

Очередная программа под MS-DOS. Содержит в себе энное количество примеров из книги по программированию.

 

/*   p42
    Простые программы   */

#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

float ga = 3.1415926;

ja ();
jb ();
jc ();
jd (float);
je (int *);
jf ();
jg ();
jh ();
ji (int, int);
jj (int *, int *);
jk (char *, int);
jl (int a [3] [3], int b [3] [3], int c [3] [3]);

float ka (float);
float kb (float);

int *la (int *);

main ()
{
  int aa, ab, ac;
  int ba, bb;
  int *ca, *cb, **cc;
  float da, db;
  float ea;
  float *fa;
  unsigned ma;
  char pa;
  char qa;
  char *ra = "String Of Letters in Different Registers.";
  char *rb;
  char sa [80], sb [20], sc [10];
  char sd [10] = {1, 23, 4, 7, 8, 0, 1, 9, 4, 7};
  char se [10] = {1, 3, -5, 7, 9, 0, 22, 4, 6, 8};
  char ta [80];
  char ua [5] [20];
  int va [3] [3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
  int vb [3] [3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int vc [3] [3];

/* printf ("Input two integers: ");
  scanf ("%i%i", &ba, &bb);
  printf ("Input float: ");
  scanf ("%f", &ea);
  printf ("Press any key: ");
  qa = getche ();
  printf ("\nInput string: ");
  gets (sa); gets (sa);
  printf ("Input string: ");
  scanf ("%[0123456789]%s", sb, sc); */

  ba = 1; bb = 2; ea = 3; qa = 'b'; strcpy (sa, "c"); strcpy (sb, "d");
  strcpy (sc, "e");
  printf ("Input float: ");
  scanf ("%f", &ea);
  printf ("Press any key: ");
  qa = getchar (); qa = getchar ();
  printf ("Input string: ");
  gets (ta); gets (ta);

  aa = 1996;
  printf ("Сейчас %i год.\n", aa);
  da = ga * 2 * ba;
  printf ("Радиус %i, длина %.4g.\n", ba, da);
  da = ga * 2 * ea;
  db = ga * ea * ea;
  printf ("Радиус %.4g, длина окружности %.4g, площадь круга %.4g.\n",
     ea, da, db);

  ja ();
  jb ();
  jc ();
  aa = 5;
  jd (aa);
  printf ("Длина окружности радиуса %i равна %.4g.\n", aa, ka (aa));
  for (aa = 10; aa > 0; aa--)
  {
     printf ("%i", aa);
     if (aa > 1)  printf (" ");
  }

  printf ("\nСтарт!\n");
  ma = 60000;
  aa = ma;
  printf ("aa = %i, ma = %u.\n", aa, ma);
  pa = 'c';
  printf ("%c", pa);
  pa = '+';
  printf ("%c%c\n", pa, pa);
  if (qa == 'a')  printf ("Вы нажали клавишу \"a\".\n");
  printf ("Вы нажали клавишу \"%c\".\n", qa);
  printf ("Я знаю ваше имя; ваше имя %s.\n", sa);
  printf ("%s..%s\n", sb, sc);
  printf ("Целая часть %i. ", ba / bb);
  printf ("Остаток от деления %i.\n", ba % bb);
  aa = 5;
  ab = 60;
  aa++;
  ++ab;
  printf ("aa = %i, ab = %i.\n", aa, ab);
  printf ("aa = %i, ab = %i.\n", aa++, ++ab);

  aa = 101 <= 105;
  ab = 101 > 105;
  printf ("true - %i, false - %i.\n", aa, ab);
  if (ea > 0) {aa = 1; printf ("Число %g положительное, aa = %i.\n", ea, aa);}
  if (ea == 0) {aa = 0; printf ("Число %g равно нулю, aa = %i.\n", ea, aa);}
  if (ea < 0) {aa = -1; printf ("Число %g отрицательное, aa = %i.\n", ea, aa);}
  if (ea > 0) {aa = 1; printf ("Число %g положительное.\n", ea);}
  else if (ea < 0) {aa = -1; printf ("Число %g отрицательное.\n", ea);}
     else {aa = 0; printf ("Число %g равно нулю.\n", ea);}

  if (qa >= 'А'  &&  qa <= 'Я')
  {
     switch (qa)
     {
 case 'А': printf ("Алексеев\n"); break;
 case 'Б': printf ("Булгаков\n"); break;
 case 'В': printf ("Волошин\n"); break;
 case 'Г': printf ("Гоголь\n"); break;
 default: printf ("Достоевский, Зощенко и другие\n"); break;
     }
  }
  else printf ("Надо было ввести заглавную русскую букву.\n");

  if (qa >= 'А'  &&  qa <= 'Я')
  {
     switch (qa)
     {
 case 'А': printf ("Алексеев\n");
 case 'Б': printf ("Булгаков\n");
 case 'В': printf ("Волошин\n");
 case 'Г': printf ("Гоголь\n");
 default: printf ("Достоевский, Зощенко и другие\n");
     }
  }
  else printf ("Надо было ввести заглавную русскую букву.\n");

  for (aa = 0; aa < 10; aa++)
     for (ab = 0; ab < 6; ab++)
     {
 printf ("%i * %i = %-2i", aa, ab, aa * ab);
 if (ab < 5) printf ("  "); else printf ("\n");
     }

  for (aa = 0; aa < 1000; aa++)
  {
     printf ("%i - %i.", aa, aa * aa * aa);
     if (aa * aa * aa > 10000)
     {
 printf ("\n");
 break;
     }
     else printf (" ");
  }

  for (aa = 1; aa < 1000; aa++)
  {
     if (aa % 7)  continue;
     printf ("%-5i", aa);
  }

  printf ("\n");
  strcpy (sa, "Привет, ");
  strcpy (sb, "мир.");
  puts (sa);
  puts (sb);
  strcat (sa, sb);
  puts (sa);
  puts (sb);
  printf ("Строка \"%s\" имеет длину %i символов.\n", ta, strlen (ta));
  strcpy (ua [0], "Turbo Basic");
  strcpy (ua [1], "Turbo Pascal");
  strcpy (ua [2], "Borland C++");
  strcpy (ua [3], "Turbo Prolog");
  strcpy (ua [4], "Paradox");
  printf ("Неотсортированный массив:");
  for (aa = 0; aa < 10; aa++)  printf (" %i", sd [aa]);
  for (aa = 0; aa < 9; aa++)
     for (ab = 0; ab < 9; ab++)
 if (sd [ab] < sd [ab + 1])
 {
    ac = sd [ab];
    sd [ab] = sd [ab + 1];
    sd [ab + 1] = ac;
 }

  printf ("\nОтсортированный массив:");
  for (aa = 0; aa < 10; aa++)  printf (" %i", sd [aa]);
  da = 10.1;
  fa = &da;
  db = *fa;
  printf ("\nda = %g, db = %g.\n", da, db);
  (*fa)++;
  printf ("da = %g, db = %g.\n", da, db);
  db = 1 + *fa * db;
  printf ("da = %g, db = %g.\n", da, db);
  aa = 10;
  ca = &aa;
  cb = ca;
  printf ("%p\n", ca);
  printf ("%p\n", cb);
  printf ("%i, %i.\n", aa, *cb);
  da = 10.1;
  ca = (int *) &da;
  db = *ca;
  printf ("da = %g, db = %g.\n", da, db);

  ca = &aa;
  printf ("%p, %p.\n", ca, ++ca);
  printf ("Строка Будет Напечатана Заглавными Буквами.\n");
  aa = 0;
  while (ra [aa]) printf ("%c", toupper (ra [aa++]));
  printf ("\nСтрока будет напечатана строчными буквами.\n");
  rb = ra;
  while (*rb) printf ("%c", tolower (*rb++));
  aa = 7;
  ca = &aa;
  cc = &ca;
  printf ("\naa = %i, ca = %p, cc = %p.\n", aa, ca, cc);
  (*ca)++;
  printf ("aa = %i, ca = %p, cc = %p.\n", aa, ca, cc);
  **cc = 12;
  printf ("aa = %i, ca = %p, cc = %p.\n", aa, ca, cc);
  da = 5.2;
  printf ("Квадрат числа %.4g равен %.4g.\n", da, kb (da));

  la (&aa);
  aa = 10;
  je (&aa);
  jf ();
  aa = 1;
  jg ();
  printf ("В функции \"main\" значение aa равно %i.\n", aa);
  for (aa = 1; aa < 4; aa++)
  {
     printf ("Вызов # %i.\n", aa);
     jh ();
     printf ("Вызов # %i.\n", aa);
     jh ();
  }

  aa = 5;
  ab = 10;
  printf ("Сначала aa = %i, ab = %i.\n", aa, ab);
  ji (aa, ab);
  printf ("Теперь aa = %i, ab = %i.\n", aa, ab);
  printf ("Ничего не изменилось.\n");
  jj (&aa, &ab);
  printf ("Теперь aa = %i, ab = %i.\n", aa, ab);
  printf ("Значения поменялись.\n");
  aa = 10;
  printf ("До сортировки: ");
  for (ab = 0; ab < 10; ab++)
  {
     printf ("%i", se [ab]);
     if (ab < 9) printf (", "); else printf (".\n");
  }

  jk (se, aa);
  printf ("После сортировки: ");
  for (ab = 0; ab < 10; ab++)
  {
     printf ("%i", se [ab]);
     if (ab < 9) printf (", "); else printf (".\n");
  }

  jl (va, vb, vc);
  printf ("Массив \"vc\":\n");
  for (aa = 0; aa < 3; aa++)
     printf ("%-3i %-3i %-3i\n", vc [aa] [0], vc [aa] [1], vc [aa] [2]);

  getch ();
  printf ("\n\n");
}

ja () {printf ("Вызвали первую функцию.\n");}
jb () {printf ("Вызвали вторую функцию.\n");}
jc () {printf ("Вызвали третью функцию.\n");}
jd (float a) {printf ("Длина окружности радиуса %.4g равна %.4g.\n",
  a, ga * 2 * a);}

je (int *a) {*a = *a * *a;}

jf ()
{
  int a;
  for (a = 0; a < 80; a++) printf ("-");
}

jg ()
{
  int aa;
  aa = 10;
  printf ("В функции \"jg\" значение aa равно %i.\n", aa);
}

jh ()
{
  int a;
  static b = 1;
  a = 1;
  printf ("a = %i, b = %i.\n", a++, b++);
}

ji (int a, int B)
{
  int c;
  c = a;
  a = b;
  b = c;
}

jj (int *a, int *B)
{
  int c;
  c = *a;
  *a = *b;
  *b = c;
}

jk (char a [], int B)
{
  int c, d, e;
  for (c = 0; c < b - 1; c++)
     for (d = 0; d < b - 1; d++)
 if (a [d] > a [d + 1])
 {
    e = a [d];
    a [d] = a [d + 1];
    a [d + 1] = e;
 }
}

jl (int a [3] [3], int b [3] [3], int c [3] [3])
{
  int d, e, f;
  for (d = 0; d < 3; d++)
     for (e = 0; e < 3; e++)
     {
 c [d] [e] = 0;
 for (f = 0; f < 3; f++)  c [d] [e] += a [d] [f] * b [f] [e];
     }
}

float ka (float a) {return ga * 2 * a;}
float kb (float a) {return a * a;}

int *la (int *a)
{
  *a = *a * *a;
  return a;
}

 

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.