Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Чт Май 07, 2015 5:34 pm Заголовок сообщения: Программирование |
|
|
Я (посадил дерево) написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)
Ещё там работают клавиши <Backspace> и <Enter>.
Прошу заценить.
https://yadi.sk/d/bmwYbfm-gVCDs
У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция... _________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Вс Май 31, 2015 8:31 am Заголовок сообщения: |
|
|
Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:
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);
} |
_________________ |
|
Вернуться к началу |
|
|
derete
Новичок Рега: 17.08.2014 Сообщения: 1
|
Добавлено: Пн Июн 01, 2015 8:12 pm Заголовок сообщения: |
|
|
jura_k писал(а): |
Код: |
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)
|
|
|
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Июн 01, 2015 9:25 pm Заголовок сообщения: |
|
|
А как правильно? Мне в жизни никто не показывал. Программисты проходят стороной вне поля моего зрения. Пишу, как могу! _________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Вт Июн 02, 2015 4:55 pm Заголовок сообщения: |
|
|
У меня уже фантазии не хватает каждый раз придумывать имена переменным. Учитывая, что этих программ в моей жизни было несколько сотен. А может, и тысяча. Для меня эти переменные как одинаковые солдаты. _________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Сб Июн 13, 2015 8:53 pm Заголовок сообщения: |
|
|
Вот программа, в которую можно ввести с клавиатуры рациональное число. Скачать:
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);
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Июн 29, 2015 9:52 am Заголовок сообщения: |
|
|
Очередной шедевр программирования.
Код: | 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);
}
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пт Июл 24, 2015 8:14 am Заголовок сообщения: |
|
|
Свершилось! Я решил 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);
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Ср Июл 29, 2015 6:24 am Заголовок сообщения: |
|
|
Читаю книжку по языку C. Иногда там попадаются примеры, которые не являются законченными программами. Я их скомпоновал в один файл.
Код: | /* 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);
}
|
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Сб Дек 26, 2015 4:56 pm Заголовок сообщения: |
|
|
В двадцатый раз стал читать книгу 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 и в документ.
Теперь настало время думать, какую книгу читать следующей. _________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Чт Янв 07, 2016 7:38 am Заголовок сообщения: |
|
|
Очередная книга – А.Г. Юркин, "Задачник по программированию", 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. Найти коэффициенты этого уравнения. |
Код: | /* Задачник по программированию */
/* Язык 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");
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Янв 25, 2016 5:03 pm Заголовок сообщения: |
|
|
Возвращаюсь обратно к учебнику "Начальный курс 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>, либо выключать компьютер.
Код: | /* 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;
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Ср Мар 16, 2016 6:47 pm Заголовок сообщения: |
|
|
Среда программирования IDE, или тайная лаборатория алхимика. Состав: MS-DOS + Turbo C.
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Чт Мар 17, 2016 8:08 am Заголовок сообщения: |
|
|
Программа, которая строит трёхмерные графики функций.
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)
Скриншоты:
Программа:
Код: | /* 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);
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Ср Мар 23, 2016 7:47 pm Заголовок сообщения: |
|
|
Построил график функции z = x / y.
Скачать программу, её текст и скриншот: https://yadi.sk/d/BpCajMpwqRPvp
Системные требования: Win32. Но вы всё равно не сможете её запустить, потому что ей требуется dll-библиотека, а у вас её нет.
Скриншот программы под Windows 95:
Код: | 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 |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Сб Апр 02, 2016 10:10 am Заголовок сообщения: |
|
|
Программа построения графика в трёхмерных координатах. Для простоты выбрана функция z = x / y. Управление: поворот графика влево-вправо, вверх-вниз, возврат на место и выход.
Скачать программу, скриншоты и текст программы можно тут: https://yadi.sk/d/i2-Z07Qjqg6bn
Программа написана под MS-DOS. Чтобы снять скриншоты, я запустил её под Windows 95. Для того, чтобы скопировать все материалы сюда (через флешку), я запустил Windows 2000.
Системные требования: 286 и выше, VGA.
Специально для вас я увеличил число комментариев в программе, так что можно считать её документированной.
Скриншоты:
То же самое, вид сверху:
Немного повернул график вправо:
Код: | /* p6
Алгебра: построение графика 3D-функции
Язык Turbo C 2.0 */
#include <bios.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
float ga, gb, gc; /* вектор ориентации в пространстве осей системы координат - определяющий вектор, ось Oz */
float gd, ge, gf; /* ось Ox в 3D */
float gg, gh, gi; /* ось Oy в 3D */
int ha; /* флаг рисования отрезка в 3D:
ha = 0; - не рисовать
ha = 1; - первая точка отрезка
ha = 2; - вторая точка отрезка */
da (); /* рисование системы 3D-координат и графика */
db (float, float, float, float, float, float); /* рисование линии в трехмерном пространстве */
dc (); /* рисование 3D-графика */
float ea (float, float); /* функция, график которой надо построить */
main ()
{
int aa, ab;
float ja, jb;
detectgraph (&aa, &ab);
initgraph (&aa, &ab, "");
ga = gb = gc = 1;
while (1)
{
da ();
aa = bioskey (0);
if (aa == 0x11b) /* выход из программы <Esc> */
{
closegraph ();
return 0;
}
if (aa == 0x4b00) /* смещение наблюдателя влево <Left arrow> */
{
ja = ga * cos (.1) + gb * sin (.1);
jb = -ga * sin (.1) + gb * cos (.1);
ga = ja;
gb = jb;
}
if (aa == 0x4d00) /* смещение наблюдателя вправо <Right arrow> */
{
ja = ga * cos (.1) - gb * sin (.1);
jb = ga * sin (.1) + gb * cos (.1);
ga = ja;
gb = jb;
}
if (aa == 0x4800) /* смещение наблюдателя вверх <Up arrow> */
{
ga += gd * sin (.1);
gb += ge * sin (.1);
gc += gf * sin (.1);
}
if (aa == 0x5000) /* смещение наблюдателя вниз <Down arrow> */
{
ga -= gd * sin (.1);
gb -= ge * sin (.1);
gc -= gf * sin (.1);
}
if (aa == 0x3b00) /* возврат в исходную точку наблюдения <F1> */
{
ga = gb = gc = 1;
gg = 1; gh = gi = 0;
}
}
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Июл 04, 2016 3:04 pm Заголовок сообщения: |
|
|
А.Г. Юркин, "Задачник по программированию". 2002 г. ("Юркин задачник")
Часть III. Прикладные математические задачи.
Глава 7. Арифметика. Страница 77, задача 7.1.
Натуральное число в p-ичной системе счисления задано своими цифрами, хранящимися в массиве K (n). Проверить корректность такого представления и перевести число в q-ичную систему (возможно, число слишком велико, чтобы получить его внутреннее представление; кроме того, p ≤ 10, q ≤ 10).
Скачать программу, её текст и скриншоты:
https://yadi.sk/d/4YZGX3LgsyqyX
Программа совместима с MS-DOS, Windows 95, Windows 2000, Windows Vista 32-bit.
Скриншоты:
----------------------------------------
D:\>cd work
D:\WORK>dir
Volume in drive D has no label
Volume Serial Number is 0C6D-11F0
Directory of D:\WORK
. <DIR> 06-26-16 10:34a .
.. <DIR> 06-26-16 10:34a ..
EGAVGA BGI 5,554 02-18-92 3:00a EGAVGA.BGI
TC BAT 12 06-26-16 10:34a TC.BAT
TCPICK TCP 1,196 07-04-16 1:10p TCPICK.TCP
TCCONFIG TC 1,690 06-26-16 11:03a TCCONFIG.TC
P77 BAK 2,552 07-04-16 1:01p P77.BAK
P77 C 2,720 07-04-16 1:05p P77.C
DONE-1 <DIR> 06-30-16 9:49a DONE-1
P77A C 861 07-01-16 7:40a P77A.C
P77B C 1,800 07-02-16 6:25p P77B.C
P77 OBJ 1,974 07-04-16 1:05p P77.OBJ
P77 EXE 16,907 07-04-16 1:05p P77.EXE
10 file(s) 35,266 bytes
3 dir(s) 104,294,400 bytes free
D:\WORK>
----------------------------------------
P77 EXE 16,907 07-04-16 1:05p P77.EXE
10 file(s) 35,266 bytes
3 dir(s) 104,294,400 bytes free
D:\WORK>p77
Основание первой системы счисления: 6.
Исходное число:
305003355353403410124202243510302244255011321340001513332510022524343343
Промежуточное число в десятичной системе счисления:
000000000000000055664707093046964168171692001782840499583747901638733679
Основание второй системы счисления: 9.
Конечное число:
24521055280543813208204360708881333086022846352066040662160
D:\WORK>p77
Основание первой системы счисления: 10.
Исходное число:
5226524812744766010775243555714506442709497767068114642959602539897612
Промежуточное число в десятичной системе счисления:
5226524812744766010775243555714506442709497767068114642959602539897612
Основание второй системы счисления: 8.
Конечное число:
140734644037735311255677172054235673252536724056404004567741205054231626221414
----------------------------------------
Текст программы:
Код: | /* p77
Язык Turbo C 2.0
Задачник по программированию
Системы счисления */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main ()
{
int a [100]; /* исходный массив данных */
int b [100]; /* промежуточный массив данных в десятичной системе счисления */
int c [100]; /* вспомогательный массив данных */
int d [400]; /* целевой массив данных */
int f; /* основание первой системы счисления */
int g; /* основание второй системы счисления */
int h; /* число цифр исходного числа */
int k, l, m, n;
randomize ();
f = rand () % 9 + 2;
g = rand () % 9 + 2;
h = rand () % 100 + 1;
for (k = 0; k < 100; k++) a [k] = b [k] = c [k] = 0;
for (k = 0; k < 400; k++) d [k] = 0;
for (k = 0; k < h; k++) a [k] = b [k] = rand () % f;
printf ("Основание первой системы счисления: %i.\n", f);
printf ("Исходное число:\n");
for (k = h - 1; k >= 0; k--) printf ("%i", a [k]);
printf ("\n");
for (k = 0; k < h - 1; k++)
{
/* Домножаем на основание системы счисления со сдвигом влево */
for (l = 0; l <= k; l++)
c [h - 2 - l] = b [h - 1 - l] * f;
/* Складываем с предыдущим разрядом */
c [h - 2 - k] += b [h - 2 - k];
/* Переносим десятки в следующий разряд */
for (l = k; l >= 0; l--)
{
m = c [h - 2 - l];
c [h - 2 - l] = m % 10;
c [h - 1 - l] += m / 10;
}
/* Переносим данные вверх */
for (l = k; l >= -1; l--)
{
b [h - 2 - l] = c [h - 2 - l];
c [h - 2 - l] = 0;
}
}
printf ("Промежуточное число в десятичной системе счисления:\n");
for (k = h - 1; k >= 0; k--) printf ("%i", b [k]);
printf ("\n");
n = 0; /* указатель в целевом массиве данных на заполняемую ячейку данных */
while (1)
{
l = 0; /* остаток от деления предыдущего разряда */
for (k = 0; k < h; k++)
{
m = l * 10 + b [h - 1 - k];
c [h - 1 - k] = m / g;
l = m % g;
}
d [n++] = l; /* заносим остаток от деления в целевой массив данных */
m = 0;
for (k = 0; k < h; k++) /* переносим результат деления вверх для следующего цикла */
{
b [k] = c [k];
if (b [k]) m = 1; /* флаг наличия ненулевых значений в массиве */
}
if (!m) break; /* расчет окончен */
}
printf ("Основание второй системы счисления: %i.\n", g);
printf ("Конечное число:\n");
for (k = n - 1; k >= 0; k--) printf ("%i", d [k]);
printf ("\n");
getch ();
printf ("\n");
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Ср Июл 13, 2016 12:44 pm Заголовок сообщения: |
|
|
Очередной задачник по программированию. Задача:
В написанном выражении
((((1 ? 2) ? 3) ? 4) ? 5) ? 6
вместо каждого знака ? вставить знак одного из четырёх арифметических действий: +, -, *, / так, чтобы результат вычислений равнялся 35.
Автор объяснил словами, как эта задача решается. Но что-то мне это решение не нравится. Например:
"Рассмотрим программу, начиная с метки R. Здесь отыскивается первый член ai в последовательности an, a(n-1), ..., a2, не равный 4. Он увеличивается на 1, а все предыдущие полагаются равными 1."
И так далее.
По-моему, слишком заморочено. А как же "наглядность программ"? Я пытался сотворить нечто подобное, но как-то запутался и желание программировать дальше пропало.
Мы пойдём другим путём.
Автор дал программу, но она на Паскале, а я Паскаль с трудом понимаю. И ответа не дал. Поэтому я сделал всё то же самое, но по-другому.
Код: | // p2.cpp : Defines the entry point for the console application.
// Язык Visual C++ 7.0
// Консольное приложение
#include "stdafx.h"
#include <conio.h>
int aa (int, int, int);
void ab (int);
int _tmain(int argc, _TCHAR* argv[])
{
int a, b, c, d, e;
int f;
for (a = 0; a < 4; a++)
for (b = 0; b < 4; b++)
for (c = 0; c < 4; c++)
for (d = 0; d < 4; d++)
for (e = 0; e < 4; e++)
{
f = aa (1, a, 2);
f = aa (f, b, 3);
f = aa (f, c, 4);
f = aa (f, d, 5);
f = aa (f, e, 6);
if (f == 35)
{
printf ("((((1 "); ab (a);
printf ("2) "); ab (b);
printf ("3) "); ab (c);
printf ("4) "); ab (d);
printf ("5) "); ab (e);
printf ("6 = 35.\n");
}
}
getch ();
return 0;
}
int aa (int a, int b, int c)
{
switch (b)
{
case 0: return a + c;
case 1: return a - c;
case 2: return a * c;
case 3: return a / c;
}
return 0;
}
void ab (int a)
{
switch (a)
{
case 0: printf ("+ "); break;
case 1: printf ("- "); break;
case 2: printf ("* "); break;
case 3: printf ("/ "); break;
}
} |
Ответ:
((((1 + 2) + 3) * 4) + 5) + 6 = 35.
((((1 + 2) * 3) * 4) + 5) - 6 = 35.
((((1 * 2) * 3) * 4) + 5) + 6 = 35. _________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Вт Авг 23, 2016 5:32 am Заголовок сообщения: |
|
|
Арифметика длинных целых чисел.
Дано:
9 500 000 000 000 000 000 000 000
1 983 000 000 000 000 000 000 000 000 000 000
Перемножить.
Вот что выдаёт программа:
9 500 000 000 000 000 000 000 000
1 983 000 000 000 000 000 000 000 000 000 000
18 838 500 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
Код: | /* p8
Язык Turbo C 2.0
Арифметика длинных чисел */
#include <conio.h>
#include <stdio.h>
main ()
{
int a [100], b, c;
int d [100], e, f;
int g [100], h, i;
/* число; число значащих цифр; число нулей */
int j, k;
/* начальные данные */
for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
a [0] = 9; a [1] = 5; b = 2; c = 23;
d [0] = 1; d [1] = 9; d [2] = 8; d [3] = 3; e = 4; f = 30;
/* печатаем первое число */
for (j = 0; j < b + c; j++)
{
printf ("%i", a [j]);
k = b + c - j - 1;
if (k % 3 == 0 && k) printf (" ");
}
/* печатаем второе число */
printf ("\n");
for (j = 0; j < e + f; j++)
{
printf ("%i", d [j]);
k = e + f - j - 1;
if (k % 3 == 0 && k) printf (" ");
}
/* перемножаем числа */
for (j = 0; j < b; j++)
for (k = 0; k < e; k++)
g [j + k + 1] += a [j] * d [k];
h = b + e;
i = c + f;
/* складываем десятки с единицами из соседних разрядов */
for (j = h - 1; j; j--)
{
g [j - 1] = g [j - 1] + g [j] / 10;
g [j] = g [j] % 10;
}
/* проверяем, является ли первая цифра значащей или нет */
if (g [0] == 0)
{
for (j = 0; j < h - 1; j++) g [j] = g [j + 1];
g [h - 1] = 0;
h--;
}
/* печатаем третье число */
printf ("\n");
for (j = 0; j < h + i; j++)
{
printf ("%i", g [j]);
k = h + i - j - 1;
if (k % 3 == 0 && k) printf (" ");
}
printf ("\n");
getch ();
printf ("\n");
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Вс Авг 28, 2016 8:32 am Заголовок сообщения: |
|
|
Всё то же самое, но другим макаром.
Код: | /* p9
Язык Turbo C
Арифметика длинных целых чисел */
#include <conio.h>
#include <stdio.h>
int aa [100], ab, ac;
int ba [100], bb, bc;
int ca [100], cb, cc;
da (); /* печать первого числа */
db (); /* печать второго числа */
dc (); /* печать третьего числа */
dd (); /* ca = aa * ba */
main ()
{
int a;
for (a = 0; a < 100; a++) aa [a] = ba [a] = ca [a] = 0;
aa [0] = 9; aa [1] = 5; ab = 2; ac = 23;
ba [0] = 1; ba [1] = 9; ba [2] = 8; ba [3] = 3; bb = 4; bc = 30;
dd ();
da ();
db ();
dc ();
getch ();
printf ("\n");
}
da ()
{
int a, b;
for (a = 0; a < ab + ac; a++)
{
printf ("%i", aa [a]);
b = ab + ac - a - 1;
if (b % 3 == 0 && b) printf (" ");
}
printf ("\n");
}
db ()
{
int a, b;
for (a = 0; a < bb + bc; a++)
{
printf ("%i", ba [a]);
b = bb + bc - a - 1;
if (b % 3 == 0 && b) printf (" ");
}
printf ("\n");
}
dc ()
{
int a, b;
for (a = 0; a < cb + cc; a++)
{
printf ("%i", ca [a]);
b = cb + cc - a - 1;
if (b % 3 == 0 && b) printf (" ");
}
printf ("\n");
}
dd ()
{
int a, b;
for (a = 0; a < ab; a++)
for (b = 0; b < bb; b++)
ca [a + b + 1] += aa [a] * ba [b];
cb = ab + bb;
cc = ac + bc;
for (a = cb - 1; a; a--)
{
ca [a - 1] = ca [a - 1] + ca [a] / 10;
ca [a] = ca [a] % 10;
}
if (ca [0] == 0)
{
for (a = 0; a < cb - 1; a++) ca [a] = ca [a + 1];
ca [cb - 1] = 0;
cb--;
}
} |
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Чт Сен 22, 2016 6:59 pm Заголовок сообщения: |
|
|
2. Решить квадратное уравнение.
6. Решить биквадратное уравнение.
Код: | /* p11
Язык Turbo C
Основы программирования
Теория. Задачи */
/* p11 (15k), p13 (22k), p16, p18, p19 (23k)
p21 (24k), p53 (25k), p54, p55 */
#include <conio.h>
#include <math.h>
#include <stdio.h>
j (); /* Решение - любое число. */
k (); /* Решений нет. */
l (float); /* Один корень. */
m (float, float); /* Два корня. */
n (int, int); /* n = a ^ b. */
o (float, float, float); /* Три корня. */
p (float, float, float, float); /* Четыре корня. */
main ()
{
int a, b, c, d;
int g, h;
float s, t;
printf ("Введите четыре целых числа: ");
scanf ("%i%i%i%i", &a, &b, &c, &d);
printf ("p13 - 2. ");
if (a == 0)
if (b == 0)
if (c == 0) j (); else k ();
else
l ((float) -c / b);
else
{
g = b * b - 4 * a * c;
if (g < 0) k (); else
if (g == 0)
l (-b / 2. / a);
else
m ((-b + sqrt (g)) / 2 / a, (-b - sqrt (g)) / 2 / a);
}
printf ("p21 - 6. ");
if (a == 0)
if (b == 0)
if (c == 0) j (); else k ();
else
{
s = (float) -c / b;
if (s < 0) k (); else if (s == 0) l (0); else m (sqrt (s), -sqrt (s));
}
else
{
g = b * b - 4 * a * c;
if (g < 0) k (); else
if (g == 0)
{
s = -b / 2. / a;
if (s < 0) k (); else if (s == 0) l (0); else m (sqrt (s), -sqrt (s));
}
else
{
s = (-b + sqrt (g)) / 2 / a;
t = (-b - sqrt (g)) / 2 / a;
if (s < 0)
if (t < 0) k (); else if (t == 0) l (0); else m (-sqrt (t), sqrt (t));
else
if (s == 0)
if (t < 0) l (0); else o (-sqrt (t), 0, sqrt (t));
else
if (t < 0)
m (-sqrt (s), sqrt (s));
else
if (t == 0)
o (-sqrt (s), 0, sqrt (s));
else
p (-sqrt (s), -sqrt (t), sqrt (t), sqrt (s));
}
}
getch ();
printf ("\n");
}
j () {printf ("Решение - любое число.\n");}
k () {printf ("Решений нет.\n");}
l (float a) {printf ("x = %.4g.\n", a);}
m (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
o (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
p (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);} |
_________________ |
|
Вернуться к началу |
|
|
Roman_cat_Marcus
Пол: Заядлый Рега: 23.09.2012 Сообщения: 1815
|
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Ср Ноя 30, 2016 11:23 am Заголовок сообщения: |
|
|
Да я учебник читаю "Основы программирования". Вижу задачу. Присваиваю ей порядковый номер из головы и решаю.
Потом решаю, что надо было решать по-другому. Всё стираю и снова начинаю решать.
И так по кругу. Добрался до 80-ой страницы учебника, снова начал.
Удаление файлов в MS-DOS производится очень просто, без всякой корзины. Есть команда del. _________________ |
|
Вернуться к началу |
|
|
Roman_cat_Marcus
Пол: Заядлый Рега: 23.09.2012 Сообщения: 1815
|
Добавлено: Ср Ноя 30, 2016 1:24 pm Заголовок сообщения: |
|
|
Цитата: | Удаление файлов в MS-DOS |
MS-DOS это не то чем стоит хвастаться ) _________________O tempora, o mores!
"Разброс" это фрагментированная линейность.
Miraculous LadyBug |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Сб Дек 03, 2016 12:54 pm Заголовок сообщения: |
|
|
Будни программиста
_________________ |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Дек 19, 2016 6:18 am Заголовок сообщения: |
|
|
В очередной раз решил все те же задачи из задачника. Новая редакция.
В этой программе сгруппированы задачи, которым для работы нужно либо 6 чисел, либо одно рациональное число.
Код: | /* p11
Язык Turbo C 2.0
Основы программирования
Переменные: int - 6, float - 1 */
/* 1 - 21k, 2 - 22k, 3 - 23k, 5 - 24k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
float p (int, int, int, int); /* расстояние между двумя точками на плоскости */
float q (float, float, float); /* формула Герона */
main ()
{
int a, b, c, d, e, f; /* исходные данные */
float g; /* исходные данные */
float j, k, l, m;
int s, t, u, v;
printf ("Введите шесть целых чисел: ");
scanf ("%i%i%i%i%i%i", &a, &b, &c, &d, &e, &f);
printf ("Введите рациональное число: ");
scanf ("%f", &g);
/* 11.1.1. */
printf ("1. %i / %i / (%i / %i) = %i / %i.\n", a, b, c, d, a * d, b * c);
/* 21.1.6. Даны декартовы координаты трех вершин треугольника на
плоскости. Составить алгоритм определения площади треугольника. */
j = p (a, b, c, d);
k = p (a, b, e, f);
l = p (c, d, e, f);
m = q (j, k, l);
printf ("2. Площадь треугольника %.4g.\n", m);
/* 21.2.7. Дана скорость ракеты при выходе за пределы атмосферы Земли.
Составить алгоритм определения того, как будет двигаться ракета после
выключения двигателей. (Напомним величины трех космических скоростей:
7,5 км/с; 11,2 км/с; 16,4 км/с.) */
printf ("3. ");
if (g < 7.5) printf ("Ракета упадет на Землю.\n");
else if (g == 7.5) printf ("Ракета будет двигаться по круговой орбите вокруг Земли.\n");
else if (g < 11.2) printf ("Ракета будет двигаться вокруг Земли по эллипсу.\n");
else if (g == 11.2) printf ("Ракета улетит от Земли по параболе.\n");
else if (g < 16.4) printf ("Ракета будет двигаться вокруг Солнца по эллипсу.\n");
else if (g == 16.4) printf ("Ракета улетит от Солнца по параболе.\n");
else printf ("Ракета улетит от Солнца по гиперболе.\n");
/* 64.2.28. В следующем фрагменте программы вычисляется сумма конечного
числа членов гармонического ряда
1 + 1 / 2 + 1 / 3 + ... + 1 / i + ...
Суммирование прекращается, когда очередное слагаемое становится меньше
epsilon или целая переменная i достигает значения maxint. */
j = 0;
s = 1;
while (1)
{
k = 1. / s;
if (k < g) break;
j += k;
if (s == 32767) break;
s++;
}
printf ("4. Сумма гармонического ряда равна %.4g.\n", j);
/* 68.4.32. Вычислить сумму квадратов всех целых чисел, попадающих в
интервал (ln x, exp x). */
j = g > 0 ? g : 1;
k = log (j);
l = exp (j);
s = k;
if (s <= k) s++;
t = l;
if (t == l) t--;
u = 0;
for (v = s; v < t + 1; v++) u += v * v;
printf ("5. Сумма квадратов целых чисел %i.\n", u);
getch ();
printf ("\n");
}
float p (int a, int b, int c, int d)
{
int e;
e = (a - c) * (a - c) + (b - d) * (b - d);
if (e < 0) e = 0;
return sqrt (e);
}
float q (float a, float b, float c)
{
float d, e;
d = (a + b + c) / 2;
e = d * (d - a) * (d - b) * (d - c);
if (e < 0) e = 0;
return sqrt (e);
} |
_________________ |
|
Вернуться к началу |
|
|
Roman_cat_Marcus
Пол: Заядлый Рега: 23.09.2012 Сообщения: 1815
|
Добавлено: Пн Дек 19, 2016 10:57 am Заголовок сообщения: |
|
|
Цитата: | В очередной раз решил все те же задачи из задачника. Новая редакция. |
А ты попробуй новые задачки решать и посложнее. А то как взрослый дядя с игрушками для маленьких. _________________O tempora, o mores!
"Разброс" это фрагментированная линейность.
Miraculous LadyBug |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Дек 19, 2016 2:09 pm Заголовок сообщения: |
|
|
Да всё никак не удаётся дойти до конца учебника!
Дебилизма много, как ухабы на просёлочной дороге.
Она ж под MS-DOS, а какой смысл мне это учить, когда всё под Windows уже 20 лет?
Добавлено спустя 1 минуту 29 секунд:
А серьёзные задачки там есть, но они в конце и всего 2 штуки. Там все задачи вот такие.
Вот я и свалил их в кучу, чтобы не писать 100 мелких программ. _________________ |
|
Вернуться к началу |
|
|
Roman_cat_Marcus
Пол: Заядлый Рега: 23.09.2012 Сообщения: 1815
|
Добавлено: Пн Дек 19, 2016 4:15 pm Заголовок сообщения: |
|
|
Цитата: | Она ж под MS-DOS, а какой смысл мне это учить, когда всё под Windows уже 20 лет? |
Это ты меня спрашиваешь?
Это я тебя должен спросить!
Я в этом не профи, но писал штуки посложнее твоего. Допустим какулькулятор с нуля без всяких учебников.
Хочешь в этом двигаться - разберись какой язык программирования ходовой и изучай его.
А дося, это, извини, пора было уже давным давно забыть. _________________O tempora, o mores!
"Разброс" это фрагментированная линейность.
Miraculous LadyBug |
|
Вернуться к началу |
|
|
jura_k
Пол: Возраст: 48 Постоянный гость Рега: 02.02.2013 Сообщения: 451
|
Добавлено: Пн Дек 19, 2016 4:42 pm Заголовок сообщения: |
|
|
С тех пор, как MS-DOS вышел из употребления, было изобретено 20 языков. Который из них мне учить? Глаза разбегаются.
Мне всё равно.
"Пока свободою горим,
Пока сердца для чести живы -
Мой друг, Отчизне посвятим
ДУШИ ПРЕКРАСНЫЕ ПОРЫВЫ!" _________________ |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы не можете скачивать файлы в этом форуме
|
|