Версия для печати темы
Форум Точек.нет - общение без границ ! _ Программирование _ C++
Автор: jura_k 31.03.2015 - 15:50
Я ввёл число с клавиатуры.
» Кликните сюда для просмотра оффтоп текста.. «
Пишу программу на Visual C++ 6 под Windows 2000.
Создал MFC-приложение. В объекте документа создал строку символов. Из обработчика нажатий клавиш сформировал текстовую строку, которую по нажатию клавиши <Enter> отправил на обработку специальной функции. Эта функция посимвольно (!) разобрала строку и скомбинировала числовое её выражение (целое число).
Для проверки полученное число представлено как текст встроенной функцией, который затем выведен на экран в объекте вида через объект класса CString.
Ну и что, что на написание этого мне понадобилось 15 лет? В учебнике этого не было.
Неандертальцы вон сколько тысячелетий не могли огонь разжечь.
Автор: jura_k 7.05.2015 - 17:24
Я посадил дерево написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)
Ещё там работают клавиши <Backspace> и <Enter>.
Прошу заценить.
https://yadi.sk/d/bmwYbfm-gVCDs
У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция...
Автор: jura_k 31.05.2015 - 14:46
Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:
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);
}
Автор: jura_k 29.06.2015 - 9:24
Очередной шедевр программирования.
» Кликните сюда для просмотра оффтоп текста.. «
Код
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);
}
}
Автор: ЛеПа 29.06.2015 - 9:46
Цитата(jura_k @ 29.06.2015 - 9:34)
Очередной шедевр программирования.
» Кликните сюда для просмотра оффтоп текста.. «
Код
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 29.06.2015 - 10:36
Вот. Release-версия. Скачайте и посмотрите.
Да ничего особенного, считает учебные примеры.
У меня экран кончился; для просмотра всего содержимого разверните окно программы на весь экран, а то не поместится. Раз экран кончился – значит, пора закругляться. Вот я программу и выложил.
https://yadi.sk/d/eFzutq5XhYHUo
Автор: jura_k 24.07.2015 - 8:03
Свершилось! Я решил 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 30.07.2015 - 10:48
А вот программа под MS-DOS.
Код
/* p55
Ввод данных в программу */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
char aa;
ga (int);
main ()
{
int da, db, dc;
unsigned char ja;
char ma [80];
char *na [] = {"exe", "com", "dat", "c", "pas", "cpp"};
char pa;
goto aab;
aaa:
printf ("Введите символ: ");
aa = getche ();
printf ("\nВведите количество символов в строке: ");
scanf ("%i", &da);
ga (da);
for (;;)
{
printf ("Press any key: ");
ja = getchar (); ja = getchar ();
if (ja == 'Q') break;
printf ("%c\n", ja);
}
da = 0;
randomize ();
db = random (100) + 1;
do {
printf ("Введите число от 1 до 100: ");
scanf ("%i", &dc);
da++;
if (db < dc) printf ("Загаданное число меньше.\n");
if (db > dc) printf ("Загаданное число больше.\n");
} while (db - dc);
printf ("Вы угадали число.\n");
printf ("Затратили на угадывание %i попыток.\n", da);
printf ("Введите строку длиной менее 80 символов: ");
gets (ma); gets (ma);
printf ("Вы ввели строку \"%s\".\n", ma);
printf ("Введите ещё одну строку длиной менее 80 символов: ");
scanf ("%s", ma);
printf ("Вы ввели строку ");
puts (ma);
aab:
for (;;)
{
do {
printf ("Файлы с расширением: 1. exe; 2. com; 3. dat; 4. c; "
"5. pas; 6. cpp; 7. quit.\n");
printf ("Ваш выбор: ");
pa = getche ();
printf ("\n");
} while (pa < '1' || pa > '7');
if (pa == '7') break;
strcpy (ma, "dir *.");
strcat (ma, na [pa - '1']);
system (ma);
printf ("\n");
}
getch ();
printf ("\n\n");
}
ga (int a)
{
int b;
for (b = 0; b < a; b++) printf ("%c", aa);
printf ("\n");
}
Автор: jura_k 26.12.2015 - 16:37
В двадцатый раз стал читать книгу 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 7.01.2016 - 7:18
Очередная книга – А.Г. Юркин, "Задачник по программированию", 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 25.01.2016 - 16:56
Возвращаюсь обратно к учебнику "Начальный курс 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 16.03.2016 - 18:36
Среда программирования IDE, или тайная лаборатория алхимика. Состав: MS-DOS + Turbo C.
http://s6.uploads.ru/15oSd.jpg
http://s6.uploads.ru/7TQmA.jpg
Автор: jura_k 17.03.2016 - 8:05
Программа, которая строит трёхмерные графики функций.
f1 = 3x2 / 5y2
f2 = x2 / y2
f3 = y - x2 / y2
f4 = (6xy + 3x2y2) / (7x - 12y)
Скриншоты:
http://s3.uploads.ru/HJtzn.png
» Кликните сюда для просмотра оффтоп текста.. «
http://s2.uploads.ru/DBqHQ.png
http://s3.uploads.ru/anDGQ.png
http://s6.uploads.ru/pdzKx.png
Программа:
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* 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 2.04.2016 - 10:14
Программа построения графика в трёхмерных координатах. Для простоты выбрана функция z = x / y. Управление: поворот графика влево-вправо, вверх-вниз, возврат на место и выход.
Скачать программу, скриншоты и текст программы можно тут: https://yadi.sk/d/i2-Z07Qjqg6bn
Программа написана под MS-DOS. Чтобы снять скриншоты, я запустил её под Windows 95. Для того, чтобы скопировать все материалы сюда (через флешку), я запустил Windows 2000.
Системные требования: 286 и выше, VGA.
Специально для вас я увеличил число комментариев в программе, так что можно считать её документированной.
Скриншоты:
http://sg.uploads.ru/3t4fo.png
То же самое, вид сверху:
http://sg.uploads.ru/LYNUg.png
Немного повернул график вправо:
http://sg.uploads.ru/Y2iVf.png
http://s8.uploads.ru/EYWrQ.png
http://sg.uploads.ru/UAFcY.png
Код
/* 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 4.07.2016 - 15:09
А.Г. Юркин, "Задачник по программированию". 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");
}
Автор: hook 4.08.2016 - 21:35
jura_k По ходу старался напрасно.... нет желающих посмотреть на твои графики....
Автор: jura_k 5.08.2016 - 18:05
Эксперимент! Эх, никто не оценил мои способности программиста... Я ещё в 1991-ом писал программы, но до сих пор никто даже не пикнул. Сколько ещё ждать? Лет 20?
Автор: hook 6.08.2016 - 20:03
Пиши такие, которые нужны.... а вот какие??????..... иди на тематические форумы - например с окончанием или началом на hack..... там много чего интересного....
Автор: jura_k 7.08.2016 - 8:03
Нужнее всего программа, которой можно прикрыть рекламу. The wall. Я её уже написал.
Она нужна при посещении больше половины сайтов. Даже очень нужна!
Автор: jura_k 23.08.2016 - 5:29
Арифметика длинных целых чисел.
Дано:
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 28.08.2016 - 8:38
Всё то же самое, но другим макаром.
Код
/* 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 22.09.2016 - 18:48
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);}
Автор: jura_k 3.12.2016 - 12:56
Будни программиста
http://s1.uploads.ru/1oDGX.jpg
http://sa.uploads.ru/w91X5.jpg
Автор: jura_k 19.12.2016 - 6:14
В очередной раз решил все те же задачи из задачника. Новая редакция.
В этой программе сгруппированы задачи, которым для работы нужно либо 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);
}
Автор: jura_k 20.12.2016 - 5:51
А в этой программе нужно вводить только три целых числа.
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p13
Язык Turbo C 2.0
Основы программирования
Переменные: int - 3 */
/* 1 - 22k, 3 - 23k, 7 - 25k, 14 - 26k, 18 - 27k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
d (); /* Нет решений. */
e (); /* Решение - любое число. */
f (float); /* Один корень. */
g (float, float); /* Два корня. */
h (float, float, float); /* Три корня. */
i (float, float, float, float); /* Четыре корня. */
main ()
{
int a, b, c; /* исходные данные */
int j, k; /* натуральные числа */
int l, m, n, o;
float p, q;
printf ("Введите три целых числа: ");
scanf ("%i%i%i", &a, &b, &c);
/* 13.1.2. Составить алгоритм решения квадратного уравнения
ax^2 + bx + c = 0. */
j = b * b - 4 * a * c;
printf ("1. ");
if (a == 0)
if (b == 0)
if (c == 0) e (); else d ();
else
f ((float) -c / b);
else
if (j < 0)
d ();
else
if (j == 0)
f (-b / 2. / a);
else
g ((-b - sqrt (j)) / 2 / a, (-b + sqrt (j)) / 2 / a);
/* 16.1.3. Вычислить n! */
j = 1;
for (k = 1; k < a; k++) j *= k + 1;
printf ("2. %i! = %i.\n", a, j);
/* 18.1.4. Даны два натуральных числа M и N. Вычислить их наибольший
общий делитель НОД (M, N). */
j = a;
k = b;
if (j < 0) j = -j;
if (k < 0) k = -k;
if (j == 0) j = 1;
if (k == 0) k = 1;
l = j;
m = k;
while (l - m) if (l > m) l -= m; else m -= l;
printf ("3. НОД (%i, %i) = %i.\n", a, b, l);
/* 19.1.5. Составить алгоритм вычисления степенной функции с целым
показателем y = x ^ k, где k - целое число. */
l = 1;
for (m = 0; m < k; m++) l *= a;
printf ("4. %i ^ %i = ", a, b);
if (a == 0)
printf ("0.\n");
else
if (b == 0)
printf ("1.\n");
else
if (b > 0)
printf ("%i.\n", l);
else
if (l == 0)
printf ("0.\n");
else
printf ("%.4g.\n", 1. / l);
/* 21.3.8. Даны три положительных числа. Составить алгоритм,
определяющий, могут ли они быть длинами сторон треугольника. */
if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a)
printf ("5. Числа могут быть длинами сторон треугольника.\n");
else
printf ("5. Числа не могут быть длинами сторон треугольника.\n");
/* 21.4.9. Пусть компьютер способен выполнять только две арифметические
операции - сложение и вычитание. Составить алгоритмы:
а) умножения двух целых чисел;
б) целочисленного деления двух чисел;
в) получения остатка от целочисленного деления двух чисел. */
l = 0;
for (m = 0; m < j; m++) l += k;
printf ("6. %i * %i = %i, ", j, k, l);
l = 0;
m = j;
while (m >= k) {m -= k; l++;}
printf ("%i / %i = %i, %i %% %i = %i.\n", j, k, l, j, k, m);
/* 21.5.10. Построить алгоритм решения биквадратного уравнения,
используя как вспомогательный алгоритм решения квадратного уравнения. */
l = b * b - 4 * a * c;
printf ("7. ");
if (a == 0)
if (b == 0)
if (c == 0) e (); else d ();
else
{
p = (float) -c / b;
if (p < 0)
d ();
else
if (p == 0)
f (0);
else
g (-sqrt (p), sqrt (p));
}
else
if (l < 0)
d ();
else
if (l == 0)
{
p = -b / 2. / a;
if (p < 0)
d ();
else
if (p == 0)
f (0);
else
g (-sqrt (p), sqrt (p));
}
else
{
p = (-b - sqrt (l)) / 2 / a;
q = (-b + sqrt (l)) / 2 / a;
if (p < 0)
if (q < 0)
d ();
else
if (q == 0)
f (0);
else
g (-sqrt (q), sqrt (q));
else
if (p == 0)
if (q < 0)
f (0);
else
h (-sqrt (q), 0, sqrt (q));
else
if (q < 0)
g (-sqrt (p), sqrt (p));
else
if (q == 0)
h (-sqrt (p), 0, sqrt (p));
else
i (-sqrt (q), -sqrt (p), sqrt (p), sqrt (q));
}
/* 21.6.11. Составить алгоритм нахождения НОД трех натуральных чисел,
используя вспомогательный алгоритм нахождения НОД двух чисел. */
l = c;
if (l < 0) l = -l;
if (l == 0) l = 1;
m = j;
n = k;
while (m - n) if (m > n) m -= n; else n -= m;
n = l;
while (m - n) if (m > n) m -= n; else n -= m;
printf ("8. НОД (%i, %i, %i) = %i.\n", a, b, c, m);
/* 33.1.12. */
l = a;
if (l < b) l = b;
if (l < c) l = c;
printf ("9. max (%i, %i, %i) = %i.\n", a, b, c, l);
/* 48.9.21. Присвоить целой переменной h значение цифры, стоящей в
разряде сотен в записи положительного целого числа k (например, если
k = 28796, то h = 7). */
printf ("10. Число сотен равно %i.\n", a % 1000 / 100);
/* 48.10.22. Целой переменной S присвоить значение суммы цифр
трехзначного целого числа k. */
l = a % 1000;
m = l / 100 + l / 10 % 10 + l % 10;
printf ("11. Сумма цифр равна %i.\n", m);
/* 63.1.27. По длинам трех сторон треугольника a, b, c вычислить его
площадь. */
p = (a + b + c) / 2.;
q = p * (p - a) * (p - b) * (p - c);
if (q < 0) q = 0;
printf ("12. Площадь треугольника %.4g.\n", sqrt (q));
/* 65.1.29. Вычислить сумму целых чисел от M до N путем прямого
суммирования. */
l = 0;
m = a;
while (1)
{
if (m > b) break;
l += m;
if (m == 32767) break;
m++;
}
printf ("13. Сумма чисел от %i до %i равна %i.\n", a, b, l);
/* 68.6.34. */
printf ("\nx\tsin x\t cosx\n");
printf ("-----------------------\n");
for (l = 0; l < 11; l++)
{
p = l / 10.;
printf ("%-.4g\t%-.4f\t %-.4g\n", p, sin (p), cos (p));
}
printf ("-----------------------\n\n");
/* 68.7.35. Напечатать в возрастающем порядке все трехзначные числа, в
десятичной записи которых нет одинаковых цифр. */
for (l = 1; l < 10; l++)
for (m = 0; m < 10; m++)
for (n = 0; n < 10; n++)
if (l - m && m - n && l - n) printf ("%i%i%i ", l, m, n);
/* 68.8.36. Дано целое n > 2. Напечатать все простые числа из диапазона
[2, n]. */
printf ("\n\n16. Простые числа: ");
for (l = 2; l <= a; l++)
{
m = sqrt (l);
n = 0;
for (o = 2; o < m + 1; o++) if (l % o == 0) n = 1;
if (n == 0) printf ("%i ", l);
if (l > 32766) break;
}
/* 70.1.37. С помощью приведенной программы определите на вашем
компьютере величину машинного epsilon. */
p = 1;
while (1 + p > 1) p /= 2;
printf ("\n\n17. Машинный эпсилон %.4g.\n", p);
/* 71.6.41. Проведите эксперимент на исследование целочисленного
переполнения, т.е. установите, что происходит с целой переменной, когда
ее значение превышает maxint. */
l = 32766;
printf ("18. Целочисленное переполнение: %i - %u, ", l, l);
l++;
printf ("%i - %u, ", l, l);
l++;
printf ("%i - %u,\n", l, l);
l++;
printf ("%i - %u.\n", l, l);
getch ();
printf ("\n");
}
d () {printf ("Решений нет.\n");}
e () {printf ("Решение - любое число.\n");}
f (float a) {printf ("x = %.4g.\n", a);}
g (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
h (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
i (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}
/* */
Автор: jura_k 22.02.2017 - 16:03
Ещё раз всё то же самое.
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p42
Язык Turbo C 2.0
Начальный курс C и C++ */
/* p42 - 15k, p45 - 20k, p46 - 21k, p48 - 22k, p61 - 23k
p75 - 24k, p79 - 25k, p80 - 28k, p85 - 29k */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
float fa = 3.1415926; /* число пи */
char ma;
ga (); gb (); gc ();
ha (float); hb (int);
float ia (float);
main ()
{
int aa, ab; /* исходные данные */
int ba, bb, bc;
float da; /* исходные данные */
float ea, eb;
unsigned ja;
char na;
char pa [80], pb [10];
printf ("? (1-4) ");
scanf ("%i", &aa);
if (aa == 1) goto aaa; /* стандартные программы без ввода */
if (aa == 2) goto aab; /* стандартные программы с вводом в начале программы */
if (aa == 3) goto aac; /* программы с произвольным вводом данных */
if (aa == 4) goto aad; /* - */
printf ("\n");
return;
aaa:
ba = 1996;
printf ("Сейчас %i год.\n", ba);
ga (); gb (); gc ();
ea = 5;
ha (ea);
printf ("Длина окружности радиуса %.4g равна %.4g.\n", ea, ia (ea));
for (ba = 10; ba; ba--) printf ("%i ", ba);
printf ("\nСтарт!\n");
ja = 60000;
ba = ja;
printf ("ba = %i, ja = %u.\n", ba, ja);
na = 'c';
printf ("%c", na);
na = '+';
printf ("%c%c\n", na, na);
ba = 5; bb = 60;
ba++; ++bb;
printf ("ba = %i, bb = %i.\n", ba, bb);
printf ("ba = %i, bb = %i.\n", ba++, ++bb);
ba = 101 <= 105;
bb = 101 > 105;
printf ("true - %i, false - %i.\n", ba, bb);
for (ba = 0; ba < 6; ba++)
{
for (bb = 0; bb < 6; bb++)
printf ("%i * %i = %-2i ", ba, bb, ba * bb);
printf ("\n");
}
printf ("\n");
for (ba = 0; ba < 1000; ba++)
{
bb = ba * ba * ba;
printf ("%i - %i", ba, bb);
if (bb > 10000)
{
printf (".\n");
break;
}
else printf ("; ");
}
printf ("\n");
for (ba = 0; ba < 1000; ba++)
{
if (ba % 7) continue;
printf ("%-5i", ba);
}
printf ("\n");
goto aaz;
aab:
printf ("Введите два целых числа: ");
scanf ("%i%i", &aa, &ab);
printf ("Введите рациональное число: ");
scanf ("%f", &da);
printf ("Введите строку: ");
gets (pa); gets (pa);
ea = fa * 2 * aa;
printf ("Радиус - %i, длина - %.4g.\n", aa, ea);
ea = fa * 2 * da;
eb = fa * da * da;
printf ("Радиус = %.4g, длина окружности = %.4g, "
"площадь круга = %.4g.\n", da, ea, eb);
printf ("Я знаю ваше имя; ваше имя %s.\n", pa);
ba = ab;
if (ba == 0) ba = 1;
printf ("Целая часть %i, остаток от деления %i.\n", aa / ba, aa % ba);
if (da > 0) {ba = 1; printf ("Число %.4g положительное, ba = %i.\n", da, ba);}
if (da == 0) {ba = 0; printf ("Число %.4g равно нулю, ba = %i.\n", da, ba);}
if (da < 0) {ba = -1; printf ("Число %.4g отрицательное, ba = %i.\n", da, ba);}
if (da > 0) {ba = 1; printf ("Число %.4g положительное.\n", da);}
else if (ba < 0) {ba = -1; printf ("Число %.4g отрицательное.\n", da);}
else {ba = 0; printf ("Число %.4g равно нулю.\n", da);}
goto aaz;
aac:
printf ("Нажмите любую клавишу: ");
ma = getche ();
printf ("\nВведите целое число: ");
scanf ("%i", &aa);
hb (aa);
printf ("Нажмите любую клавишу: ");
na = getche ();
if (na == 'a') printf ("\nВы нажали клавишу a.");
printf ("\nВы нажали клавишу %c.\n", na);
printf ("Введите строку: ");
gets (pa);
scanf ("%[0123456789]%s", pa, pb);
printf ("%s..%s\n", pa, pb);
printf ("Введите прописную букву русского алфавита: ");
ma = getchar ();
ma = getchar ();
if (ma >= 'А' && ma <= 'Я') switch (ma)
{
case 'А': printf ("Алексеев.\n"); break;
case 'Б': printf ("Булгаков.\n"); break;
case 'В': printf ("Волошин.\n"); break;
case 'Г': printf ("Гоголь.\n"); break;
default: printf ("Достоевский, Зощенко и другие.\n");
}
else printf ("Надо было ввести прописную русскую букву.\n");
printf ("Введите прописную букву русского алфавита: ");
na = getchar ();
na = getchar ();
if (na >= 'А' && na <= 'Я') switch (na)
{
case 'А': printf ("Алексеев.\n");
case 'Б': printf ("Булгаков.\n");
case 'В': printf ("Волошин.\n");
case 'Г': printf ("Гоголь.\n");
default: printf ("Достоевский, Зощенко и другие.\n");
}
else printf ("Надо было ввести прописную русскую букву.\n");
goto aaz;
aad:
printf ("Прочитать символ: ");
for (;;)
{
na = getchar ();
if (na == 'Q') break;
printf ("%c", na);
}
randomize ();
ba = random (100) + 1;
bb = 0;
do {
printf ("Введите число от 1 до 100: ");
scanf ("%i", &bc);
bb++;
if (ba < bc) printf ("Загаданное число меньше.\n");
if (ba > bc) printf ("Загаданное число больше.\n");
} while (ba - bc);
printf ("Вы угадали число! ");
printf ("Затратили на угадывание %i попыток.\n", bb);
printf ("Введите строку: ");
gets (pa); gets (pa);
printf ("Вы ввели строку: %s.\n", pa);
printf ("Введите строку: ");
scanf ("%s", pa);
printf ("Вы ввели строку: ");
puts (pa);
aaz:
getch ();
printf ("\n");
}
ga () {printf ("Вызвали первую функцию.\n");}
gb () {printf ("Вызвали вторую функцию.\n");}
gc () {printf ("Вызвали третью функцию.\n");}
ha (float a) {printf ("Длина окружности радиуса %.4g равна %.4g.\n", a, fa * 2 * a);}
hb (int a)
{
int b;
if (a > 201) a = 201;
for (b = 0; b < a; b++) printf ("%c", ma);
printf ("\n");
}
float ia (float a) {return fa * 2 * a;}
Автор: ЧеРтЁнОк_Ф_кЕдАх 22.02.2017 - 20:23
Интересно все это конечно. Спасибо.
Автор: Эллочка 22.02.2017 - 20:35
Цитата(ЧеРтЁнОк_Ф_кЕдАх @ 22.02.2017 - 20:23)
Интересно все это конечно. Спасибо.
Автор: льдинка 4.05.2017 - 19:31
Си++ ещё не вымер?
Автор: Noir 20.05.2017 - 19:38
Цитата(льдинка @ 4.05.2017 - 19:31)
Си++ ещё не вымер?
Вымрет когда прийдет достойная замена)
Автор: jura_k 23.05.2017 - 17:54
Сделал ещё раз всё то же самое. Остановился, когда размер программы превысил 5 килобайт. На всё ушло два дня - вчера и сегодня.
...Я тут полистал тему и обнаружил, что один из предыдущих постов почти такой же. Ну ладно, ещё раз опубликую. В этот раз всё будет иначе! Мы пойдём другим путём!
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p42
Язык Turbo C 2.0
Начальный курс C и C++ */
/* 1 - 15k, 2 - 20k, 3 - 21k, 5 - 22k, 12 - 23k
17 - 24k, 20 - 25k, 22 - 28k */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
float ga = 3.1415926; /* число пи */
char dd;
pa (); pb (); pc ();
sa (float);
float va (float);
gd (int);
main ()
{
int aa, ab, ac;
int da, db; /* ввод данных */
float ja, jb;
float ma; /* ввод данных */
unsigned ya;
char ad; /* ввод данных */
char jd;
char md [80], me [10]; /* ввод данных */
printf ("? (1-4) ");
scanf ("%i", &aa);
if (aa == 1) goto aaa;
if (aa == 2) goto aab; /* ввод данных */
if (aa == 3) goto aac; /* дополнительный ввод данных */
if (aa == 4) goto aad; /* большие программы */
printf ("\n");
return;
aaa:
aa = 1996;
printf ("1. Сейчас %i год.\n", aa);
printf ("4. ");
pa (); pb (); pc ();
printf ("5. ");
ja = 5;
sa (ja);
printf ("6. Длина окружности радиуса %.4g равна %.4g.\n", ja, va (ja));
printf ("7.");
for (aa = 10; aa > 0; aa--) printf (" %i", aa);
printf ("\nСтарт!\n");
ya = 60000;
aa = ya;
printf ("8. aa = %i, ya = %u.\n", aa, ya);
jd = 'c'; printf ("10. %c", jd);
jd = '+'; printf ("%c%c\n", jd, jd);
aa = 5; ab = 60;
aa++; ++ab;
printf ("15. aa = %i, ab = %i.\n", aa, ab);
printf ("aa = %i, ab = %i.\n", aa++, ++ab);
aa = 101 <= 105;
ab = 101 > 105;
printf ("16. True - %i, false - %i.\n", aa, ab);
goto aaz;
aab:
printf ("Введите два целых числа: ");
scanf ("%i%i", &da, &db);
printf ("Введите рациональное число: ");
scanf ("%f", &ma);
printf ("Введите символ: ");
scanf ("%c", &ad); scanf ("%c", &ad);
printf ("Введите строку: ");
gets (md); gets (md);
ja = ga * 2 * da;
printf ("2. Радиус %i, длина %.4g.\n", da, ja);
ja = ga * 2 * ma;
jb = ga * ma * ma;
printf ("3. Радиус %.4g, длина окружности %.4g, площадь круга %.4g.\n",
ma, ja, jb);
printf ("9. ");
dd = ad;
gd (da);
printf ("12. Я знаю ваше имя; ваше имя %s.\n", md);
aa = db;
if (aa == 0) aa = 1;
printf ("14. Целая часть %i, остаток от деления %i.\n",
da / aa, da % aa);
printf ("17. ");
if (ma > 0) {aa = 1; printf ("Число %.4g положительное, aa = %i.\n", ma, aa);}
if (ma == 0) {aa = 0; printf ("Число %.4g равно нулю, aa = %i.\n", ma, aa);}
if (ma < 0) {aa = -1; printf ("Число %.4g отрицательное, aa = %i.\n", ma, aa);}
printf ("18. ");
if (ma > 0) {aa = 1; printf ("Число %.4g положительное.\n", ma);}
else if (ma < 0) {aa = -1; printf ("Число %.4g отрицательное.\n", ma);}
else {aa = 0; printf ("Число %.4g равно нулю.\n", ma);}
goto aaz;
aac:
printf ("11. Нажмите какую-либо клавишу: ");
jd = getche ();
if (jd == 'a') printf ("\nВы нажали клавишу 'a'.");
printf ("\nВы нажали клавишу '%c'.\n", jd);
printf ("13. Введите строку: ");
gets (md);
scanf ("%[0123456789]%s", md, me);
printf ("%s..%s\n", md, me);
printf ("21. Введите символ: ");
getchar ();
for (;;)
{
jd = getchar ();
if (jd == 'Q') break;
printf ("%c", jd);
}
goto aaz;
aad:
printf ("19. Введите прописную букву русского алфавита: ");
jd = getchar (); jd = getchar ();
if (jd >= 'А' && jd <= 'Я')
switch (jd)
{
case 'А': printf ("Алексеев.\n"); break;
case 'Б': printf ("Булгаков.\n"); break;
case 'В': printf ("Волошин.\n"); break;
case 'Г': printf ("Гоголь.\n"); break;
default: printf ("Достоевский, Зощенко и другие.\n"); break;
}
else printf ("Надо было ввести прописную русскую букву.\n");
printf ("20. Введите прописную букву русского алфавита: ");
jd = getchar (); jd = getchar ();
if (jd >= 'А' && jd <= 'Я')
switch (jd)
{
case 'А': printf ("Алексеев.\n");
case 'Б': printf ("Булгаков.\n");
case 'В': printf ("Волошин.\n");
case 'Г': printf ("Гоголь.\n");
default: printf ("Достоевский, Зощенко и другие.\n");
}
else printf ("Надо было ввести прописную русскую букву.\n");
randomize ();
aa = random (100) + 1;
ab = 0;
printf ("22. ");
do {
printf ("Введите число от 1 до 100: ");
scanf ("%i", &ac);
ab++;
if (aa < ac) printf ("Загаданное число меньше.\n");
if (aa > ac) printf ("Загаданное число больше.\n");
} while (aa - ac);
printf ("Вы угадали число.\n");
printf ("Затратили на угадывание %i попыток.\n", ab);
aaz:
getch ();
printf ("\n");
}
pa () {printf ("Вызвали первую функцию.\n");}
pb () {printf ("Вызвали вторую функцию.\n");}
pc () {printf ("Вызвали третью функцию.\n");}
sa (float a) {printf ("Длина окружности радиуса %.4g равна %.4g.\n",
a, ga * 2 * a);}
float va (float a) {return ga * 2 * a;}
gd (int a)
{
int b;
if (a < 1) return;
if (a > 200) a = 200;
for (b = 0; b < a; b++) printf ("%c", dd);
printf ("\n");
}
Кроме программ, в книге встречались однострочные коды. Вот они.
» Кликните сюда для просмотра оффтоп текста.. «
Код
p43
#include <stdio.h>
/* Пример 1. */
main ()
{
int year, month;
p44
year = 1996;
printf ("Сейчас %i год.\n", year);
}
float func (int n, float f, long double ld);
float func (int, float, long double);
p50
if (условие) оператор;
if (0 < 1) printf ("0 меньше 1");
if (0 > 1) printf ("0 больше 1");
if (0 == 1) printf ("0 равно 1");
for (инициализация; условие; изменение) оператор;
p55
i = -5536; j = 60000;
тип <список переменных>;
printf ("\n");
char str [80];
тип имя_переменной = константное_выражение;
p63
(тип) выражение;
(float) x / 2;
(float) (x / 2);
printf ("%05i", 15);
scanf ("%i%*c%i", &i, &j);
scanf ("%5s", str);
scanf ("%iplus%i", &i, &j);
p66
scanf ("%10[A-Z1-5]%s", s);
x = x + 1; ++x; x++;
a < 0; 101 >= 105; 'a' == 'A'; 'a' != 'A';
if ((f = x - y) > 0) printf ("Число x больше, чем y.\n");
a = b = c = x * y;
m -= 20; m *= 20; m /= 10; m %= 10;
p72
ch = ch & 127;
ch = ch | 128;
if (ch & 4) printf ("Третий бит содержит 1, состояние 'on'.\n");
value >> число позиций;
value << число позиций;
x = 9 << 3;
x = 9 >> 3;
x = 9 >> 5;
(выр1) ? (выр2) : (выр3);
max = x > y ? x : y;
abs = x > 0 ? x : -x;
p74
x > y ? x : y = 1;
if (условие) оператор; else оператор;
if (x == 0) printf ("Число равно нулю.\n"); else printf ("Число не равно нулю.\n");
if (!x) printf ("Число равно нулю.\n"); else printf ("Число не равно нулю.\n");
for (инициализация; проверка условия; изменение) оператор;
for (выражение1; выражение2; выражение3) оператор;
p79
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 (;;) printf ("Бесконечный цикл. ");
for (i = 1; 1; i++) printf ("Бесконечный цикл. ");
for (i = 10; i > 6; i++) printf ("Бесконечный цикл. ");
p80
for (i = 0; i < 10000; i++);
Ещё там были многострочные отрывки кодов.
» Кликните сюда для просмотра оффтоп текста.. «
Код
p49
<тип возвращаемого значения> <имя функции> (список параметров)
{
/* тело функции */
}
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;
p75
if (условие) оператор;
else if (условие) оператор;
else if (условие) оператор;
...
else оператор;
p76
if (x)
if (y) оператор1;
else оператор2;
if (x)
{
if (y) оператор1;
}
else оператор2;
p79
unsigned char ch;
for (ch = 'А'; ch <= 'Я'; ch++) printf ("%c", ch);
Автор: jura_k 27.01.2018 - 16:18
Решаем задачи из учебника "Основы программирования".
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p11
Основы программирования
Язык Turbo C 2.0 */
/* 1 - 15k, 2 - 21k, 3 - 22k, 4 - 23k, 8 - 24k
10 - 25k, 14 - 26k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
float xa (int, int, int, int); /* расстояние между двумя точками на плоскости */
xd (int); /* сумма цифр числа */
main ()
{
int a, b, c, d, e, f; /* переменные ввода */
float j, k; /* переменные ввода */
int m, n, o, v;
float p, q, r, s, t;
printf ("? (1-4) ");
scanf ("%i", &a);
if (a == 1) goto aaa; /* 6 int, 2 float */
if (a == 2) goto aab; /* ввод данных */
if (a == 3) goto aac; /* нет ввода */
if (a == 4) goto aad; /* 3 int */
printf ("\n");
return;
aaa:
printf ("Введите 6 целых чисел: ");
scanf ("%i%i%i%i%i%i", &a, &b, &c, &d, &e, &f);
printf ("Введите 2 рациональных числа: ");
scanf ("%f%f", &j, &k);
/* 11.1. */
m = a * d;
n = b * c;
printf ("1. %i / %i : %i / %i = %i / %i.\n", a, b, c, d, m, n);
/* 19.2. Составить алгоритм вычисления степенной функции с целым
показателем y = x ^ k, где k - целое число. */
if (j == 0)
printf ("2. 0 ^ %i = 0.\n", a);
else
{
p = 1;
if (a > 0)
for (n = 0; n < a; n++) p *= j;
else
for (n = 0; n > a; n--) p /= j;
printf ("2. %.4g ^ %i = %.4g.\n", j, a, p);
}
/* 21.1.3. Даны декартовы координаты трех вершин треугольника на
плоскости. Составить алгоритм определения площади треугольника. */
p = xa (a, b, c, d);
q = xa (a, b, e, f);
r = xa (c, d, e, f);
s = (p + q + r) / 2;
t = s * (s - p) * (s - q) * (s - r);
if (t < 0) t = 0;
printf ("3. Площадь треугольника %.4g.\n", sqrt (t));
/* 21.2.4. Дана скорость ракеты при выходе за пределы атмосферы Земли.
Составить алгоритм определения того, как будет двигаться ракета после
выключения двигателей. Напомним величины трех космических скоростей:
7,5 км/с, 11,2 км/с, 16,4 км/с. */
printf ("4. ");
if (j < 7.5) printf ("Ракета упадет на Землю");
else if (j == 7.5) printf ("Ракета будет двигаться по круговой орбите вокруг Земли");
else if (j < 11.2) printf ("Ракета будет двигаться по эллипсу вокруг Земли");
else if (j == 11.2) printf ("Ракета улетит от Земли по параболе");
else if (j < 16.4) printf ("Ракета будет двигаться по эллипсу вокруг Солнца");
else if (j == 16.4) printf ("Ракета улетит от Солнца по параболе");
else printf ("Ракета улетит от Солнца по гиперболе");
/* 68.4.8. Вычислить сумму квадратов всех целых чисел, попадающих в
интервал (ln x, exp x). */
p = j;
if (p > 5) p = 5;
if (p <= 0) q = 0; else q = log (p);
r = exp (p); /* Вычислены границы интервала (q, r). */
m = q;
if (m <= q) m++;
o = 0; /* Вычислены границы интервала [m, r). */
for (n = m; n < r; n++) o += n * n;
printf (".\n8. Сумма квадратов чисел равна %i.\n", o);
/* 68.5.9. Вычислить количество точек с целочисленными координатами,
попадающих в круг радиуса R с центром в начале координат. */
m = j;
if (m < j) m++;
if (j < 0) m = -1;
v = 0; /* Вычислены границы интервала [-m, m]. */
for (n = -m; n <= m; n++)
for (o = -m; o <= m; o++)
if (n * n + o * o <= j * j) v++;
printf ("9. Количество точек в круге %i.\n", v);
/* 80.1.13. Составить программу вычисления площади кольца по значениям
внутреннего и внешнего радиусов, используя подпрограмму вычисления
площади круга (два варианта: с процедурой и с функцией). */
printf ("13. Площадь кольца %.4g.\n", 3.1415926 * (j * j - k * k));
/* 80.2.14. По координатам вершин треугольника вычислить его периметр,
используя подпрограмму вычисления длины отрезка, соединяющего две точки.
*/
p = xa (a, b, c, d) + xa (a, b, e, f) + xa (c, d, e, f);
printf ("14. Периметр треугольника равен %.4g.\n", p);
goto aaz;
aab:
/* 57.4.5. Составьте программу вычисления суммы двух целых чисел,
которая будет вести диалог с пользователем в следующем виде (на месте
многоточий - вводимые и выводимые числа):
ВВЕДИТЕ ДВА СЛАГАЕМЫХ:
a = . . . . .
b = . . . . .
РЕЗУЛЬТАТ ВЫЧИСЛЕНИЙ:
a + b = . . . . . */
printf ("5. Введите два слагаемых:\na = ");
scanf ("%i", &a);
printf ("b = ");
scanf ("%i", &b);
printf ("Результат вычислений:\na + b = %i.\n\n", a + b);
/* 67.3.7. Составить программу, по которой будет вводиться
последовательность символов до тех пор, пока не встретится маленькая или
большая латинская буква 'z'. Подсчитать, сколько раз среди вводимых
символов встречалась буква 'W'. */
printf ("7. Вводите символы: ");
n = 0;
while (1)
{
m = getche ();
if (m == 'W') n++;
if (m == 'z' || m == 'Z') break;
}
printf (". Число символов 'W' равно %i.\n", n);
goto aaz;
aac:
/* 67.1.6. Получить на экране десятичные коды букв латинского алфавита. */
printf ("6. ");
for (m = 'a'; m <= 'z'; m++)
{
printf ("%c - %i", m, m);
if (m < 'z') printf (", "); else printf (".\n");
}
/* 68.6.10. Напечатать таблицу значений функции sin x и cos x на
отрезке [0, 1] с шагом 0.1 в следующем виде:
x sin x cos x
------------------------
0.0000 0.0000 1.0000
0.1000 0.0998 0.9950
... ... ...
1.0000 0.8415 0.5403
------------------------ */
printf ("\nx\t sin x cos x\n------------------------\n");
for (m = 0; m <= 10; m++)
printf ("%.4f %.4f %.4f\n", m / 10., sin (m / 10.), cos (m / 10.));
printf ("------------------------\n");
/* 68.7.11. Напечатать в возрастающем порядке все трехзначные числа, в
десятичной записи которых нет одинаковых цифр. */
printf ("\n");
for (m = 100; m < 1000; m++)
if (m / 100 != m / 10 % 10 && m / 100 != m % 10 &&
m / 10 % 10 != m % 10) printf ("%i ", m);
printf ("\n");
goto aaz;
aad:
printf ("Введите 3 целых числа: ");
scanf ("%i%i%i", &a, &b, &c);
/* 68.8.12. Дано целое n. Напечатать все простые числа из диапазона
[2, n]. */
printf ("12. ");
for (m = 2; m < a + 1 && m < 1000; m++)
{
n = sqrt (m) + 1;
o = 1;
for (v = 2; v < m; v++)
if (m % v == 0) o = 0;
if (o) printf (" %i", m);
}
/* 80.3.15. Даны три целых числа. Определить, сумма цифр которого из
них больше. Подсчет суммы цифр организовать через подпрограмму. */
m = xd (a);
n = xd (b);
o = xd (c);
printf ("\n15. ");
if (m >= n && m >= o)
printf ("Сумма цифр первого числа больше.\n");
else
if (n >= m && n >= o)
printf ("Сумма цифр второго числа больше.\n");
else
printf ("Сумма цифр третьего числа больше.\n");
aaz:
getch ();
printf ("\n");
}
float xa (int a, int b, int c, int d)
{
int g;
g = (a - c) * (a - c) + (b - d) * (b - d);
if (g < 0) g = 0;
return sqrt (g);
}
xd (int a)
{
int b;
b = 0;
if (a < 0) a = -a;
while (a)
{
b += a % 10;
a /= 10;
}
return b;
}
Автор: jura_k 1.03.2018 - 3:22
Учебник "Начальный курс C и C++". Размер программы увеличен до 5 kb.
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p42
Начальный курс C и C++
Язык Turbo C 2.0
Количество больших программ: 5
1 - 15k, 2 - 20k, 3 - 21k, 5 - 22k, 12 - 23k
18 - 24k, 22 - 28k */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
float g = 3.1415926; /* число пи */
char y;
m (); n (); o ();
p (float);
q (int);
float s (float);
main ()
{
int a, b; /* ввод данных */
float d, e;
float j; /* ввод данных */
unsigned v;
char aa [80], ab [10];
int ad;
printf ("? (1-3) ");
scanf ("%i", &a);
if (a == 1) goto aaa; /* нет ввода */
if (a == 2) goto aab; /* ввод данных */
if (a == 3) goto aac; /* дополнительный ввод */
printf ("\n");
return;
aaa:
a = 1996;
printf ("1. Сейчас %i год.\n", a);
printf ("4. ");
m (); n (); o ();
printf ("5. ");
d = 5;
p (d);
printf ("6. Длина окружности радиуса %.4g равна %.4g.\n", d, s (d));
printf ("7.");
for (a = 10; a; a--) printf (" %i", a);
printf (" Старт!\n");
v = 60000;
a = v;
printf ("8. a = %i, v = %u.\n", a, v);
y = 'c';
printf ("10. %c", y);
y = '+';
printf ("%c%c.\n", y, y);
a = 5; b = 60;
a++; ++b;
printf ("15. a = %i, b = %i.\n", a, b);
printf ("a = %i, b = %i.\n", a++, ++b);
a = 101 <= 105;
b = 101 > 105;
printf ("16. true - %i, false - %i.\n", a, b);
printf ("\n23.\n");
for (a = 0; a < 10; a++)
{
for (b = 0; b < 6; b++)
{
printf ("%i * %i = %-2i", a, b, a * b);
if (b < 5) printf (" "); else printf ("\n");
}
}
printf ("\n24. ");
for (a = 0; a < 1000; a++)
{
printf ("%i - %i ", a, a * a * a);
if (a * a * a >= 10000) break;
}
printf ("\n");
goto aaz;
aab:
printf ("Введите два целых числа: ");
scanf ("%i%i", &a, &b);
printf ("Введите рациональное число: ");
scanf ("%f", &j);
printf ("Введите символ: ");
scanf ("%c", &y); scanf ("%c", &y);
printf ("Введите строку: ");
gets (aa); gets (aa);
d = 2 * g * a;
printf ("2. Радиус %i, длина %.4g.\n", a, d);
d = 2 * g * j;
e = g * j * j;
printf ("3. Радиус %.4g, длина окружности %.4g, площадь круга %.4g.\n", j, d, e);
printf ("9. ");
q (a);
printf ("12. Я знаю ваше имя. Ваше имя %s.\n", aa);
ad = b;
if (!ad) ad = 1;
printf ("14. Целая часть %i, остаток от деления %i.\n", a / ad, a % ad);
printf ("17. Число %.4g ", j);
if (j > 0) {ad = 1; printf ("положительное, ad = %i.\n", ad);}
if (j == 0) {ad = 0; printf ("равно нулю, ad = %i.\n", ad);}
if (j < 0) {ad = -1; printf ("отрицательное, ad = %i.\n", ad);}
printf ("18. ");
if (j > 0) {ad = 1; printf ("Число %.4g положительное.\n", j);}
else if (j < 0) {ad = -1; printf ("Число %.4g отрицательное.\n", j);}
else {ad = 0; printf ("Число %.4g равно нулю.\n", j);}
printf ("19. ");
if (y >= 'А' && y <= 'Я')
switch (y)
{
case 'А': printf ("Алексеев.\n"); break;
case 'Б': printf ("Булгаков.\n"); break;
case 'В': printf ("Волошин.\n"); break;
case 'Г': printf ("Гоголь.\n"); break;
default: printf ("Достоевский, Зощенко и другие.\n"); break;
}
else printf ("Надо было ввести заглавную русскую букву.\n");
printf ("20. ");
if (y >= 'А' && y <= 'Я')
switch (y)
{
case 'А': printf ("Алексеев.\n");
case 'Б': printf ("Булгаков.\n");
case 'В': printf ("Волошин.\n");
case 'Г': printf ("Гоголь.\n");
default: printf ("Достоевский, Зощенко и другие.\n");
}
else printf ("Надо было ввести заглавную русскую букву.\n");
goto aaz;
aac:
printf ("11. Нажмите какую-либо клавишу: ");
y = getche ();
if (y == 'a') printf ("\nВы нажали клавишу a.");
printf ("\nВы нажали клавишу %c.\n", y);
printf ("13. Введите строку: ");
gets (aa);
scanf ("%[0123456789]%s", aa, ab);
printf ("%s..%s.\n", aa, ab);
printf ("21. Нажмите какую-либо клавишу: ");
for (;;)
{
y = getche ();
if (y == 'Q') break;
printf (" %c ", y);
}
/* p80. a, b, ad - int. */
randomize ();
a = 0;
b = random (100);
printf ("\n22. Введите число от 0 до 99: ");
do {
scanf ("%i", &ad);
a++;
if (b < ad) printf ("Загаданное число меньше. ");
if (b > ad) printf ("Загаданное число больше. ");
} while (b - ad);
printf ("Вы угадали число. Затратили на угадывание %i попыток.\n", a);
aaz:
getch ();
printf ("\n");
}
m () {printf ("Вызвали первую функцию.\n");}
n () {printf ("Вызвали вторую функцию.\n");}
o () {printf ("Вызвали третью функцию.\n");}
p (float a) {printf ("Длина окружности радиуса %.4g равна %.4g.\n", a, 2 * g * a);}
q (int a)
{
int b;
for (b = 0; b < a && b < 200; b++) printf ("%c", y);
printf ("\n");
}
float s (float a) {return 2 * g * a;}
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p82
Начальный курс C и C++
Язык Turbo C 2.0
Количество больших программ: 1
1 - 15k, 2 - 16k, 6 - 17k, 7 - 23k, 12 - 24k
13 - 25k, 16 - 26k */
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float aa (float);
int *ad (int *);
ag (int *);
ah (); ai (); aj ();
main ()
{
int a, b, c;
char d [80], e [20];
char f [10] = {1, 23, 4, 7, 8, 0, 1, 9, 4, 7};
char g [5] [20];
float j, k;
float *m;
int *p, *q;
char *s = "String of Letters in Different Registers";
char *t;
char *v [] = {"exe", "com", "dat", "c", "pas", "cpp"};
int **y;
printf ("? (1-2) ");
scanf ("%i", &a);
if (a == 1) goto aaa; /* простые программы */
if (a == 2) goto aab; /* специальный ввод */
printf ("\n");
return;
aaa:
printf ("1. ");
for (a = 1; a < 1000; a++)
{
if (a % 7) continue;
printf ("%i ", a);
}
strcpy (d, "Привет, ");
strcpy (e, "мир!");
printf ("\n\n3. ");
puts (d); puts (e);
strcat (d, e);
puts (d); puts (e);
strcpy (g [0], "Turbo Basic");
strcpy (g [1], "Turbo Pascal");
strcpy (g [2], "Borland C++");
strcpy (g [3], "Turbo Prolog");
strcpy (g [4], "Paradox");
printf ("6. Неотсортированный массив:");
for (a = 0; a < 10; a++) printf (" %i", f [a]);
for (a = 0; a < 9; a++)
for (b = 0; b < 9; b++)
if (f [b] < f [b + 1])
{
c = f [b];
f [b] = f [b + 1];
f [b + 1] = c;
}
printf ("\nОтсортированный массив:");
for (a = 0; a < 10; a++) printf (" %i", f [a]);
j = 10.1;
m = &j;
k = *m;
printf ("\n7. j = %g, k = %g.\n", j, k);
(*m)++;
printf ("j = %g, k = %g.\n", j, k);
k = 1 + *m * k;
printf ("j = %g, k = %g.\n", j, k);
a = 10;
p = &a;
q = p;
printf ("8. %p, ", p);
printf ("%p, ", q);
printf ("%i, %i.\n", a, *q);
j = 10.1;
p = (int *) &j;
k = *p;
printf ("9. j = %.4g, k = %.4g.\n", j, k);
p = &a;
printf ("10. %p, ", p++);
printf ("%p.\n", p);
printf ("11. Строка будет напечатана заглавными буквами.\n");
a = 0;
while (s [a]) printf ("%c", toupper (s [a++]));
printf ("\n");
printf ("12. Строка будет напечатана строчными буквами.\n");
t = s;
while (*t) printf ("%c", tolower (*t++));
a = 7;
p = &a;
y = &p;
printf ("\n14. a = %i, p = %p, y = %p.\n", a, p, y);
(*p)++;
printf ("a = %i, p = %p, y = %p.\n", a, p, y);
**y = 12;
printf ("a = %i, p = %p, y = %p.\n", a, p, y);
j = 5.2;
printf ("15. Квадрат числа %.4g равен %.4g.\n", j, aa (j));
ad (&a);
a = 10;
ag (&a);
ah ();
a = 1;
ai ();
printf ("19. В функции \"main\" значение \"a\" равно %i.\n", a);
printf ("20. ");
for (a = 1; a <= 3; a++)
{
printf ("Вызов # %i.\n", a);
aj ();
printf ("Вызов # %i.\n", a);
aj ();
}
goto aaz;
aab:
printf ("2. Введите строку длиной менее 80 символов: ");
gets (d); gets (d);
printf ("Вы ввели строку: %s.\n", d);
printf ("Введите еще одну строку длиной менее 80 символов: ");
scanf ("%s", d);
printf ("Вы ввели строку: ");
puts (d);
printf ("4. Введите строку: ");
gets (d); gets (d);
printf ("Строка \"%s\" имеет длину %i символов.\n", d, strlen (d));
printf ("13. ");
do {
do {
printf ("Файлы с расширением: 1. exe; 2. com; 3. dat; 4. c; ");
printf ("5. pas; 6. cpp; 7. quit.\nВаш выбор: ");
scanf ("%i", &a);
} while (a < 1 || a > 7);
if (a == 7) break;
strcpy (d, "dir *.");
strcat (d, v [a - 1]);
system (d);
printf ("\n");
} while (1);
aaz:
getch ();
printf ("\n");
}
float aa (float a) {return a * a;}
int *ad (int *a)
{
*a = *a * *a;
return a;
}
ag (int *a) {*a = *a * *a;}
ah ()
{
int a;
for (a = 0; a < 80; a++) putch ('-');
}
ai ()
{
int a;
a = 10;
printf ("В функции \"ai\" значение \"a\" равно %i.\n", a);
}
aj ()
{
int a = 1;
static int b = 1;
printf ("a = %i, b = %i.\n", a++, b++);
}
» Кликните сюда для просмотра оффтоп текста.. «
Код
p43 - 1
#include <stdio.h>
/* Пример 1. */
main ()
{
int year, month;
p44 - 2
year = 1996;
printf ("Сейчас %i год.\n", year);
}
float func (int n, float f, long double ld);
float func (int, float, long double);
p50 - 3
if (условие) оператор;
if (0 < 1) printf ("0 меньше 1");
if (0 > 1) printf ("0 больше 1");
if (0 == 1) printf ("0 равно 1");
for (инициализация; условие; изменение) оператор;
p51 - 4
if (i > 10) {printf ("Слишком много.\n"); i /= 2;}
x = y; y++; mul (x, y);
x = y; y++; mul (x, y );
i = -5536; j = 60000;
тип <список_переменных>;
p55 - 5
int x, y, z;
float radius;
unsigned char ch;
long double integral;
ch = '\n'; printf ("%c", ch);
p58 - 6
printf ("\n");
printf ("\a");
printf ("\07");
printf ("\7");
printf ("\0x7");
p60 - 7
char str [80];
тип имя_переменной = константное_выражение;
int pr = 24;
char c = 'c', ch = '0';
(тип) выражение;
p63 - 8
(float) x / 2;
(float) (x / 2);
printf ("%05i", 15);
scanf ("%i%*c%i", &i, &j);
scanf ("%5s", str);
p65 - 9
scanf ("%iplus%i", &i, &j);
scanf ("%10[A-Z1-5]%s", s);
x = x + 1; ++x; x++;
a < 0; 101 >= 105; 'a' == 'A'; 'a' != 'A';
if ((f = x - y) > 0) printf ("Число x больше, чем y.\n");
p71 - 10
a = b = c = x * y;
m -= 20; m = m - 20;
m *= 20; m = m * 20;
m /= 10; m = m / 10;
m %= 10; m = m % 10;
p72 - 11
if (ch & 4) printf ("3 бит содержит 1, состояние \"on\".\n");
value >> число позиций;
value << число позиций;
x = 9 << 3 = 01001000;
x = 9 >> 3 = 00000001;
p73 - 12
x = 9 >> 5 = 00000000;
выр1 ? выр2 : выр3;
max = x > y ? x : y;
abs = x > 0 ? x : -x;
x > y ? x : y = 1;
p76 - 13
if (x == 0) printf ("Число равно нулю.\n"); else printf ("Число не равно нулю.\n");
if (!x) printf ("Число равно нулю.\n"); else printf ("Число не равно нулю.\n");
if (x) if (y) оператор1; else оператор2;
if (x) {if (y) оператор1;} else оператор2;
for (i = 0; i < 10; i++) printf ("%i ", i);
p79 - 14
for (i = 9; i >= 0; i--) printf ("%i ", i);
for (ch = '0'; ch != 'N';) scanf ("%c", &ch);
for (;;) printf ("Бесконечный цикл ");
for (i = 1; 1; i++) printf ("Бесконечный цикл ");
for (i = 10; i > 6; i++) printf ("Бесконечный цикл ");
p80 - 15
for (i = 0; i < 10000; i++);
тип <имя массива> [размер1] [размер2] ... [размерN];
тип <имя массива> [размер];
тип <имя массива> [размер1] [размер2];
int a [100];
p83 - 16
колич. байт = <размер базового типа> * <колич. элементов>;
unsigned arr [40]; long double al [1000]; char ch [80];
char str [11];
колич. байт = <размер типа данных> * <колич. строк> * <колич. столбцов>;
a [0] [0], a [0] [1], a [0] [2], a [0] [3], a [1] [0], a [1] [1], a [1] [2],
a [1] [3], a [2] [0], a [2] [1], a [2] [2], a [2] [3];
p88 - 17
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;
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 - 18
char str [15] = {'B', 'o', 'r', 'l', 'a', 'n', 'd', ' ', 'C', '+', '+'};
char str [15] = "Borland C++";
char str [80] = "Это объявление и инициализация массива символов.";
char str [] = "Это объявление и инициализация массива символов.";
int mass [] = {1, 2, 3, 1, 2, 3, 4};
p89 - 19
int arr [] [3] = {1, 2, 3, 5, 6, 7, 8, 9, 0};
тип *<имя переменной>;
char *ch;
int *temp, i, *j;
float *pf, f;
p93 - 20
p = p + 3;
p1 = p1 + 10;
<p> = <p> + n * <колич. байт памяти базового типа указателя>;
char *errors [] = {"Не могу открыть файл", "Не могу закрыть файл",
"Ошибка размещения", "Системная ошибка"};
int **point;
p97 - 21
f (int x, int y, float z);
тип <имя функции> (список параметров);
int func (int a, float b, char *c);
int func (int, float, char *);
register int quick;
p106 - 22
static int count = 10;
» Кликните сюда для просмотра оффтоп текста.. «
Код
p49 - 1
<тип возвращаемого значения> <имя функции> (список параметров)
{
/* тело функции */
}
p58 - 2
A B 0 1
1010 1011 0000 0001
p62 - 3
char ch; int i; float f; double d; long double r;
r = ch * 2 + (i - .5) + (f + d) - 7;
p72 - 4
ch = ch & 127;
ch = 'A';
'A' = 11000001;
127 = 01111111;
'A' & 127 = 01000001;
p72 - 5
ch = ch | 128;
'A' = 11000001;
128 = 10000000;
'A' | 128 = 11000001;
p75 - 6
if (условие) оператор;
else if (условие) оператор;
else if (условие) оператор;
...
else оператор;
p79 - 7
unsigned char ch;
for (ch = 'А'; ch <= 'Я'; ch++) printf ("%c ", ch);
p82 - 8
for () {
while () {
for () {
...
goto exit;
...
}
}
}
exit: printf ("Быстрый выход из вложенных циклов.\n");
p91 - 9
void *pv;
float f, *pf;
pf = &f;
pv = pf;
pf = (float *) pv;
p92 - 10
int *p;
p = &x;
p = (int *) &x;
p93 - 11
int plus [10];
p1 = plus;
p1 = &plus [0];
p95 - 12
int *x [10];
x [2] = &y;
p96 - 13
char *pc;
pc = "Привет, мир!";
Автор: jura_k 6.04.2018 - 12:52
Ещё раз то же самое.
20 задач, 10 килобайт кода, 28 килобайт исполняемого файла.
Условия задач:
» Кликните сюда для просмотра оффтоп текста.. «
11.1.1.
алг Деление дробей
нач
цел a, b, c, d, m, n;
ввод a, b, c, d;
m = a * d;
n = b * c;
вывод m, n;
кон
13.1.2. Составить алгоритм решения квадратного уравнения ax^2 + bx + c = 0.
16.1.3. Дано целое положительное число n. Вычислить n!
18.1.4. Даны два натуральных числа M и N. Вычислить их наибольший общий делитель НОД (M, N).
19.1.5. Составить алгоритм вычисления степенной функции с целым показателем y = x^k, где k - целое число, x != 0.
21.1.6. Даны декартовы координаты трех вершин треугольника на плоскости. Составить алгоритм определения площади треугольника.
21.2.7. Дана скорость ракеты при выходе за пределы атмосферы Земли.
Составить алгоритм определения того, как будет двигаться ракета после выключения двигателей. (Напомним величины трех космических скоростей: 7,5 км/с; 11,2 км/с; 16,4 км/с.)
21.3.8. Даны три положительных числа. Составить алгоритм, определяющий, могут ли они быть длинами сторон треугольника.
21.4.9. Пусть компьютер способен выполнять только две арифметические операции - сложение и вычитание. Составить алгоритмы:
а) умножения двух целых чисел;
б) целочисленного деления двух чисел;
в) получения остатка от целочисленного деления двух чисел.
21.5.10. Построить алгоритм решения биквадратного уравнения, используя как вспомогательный алгоритм решения квадратного уравнения.
21.6.11. Составить алгоритм нахождения НОД трех натуральных чисел, используя вспомогательный алгоритм нахождения НОД двух чисел.
33.1.12. Оттранслируйте с алгоритмического языка алгоритм выбора наибольшего значения из трех.
46.1.13. Для следующих формул записать соответствующие арифметические выражения:
а) a + bx + cyz;
б) ((ax - b)x + c)x - d;
в) (a + b) / c + c / ab;
г) (x + y) / a1 * a2 / (x - y);
д) 10^4 alpha - 3 1/5 beta;
е) (1 + x / 2! + y / 3!) / (1 + 2 / (3 + xy)).
47.2.14. Записать математические формулы, соответствующие следующим выражениям:
а) (p + q) / (r + s) - p * q / (r * s);
б) 1e3 + beta / (x - gamma * delta);
в) a / b * (c + d) - (a - b) / b / c + 1e-8.
47.3.15. Почему аргумент функции всегда записывают в скобках? Например, пишут ln (5), а не ln 5?
47.4.16. Для следующих формул записать соответствующие арифметические выражения:
а) (1 + x)^2; б) sqrt (1 + x^2); в) cos^2 x^2;
г) log2 x/5; д) arcsin x; е) (exp x + exp -x) / 2;
ж) x ^ sqrt 2; з) (1 + x) ^ 1/3; и) sqrt (x^8 + 8^x);
к) (xyz - 3.3 abs (x + y ^ 1/4)) / (10^7 + ln 4!);
л) (beta + sin^2 pi^4) / (cos 2 + abs ctg gamma).
47.5.17. Вычислить значения выражений:
а) trunc (6.9); б) trunc (6.2); в) 20 div 6;
г) 2 div 5; д) round (6.9); е) round (6.2);
ж) 20 mod 6; з) 2 mod 5;
и) 3 * 7 div 2 mod 7 / 3 - trunc (sin (1)).
47.6.18. Определить тип выражения:
а) 1 + 0.; б) 20 / 4; в) sqr (4);
г) sqrt (16); д) sin (0); е) trunc (-3.14).
47.7.19. Если y - вещественная переменная, а n - целая, то какие из следующих операторов присваивания правильные, а какие нет:
а) y = n + 1; б) n = y - 1; в) n = 4.;
г) y = trunc (y); д) y = n div 2; е) y = y div 2;
ж) n = n / 2; з) n = sqr (sqrt (n)).
47.8.20. Поменять местами значения целых переменных x и y, не используя дополнительные переменные. Найдя такой алгоритм, определить, в чем его недостаток по сравнению с методом обмена через третью переменную. Можно ли его применять для вещественных чисел?
-----
48.9.21. Присвоить целой переменной h значение цифры, стоящей в разряде сотен в записи положительного целого числа k (например, если k = 28796, то h = 7).
48.10.22. Целой переменной S присвоить значение суммы цифр трехзначного целого числа k.
48.11.23. Какую задачу решает следующая программа? Можно ли того же самого результата достичь более простым способом?
program test
type natur = 1..maxint;
var n: natur;
x: real;
begin readln (n);
x = 0;
while n > 0 do
begin
x = x + 1;
n = n - 1;
end;
writeln (x);
end.
56.1.24. Что будет напечатано в результате работы программы, если в качестве исходных данных заданы числа 10 и -20?
program roots;
var b, c, d: real;
begin
read (b, c);
d = sqrt (sqr (b) - 4 * c);
writeln ('x1 = ', (-b + d) / 2, ', x2 = ', (-b - d) / 2);
end.
56.2.25. Что будет напечатано в результате работы программы, если последовательно вводятся два значения 34, 79?
program less;
var x: real; t: boolean;
begin
read (x);
t = x < round (x);
read (x);
t = t and (x < trunc (x));
writeln (t);
end.
56.3.26. Что будет напечатано в результате работы программы, если последовательно вводятся три числа: 36, -6, 2345?
program abc;
var a, b: integer;
begin
read (a, b, a);
writeln (a, b:2, a:5);
end.
57.4.27. Составьте программу вычисления суммы двух целых чисел, которая будет вести диалог с пользователем в следующем виде (на месте многоточий - вводимые и выводимые числа):
ВВЕДИТЕ ДВА СЛАГАЕМЫХ a = . . . . . b = . . . . . РЕЗУЛЬТАТ ВЫЧИСЛЕНИЙ a + b = . . . . .
62.1.28. Вычислить значения логических выражений:
а) k mod 7 = k div 5 - 1, k = 15;
б) odd (trunc (10 * p)), p = .182;
в) not odd (n), n = 0;
г) t and (p mod 3 = 0), t = true, p = 10101;
д) (x * y != 0) and (y > x), x = 2, y = 1;
е) a or not b, a = false, b = true.
а) (1 = 3 - 1) = false;
б) odd (1) = true;
в) true;
г) true and true = true;
д) true and false = false;
е) fasle or false = false.
62.2.29. Если a = true и x = 1, то какое значение получит логическая переменная d после выполнения оператора присваивания:
а) d = x < 2;
б) d = not a or odd (x);
в) d = ord (a) != x.
а) true;
б) false or true = true;
в) 1 != 1 = false.
62.3.30. Написать оператор присваивания, в результате выполнения которого логическая переменная t получит значение true, если высказывание истинно, и значение false в противном случае для следующих высказываний:
а) из чисел x, y, z только два равны между собой;
б) x положительное число;
в) каждое из чисел x, y, z положительно;
г) только одно из чисел x, y, z положительно;
д) p делится нацело на q;
е) цифра 5 входит в десятичную запись трехзначного целого числа k.
а) a = x == y && x != z || (x == z || y == z) && x != y;
б) a = x > 0;
в) a = x > 0 && y > 0 && z > 0;
г) a = x > 0 && y <= 0 && z <= 0 || x <= 0 && (y > 0 && z <= 0 || y <= 0 && z > 0);
д) a = p % q == 0;
е) a = k % 10 == 5 || k / 10 % 10 == 5 || k / 100 == 5.
63.1.31. По длинам трех сторон треугольника a, b, c вычислить его площадь.
64.2.32. В следующем фрагменте программы вычисляется сумма конечного числа членов гармонического ряда:
1 + 1 / 2 + 1 / 3 + ... + 1 / i + ...
Суммирование прекращается, когда очередное слагаемое становится меньше epsilon или целая переменная i достигает значения maxint.
65.1.33. Вычислить сумму целых чисел от M до N путем прямого суммирования.
67.1.34. Получить на экране коды букв латинского алфавита.
67.3.35. Составить программу, по которой будет вводиться последовательность символов до тех пор, пока не встретится маленькая или большая латинская буква z. Подсчитать, сколько раз среди вводимых символов встречалась буква
W.
68.4.36. Вычислить сумму квадратов всех целых чисел, попадающих в интервал (ln x, exp x), x > 1.
68.5.37. Вычислить количество точек с целочисленными координатами, попадающих в круг радиуса R (R > 0) с центром в начале координат.
68.6.38. Напечатать таблицу значений функции sin x и cos x на отрезке [0, 1] с шагом 0.1 в следующем виде:
x sin x cos x
0.0000 0.0000 1.0000
0.1000 0.0998 0.9950
... ... ...
1.0000 0.8415 0.5403
68.7.39. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр.
68.8.40. Дано целое n > 2. Напечатать все простые числа из диапазона [2, n].
-----
Решение задач:
» Кликните сюда для просмотра оффтоп текста.. «
Код
/* p11
Основы программирования
Язык Turbo C 2.0 */
/* 1 - 15k, 2 - 22k, 4 - 23k, 6 - 24k, 10 - 26k
13 - 27k, 20 - 28k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
aa ();
ab ();
ac (float);
ad (float, float);
ae (float, float, float);
af (float, float, float, float);
ag (int); /* перевод целого числа в натуральное */
float aj (int, int, int, int); /* расстояние между двумя точками на плоскости */
float ak (float, float, float); /* площадь треугольника по формуле Герона */
main ()
{
int a, b, c, d, e, f; /* ввод данных */
float g; /* ввод данных */
int j, k, l; /* натуральные числа */
int m, n, o;
float p, q, r;
printf ("? (1-3) ");
scanf ("%i", &a);
if (a == 1) goto aaa; /* 3 int */
if (a == 2) goto aab; /* 6 int, 1 float */
if (a == 3) goto aac; /* специальный ввод */
printf ("\n");
return;
aaa:
printf ("Введите три целых числа: ");
scanf ("%i%i%i", &a, &b, &c);
/* 13.1.2.2. Составить алгоритм решения квадратного уравнения
ax^2 + bx + c = 0. */
printf ("2. ");
if (a == 0)
if (b == 0)
if (c == 0)
ab ();
else
aa ();
else
{
p = (float) -c / b;
ac (p);
}
else
{
m = b * b - 4 * a * c;
if (m < 0)
aa ();
else
if (m == 0)
{
p = -b / 2. / a;
ac (p);
}
else
{
p = (-b - sqrt (m)) / 2 / a;
q = (-b + sqrt (m)) / 2 / a;
ad (p, q);
}
}
/* 16.1.3.3. Дано целое положительное число n. Вычислить n! */
m = 1;
n = a + 1;
for (o = 2; o < n; o++) m *= o;
printf ("3. %i! = %i.\n", a, m);
/* 18.1.4.4. Даны два натуральных числа M и N. Вычислить их наибольший
общий делитель НОД (M, N). */
m = j = ag (a); n = k = ag (b); l = ag (c);
while (m - n) if (m > n) m -= n; else n -= m;
printf ("4. НОД (%i, %i) = %i.\n", a, b, m);
/* 21.3.8.8. Даны три положительных числа. Составить алгоритм,
определяющий, могут ли они быть длинами сторон треугольника. */
if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a)
printf ("8. Числа могут быть длинами сторон треугольника.\n");
else
printf ("8. Числа не могут быть длинами сторон треугольника.\n");
/* 21.4.9.9. Пусть компьютер способен выполнять только две
арифметические операции - сложение и вычитание. Составить алгоритмы:
а) умножения двух целых чисел;
б) целочисленного деления двух целых чисел;
в) получения остатка от целочисленного деления двух чисел. */
m = 0;
for (n = 0; n < k; n++) m += j;
printf ("9. %i * %i = %i, ", j, k, m);
m = j;
n = 0;
while (m >= k) {m -= k; n++;}
printf ("%i / %i = %i, %i %% %i = %i.\n", j, k, n, j, k, m);
/* 21.5.10.10. Построить алгоритм решения биквадратного уравнения,
используя как вспомогательный алгоритм решения квадратного уравнения.
*/
printf ("10. ");
if (a == 0)
if (b == 0)
if (c == 0)
ab ();
else
aa ();
else
{
p = (float) -c / b;
if (p < 0)
aa ();
else
if (p == 0)
ac (0);
else
ad (-sqrt (p), sqrt (p));
}
else
{
m = b * b - 4 * a * c; /* дискриминант биквадратного уравнения */
if (m < 0)
aa ();
else
if (m == 0)
{
p = -b / 2. / a;
if (p < 0)
aa ();
else
if (p == 0)
ac (0);
else
ad (-sqrt (p), sqrt (p));
}
else
{
p = (-b - sqrt (m)) / 2 / a;
q = (-b + sqrt (m)) / 2 / a;
if (p < 0)
if (q < 0)
aa ();
else
if (q == 0)
ac (0);
else
ad (-sqrt (q), sqrt (q));
else
if (p == 0)
if (q < 0)
ac (0);
else
ae (-sqrt (q), 0, sqrt (q));
else
if (q < 0)
ad (-sqrt (p), sqrt (p));
else
if (q == 0)
ae (-sqrt (p), 0, sqrt (p));
else
af (-sqrt (q), -sqrt (p), sqrt (p), sqrt (q));
}
} /* 1 */
/* 21.6.11.11. Составить алгоритм нахождения НОД трех натуральных
чисел, используя как вспомогательный алгоритм находения НОД двух чисел.
*/
m = j; n = k;
while (m - n) if (m > n) m -= n; else n -= m;
n = l;
while (m - n) if (m > n) m -= n; else n -= m;
printf ("11. НОД (%i, %i, %i) = %i.\n", a, b, c, m);
/* 33.1.12.12. Оттранслируйте с алгоритмического языка алгоритм выбора
наибольшего значения из трех. */
printf ("12. ");
if (a >= b && a >= c)
printf ("Первое число больше.\n");
else
if (b >= a && b >= c)
printf ("Второе число больше.\n");
else
printf ("Третье число больше.\n");
/* 48.9.21.13. Присвоить целой переменной h значение цифры, стоящей в
разряде сотен в записи положительного целого числа k (например, если
k = 28796, то h = 7). */
printf ("13. h = %i.\n", a / 100 % 10);
/* 48.10.22.14. Целой переменной S присвоить значение суммы цифр
трехзначного целого числа k. */
m = 0;
n = a;
while (n)
{
m += n % 10;
n /= 10;
}
printf ("14. Сумма цифр числа %i.\n", m);
/* 63.1.31.16. По длинам трех сторон треугольника a, b, c вычислить его
площадь. */
printf ("16. Площадь треугольника %.4g.\n", ak (a, b, c));
/* 64.2.32.17. В следующем фрагменте программы вычисляется сумма
конечного числа членов гармонического ряда:
1 + 1 / 2 + 1 / 3 + ... + 1 / i + ...
Суммирование прекращается, когда очередное слагаемое становится меньше
epsilon или целая переменная i достигает значения maxint. */
p = 0;
m = a;
while (m > 0) p += 1. / m--;
printf ("17. Сумма гармонического ряда %g.\n", p);
/* 65.1.33.18. Вычислить сумму целых чисел от M до N путем прямого
суммирования. */
m = 0; /* сумма */
n = a; /* счетчик */
while (1)
{
if (n > b) break;
m += n;
if (n == 32767) break;
n++;
}
printf ("18. Сумма чисел от %i до %i равна %i.\n", a, b, m);
/* 67.1.34.19. Получить на экране коды букв латинского алфавита. */
printf ("19.\n");
for (m = 'a'; m <= 'z'; m++) printf ("%c - %-3i ", m, m);
printf ("\n");
goto aaz;
aab:
printf ("Введите шесть целых чисел: ");
scanf ("%i%i%i%i%i%i", &a, &b, &c, &d, &e, &f);
printf ("Введите рациональное число: ");
scanf ("%f", &g);
/* 11.1.1.1. Деление дробей. */
printf ("1. %i / %i : %i / %i = %i / %i.\n", a, b, c, d, a * d, b * c);
/* 19.1.5.5. Составить алгоритм вычисления степенной функции с целым
показателем y = x^k, где k - целое число, x != 0. */
if (!g)
p = 0;
else
{
p = 1;
if (a > 0) for (m = 0; m < a; m++) p *= g;
if (a < 0) for (m = 0; m > a; m--) p /= g;
}
printf ("5. %g ^ %i = %g.\n", g, a, p);
/* 21.1.6.6. Даны декартовы координаты трех вершин треугольника на
плоскости. Составить алгоритм определения площади треугольника. */
p = aj (a, b, c, d);
q = aj (a, b, e, f);
r = aj (c, d, e, f);
printf ("6. Площадь треугольника %g.\n", ak (p, q, r));
/* 21.2.7.7. Дана скорость ракеты при выходе за пределы атмосферы
Земли. Составить алгоритм определения того, как будет двигаться ракета
после выключения двигателей. (Напомним величины трех космических
скоростей: 7,5 км/с; 11,2 км/с; 16,4 км/с.) */
printf ("7. Ракета ");
if (g < 7.5) printf ("упадет на Землю");
else if (g == 7.5) printf ("будет двигаться вокруг Земли по кругу");
else if (g < 11.2) printf ("будет двигаться вокруг Земли по эллипсу");
else if (g == 11.2) printf ("будет двигаться вокруг Солнца по кругу");
else if (g < 16.4) printf ("будет двигаться вокруг Солнца по эллипсу");
else if (g == 16.4) printf ("улетит от Солнца по параболе");
else printf ("улетит от Солнца по гиперболе");
printf (".\n");
goto aaz;
aac:
/* 57.4.27.15. Составьте программу вычисления суммы двух целых чисел,
которая будет вести диалог с пользователем в следующем виде (на месте
многоточий - вводимые и выводимые числа):
ВВЕДИТЕ ДВА СЛАГАЕМЫХ
a = . . . . .
b = . . . . .
РЕЗУЛЬТАТ ВЫЧИСЛЕНИЙ
a + b = . . . . . */
printf ("15. Введите два слагаемых:\na = ");
scanf ("%i", &a);
printf ("b = ");
scanf ("%i", &b);
printf ("Результат вычислений:\na + b = %i\n\n", a + b);
/* 67.3.35.20. Составить программу, по которой будет вводиться
последовательность символов до тех пор, пока не встретится маленькая или
большая латинская буква z. Подсчитать, сколько раз среди вводимых
символов встречалась буква W. */
printf ("20. Введите символ: ");
b = 0;
while (1)
{
a = getche ();
if (a == 'z') break;
if (a == 'W') b++;
}
printf ("\nБуква W встретилась %i раз.\n", b);
aaz:
j++; k++; l++;
getch ();
printf ("\n");
}
aa () {printf ("Нет решений.\n");}
ab () {printf ("Решение - любое число.\n");}
ac (float a) {printf ("x = %.4g.\n", a);}
ad (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
ae (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
af (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}
ag (int a)
{
if (a == -32768) a = 32767;
if (a < 0) a = -a;
if (!a) a = 1;
return a;
}
float aj (int a, int b, int c, int d)
{
int e;
e = (c - a) * (c - a) + (d - b) * (d - b);
if (e < 0) e = 0;
return sqrt (e);
}
float ak (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);
}
Автор: indеx 9.04.2018 - 17:16
Привет.
Ты учишься программировать, или просто от нечего делать?
Автор: jura_k 12.05.2018 - 18:45
Я хочу прочитать книгу. А вообще мозгам надо работать. У меня, может, есть талант выстраивать структурированные конструкции, но в жизни это вообще нигде не требуется, только здесь. Иначе говоря, некоторые мыслительные способности "спят", а я хочу их использовать, чтобы получить от жизни удовльствие.
Получается эстетическое наслаждение, которое получает, например, музыкант, когда пишет симфонию.
Автор: льдинка 12.05.2018 - 18:54
jura_k
А почему не выучился на программиста? Сидел бы дома, деньги зарабатывал
Автор: Фарит 12.05.2018 - 19:19
jura_k
Твоя работа связана с программированием?
Автор: jura_k 12.05.2018 - 20:47
Цитата(Фарит @ 12.05.2018 - 19:19)
jura_k
Твоя работа связана с программированием?
Я безработный. Сижу дома, голодный, деньги не трачу, в магазин не хожу.
Цитата(льдинка @ 12.05.2018 - 18:54)
jura_k
А почему не выучился на программиста? Сидел бы дома, деньги зарабатывал
1) В 1987-ом году, когда я перевёлся в лицей, меня не определили в группу, занимающуюся компьютерами, а в группу, занимающуюся играми. Поэтому на программиста я не выучился.
2) В институт в 1993-ем пошёл на другой факультет.
3) 2000-ый - 2001-ый. Уволился из программистов три раза.
4) 2003-2005-ый. Отдел кадров не принял на програмииста.
5) 2014-ый - 2017-ый. MS-DOS работодателю не нужен. Смотрят анкету и пинок под зад.
Кроме того, я выяснил, сколько должен учиться программист, и понял, что это не для меня. Я учусь медленно. В несколько раз медленнее других людей. И вообще надо сначала учиться, а потом пахать, пахать, пахать.
Я навал вам пять причин, почему я не программист.
Автор: indеx 13.05.2018 - 2:01
Цитата(jura_k @ 12.05.2018 - 18:45)
Я хочу прочитать книгу. А вообще мозгам надо работать. У меня, может, есть талант выстраивать структурированные конструкции, но в жизни это вообще нигде не требуется, только здесь. Иначе говоря, некоторые мыслительные способности "спят", а я хочу их использовать, чтобы получить от жизни удовльствие.
Получается эстетическое наслаждение, которое получает, например, музыкант, когда пишет симфонию.
Есть такая штука, называется
Delphi. Там можно получить готовую программу, вообще ничего не программируя. Правда в этом случае программа и делать ничего полезного не будет, но по крайней мере она будет иметь пустое окошко, которое можно запускать, сворачивать, раскрывать на весь экран и закрывать. А если в это пустое окошко ещё и накидать каких-нибудь кнопочек, полей для ввода текста и других элементов, то она будет выглядеть вообще круто. После чего можно будет смело всем заявлять: "Я разработал программу!"
Если интересно, могу дать ссылочки и подсказать вкратце, что да как
Автор: jura_k 13.05.2018 - 13:40
То же самое есть в "Visual C++ 6.0" и "Visual Basic 5.0". И то, и другое запускается из-под "Windows 95".
Конкретно сегодня я занимался разработкой спиралевидных карт в игре "Heroes III", а вовсе не программированием.
Автор: indеx 14.05.2018 - 10:56
Ясно Если когда-нибудь вдруг захочешь похвалиться успехами, то будет интересно
Автор: jura_k 14.05.2018 - 16:46
Работа мозга - это и есть самая главная награда от всех этих "телодвижений".
Автор: jura_k 27.06.2018 - 7:14
ООП.
Код
/* p125
Язык Borland C++ 3.1
Структуры */
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
/* Класс: queue */
class queue
{
int a [10]; // очередь
int begin, end; // маркеры начала и конца очереди
public:
void initialization (); // инициализация пустой очереди
void put (int); // поместить число в очередь
get (); // взять число из очереди
};
void queue::initialization ()
{
begin = end = 0;
}
void queue::put (int d)
{
if (end == 10)
cout << "Очередь полна.\n";
else
a [end++] = d;
}
queue::get ()
{
if (begin == end)
{
cout << "Очередь пуста.\n";
return 0;
}
return a [begin++];
}
/* Структуры */
struct ac
{
int a;
char b;
};
struct ad // поле битов
{
int b1: 1; int b2: 1; int b3: 1; int b4: 1;
int b5: 1; int b6: 1; int b7: 1; int b8: 1;
};
union ae
{
char a;
struct ad bb;
};
ee (struct ac); // передача структуры в функцию
ef (union ae); // декодирование символа
int j = 100;
main ()
{
int a, j;
char d [80];
float g;
struct aa
{
int a;
char b;
};
struct ab
{
int a;
char b;
};
struct aa bb;
struct ab bc;
struct ac bd;
union ae be;
queue dd, de; // очередь
printf ("? (1-2) ");
scanf ("%i", &a);
if (a == 1) goto aaa; // ввод данных
if (a == 2) goto aab; // простые программы
printf ("\n");
return 0;
aaa:
/* p129 */
printf ("3. Введите декодируемый символ:\n");
do {
be.a = getche ();
printf (": ");
ef (be);
printf ("\n");
} while (be.a != 'q');
/* p164 */
cout << "4. C++ - хороший язык.\n";
printf ("Можно использовать функцию printf ().\n");
cout << "Введите число: ";
cin >> a;
cout << "Вы ввели число " << a << ".\n";
cout << "Введите строку: ";
cin >> d;
cout << d;
g = 1.2345;
cout << "\nПеременная типа float g = " << g << ".\n";
goto aaz;
aab:
/* p125 */
bb.a = 1;
bb.b = 'f';
bc.a = bb.a;
bc.a++;
/* p126 */
bd.a = 1;
bd.b = '2';
ee (bd); // передача структуры в функцию
/* p166 */
j = 5;
cout << "5. Локальная переменная " << j << ".\n";
cout << "Глобальная переменная " << ::j << ".\n";
/* p169 */
dd.initialization ();
de.initialization ();
dd.put (7);
dd.put (9);
dd.put (11);
cout << "6. " << dd.get () << ", ";
cout << dd.get () << ", ";
cout << dd.get () << ", ";
cout << dd.get () << ".\n";
dd.put (7);
dd.put (9);
dd.put (11);
cout << dd.get () << ", " << dd.get () << ", " << dd.get () << ", "
<< dd.get () << ".\n";
for (a = 0; a < 12; a++) de.put (a * a);
for (a = 0; a < 12; a++) cout << de.get () << " ";
cout << "\n";
aaz:
getch ();
printf ("\n");
return 0;
}
ee (struct ac bb)
{
printf ("2. %i, %i.\n", bb.a, bb.b);
return 0;
}
ef (union ae bc)
{
if (bc.bb.b8) printf ("1"); else printf ("0");
if (bc.bb.b7) printf ("1"); else printf ("0");
if (bc.bb.b6) printf ("1"); else printf ("0");
if (bc.bb.b5) printf ("1"); else printf ("0");
if (bc.bb.b4) printf ("1"); else printf ("0");
if (bc.bb.b3) printf ("1"); else printf ("0");
if (bc.bb.b2) printf ("1"); else printf ("0");
if (bc.bb.b1) printf ("1"); else printf ("0");
return 0;
}
Автор: hook 8.07.2018 - 12:30
Здесь основной состав форума далек от языков программирования.... если что то выкладываешь, так объясни для чего и каких целей-задач этот код....
Автор: indеx 10.07.2018 - 12:03
Цитата(hook @ 8.07.2018 - 12:30)
Здесь основной состав форума далек от языков программирования.... если что то выкладываешь, так объясни для чего и каких целей-задач этот код....
Полностью поддерживаю.
Автор: jura_k 22.07.2018 - 12:57
Читаю книгу "Начальный курс C и C++". При переходе от C к C++ есть несколько примеров кода, я их слил в одну программу, реализовал, запустил. Вывожу, что получилось.
Конкретно в этом коде - неправильно. Потому что на самом деле в классе есть собственный конструктор, совпадающий с именем класса, и не нужно определять новую функцию-конструктор класса.
Автор: jura_k 6.10.2018 - 16:52
Программа создана для решения учебных задач в среде Visual C++ 6.0.
Реализованы ввод данных, а также вывод результатов. В приложении рабочая версия программы и архив проекта.
За основу взята архитектура программы MFC.
https://yadi.sk/i/UHolQFkGn5cCrw - текст программы
https://yadi.sk/i/j1MtPspDY4GvLw - задачник
https://yadi.sk/i/S0R3tYR6rweFiw - текст программы
https://yadi.sk/d/thRbgTrYF5RuPg - архив проекта
https://yadi.sk/d/VzoSCO3oJwtQ5A - программа
http://sh.uploads.ru/oIWpT.png
http://s9.uploads.ru/KLRzN.png
Код программы:
» Кликните сюда для просмотра оффтоп текста.. «
Код
// Файл p11Doc.h
class CP11Doc:public CDocument
{
protected:
CP11Doc ();
DECLARE_DYNCREATE (CP11Doc);
int aa, ab, ac;
int ad, ae, af;
int ia [10];
int ka, kb, kc, kd;
int la, lb, lc;
double ib [10];
CString ic [10];
double ca, cb;
double da;
/* aa - режим отображения */
/* ab - код введённого символа */
/* ac - указатель на введённый символ */
/* ad - внутренний указатель обрабатываемого символа в строке в функции ga () */
/* ae - введённое целое число в функции ga () */
/* af - выбор режима программы */
/* da - введённое рациональное число в функции ga () */
/* ca ... cb - исходные данные, рациональные числа */
/* ka ... kd - исходные данные, целые числа */
/* la ... lc - исходные данные, натуральные числа */
/* ia [10] - массив целых чисел (результатов) для вывода на экран */
char ea [50]; // место для вводимых символов
void ga (); // перевод данных из символьной формы в цифровую
void gb (); // сборка целого числа из строки
void gc (); // сборка рационального числа из строки
void ha (); // решение задач
};
- - - - - - - - - - - - - - - - - - - -
// Файл p11Doc.cpp
#include "stdafx.h"
#include <math.h>
#include "p11.h"
#include "p11Doc.h"
CP11Doc::CP11Doc ()
{
aa = ab = ac = 0;
ea [0] = ia [0] = 0;
}
void CP11Doc::ga ()
{
if (aa == 0)
{
aa = 1;
ad = 0;
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad]) ad++;
gb ();
af = ae;
if (af < 2 || af > 3) aa = 2;
ac = ea [0] = 0;
return;
}
aa = 2;
ad = 0;
if (af == 2)
{
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad] != '-' && ea [ad]) ad++;
gb ();
ka = ae;
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad] != '-' && ea [ad]) ad++;
gb ();
kb = ae;
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad] != '-' && ea [ad]) ad++;
gb ();
kc = ae;
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad] != '-' && ea [ad]) ad++;
gb ();
kd = ae;
}
if (af == 3)
{
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad] != '-' && ea [ad] != '.' && ea [ad]) ad++;
gc ();
ca = da;
while ((ea [ad] < '0' || ea [ad] > '9') && ea [ad] != '-' && ea [ad] != '.' && ea [ad]) ad++;
gc ();
cb = da;
}
ha ();
}
void CP11Doc::gb ()
{
int a; // знак числа
ae = 0;
a = 1;
if (ea [ad] == '-') {a = -1; ad++;}
while (ea [ad] >= '0' && ea [ad] <= '9')
{
ae = ae * 10 + ea [ad] - '0';
ad++;
}
ae *= a;
}
void CP11Doc::gc ()
{
int a;
double b;
da = 0; // собираемое рациональное число
a = 1; // знак числа
b = .1; // множитель в дробной части числа
if (ea [ad] == '-') {a = -1; ad++;}
while (ea [ad] >= '0' && ea [ad] <= '9')
{
da = da * 10 + ea [ad] - '0';
ad++;
}
if (ea [ad] == '.')
{
ad++;
while (ea [ad] >= '0' && ea [ad] <= '9')
{
da += (ea [ad] - '0') * b;
ad++;
b /= 10;
}
}
da *= a;
}
void CP11Doc::ha ()
{
int a, b, c;
double d, e;
if (af == 2)
{
/* 11.1.1. */
ia [0] = ka * kd;
ia [1] = kb * kc;
/* 13.1.2. Составить алгоритм решения квадратного уравнения: ax^2 + bx + c = 0. */
if (ka == 0)
if (kb == 0)
if (kc == 0)
a = 3;
else
a = 0;
else
{
a = 1;
d = (double) -kc / kb;
}
else
{
b = kb * kb - 4 * ka * kc;
if (b < 0)
a = 0;
else
if (b == 0)
{
a = 1;
d = -kb / 2. / ka;
}
else
{
a = 2;
d = (-kb - sqrt (b)) / 2 / ka;
e = (-kb + sqrt (b)) / 2 / ka;
}
}
switch (a)
{
case 0: ic [0].Format ("2. Нет решений."); break;
case 1: ic [0].Format ("2. x = %.4g.", d); break;
case 2: ic [0].Format ("2. x1 = %.4g, x2 = %.4g.", d, e); break;
default: ic [0].Format ("2. Решение - любое число.");
}
/* 16.1.3. Вычислить n! */
a = 1;
b = ka + 1;
if (b > 20) b = 20;
for (c = 1; c < b; c++) a *= c;
ia [2] = a;
/* 18.1.4. Даны два натуральных числа M и N. Вычислить их наибольший общий делитель НОД (M, N). */
la = ka; lb = kb; lc = kc;
if (la < 0) la = -la; if (!la) la = 1;
if (lb < 0) lb = -lb; if (!lb) lb = 1;
if (lc < 0) lc = -lc; if (!lc) lc = 1;
a = la; b = lb;
while (a - b) if (a > b) a -= b; else b -= a;
ia [3] = a;
} // конец функции (af = 2)
if (af == 3)
{
/* 19.1.5. Вычислить степенную функцию с целым показателем y = x^k, где k - целое число, x != 0. */
ia [4] = a = b = (int) cb;
if (b < 0) b = -b;
if (ca == 0)
ib [0] = 0;
else
{
d = 1;
for (c = 0; c < b; c++) d *= ca;
if (a < 0) d = 1 / d;
ib [0] = d;
}
} // конец функции (af = 3)
}
- - - - - - - - - - - - - - - - - - - -
// Файл p11View.cpp
void CP11View::OnDraw (CDC *pDC)
{
CP11Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
CString a;
if (pdoc -> aa == 0)
{
pDC -> TextOut (10, 10, "Введите целое число:");
pDC -> TextOut (10, 35, pdoc -> ea);
a.Format ("code = %i", pdoc -> ab);
pDC -> TextOut (10, 60, a);
pDC -> TextOut (10, 85, "1. Нет ввода.");
pDC -> TextOut (10, 110, "2. Ввод целых чисел.");
pDC -> TextOut (10, 135, "3. Ввод рациональных чисел.");
return;
}
if (pdoc -> aa == 1)
{
pDC -> TextOut (10, 10, "Введите целое число:");
a.Format ("%i", pdoc -> af);
pDC -> TextOut (10, 35, a);
a.Format ("code = %i", pdoc -> ab);
pDC -> TextOut (10, 60, a);
pDC -> TextOut (10, 85, "1. Нет ввода.");
pDC -> TextOut (10, 110, "2. Ввод целых чисел.");
pDC -> TextOut (10, 135, "3. Ввод рациональных чисел.");
if (pdoc -> af == 2)
{
pDC -> TextOut (10, 160, "Введите четыре целых числа:");
pDC -> TextOut (10, 185, pdoc -> ea);
}
if (pdoc -> af == 3)
{
pDC -> TextOut (10, 160, "Введите два рациональных числа:");
pDC -> TextOut (10, 185, pdoc -> ea);
}
return;
}
if (pdoc -> af == 2)
{
pDC -> TextOut (10, 10, "Введите целое число:");
a.Format ("%i", pdoc -> af);
pDC -> TextOut (10, 35, a);
a.Format ("code = %i", pdoc -> ab);
pDC -> TextOut (10, 60, a);
pDC -> TextOut (10, 85, "1. Нет ввода.");
pDC -> TextOut (10, 110, "2. Ввод целых чисел.");
pDC -> TextOut (10, 135, "3. Ввод рациональных чисел.");
pDC -> TextOut (10, 160, "Введите четыре целых числа:");
pDC -> TextOut (10, 185, pdoc -> ea);
a.Format ("%i %i %i %i", pdoc -> ka, pdoc -> kb, pdoc -> kc, pdoc -> kd);
pDC -> TextOut (10, 210, a);
a.Format ("1. %i / %i : %i / %i = %i / %i.", pdoc -> ka, pdoc -> kb, pdoc -> kc, pdoc -> kd, pdoc -> ia [0], pdoc -> ia [1]);
pDC -> TextOut (10, 260, a);
pDC -> TextOut (10, 285, pdoc -> ic [0]);
a.Format ("3. %i! = %i.", pdoc -> ka, pdoc -> ia [2]);
pDC -> TextOut (10, 310, a);
a.Format ("4. НОД (%i, %i) = %i.", pdoc -> la, pdoc -> lb, pdoc -> ia [3]);
pDC -> TextOut (10, 335, a);
}
if (pdoc -> af == 3)
{
pDC -> TextOut (10, 10, "Введите целое число:");
a.Format ("%i", pdoc -> af);
pDC -> TextOut (10, 35, a);
a.Format ("code = %i", pdoc -> ab);
pDC -> TextOut (10, 60, a);
pDC -> TextOut (10, 85, "1. Нет ввода.");
pDC -> TextOut (10, 110, "2. Ввод целых чисел.");
pDC -> TextOut (10, 135, "3. Ввод рациональных чисел.");
pDC -> TextOut (10, 160, "Введите два рациональных числа:");
pDC -> TextOut (10, 185, pdoc -> ea);
a.Format ("%g %g", pdoc -> ca, pdoc -> cb);
pDC -> TextOut (10, 210, a);
a.Format ("5. %g ^ %i = %g.", pdoc -> ca, pdoc -> ia [4], pdoc -> ib [0]);
pDC -> TextOut (10, 260, a);
}
}
void CP11View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
CP11Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
pdoc -> ab = nChar;
if (nChar == 8)
{
if (pdoc -> ac) {pdoc -> ac--; pdoc -> ea [pdoc -> ac] = 0;}
goto aaa;
}
if (nChar == 13)
{
pdoc -> ga ();
goto aaa;
}
if (pdoc -> ac < 49)
{
pdoc -> ea [pdoc -> ac] = nChar;
pdoc -> ea [pdoc -> ac + 1] = 0;
pdoc -> ac++;
}
aaa:
Invalidate ();
CView::OnChar (nChar, nRepCnt, nFlags);
}
Автор: Ахинея 6.10.2018 - 19:22
Чувак, ты для чего так ужасно массивы объявляешь? Такими структурами никто, программирующие на плюсах, не пользуется. Юзай вектор из STL или динамически объявляй при помощи умных указателей из boost. А твой код выглядит пугающе, если честно...
Автор: jura_k 7.10.2018 - 7:00
А меня этому никто не учил.
В 1993-1997 "vector" ещё не было. И тогда я думал, как освоить программирование под MS-DOS, а о STL даже не слышал.
Даже сейчас про STL я знаю лишь то, что она существует, но даже в глаза не видел.
А что такое "умных указателей из boost"? И чем вам традиционный подход не нравится? Мне всего лишь массив нужен. Массива из BASIC'а 1990-го года вполне достаточно.
Автор: Ахинея 7.10.2018 - 10:39
Цитата(jura_k @ 7.10.2018 - 8:00)
А меня этому никто не учил.
В 1993-1997 "vector" ещё не было. И тогда я думал, как освоить программирование под MS-DOS, а о STL даже не слышал.
Даже сейчас про STL я знаю лишь то, что она существует, но даже в глаза не видел.
А что такое "умных указателей из boost"? И чем вам традиционный подход не нравится? Мне всего лишь массив нужен. Массива из BASIC'а 1990-го года вполне достаточно.
https://m.habr.com/post/140222/
Потому что то, что вы пишите - это не то чтобы прошлый век, так просто никогда старались не писать. Возможность реюзать код нулевая, как и читабельность. Использование ООП идёт в С++ рука об руку с динамическими указателями, ссылками и прочими структурами, тк как только код а-ля ваш встретится с нормальными задачами, он станет не то, что медленным, он станет не рабочим. Я не знаю, для чего вы это пишите все, видимо для личного пользования. Тк в реальной жизни, если бы я от соискателя такой код на собеседовании получила, я бы ... Устроила разнос хантерам, которые это собеседование назначили. А то, что кого-то чему-то не учили... Программирование - это самообучение на 90%, когда я заканчивала о лямбда-функциях тоже никто не слышал в плюсах, но это не значит, что я их не умею юзать. Следить за развитием технологий программирования - стандартная практика
Автор: jura_k 7.10.2018 - 11:04
Ну вот, а нам в школе это не рассказывали. Были два курса программирования и всё.
Ну что ж, перейду к конечным программам... Чтобы никто не читал мой код, а сразу переходили к приложению.
Что касается, зачем это надо - да чтобы книжку прочитать. У меня есть учебник "Основы программирования". Половина текста - теория Паскаля. Другая половина - задачи. Паскаль мне неинтересен, а задачи я решаю. Для решения этих задач буду использовать этот движок.
Автор: jura_k 7.10.2018 - 11:13
До той теории, которую вы рассказываете, мне как до Китая пешком. Это сложные задачи, а я занимаюсь простыми задачами. Для меня проблема - как вывести графику в Visual C++ 6.0, потому что толковых учебников нет. И Help'а нет. Придётся всё это изучать.
Стандартная практика - это учебник прочитать, вот это для меня стандартная практика.
Автор: Ахинея 8.10.2018 - 18:55
jura_k, я не знаю, зачем вы пишете свой код, но предполагаю, что программирование вам нравится. Если вы все время будете писать только книжные задачки из учебников, то шансов чему-то реально научиться очень мало.
http://russianaicup.ru/forum/index.php
Автор: jura_k 8.10.2018 - 20:58
Для меня вечный вызов - книжки по программированию, потому что в них точно что-то есть - что-то такое, что мне никто никогда не расскажет, потому что не сможет. Вот я умру когда-нибудь, а эти книги останутся для меня загадкой.
Мне вот даже жизнь не настолько интересна - потому что банальна - там-то ясно, что надо делать. А в книгах нет.
Автор: Ахинея 10.10.2018 - 18:38
Цитата(jura_k @ 8.10.2018 - 21:58)
Мне вот даже жизнь не настолько интересна - потому что банальна - там-то ясно, что надо делать. А в книгах нет.
Надеюсь на сарказм или троллинг.
Книги по программированию очень часто устаревают до того как выходят. У вас код за те годы, что здесь вы пишите никак не прогрессирует. Займитесь лучше Андроидом, пишите себе приложения на телефон.
Автор: jura_k 8.11.2018 - 19:38
Прогрессирует. Раньше я не мог писать под Windows.
Автор: jura_k 28.12.2018 - 18:14
Код
// p126 - одиночные строки
struct student stud1, stud2;
strcpy (stud1.name, "Иванов М. С.");
printf ("%s", stud2.group);
struct student stud1kurs [200];
stud1kurs [24].kurs;
stud1.name [4];
stud1 = stud2;
func1 (first.a);
func2 (&second.b);
struct stru *adr_pointer;
// p127
(*a).x;
a.address.house = 101;
union u alpha, beta;
u.ch = '5';
printf ("%i, %i", win, aut);
enum value {one = 1, two, three, ten = 10, thousand = 1000, next};
printf ("%i, %i, %i, %i, %i", one, two, ten, thousand, next);
typedef char SYMBOL;
typedef unsigned UNSIGN;
typedef float real;
// p131
struct st_tag avar;
student avar;
Автор: jura_k 28.12.2018 - 18:31
Код
// p125 - группы операторов
struct student
{
char name [30];
int kurs;
char group [3];
int stip;
};
struct student
{
char name [30];
char kurs;
char group [3];
int stip;
} stud1, stud2;
struct complex
{
float x;
float y;
} c1, c2;
struct complex *a;
a = &c1;
// p127
struct addr
{
char city [30];
char street [30];
int house;
};
struct fulladdr
{
struct addr address;
int room;
char name [30];
} f, g;
struct onebit
{
unsigned one_bit: 1;
} obj;
// p128
union u
{
int i;
char ch;
long l;
};
enum seasons {win, spr, sum, aut};
enum seasons s;
typedef struct st_tag
{
char name [30];
int kurs;
char group [3];
int stip;
} student;
Автор: Matthias 28.05.2019 - 20:16
Интересно все это конечно. Спасибо.
Автор: jura_k 17.11.2019 - 13:37
Будни программиста.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)