AMV News
Музыкальные аниме клипы
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход  ChatЧат (Людей в чате:  ) 

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

 
Начать новую тему   Ответить на тему    Список форумов AMV News -> Креатив
Предыдущая тема :: Следующая тема  
Автор Сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Чт Май 07, 2015 5:34 pm    Заголовок сообщения: Программирование Ответить с цитатой

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

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

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Вс Май 31, 2015 8:31 am    Заголовок сообщения: Ответить с цитатой

Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:
https://yadi.sk/d/supY_8Jsgy92y
Задачи записаны в формате программы "Open office 1.0", но вряд ли кто-то будет возражать.
Цитата:
3. (p19-1) Угол задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развёрнутого, а также для отрицательных углов.

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

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

Текст программы. Со временем программы будут становиться всё длиннее, длиннее и длиннее.
Файл p3Doc.h
Код:
class CP3Doc:public CDocument
{
protected:
   CP3Doc ();
   DECLARE_DYNCREATE (CP3Doc);
   char aa [50];   //   место для вводимых символов
   int ba, bb, bc;   //   исходные данные - целые числа
   int ca, cb;   //   указатель ввода в строку данных, <Enter>
   int da [3];   //   место хранения данных для вывода на экран
   double db [3];
   int ea, eb;

   void fa ();   //   перевод данных из символьной формы в цифровую
   void fb ();
   void fc ();   //   Задача p19 - 1 (3)
   void fd ();   //   Задача p19 - 3 (4)
   void fe ();   //   Задача p20 - 6 (5)
};

Файл p3Doc.cpp
Код:
#include "stdafx.h"
#include "math.h"
#include "p3.h"
#include "p3Doc.h"

CP3Doc::CP3Doc ()
{
   aa [0] = 0;
   ba = bb = bc = 0;
   ca = cb = 0;
   da [0] = 0;
}

void CP3Doc::fa ()
{
   cb = 1;
   ea = 0;
   
   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   ba = eb;

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

   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   bc = eb;
   fc (); fd (); fe ();
}

void CP3Doc::fb ()
{
   int a;

   eb = 0;
   a = 1;
   if (aa [ea] == '-') {a = -1; ea++;}
   while (aa [ea] >= '0'  &&  aa [ea] <= '9')
   {
      eb = eb * 10 + aa [ea] - '0';
      ea++;
   }

   eb *= a;
}

void CP3Doc::fc ()
{
   int a;
   double b;

   a = ba;
   if (ba < 0)  a = -a;
   b = ((bc / 60. + bb) / 60 + a) / 180 * 3.14592653589;
   if (ba < 0)  b = -b;
   db [0] = b;
}

void CP3Doc::fd ()
{
   int a, b;
   double c;

   c = ba * .0254;
   if (c < 0)  c = 0;
   a = (int) c;
   c = (c - a) * 100;
   b = (int) c;
   c = (c - b) * 10;
   da [1] = a;
   da [2] = b;
   db [1] = c;
}

void CP3Doc::fe ()
{
   double a, b;

   if (ba == 0  ||  bb < 1) {db [2] = 0; return;}
   a = (double) bc / ba;
   if (a <= 0) {db [2] = 0; return;}
   b = 1 + bb / 100.;
   db [2] = log (a) / log (b) / 12;
}

Файл p3View.cpp
Код:
void CP3View::OnDraw (CDC *pDC)
{
   CP3Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);
   CString a;

   pDC -> TextOut (5, 5, "Введите три целых числа:");
   pDC -> TextOut (5, 30, pdoc -> aa);
   a.Format ("code = %i", pdoc -> da [0]);
   pDC -> TextOut (5, 55, a);
   if (pdoc -> cb)
   {
      a.Format ("%i %i %i", pdoc -> ba, pdoc -> bb, pdoc -> bc);
      pDC -> TextOut (5, 80, a);
      a.Format ("p19 - 1. Угол равен %.12g радиан.", pdoc -> db [0]);
      pDC -> TextOut (5, 105, a);
      a.Format ("p19 - 3. %i дюймов = %i м %i см %g мм.", pdoc -> ba, pdoc -> da [1], pdoc -> da [2], pdoc -> db [1]);
      pDC -> TextOut (5, 130, a);
      a.Format ("p20 - 6. Необходимая сумма будет накоплена через %.3g лет.", pdoc -> db [2]);
      pDC -> TextOut (5, 155, a);
   }
}

void CP3View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
   CP3Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);

   pdoc -> da [0] = nChar;
   if (nChar == 8)
   {
      if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;}
      goto aaa;
   }

   if (nChar == 13)
   {
      pdoc -> fa ();
      goto aaa;
   }
   
   if (pdoc -> ca < 49)
   {
      pdoc -> aa [pdoc -> ca] = nChar;
      pdoc -> aa [pdoc -> ca + 1] = 0;
      pdoc -> ca++;
   }

aaa:
   Invalidate ();
   CView::OnChar (nChar, nRepCnt, nFlags);
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
derete





Новичок
Рега: 17.08.2014
Сообщения: 1

СообщениеДобавлено: Пн Июн 01, 2015 8:12 pm    Заголовок сообщения: Ответить с цитатой

jura_k писал(а):

Код:

   char aa [50];   //   место для вводимых символов
   int ba, bb, bc;   //   исходные данные - целые числа
   int ca, cb;   //   указатель ввода в строку данных, <Enter>
   int da [3];   //   место хранения данных для вывода на экран
   double db [3];
   int ea, eb;

   void fa ();   //   перевод данных из символьной формы в цифровую
   void fb ();
   void fc ();   //   Задача p19 - 1 (3)
   void fd ();   //   Задача p19 - 3 (4)
   void fe ();   //   Задача p20 - 6 (5)


Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Пн Июн 01, 2015 9:25 pm    Заголовок сообщения: Ответить с цитатой

А как правильно? Мне в жизни никто не показывал. Программисты проходят стороной вне поля моего зрения. Пишу, как могу!
_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Вт Июн 02, 2015 4:55 pm    Заголовок сообщения: Ответить с цитатой

У меня уже фантазии не хватает каждый раз придумывать имена переменным. Учитывая, что этих программ в моей жизни было несколько сотен. А может, и тысяча. Для меня эти переменные как одинаковые солдаты.
_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Сб Июн 13, 2015 8:53 pm    Заголовок сообщения: Ответить с цитатой

Вот программа, в которую можно ввести с клавиатуры рациональное число. Скачать:
https://yadi.sk/d/jn9VynjChEb77
Текст программы:

Файл “p46Doc.h”
Код:
class CP46Doc:public CDocument
{
protected:
   CP46Doc ();
   DECLARE_DYNCREATE (CP46Doc);
   char aa [50];   //   место для вводимых символов
   double ba;      //   исходные данные - вещественное число
   int ca, cb, cc;   //   указатель ввода в строку данных, <Enter>, указатель чтения из строки данных
   int da [1];      //   место хранения данных для вывода на экран
   double ea;

   void fa ();      //   перевод данных из символьной формы в цифровую
   void fb ();
};

Файл “p46Doc.cpp”
Код:
CP46Doc::CP46Doc ()
{
   aa [0] = 0;
   ba = 0;
   ca = cb = 0;
   da [0] = 0;
}

void CP46Doc::fa ()
{
   cb = 1;
   cc = 0;

   while ((aa [cc] < '0'  ||  aa [cc] > '9')  &&  aa [cc] != '-'  &&  aa [cc] != '.'
      &&  aa [cc])  cc++;
   fb ();
   ba = ea;
}

void CP46Doc::fb ()
{
   int a;
   double b;

   ea = 0;
   a = 1;
   b = .1;
   if (aa [cc] == '-') {a = -1; cc++;}
   while (aa [cc] >= '0'  &&  aa [cc] <= '9')
   {
      ea = ea * 10 + aa [cc] - '0';
      cc++;
   }

   if (aa [cc] == '.')
   {
      cc++;
      while (aa [cc] >= '0'  &&  aa [cc] <= '9')
      {
         ea += (aa [cc] - '0') * b;
         cc++;
         b /= 10;
      }
   }

   ea *= a;
}

Файл “p46View.cpp”
Код:
void CP46View::OnDraw (CDC *pDC)
{
   CP46Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);
   CString a;

   pDC -> TextOut (5, 5, "Input float:");
   pDC -> TextOut (5, 30, pdoc -> aa);
   a.Format ("code = %i", pdoc -> da [0]);
   pDC -> TextOut (5, 55, a);

   if (pdoc -> cb)
   {
      a.Format ("%g", pdoc -> ba);
      pDC -> TextOut (5, 80, a);
   }
}

void CP46View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
   CP46Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);

   pdoc -> da [0] = nChar;
   if (nChar == 8)
   {
      if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;}
      goto aaa;
   }

   if (nChar == 13)
   {
      pdoc -> fa ();
      goto aaa;
   }

   if (pdoc -> ca < 49)
   {
      pdoc -> aa [pdoc -> ca] = nChar;
      pdoc -> aa [pdoc -> ca + 1] = 0;
      pdoc -> ca++;
   }

aaa:
   Invalidate ();
   CView::OnChar (nChar, nRepCnt, nFlags);
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Пн Июн 29, 2015 9:52 am    Заголовок сообщения: Ответить с цитатой

Очередной шедевр программирования.
Код:
void CP42View::OnDraw (CDC *pDC)
{
   int aa, ab, ac, ad;
   unsigned ba;
   char ca;
   CP42Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);
   CString a;

   aa = 1996;
   a.Format ("Now %i year.", aa);
   pDC -> TextOut (5, 5, a);
   a.Format ("Сейчас %i год.", aa);
   pDC -> TextOut (200, 5, a);
   for (aa = 10; aa; aa--)
   {
      a.Format ("%i", aa);
      pDC -> TextOut (5 + (10 - aa) * 30, 30, a);
   }

   a.Format ("Start!");
   pDC -> TextOut (5, 55, a);
   a.Format ("Старт!");
   pDC -> TextOut (200, 55, a);
   ba = 60000;
   aa = ba;
   a.Format ("aa = %i, ba = %u.", aa, ba);
   pDC -> TextOut (5, 80, a);
   ca = 'c';
   a.Format ("%c", ca);
   pDC -> TextOut (5, 105, a);
   ca = '+';
   a.Format ("%c%c", ca, ca);
   pDC -> TextOut (15, 105, a);
   aa = 5;
   ab = 60;
   aa++;
   ++ab;
   a.Format ("aa = %i, ab = %i.", aa, ab);
   pDC -> TextOut (5, 130, a);
   a.Format ("aa = %i, ab = %i.", aa++, ++ab);
   pDC -> TextOut (5, 155, a);

   aa = 101 <= 105;
   ab = 101 > 105;
   a.Format ("true - %i, false - %i.", aa, ab);
   pDC -> TextOut (5, 180, a);
   for (aa = 0; aa < 10; aa++)
      for (ab = 0; ab < 10; ab++)
      {
         a.Format ("%i * %i = %i", aa, ab, aa * ab);
         pDC -> TextOut (5 + aa * 100, 230 + ab * 25, a);
      }

   for (aa = 0; aa < 1000; aa++)
   {
      ab = aa * aa * aa;
      if (ab > 10000)  break;
      a.Format ("%i - %i", aa, ab);
      ac = aa % 3;
      ad = aa / 3;
      pDC -> TextOut (5 + ad * 100, 500 + ac * 25, a);
   }

   for (aa = 0; aa < 1000; aa++)
   {
      if (aa % 7) continue;
      a.Format ("%i", aa);
      ab = aa / 7;
      ac = ab % 8;
      ad = ab / 8;
      pDC -> TextOut (5 + ad * 50, 600 + ac * 25, a);
   }
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Пт Июл 24, 2015 8:14 am    Заголовок сообщения: Ответить с цитатой

Свершилось! Я решил 7 задач из задачника. Ввод данных представляет собой довольно длинный, нудный процесс; поэтому, чтобы не повторять его 7 раз, я решил сэкономить и дать исходные данные семи задачам сразу. Это значит, что вы вводите данные (6 целых чисел) для всех задач одним махом. И они начинают считать. Пробуйте!
Программа написана для Windows 32-bit. Работает во всех версиях от Windows 95 до Windows Vista. Скачать программу, текст программы и условия задач можно здесь:
https://yadi.sk/d/_35psXXri4V5H

Задачи:
1-1. (1) Угол α задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развёрнутого, а также для отрицательных углов.

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

1-4. (3) Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах в пределах одних суток. Найти продолжительность этого промежутка в тех же единицах измерения.

1-5. (4) В такси одновременно сели три пассажира. Когда вышел первый пассажир, на счётчике было p1 рублей; когда вышел второй – p2 рублей. Сколько должен был заплатить каждый пассажир, если по окончании поездки счётчик показал p3 рублей? Плата за посадку составляет p0 рублей.

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

1-10. (6) Найти корни квадратного уравнения, заданного своими коэффициентами, с положительным дискриминантом; подстановкой в уравнение убедиться в погрешности вычислений.

1-15. (7) У квадрата ABCD на плоскости известны координаты двух противоположных вершин – точек A и C. Найти координаты точек B и D.

Программа:
Код:
Файл “p1Doc.h”

class CP1Doc:public CDocument
{
protected:
   CP1Doc ();
   DECLARE_DYNCREATE (CP1Doc);
   char aa [50];      //   ìåñòî äëÿ ââîäèìûõ ñèìâîëîâ
   int ba, bb, bc, bd, be, bf;   //   èñõîäíûå äàííûå - öåëûå ÷èñëà
   int ca, cb;         //   óêàçàòåëü ââîäà â ñòðîêó äàííûõ, <Enter>
   int da [10];      //   ìåñòî õðàíåíèÿ äàííûõ äëÿ âûâîäà íà ýêðàí
   double db [10];
   CString dc [10];
   int ea, eb;

   void fa ();   //   ïåðåâîä äàííûõ èç ñèìâîëüíîé ôîðìû â öèôðîâóþ
   void fb ();
   void fc ();   //   Çàäà÷à p19 - 1 (1)
   void fd ();   //   Çàäà÷à p19 - 3 (2)
   void fe ();   //   Çàäà÷à p19 - 4 (3)
   void fg ();   //   Çàäà÷à p20 - 5 (4)
   void fh ();   //   Çàäà÷à p20 - 6 (5)
   void fi ();      //   Çàäà÷à p21 - 10 (6)
   void fj ();      //   Çàäà÷à p22 - 15 (7)
};


Файл “p1Doc.cpp”

#include "stdafx.h"
#include "math.h"
#include "p1.h"
#include "p1Doc.h"

CP1Doc::CP1Doc ()
{
   aa [0] = 0;
   ba = bb = bc = bd = be = bf = 0;
   ca = cb = 0;
   da [0] = 0;
}

void CP1Doc::fa ()
{
   cb = 1;
   ea = 0;

   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   ba = eb;
   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   bb = eb;
   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   bc = eb;
   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   bd = eb;
   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   be = eb;
   while ((aa [ea] < '0'  ||  aa [ea] > '9')  &&  aa [ea] != '-'  &&  aa [ea]) ea++;
   fb ();
   bf = eb;
   fc (); fd (); fe (); fg (); fh (); fi (); fj ();
}

void CP1Doc::fb ()
{
   int a;

   eb = 0;
   a = 1;
   if (aa [ea] == '-') {a = -1; ea++;}
   while (aa [ea] >= '0'  &&  aa [ea] <= '9')
   {
      eb = eb * 10 + aa [ea] - '0';
      ea++;
   }

   eb *= a;
}

void CP1Doc::fc ()
{
   int a;
   double b;

   a = ba;
   if (ba < 0)  a = -a;
   b = ((bc / 60. + bb) / 60 + a) / 180 * 3.141592653589;
   if (ba < 0)  b = -b;
   db [0] = b;
}

void CP1Doc::fd ()
{
   int a, b;
   double c;

   c = ba * .0254;
   if (c < 0)  c = 0;
   a = (int) c;
   c = (c - a) * 100;
   b = (int) c;
   c = (c - b) * 10;
   da [1] = a;
   da [2] = b;
   db [1] = c;
}

void CP1Doc::fe ()
{
   int a, b, c, d, e, f;

   a = ba * 3600 + bb * 60 + bc;
   b = bd * 3600 + be * 60 + bf;
   c = b - a;
   d = c / 3600;
   c -= d * 3600;
   e = c / 60;
   f = c - e * 60;

   da [3] = d;
   da [4] = e;
   da [5] = f;
}

void CP1Doc::fg ()
{
   int a, b, c;

   a = (ba + bb) / 3;
   b = (2 * ba - bb + 3 * bc) / 6;
   c = ba + bd - a - b;
   da [6] = a;
   da [7] = b;
   da [8] = c;
}

void CP1Doc::fh ()
{
   double a, b;

   db [2] = 0;
   if (!ba) return;
   a = (double) bc / ba;
   if (a <= 0) return;
   b = 1 + bb / 100.;
   if (b <= 0) return;
   db [2] = log (a) / log (b);
}

void CP1Doc::fi ()
{
   double a, b, c;

   dc [1].Format ("");
   if (!ba)
   {
      if (!bb)
      {
         if (!bc) {dc [0].Format ("p21 - 10. Ðåøåíèå - ëþáîå ÷èñëî."); return;}
         dc [0].Format ("p21 - 10. Ðåøåíèé íåò."); return;
      }

      a = -bc / (double) bb;
      dc [0].Format ("p21 - 10. x = %.4g.", a);
      dc [1].Format ("%i * x + %i = %.4g.", bb, bc, bb * a + bc);
      return;
   }

   a = bb * bb - 4 * ba * bc;
   if (a < 0) {dc [0].Format ("p21 - 10. Ðåøåíèé íåò."); return;}
   if (!a)
   {
      a = -bb / 2. / ba;
      dc [0].Format ("p21 - 10. x = %.4g.", a);
      dc [1].Format ("%i * x^2 + %i * x + %i = %.4g.", ba, bb, bc, ba * a * a + bb * a + bc);
      return;
   }

   b = (-bb + sqrt (a)) / 2 / ba;
   c = (-bb - sqrt (a)) / 2 / ba;
   dc [0].Format ("p21 - 10. x1 = %.4g, x2 = %.4g.", b, c);
   dc [1].Format ("%i * x1^2 + %i * x1 + %i = %.4g. %i * x2^2 + %i * x2 + %i = %.4g.",
      ba, bb, bc, ba * b * b + bb * b + bc,
      ba, bb, bc, ba * c * c + bb * c + bc);
}

void CP1Doc::fj ()
{
   double a, b, c, d;

   a = (ba + bc) / 2.;
   b = (bb + bd) / 2.;
   c = a - ba;
   d = b - bb;

   db [3] = a - d;
   db [4] = b + c;
   db [5] = a + d;
   db [6] = b - c;
}


Файл “p1View.cpp”

void CP1View::OnDraw (CDC *pDC)
{
   CP1Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);
   CString a;

   pDC -> TextOut (5, 5, "Ââåäèòå øåñòü öåëûõ ÷èñåë:");
   pDC -> TextOut (5, 30, pdoc -> aa);
   a.Format ("code = %i", pdoc -> da [0]);
   pDC -> TextOut (5, 55, a);
   if (pdoc -> cb)
   {
      a.Format ("%i %i %i %i %i %i",
         pdoc -> ba, pdoc -> bb, pdoc -> bc, pdoc -> bd, pdoc -> be, pdoc -> bf);
      pDC -> TextOut (5, 80, a);
      a.Format ("p19 - 1. Óãîë ðàâåí %.12g ðàäèàí.", pdoc -> db [0]);
      pDC -> TextOut (5, 105, a);
      a.Format ("p19 - 3. %i äþéìîâ = %i ì %i ñì %g ìì.",
         pdoc -> ba, pdoc -> da [1], pdoc -> da [2], pdoc -> db [1]);
      pDC -> TextOut (5, 130, a);
      a.Format ("p19 - 4. Äëèíà èíòåðâàëà ðàâíà %i ÷ %i ìèí %i ñ.",
         pdoc -> da [3], pdoc -> da [4], pdoc -> da [5]);
      pDC -> TextOut (5, 155, a);
      a.Format ("p20 - 5. Ïåðâûé ïàññàæèð ïëàòèò %i ð., âòîðîé - %i ð., òðåòèé - %i ð.",
         pdoc -> da [6], pdoc -> da [7], pdoc -> da [8]);
      pDC -> TextOut (5, 180, a);
      a.Format ("p20 - 6. Íåîáõîäèìàÿ ñóììà áóäåò íàêîïëåíà ÷åðåç %.4g ëåò.",
         pdoc -> db [2]);
      pDC -> TextOut (5, 205, a);
      pDC -> TextOut (5, 230, pdoc -> dc [0]);
      pDC -> TextOut (5, 255, pdoc -> dc [1]);
      a.Format ("p22 - 15. Êîîðäèíàòû âåðøèí êâàäðàòà: B (%.4g; %.4g), D (%.4g; %.4g).",
         pdoc -> db [3], pdoc -> db [4], pdoc -> db [5], pdoc -> db [6]);
      pDC -> TextOut (5, 280, a);
   }
}

void CP1View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
   CP1Doc *pdoc = GetDocument ();
   ASSERT_VALID (pdoc);

   pdoc -> da [0] = nChar;
   if (nChar == 8)
   {
      if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;}
      goto aaa;
   }

   if (nChar == 13)
   {
      pdoc -> fa ();
      goto aaa;
   }

   if (pdoc -> ca < 49)
   {
      pdoc -> aa [pdoc -> ca] = nChar;
      pdoc -> aa [pdoc -> ca + 1] = 0;
      pdoc -> ca++;
   }

aaa:
   Invalidate ();
   CView::OnChar (nChar, nRepCnt, nFlags);
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Ср Июл 29, 2015 6:24 am    Заголовок сообщения: Ответить с цитатой

Читаю книжку по языку C. Иногда там попадаются примеры, которые не являются законченными программами. Я их скомпоновал в один файл.
Код:
/*   p51
     Группы операторов   */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void error_message (char *fmt, ...)
{
   va_list args;
   printf ("Error: ");
   va_start (args, fmt);
   vprintf (fmt, args);
   va_end (args);
   exit (1);
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Сб Дек 26, 2015 4:56 pm    Заголовок сообщения: Ответить с цитатой

В двадцатый раз стал читать книгу 1999-го года Б.И. Березина, С.Б. Березина "Начальный курс C и C++".
Думал-думал, как же её лучше прочитать? Она написана под DOS, и там есть существенные моменты, которые никак не обойти. То есть под Windows там надо слишком уж извратиться, чтобы реализовать примеры.
Так ничего и не придумал. Стал читать так же, как 22 года назад учил C по другой книжке под названием "Turbo C". Для этого на Celeron 333 со сдохшим вентилятором установил 160 Gb HDD IDE. Разметил там логический диск C размером 0,1 Gb на FAT16. Установил MS-DOS 6.22 и русификатор "keyrus.com". Затем установил Turbo C 2.0. Всё это хозяйство вместе с программами-примерами заняло меньше 5 Mb.
Затем приступил к чтению книги.
Прочитал часть первого раздела, где рассказывалось про C. (Вторая часть посвящена C++.) Остановился в тот момент, когда пошли слишком сложные вещи, которые никогда не применяю на практике: функции с переменным числом параметров, указатели на функцию, нелокальные переходы и т.д. Примеры из книги разделил на функциональные группы по удобству использования; иногда прерывал и начинал сначала, когда программа занимала уже много места (лишь для удобства), хотя ничто не ограничивало их "расти" и дальше. В итоге получилось 7 программ, две последние из которых нефункциональны по своей структуре.
В приведённом файле можно посмотреть эти программы.
https://yadi.sk/i/TZBWu7PdmWDyK
Впоследствии, чтобы достать эти файлы, подключил этот HDD вторым к системе Windows 2000 на том же компьютере. Затем скопировал программы на флешку 1 Gb через USB. С флешки переписал в Windows Vista.
Сменил расширение файлов на *.txt, затем из программы WordPad открыл их как текстовые файлы MS-DOS и сохранил как текстовые файлы Windows. Ну а дальше в Word и в документ.
Теперь настало время думать, какую книгу читать следующей.

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Чт Янв 07, 2016 7:38 am    Заголовок сообщения: Ответить с цитатой

Очередная книга – А.Г. Юркин, "Задачник по программированию", 2002 г. От теории перехожу к практике. Поскольку Turbo C не нужен, сделал только 5 задач. Критерии отбора задач такие: исходными данными служат три (или меньше) целых числа. Все задачи из первого раздела "Линейные алгоритмы". Но алгоритмы всё равно получились нелинейными. Но рабочими.
Скачать документ для печати можно здесь: https://yadi.sk/i/69OIckzemiYjr

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Пн Янв 25, 2016 5:03 pm    Заголовок сообщения: Ответить с цитатой

Возвращаюсь обратно к учебнику "Начальный курс C и C++". Прошёл оставшиеся блоки по языку C – несколько заключительных сложных тем, темы про вывод текста в текстовом режиме и темы про вывод графики в графическом режиме. Параметры графического режима: VGA 640x480, 16 colors.
Почитать программы можно здесь: https://yadi.sk/i/c3x1x6zpnhx8r
Единственное, что я не прошёл – тему про структуры и объединения. Это тоже входит в C.

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

Код:
/*   p150 - программы работы с текстом   */

#include <conio.h>

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

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

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

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

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

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

      getch ();
      puttext (24, 5, 41, 12, d);
      getch ();
      for (f = 1; f < 5; f++)  movetext (22, 4, 32, 8, 10 * f, 17);
      getch ();
      normvideo ();
      return 0;
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Ср Мар 16, 2016 6:47 pm    Заголовок сообщения: Ответить с цитатой

Среда программирования IDE, или тайная лаборатория алхимика. Состав: MS-DOS + Turbo C.




_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Чт Мар 17, 2016 8:08 am    Заголовок сообщения: Ответить с цитатой

Программа, которая строит трёхмерные графики функций.
f1 = 3 * x * x / (5 * y * y)
f2 = x * x / (y * y)
f3 = y - x * x / (y * y)
f4 = (6xy + 3 * x * x * y * y) / (7x - 12y)

Скриншоты:








Программа:
Код:
/*   p5
     Алгебра
     Язык Turbo C 2.0    */

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

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



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

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

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

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

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

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

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

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

   getch ();
   closegraph ();
}



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

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

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

float hd (float a, float b)
{
   return (6 * a * b + 3 * a * a * b * b) / (7 * a - 12 * b);
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Ср Мар 23, 2016 7:47 pm    Заголовок сообщения: Ответить с цитатой

Построил график функции z = x / y.
Скачать программу, её текст и скриншот: https://yadi.sk/d/BpCajMpwqRPvp
Системные требования: Win32. Но вы всё равно не сможете её запустить, потому что ей требуется dll-библиотека, а у вас её нет.
Скриншот программы под Windows 95:

Код:
Rem   p8
Rem   p8 - task 3 - book 1
Rem   Язык Visual Basic 5.0

Option Explicit

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

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

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

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

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

Private Sub Form_Paint()
    Dim a, b As Integer
    Dim c, d As Single
   
    ga
    For a = -bc To bc Step 10
        For b = -bc To bc
            If b = 0 Then GoTo aaa
            c = ha(a / CSng(bd), b / CSng(bd)) * bd
            If b > -bc And b <> 1 Then
                ea = a: eb = b: ec = c: ed = a: ee = b - 1: ef = d
                gb
            End If
            d = c
aaa:
        Next
    Next
End Sub

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Сб Апр 02, 2016 10:10 am    Заголовок сообщения: Ответить с цитатой

Программа построения графика в трёхмерных координатах. Для простоты выбрана функция z = x / y. Управление: поворот графика влево-вправо, вверх-вниз, возврат на место и выход.
Скачать программу, скриншоты и текст программы можно тут: https://yadi.sk/d/i2-Z07Qjqg6bn
Программа написана под MS-DOS. Чтобы снять скриншоты, я запустил её под Windows 95. Для того, чтобы скопировать все материалы сюда (через флешку), я запустил Windows 2000.
Системные требования: 286 и выше, VGA.
Специально для вас я увеличил число комментариев в программе, так что можно считать её документированной.

Скриншоты:


То же самое, вид сверху:


Немного повернул график вправо:






Код:
/*   p6
     Алгебра: построение графика 3D-функции
     Язык Turbo C 2.0   */

#include <bios.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>

float ga, gb, gc;   /*   вектор ориентации в пространстве осей системы координат - определяющий вектор, ось Oz   */
float gd, ge, gf;   /*   ось Ox в 3D   */
float gg, gh, gi;   /*   ось Oy в 3D   */
int ha;             /*   флаг рисования отрезка в 3D:
          ha = 0; - не рисовать
          ha = 1; - первая точка отрезка
          ha = 2; - вторая точка отрезка   */



da ();   /*   рисование системы 3D-координат и графика   */
db (float, float, float, float, float, float);   /*   рисование линии в трехмерном пространстве   */
dc ();   /*   рисование 3D-графика   */
float ea (float, float);   /*   функция, график которой надо построить   */



main ()
{
   int aa, ab;
   float ja, jb;

   detectgraph (&aa, &ab);
   initgraph (&aa, &ab, "");
   ga = gb = gc = 1;

   while (1)
   {
      da ();
      aa = bioskey (0);
      if (aa == 0x11b)   /*   выход из программы <Esc>   */
      {
    closegraph ();
    return 0;
      }

      if (aa == 0x4b00)   /*   смещение наблюдателя влево <Left arrow>   */
      {
    ja = ga * cos (.1) + gb * sin (.1);
    jb = -ga * sin (.1) + gb * cos (.1);
    ga = ja;
    gb = jb;
      }

      if (aa == 0x4d00)   /*   смещение наблюдателя вправо <Right arrow>   */
      {
    ja = ga * cos (.1) - gb * sin (.1);
    jb = ga * sin (.1) + gb * cos (.1);
    ga = ja;
    gb = jb;
      }

      if (aa == 0x4800)   /*   смещение наблюдателя вверх <Up arrow>   */
      {
    ga += gd * sin (.1);
    gb += ge * sin (.1);
    gc += gf * sin (.1);
      }

      if (aa == 0x5000)   /*   смещение наблюдателя вниз <Down arrow>   */
      {
    ga -= gd * sin (.1);
    gb -= ge * sin (.1);
    gc -= gf * sin (.1);
      }

      if (aa == 0x3b00)   /*   возврат в исходную точку наблюдения <F1>   */
      {
    ga = gb = gc = 1;
    gg = 1; gh = gi = 0;
      }
   }
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Пн Июл 04, 2016 3:04 pm    Заголовок сообщения: Ответить с цитатой

А.Г. Юркин, "Задачник по программированию". 2002 г. ("Юркин задачник")
Часть III. Прикладные математические задачи.
Глава 7. Арифметика. Страница 77, задача 7.1.

Натуральное число в p-ичной системе счисления задано своими цифрами, хранящимися в массиве K (n). Проверить корректность такого представления и перевести число в q-ичную систему (возможно, число слишком велико, чтобы получить его внутреннее представление; кроме того, p ≤ 10, q ≤ 10).

Скачать программу, её текст и скриншоты:
https://yadi.sk/d/4YZGX3LgsyqyX
Программа совместима с MS-DOS, Windows 95, Windows 2000, Windows Vista 32-bit.
Скриншоты:
----------------------------------------
D:\>cd work

D:\WORK>dir

Volume in drive D has no label
Volume Serial Number is 0C6D-11F0
Directory of D:\WORK

. <DIR> 06-26-16 10:34a .
.. <DIR> 06-26-16 10:34a ..
EGAVGA BGI 5,554 02-18-92 3:00a EGAVGA.BGI
TC BAT 12 06-26-16 10:34a TC.BAT
TCPICK TCP 1,196 07-04-16 1:10p TCPICK.TCP
TCCONFIG TC 1,690 06-26-16 11:03a TCCONFIG.TC
P77 BAK 2,552 07-04-16 1:01p P77.BAK
P77 C 2,720 07-04-16 1:05p P77.C
DONE-1 <DIR> 06-30-16 9:49a DONE-1
P77A C 861 07-01-16 7:40a P77A.C
P77B C 1,800 07-02-16 6:25p P77B.C
P77 OBJ 1,974 07-04-16 1:05p P77.OBJ
P77 EXE 16,907 07-04-16 1:05p P77.EXE
10 file(s) 35,266 bytes
3 dir(s) 104,294,400 bytes free

D:\WORK>
----------------------------------------
P77 EXE 16,907 07-04-16 1:05p P77.EXE
10 file(s) 35,266 bytes
3 dir(s) 104,294,400 bytes free

D:\WORK>p77
Основание первой системы счисления: 6.
Исходное число:
305003355353403410124202243510302244255011321340001513332510022524343343
Промежуточное число в десятичной системе счисления:
000000000000000055664707093046964168171692001782840499583747901638733679
Основание второй системы счисления: 9.
Конечное число:
24521055280543813208204360708881333086022846352066040662160


D:\WORK>p77
Основание первой системы счисления: 10.
Исходное число:
5226524812744766010775243555714506442709497767068114642959602539897612
Промежуточное число в десятичной системе счисления:
5226524812744766010775243555714506442709497767068114642959602539897612
Основание второй системы счисления: 8.
Конечное число:
140734644037735311255677172054235673252536724056404004567741205054231626221414
----------------------------------------

Текст программы:
Код:
/*   p77
     Язык Turbo C 2.0
     Задачник по программированию
     Системы счисления              */

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


main ()
{
   int a [100];   /*   исходный массив данных   */
   int b [100];   /*   промежуточный массив данных в десятичной системе счисления   */
   int c [100];   /*   вспомогательный массив данных   */
   int d [400];   /*   целевой массив данных   */
   int f;         /*   основание первой системы счисления   */
   int g;         /*   основание второй системы счисления   */
   int h;         /*   число цифр исходного числа   */

   int k, l, m, n;

   randomize ();
   f = rand () % 9 + 2;
   g = rand () % 9 + 2;
   h = rand () % 100 + 1;
   for (k = 0; k < 100; k++)  a [k] = b [k] = c [k] = 0;
   for (k = 0; k < 400; k++)  d [k] = 0;
   for (k = 0; k < h; k++)  a [k] = b [k] = rand () % f;

   printf ("Основание первой системы счисления: %i.\n", f);
   printf ("Исходное число:\n");
   for (k = h - 1; k >= 0; k--)  printf ("%i", a [k]);
   printf ("\n");

   for (k = 0; k < h - 1; k++)
   {
      /*   Домножаем на основание системы счисления со сдвигом влево   */
      for (l = 0; l <= k; l++)
         c [h - 2 - l] = b [h - 1 - l] * f;

      /*   Складываем с предыдущим разрядом   */
      c [h - 2 - k] += b [h - 2 - k];

      /*   Переносим десятки в следующий разряд   */
      for (l = k; l >= 0; l--)
      {
         m = c [h - 2 - l];
         c [h - 2 - l] = m % 10;
         c [h - 1 - l] += m / 10;
      }

      /*   Переносим данные вверх   */
      for (l = k; l >= -1; l--)
      {
         b [h - 2 - l] = c [h - 2 - l];
         c [h - 2 - l] = 0;
      }
   }

   printf ("Промежуточное число в десятичной системе счисления:\n");
   for (k = h - 1; k >= 0; k--)  printf ("%i", b [k]);
   printf ("\n");

   n = 0;   /*   указатель в целевом массиве данных на заполняемую ячейку данных   */
   while (1)
   {
      l = 0;   /*   остаток от деления предыдущего разряда   */
      for (k = 0; k < h; k++)
      {
         m = l * 10 + b [h - 1 - k];
         c [h - 1 - k] = m / g;
         l = m % g;
      }

      d [n++] = l;   /*   заносим остаток от деления в целевой массив данных   */
      m = 0;
      for (k = 0; k < h; k++)   /*   переносим результат деления вверх для следующего цикла   */
      {
         b [k] = c [k];
         if (b [k])  m = 1;   /*   флаг наличия ненулевых значений в массиве   */
      }

      if (!m)  break;   /*   расчет окончен   */
   }

   printf ("Основание второй системы счисления: %i.\n", g);
   printf ("Конечное число:\n");
   for (k = n - 1; k >= 0; k--)  printf ("%i", d [k]);
   printf ("\n");

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

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Ср Июл 13, 2016 12:44 pm    Заголовок сообщения: Ответить с цитатой

Очередной задачник по программированию. Задача:

В написанном выражении
((((1 ? 2) ? 3) ? 4) ? 5) ? 6
вместо каждого знака ? вставить знак одного из четырёх арифметических действий: +, -, *, / так, чтобы результат вычислений равнялся 35.


Автор объяснил словами, как эта задача решается. Но что-то мне это решение не нравится. Например:
"Рассмотрим программу, начиная с метки R. Здесь отыскивается первый член ai в последовательности an, a(n-1), ..., a2, не равный 4. Он увеличивается на 1, а все предыдущие полагаются равными 1."
И так далее.
По-моему, слишком заморочено. А как же "наглядность программ"? Я пытался сотворить нечто подобное, но как-то запутался и желание программировать дальше пропало.
Мы пойдём другим путём.
Автор дал программу, но она на Паскале, а я Паскаль с трудом понимаю. И ответа не дал. Поэтому я сделал всё то же самое, но по-другому.

Код:
// p2.cpp : Defines the entry point for the console application.
//   Язык Visual C++ 7.0
//   Консольное приложение

#include "stdafx.h"
#include <conio.h>

int aa (int, int, int);
void ab (int);


int _tmain(int argc, _TCHAR* argv[])
{
   int a, b, c, d, e;
   int f;

   for (a = 0; a < 4; a++)
      for (b = 0; b < 4; b++)
         for (c = 0; c < 4; c++)
            for (d = 0; d < 4; d++)
               for (e = 0; e < 4; e++)
               {
                  f = aa (1, a, 2);
                  f = aa (f, b, 3);
                  f = aa (f, c, 4);
                  f = aa (f, d, 5);
                  f = aa (f, e, 6);

                  if (f == 35)
                  {
                     printf ("((((1 "); ab (a);
                     printf ("2) "); ab (b);
                     printf ("3) "); ab (c);
                     printf ("4) "); ab (d);
                     printf ("5) "); ab (e);
                     printf ("6 = 35.\n");
                  }
               }

   getch ();
   return 0;
}


int aa (int a, int b, int c)
{
   switch (b)
   {
      case 0: return a + c;
      case 1: return a - c;
      case 2: return a * c;
      case 3: return a / c;
   }

   return 0;
}

void ab (int a)
{
   switch (a)
   {
      case 0: printf ("+ "); break;
      case 1: printf ("- "); break;
      case 2: printf ("* "); break;
      case 3: printf ("/ "); break;
   }
}

Ответ:
((((1 + 2) + 3) * 4) + 5) + 6 = 35.
((((1 + 2) * 3) * 4) + 5) - 6 = 35.
((((1 * 2) * 3) * 4) + 5) + 6 = 35.

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Вт Авг 23, 2016 5:32 am    Заголовок сообщения: Ответить с цитатой

Арифметика длинных целых чисел.

Дано:
9 500 000 000 000 000 000 000 000
1 983 000 000 000 000 000 000 000 000 000 000
Перемножить.

Вот что выдаёт программа:
9 500 000 000 000 000 000 000 000
1 983 000 000 000 000 000 000 000 000 000 000
18 838 500 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

Код:
/*   p8
Язык Turbo C 2.0
Арифметика длинных чисел   */
#include <conio.h>
#include <stdio.h>
main ()
{
   int a [100], b, c;
   int d [100], e, f;
   int g [100], h, i;
   /*   число; число значащих цифр; число нулей   */

   int j, k;

   /*   начальные данные   */
   for (j = 0; j < 100; j++)  a [j] = d [j] = g [j] = 0;
   a [0] = 9; a [1] = 5; b = 2; c = 23;
   d [0] = 1; d [1] = 9; d [2] = 8; d [3] = 3; e = 4; f = 30;

   /*   печатаем первое число   */
   for (j = 0; j < b + c; j++)
   {
      printf ("%i", a [j]);
      k = b + c - j - 1;
      if (k % 3 == 0  &&  k)  printf (" ");
   }

   /*   печатаем второе число   */
   printf ("\n");
   for (j = 0; j < e + f; j++)
   {
      printf ("%i", d [j]);
      k = e + f - j - 1;
      if (k % 3 == 0  &&  k)  printf (" ");
   }

 
   /*   перемножаем числа   */
   for (j = 0; j < b; j++)
     for (k = 0; k < e; k++)
   g [j + k + 1] += a [j] * d [k];

   h = b + e;
   i = c + f;
   /*   складываем десятки с единицами из соседних разрядов   */
   for (j = h - 1; j; j--)
   {
      g [j - 1] = g [j - 1] + g [j] / 10;
      g [j] = g [j] % 10;
   }

   /*   проверяем, является ли первая цифра значащей или нет   */
   if (g [0] == 0)
   {
      for (j = 0; j < h - 1; j++)  g [j] = g [j + 1];
      g [h - 1] = 0;
      h--;
   }

   /*   печатаем третье число   */
   printf ("\n");
   for (j = 0; j < h + i; j++)
   {
      printf ("%i", g [j]);
      k = h + i - j - 1;
      if (k % 3 == 0  &&  k)  printf (" ");
   }

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

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Вс Авг 28, 2016 8:32 am    Заголовок сообщения: Ответить с цитатой

Всё то же самое, но другим макаром.

Код:
/*   p9
     Язык Turbo C
     Арифметика длинных целых чисел   */

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

int aa [100], ab, ac;
int ba [100], bb, bc;
int ca [100], cb, cc;

da ();   /*   печать первого числа   */
db ();   /*   печать второго числа   */
dc ();   /*   печать третьего числа   */

dd ();   /*   ca = aa * ba   */


main ()
{
   int a;

   for (a = 0; a < 100; a++)  aa [a] = ba [a] = ca [a] = 0;
   aa [0] = 9; aa [1] = 5; ab = 2; ac = 23;
   ba [0] = 1; ba [1] = 9; ba [2] = 8; ba [3] = 3; bb = 4; bc = 30;

   dd ();
   da ();
   db ();
   dc ();

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


da ()
{
   int a, b;

   for (a = 0; a < ab + ac; a++)
   {
      printf ("%i", aa [a]);
      b = ab + ac - a - 1;
      if (b % 3 == 0  &&  b)  printf (" ");
   }

   printf ("\n");
}

db ()
{
   int a, b;

   for (a = 0; a < bb + bc; a++)
   {
      printf ("%i", ba [a]);
      b = bb + bc - a - 1;
      if (b % 3 == 0  &&  b)  printf (" ");
   }

   printf ("\n");
}

dc ()
{
   int a, b;

   for (a = 0; a < cb + cc; a++)
   {
      printf ("%i", ca [a]);
      b = cb + cc - a - 1;
      if (b % 3 == 0  &&  b)  printf (" ");
   }

   printf ("\n");
}


dd ()
{
   int a, b;

   for (a = 0; a < ab; a++)
      for (b = 0; b < bb; b++)
         ca [a + b + 1] += aa [a] * ba [b];

   cb = ab + bb;
   cc = ac + bc;
   for (a = cb - 1; a; a--)
   {
      ca [a - 1] = ca [a - 1] + ca [a] / 10;
      ca [a] = ca [a] % 10;
   }

   if (ca [0] == 0)
   {
      for (a = 0; a < cb - 1; a++)  ca [a] = ca [a + 1];
      ca [cb - 1] = 0;
      cb--;
   }
}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Чт Сен 22, 2016 6:59 pm    Заголовок сообщения: Ответить с цитатой

2. Решить квадратное уравнение.
6. Решить биквадратное уравнение.

Код:
/*   p11
Язык Turbo C
Основы программирования
Теория. Задачи   */

/*   p11 (15k), p13 (22k), p16, p18, p19 (23k)
p21 (24k), p53 (25k), p54, p55   */

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

j ();      /*   Решение - любое число.   */
k ();      /*   Решений нет.   */
l (float);      /*   Один корень.   */
m (float, float);   /*   Два корня.   */
n (int, int);   /*   n = a ^ b.   */
o (float, float, float);   /*   Три корня.   */
p (float, float, float, float);   /*   Четыре корня.   */


main ()
{
   int a, b, c, d;
   int g, h;
   float s, t;

   printf ("Введите четыре целых числа: ");
   scanf ("%i%i%i%i", &a, &b, &c, &d);

   printf ("p13 - 2. ");
   if (a == 0)
      if (b == 0)
    if (c == 0) j (); else k ();
      else
    l ((float) -c / b);
   else
   {
      g = b * b - 4 * a * c;
      if (g < 0)  k ();  else
    if (g == 0)
       l (-b / 2. / a);
    else
       m ((-b + sqrt (g)) / 2 / a, (-b - sqrt (g)) / 2 / a);
   }

   printf ("p21 - 6. ");
   if (a == 0)
      if (b == 0)
    if (c == 0) j (); else k ();
      else
      {
    s = (float) -c / b;
    if (s < 0)  k ();  else if (s == 0)  l (0);  else m (sqrt (s), -sqrt (s));
      }
   else
   {
      g = b * b - 4 * a * c;
      if (g < 0)  k ();  else
    if (g == 0)
    {
       s = -b / 2. / a;
       if (s < 0)  k ();  else if (s == 0)  l (0);  else m (sqrt (s), -sqrt (s));
    }
    else
    {
       s = (-b + sqrt (g)) / 2 / a;
       t = (-b - sqrt (g)) / 2 / a;
       if (s < 0)
          if (t < 0)  k ();  else if (t == 0)  l (0);  else m (-sqrt (t), sqrt (t));
       else
          if (s == 0)
        if (t < 0)  l (0);  else o (-sqrt (t), 0, sqrt (t));
          else
        if (t < 0)
           m (-sqrt (s), sqrt (s));
        else
           if (t == 0)
         o (-sqrt (s), 0, sqrt (s));
           else
         p (-sqrt (s), -sqrt (t), sqrt (t), sqrt (s));
    }
   }

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


j () {printf ("Решение - любое число.\n");}
k () {printf ("Решений нет.\n");}
l (float a) {printf ("x = %.4g.\n", a);}
m (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
o (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
p (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Roman_cat_Marcus



Пол: Пол:Муж

Заядлый
Рега: 23.09.2012
Сообщения: 1564

СообщениеДобавлено: Вт Ноя 29, 2016 7:47 am    Заголовок сообщения: Ответить с цитатой

нафига такие программы?

все это давно уже есть.
http://ru.onlinemschool.com/math/assistance/equation/quadratic/

_________________
O tempora, o mores!
"Разброс" это фрагментированная линейность.
Miraculous LadyBug
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Ср Ноя 30, 2016 11:23 am    Заголовок сообщения: Ответить с цитатой

Да я учебник читаю "Основы программирования". Вижу задачу. Присваиваю ей порядковый номер из головы и решаю.
Потом решаю, что надо было решать по-другому. Всё стираю и снова начинаю решать.
И так по кругу. Добрался до 80-ой страницы учебника, снова начал.
Удаление файлов в MS-DOS производится очень просто, без всякой корзины. Есть команда del.

_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Roman_cat_Marcus



Пол: Пол:Муж

Заядлый
Рега: 23.09.2012
Сообщения: 1564

СообщениеДобавлено: Ср Ноя 30, 2016 1:24 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Удаление файлов в MS-DOS

MS-DOS это не то чем стоит хвастаться )

_________________
O tempora, o mores!
"Разброс" это фрагментированная линейность.
Miraculous LadyBug
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jura_k



Пол: Пол:Муж
Возраст: 41
Постоянный гость
Рега: 02.02.2013
Сообщения: 322

СообщениеДобавлено: Сб Дек 03, 2016 12:54 pm    Заголовок сообщения: Ответить с цитатой

Будни программиста




_________________
Чем закрыть рекламу: http://amvnews.ru/forum/viewtopic.php?t=4025
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов AMV News -> Креатив Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы не можете скачивать файлы в этом форуме


Реклама