Программирование

Дата: 07 мая 2015 14:34 #1

Программирование

Я (посадил дерево) написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)
Ещё там работают клавиши <Backspace> и <Enter>.
Прошу заценить.
https://yadi.sk/d/bmwYbfm-gVCDs

У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция...
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 31 мая 2015 05:31 #2
Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:
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
[code:1]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)
};[/code:1]
Файл p3Doc.cpp
[code:1]#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;
}[/code:1]
Файл p3View.cpp
[code:1]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);
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 01 июня 2015 17:12 #3
jura_k:
[code:1]
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)
[/code:1]

Дата: 01 июня 2015 18:25 #4
А как правильно? Мне в жизни никто не показывал. Программисты проходят стороной вне поля моего зрения. Пишу, как могу!
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 02 июня 2015 13:55 #5
У меня уже фантазии не хватает каждый раз придумывать имена переменным. Учитывая, что этих программ в моей жизни было несколько сотен. А может, и тысяча. Для меня эти переменные как одинаковые солдаты.
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 13 июня 2015 17:53 #6
Вот программа, в которую можно ввести с клавиатуры рациональное число. Скачать:
https://yadi.sk/d/jn9VynjChEb77
Текст программы:

Файл “p46Doc.h”
[code:1]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 ();
};[/code:1]
Файл “p46Doc.cpp”
[code:1]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;
}[/code:1]
Файл “p46View.cpp”
[code:1]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);
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 29 июня 2015 06:52 #7
Очередной шедевр программирования.
[code:1]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);
}
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 24 июля 2015 05:14 #8
Свершилось! Я решил 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.

Программа:
[code:1]Файл “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);
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 29 июля 2015 03:24 #9
Читаю книжку по языку C. Иногда там попадаются примеры, которые не являются законченными программами. Я их скомпоновал в один файл.
[code:1]/* p51
Группы операторов */

/* p51 */
if (i > 10)
{
printf ("Слишком много.\n");
i /= 2;
}

x = y; y++;
mul (x, y);

x = y; y++;
mul (x, y);

/* p55 */
int x, y, z;
float radius;
unsigned char ch;
long double integral;

/* p58 */
ch = '\n';
printf ("%c", ch);

/* p59 */
printf ("\a");
printf ("\07");
printf ("\7");
printf ("\0x7");

/* p61 */
int pr = 24;
char c = 'c', ch = '0';

/* p62 */
char ch;
int i;
float f;
double d;
long double r;
r = ch * 2 + (i - .5) + (f + d) - 7;

/* p71 */
m -= 20;
m *= 20;
m /= 10;
m %= 10;

/* p73 */
x = 9 << 3;
x = 9 >> 3;
x = 9 >> 5;

/* p76 */
if (x == 0) printf ("Число равно нулю.\n");
else printf ("Число не равно нулю.\n");

if (!x) printf ("Число равно нулю.\n");
else printf ("Число не равно нулю.\n");

/* p79 */
unsigned char ch;
for (ch = 'А'; ch <= 'Я'; ch++) printf ("%c ", ch);

for (;;) printf ("Бесконечный цикл.\n");
for (i = 1; 1; i++) printf ("Бесконечный цикл.\n");
for (i = 10; i > 6; i++) printf ("Бесконечный цикл.\n");

/* p88 */
float farr [6] = {1.1, 2.2, 3.3, 4., 5, 6};
int a [3] [5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

a [0] [0] = 1; a [0] [1] = 2; a [0] [2] = 3; a [0] [3] = 4; a [0] [4] = 5;
a [1] [0] = 6; a [1] [1] = 7; a [1] [2] = 8;

/* p90 */
char *ch;
int *temp, i, *j;
float *pf, f;

/* p91 */
void *pv;
float f, *pf;
pf = &f;
pv = pf;
pf = (float *) pv;

/* p96 */
char *pc;
pc = "Привет, мир!";

/* p98 */
float step (float a, int B)
{
float i;
if (a < 0) return -1;
a = 1;
for (i = b; i; i--) a *= a;
return a;
}

max (int a, int B)
{
int m;
if (a > B) m = a; else m = b;
return m;
}

max (int a, int B)
{
if (a > B) return a; else return b;
}

/* p99 */
max (int a, int B)
{
if (a > B) return a;
return b;
}

max (int a, int B)
{
return a > b ? a : b;
}

/* p103 */
static int sum;
register int plus;

/* p104 */
void f (void)
{
extern int j;
}

/* p105 */
int var;
main () {extern int var, var1;}
func1 () {extern int var1;}
func2 () {}
int var1;
func3 () {int var;}
func4 () {auto int var1;}

/* p108 */
void swap (int a, int B)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}

void swap1 (int *a, int *B)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}

/* p109 */
function (int ar [10]);
function (int ar []);
function (int *ar);

/* p113 */
factorial (char n)
{
long a;
if (n < 2) return 1;
a = factorial (n - 1) * n;
return a;
}

/* p114 */
int sum_1 (int a, ...)
{
va_list args;
int result = a, t;
va_start (args, a);
while ((t = va_arg (args, int)) != 0) result += t;
va_end (args);
return result;
}

/* p115 */
int sum_2 (int num_args, ...)
{
va_list args;
int result = 0, i;
va_start (args, num_args);
for (i = 0; i < numargs; i++) result += va_args (args, int);
va_end (args);
return result;
}

void error_message (char *fmt, ...)
{
va_list args;
printf ("Error: ");
va_start (args, fmt);
vprintf (fmt, args);
va_end (args);
exit (1);
}
[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 26 декабря 2015 13:56 #10
В двадцатый раз стал читать книгу 1999-го года Б.И. Березина, С.Б. Березина "Начальный курс C и C++".
Думал-думал, как же её лучше прочитать? Она написана под DOS, и там есть существенные моменты, которые никак не обойти. То есть под Windows там надо слишком уж извратиться, чтобы реализовать примеры.
Так ничего и не придумал. Стал читать так же, как 22 года назад учил C по другой книжке под названием "Turbo C". Для этого на Celeron 333 со сдохшим вентилятором установил 160 Gb HDD IDE. Разметил там логический диск C размером 0,1 Gb на FAT16. Установил MS-DOS 6.22 и русификатор "keyrus.com". Затем установил Turbo C 2.0. Всё это хозяйство вместе с программами-примерами заняло меньше 5 Mb.
Затем приступил к чтению книги.
Прочитал часть первого раздела, где рассказывалось про C. (Вторая часть посвящена C++.) Остановился в тот момент, когда пошли слишком сложные вещи, которые никогда не применяю на практике: функции с переменным числом параметров, указатели на функцию, нелокальные переходы и т.д. Примеры из книги разделил на функциональные группы по удобству использования; иногда прерывал и начинал сначала, когда программа занимала уже много места (лишь для удобства), хотя ничто не ограничивало их "расти" и дальше. В итоге получилось 7 программ, две последние из которых нефункциональны по своей структуре.
В приведённом файле можно посмотреть эти программы.
https://yadi.sk/i/TZBWu7PdmWDyK
Впоследствии, чтобы достать эти файлы, подключил этот HDD вторым к системе Windows 2000 на том же компьютере. Затем скопировал программы на флешку 1 Gb через USB. С флешки переписал в Windows Vista.
Сменил расширение файлов на *.txt, затем из программы WordPad открыл их как текстовые файлы MS-DOS и сохранил как текстовые файлы Windows. Ну а дальше в Word и в документ.
Теперь настало время думать, какую книгу читать следующей.
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 07 января 2016 04:38 #11
Очередная книга – А.Г. Юркин, "Задачник по программированию", 2002 г. От теории перехожу к практике. Поскольку Turbo C не нужен, сделал только 5 задач. Критерии отбора задач такие: исходными данными служат три (или меньше) целых числа. Все задачи из первого раздела "Линейные алгоритмы". Но алгоритмы всё равно получились нелинейными. Но рабочими.
Скачать документ для печати можно здесь: https://yadi.sk/i/69OIckzemiYjr

А.Г. Юркин. "Задачник по программированию", 2002 г.

1.1. Угол 'alpha' задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развернутого, а также для отрицательных углов.

1.3. Длина отрезка задана в дюймах, 1 дюйм = 2,54 см. Перевести значение длины в метрическую систему, то есть выразить ее в метрах, сантиметрах и миллиметрах. Так, например, 21 дюйм = 0 м 53 см 3,4 мм.

1.6. Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?

1.8. За первый год производительность труда на предприятии возросла на p1%, за второй и третий - соответственно на p2% и p3%. Найти среднегодовой прирост производительности (в процентах).

1.9. Заданы три корня кубического уравнения x1, x2, x3. Найти коэффициенты этого уравнения.


[code:1]/* Задачник по программированию */
/* Язык Turbo C 2.0 */

#include <conio.h>
#include <math.h>
#include <stdio.h>

main ()
{
int aa, ab, ac; /* переменные ввода */
int ba, bb;
double da;
float ga, gb;
long ja, jb, jc;

printf ("Введите три целых числа: ");
scanf ("%i%i%i", &aa, &ab, &ac);

/* 1.1 - 1 */
da = abs (aa) + (abs (ab) + (double) abs (ac) / 60) / 60;
da = da / 180 * 3.1415926;
if (aa < 0) da = -da;
printf ("1.1. Величина угла в радианах равна %.8g.\n", da);

/* 1.3 - 2 */
ga = aa * .0254;
ba = ga * 1.0001;
ga = (ga - ba) * 100;
bb = ga * 1.0001;
ga = (ga - bb) * 10;
if (ga < 0) ga = 0;
printf ("1.3. Длина отрезка равна %i дюймов = %i м %i см %.2g мм.\n",
aa, ba, bb, ga);

/* 1.6 - 3 */
printf ("1.6. Стартовый капитал - %i руб.\n", aa);
printf ("Доходность - %i% в месяц.\n", ab);
printf ("Стоимость магазина - %i руб.\n", ac);
if (!aa) {ba = 0; goto aaa;}
ga = ac / aa;
gb = 1 + ab / 100.;
if (ga <= 0 || gb <= 0) {ba = 0; goto aaa;}
ga = log (ga) / log (gb) / 12;
ba = ga;
if (ga > ba) ba++;
aaa:
printf ("Нужная сумма будет накоплена через %i лет.\n", ba);

/* 1.8 - 4 */
ga = (1 + aa / 100.) * (1 + ab / 100.) * (1 + ac / 100.);
if (ga > 0)
gb = exp (1 / 3. * log (ga));
else
gb = 1;

gb = (gb - 1) * 100;
printf ("1.8. Среднегодовой прирост производительности %.4g%.\n", gb);

/* 1.9 - 5 */
ja = -((long) aa + ab + ac);
jb = (long) aa * ab + (long) aa * ac + (long) ab * ac;
jc = -((long) aa * ab * ac);
printf ("1.9. Кубическое уравнение: x^3 + %li x^2 + %li x + %li = 0.\n",
ja, jb, jc);

getch ();
printf ("\n\n");
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 25 января 2016 14:03 #12
Возвращаюсь обратно к учебнику "Начальный курс C и C++". Прошёл оставшиеся блоки по языку C – несколько заключительных сложных тем, темы про вывод текста в текстовом режиме и темы про вывод графики в графическом режиме. Параметры графического режима: VGA 640x480, 16 colors.
Почитать программы можно здесь: https://yadi.sk/i/c3x1x6zpnhx8r
Единственное, что я не прошёл – тему про структуры и объединения. Это тоже входит в C.

Дополнительно к уже созданному диску 100 Mb сделал ещё один диск 100 Mb, куда установил "Borland C++ 3.1". Все программы на C реализовал там. Отличие от "Turbo C 2.0" в том, что буковки стали цветные. Там оконная среда, позволяющая открывать сразу несколько файлов; кроме того, среда распознаёт ключевые слова, идентификаторы, строки препроцессора и комментарии, выделяя их специальным цветом.
Работать намного приятнее. И самое главное – не тормозит в отличие от Windows.
К сожалению, что-то в компьютере не так, и после выхода из этой среды компьютер перестаёт воспринимать клавиатуру. Может, потому что она USB? В общем, приходится после выхода либо нажимать <Reset>, либо выключать компьютер.

[code:1]/* p150 - программы работы с текстом */

#include <conio.h>

main ()
{
int a, b;
char d [288];
char *e = " Это строка ! ";
char f;

clrscr ();
textmode (C80);
for (a = BLUE; a <= WHITE; a++)
{
textcolor (a);
for (b = BLACK; b <= LIGHTGRAY; b++)
{
textbackground (b);
cprintf (" ТЕСТ ");
}
}

getch ();
textcolor (WHITE | BLINK);
textbackground (BLACK);
cprintf (" КОНЕЦ ТЕКСТА ");
textmode (LASTMODE);
getch ();

textbackground (BLACK);
window (5, 5, 20, 10);
textattr ((GREEN << 4) + RED);
clrscr ();
getch ();

cputs ("\n Привет, мир.\n\n\r");
cputs ("Нажмите любую клавишу.");
getch ();

window (1, 1, 80, 25);
gettext (4, 4, 21, 11, d);
textbackground (BLUE);
textcolor (WHITE);
for (f = 1; f < 23; f++)
{
gotoxy (1, f);
cputs (e);
cputs (e);
cputs (e);
cputs (e);
}

getch ();
puttext (24, 5, 41, 12, d);
getch ();
for (f = 1; f < 5; f++) movetext (22, 4, 32, 8, 10 * f, 17);
getch ();
normvideo ();
return 0;
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 16 марта 2016 15:47 #13
Среда программирования IDE, или тайная лаборатория алхимика. Состав: MS-DOS + Turbo C.




Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 17 марта 2016 05:08 #14
Программа, которая строит трёхмерные графики функций.
f1 = 3 * x * x / (5 * y * y)
f2 = x * x / (y * y)
f3 = y - x * x / (y * y)
f4 = (6xy + 3 * x * x * y * y) / (7x - 12y)

Скриншоты:








Программа:
[code:1]/* p5
Алгебра
Язык Turbo C 2.0 */

#include <conio.h>
#include <graphics.h>
#include <stdio.h>

ga (); /* рисует оси 3D-координат */
gb (int, int, float, int, int, float); /* рисует линию в трехмерном пространстве */
float ha (float, float); /* функция, для которой строится график */
float hb (float, float);
float hc (float, float);
float hd (float, float);



main ()
{
int aa, ab;
float da, db, dc, dd;

detectgraph (&aa, &ab);
initgraph (&aa, &ab, "");
ga (); /* 1 */
db = 0;

for (aa = -640; aa < 0; aa += 10)
for (ab = -640; ab < 0; ab++)
{
da = ha (aa / 50., ab / 50.) * 50;
if (da > 1000) da = 1000;
if (da < -1000) da = -1000;
if (ab > -640) gb (aa, ab - 1, db, aa, ab, da);
db = da;
}

getch ();
ga (); /* 2 */
for (aa = -640; aa < 640; aa += 10)
for (ab = -640; ab < 0; ab++)
{
da = hb (aa / 50., ab / 50.) * 50;
if (da > 1000) da = 1000;
if (da < -1000) da = -1000;
if (ab > -640) gb (aa, ab - 1, db, aa, ab, da);
db = da;
}

getch ();
ga (); /* 3 */
for (aa = -100; aa < -9; aa += 10)
for (ab = 10; ab < 101; ab++)
{
da = hc (aa / 50., ab / 50.) * 50;
if (da > 1000) da = 1000;
if (da < -1000) da = -1000;
if (ab > 10) gb (aa, ab - 1, db, aa, ab, da);
db = da;
}

for (ab = 10; ab < 101; ab += 10)
for (aa = -100; aa < -9; aa++)
{
da = hc (aa / 50., ab / 50.) * 50;
if (da > 1000) da = 1000;
if (da < -1000) da = -1000;
if (aa > -100) gb (aa - 1, ab, db, aa, ab, da);
db = da;
}

getch ();
ga (); /* 4 */
for (aa = -640; aa < 640; aa += 10)
for (ab = -640; ab < 640; ab++)
{
dc = aa / 50.;
dd = ab / 50.;
if (7 * dc - 12 * dd >= 0) da = -1000; else da = hd (dc, dd) * 50;

if (da > 1000) da = 1000;
if (da < -1000) da = -1000;
if (ab > -640 && db > -200) gb (aa, ab - 1, db, aa, ab, da);
db = da;
}

getch ();
closegraph ();
}



ga () /* рисует оси 3D-координат */
{
cleardevice ();
setcolor (8);
line (320, 240, 640, 80);
line (320, 240, 0, 80);
setcolor (15);
line (320, 240, 640, 400);
line (320, 240, 0, 400);
line (320, 240, 320, 0);
setcolor (7);
}

gb (int a, int b, float c, int d, int e, float f)
{
line (320 - a + b, 240 + (a + b) / 2. - c,
320 - d + e, 240 + (d + e) / 2. - f);
}

float ha (float a, float b) {return 3 * a * a / 5 / b / b;}
float hb (float a, float b) {return a * a / b / b;}
float hc (float a, float b) {return b - a * a / b / b;}

float hd (float a, float b)
{
return (6 * a * b + 3 * a * a * b * b) / (7 * a - 12 * b);
}[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Дата: 23 марта 2016 16:47 #15
Построил график функции z = x / y.
Скачать программу, её текст и скриншот: https://yadi.sk/d/BpCajMpwqRPvp
Системные требования: Win32. Но вы всё равно не сможете её запустить, потому что ей требуется dll-библиотека, а у вас её нет.
Скриншот программы под Windows 95:

[code:1]Rem p8
Rem p8 - task 3 - book 1
Rem Язык Visual Basic 5.0

Option Explicit

Rem ba - координата x, bb - координата y, bc - ширина графика
Rem bd - масштаб графика
Dim ba, bb, bc, bd As Integer
Rem Координаты линии в 3D: (ea, eb, ec) - (ed, ee, ef)
Dim ea, eb, ec, ed, ee, ef As Single

Rem Рисование системы координат
Function ga()
Cls
Line (ba, bb)-(ba - bc, bb - bc / 2), QBColor(8)
Line (ba, bb)-(ba + bc, bb - bc / 2), QBColor(8)
Line (ba, bb)-(ba, bb - bc), QBColor(15)
Line (ba, bb)-(ba - bc, bb + bc / 2), QBColor(15)
Line (ba, bb)-(ba + bc, bb + bc / 2), QBColor(15)
End Function

Rem Рисование линии в 3D-координатах
Function gb()
Line (ba - ea + eb, bb + (ea + eb) / 2# - ec)- _
(ba - ed + ee, bb + (ed + ee) / 2# - ef), QBColor(14)
End Function

Rem Функция, график которой надо построить
Function ha(a As Single, b As Single)
ha = a / b
End Function

Private Sub Form_Load()
ba = 400: bb = 400: bc = 380: bd = 50
End Sub

Private Sub Form_Paint()
Dim a, b As Integer
Dim c, d As Single

ga
For a = -bc To bc Step 10
For b = -bc To bc
If b = 0 Then GoTo aaa
c = ha(a / CSng(bd), b / CSng(bd)) * bd
If b > -bc And b <> 1 Then
ea = a: eb = b: ec = c: ed = a: ee = b - 1: ef = d
gb
End If
d = c
aaa:
Next
Next
End Sub[/code:1]
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Чтобы писать в форуме, нужно войти.
Вход