Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум Точек.нет - общение без границ ! _ Программирование _ C++

Автор: jura_k 31.03.2015 - 15:50

Я ввёл число с клавиатуры.

» Кликните сюда для просмотра оффтоп текста.. «
Ну и что, что на написание этого мне понадобилось 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, достаточную для покупки собственного магазина?

Текст программы. Со временем программы будут становиться всё длиннее, длиннее и длиннее.
» Кликните сюда для просмотра оффтоп текста.. «

Автор: jura_k 29.06.2015 - 9:24

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

» Кликните сюда для просмотра оффтоп текста.. «

Автор: ЛеПа 29.06.2015 - 9:46

Цитата(jura_k @ 29.06.2015 - 9:34) *
Очередной шедевр программирования.
» Кликните сюда для просмотра оффтоп текста.. «

Юра, и что сие творение делает?

Автор: 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

Задачи:

» Кликните сюда для просмотра оффтоп текста.. «

Программа:
» Кликните сюда для просмотра оффтоп текста.. «

Автор: 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>, либо выключать компьютер.

» Кликните сюда для просмотра оффтоп текста.. «

Автор: 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

» Кликните сюда для просмотра оффтоп текста.. «

Программа:
» Кликните сюда для просмотра оффтоп текста.. «

Автор: 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
----------------------------------------

Текст программы:

» Кликните сюда для просмотра оффтоп текста.. «

Автор: 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. Решить биквадратное уравнение.

» Кликните сюда для просмотра оффтоп текста.. «

Автор: 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

А в этой программе нужно вводить только три целых числа.

» Кликните сюда для просмотра оффтоп текста.. «

Автор: jura_k 22.02.2017 - 16:03

Ещё раз всё то же самое.

» Кликните сюда для просмотра оффтоп текста.. «

Автор: ЧеРтЁнОк_Ф_кЕдАх 22.02.2017 - 20:23

Интересно все это конечно. Спасибо.

Автор: Эллочка 22.02.2017 - 20:35

Цитата(ЧеРтЁнОк_Ф_кЕдАх @ 22.02.2017 - 20:23) *
Интересно все это конечно. Спасибо.

ag.gif

Автор: льдинка 4.05.2017 - 19:31

Си++ ещё не вымер?

Автор: Noir 20.05.2017 - 19:38

Цитата(льдинка @ 4.05.2017 - 19:31) *
Си++ ещё не вымер?


Вымрет когда прийдет достойная замена)

Автор: jura_k 23.05.2017 - 17:54

Сделал ещё раз всё то же самое. Остановился, когда размер программы превысил 5 килобайт. На всё ушло два дня - вчера и сегодня.
...Я тут полистал тему и обнаружил, что один из предыдущих постов почти такой же. Ну ладно, ещё раз опубликую. В этот раз всё будет иначе! Мы пойдём другим путём!

» Кликните сюда для просмотра оффтоп текста.. «


Кроме программ, в книге встречались однострочные коды. Вот они.
» Кликните сюда для просмотра оффтоп текста.. «


Ещё там были многострочные отрывки кодов.
» Кликните сюда для просмотра оффтоп текста.. «

Автор: jura_k 27.01.2018 - 16:18

Решаем задачи из учебника "Основы программирования".

» Кликните сюда для просмотра оффтоп текста.. «

Автор: jura_k 1.03.2018 - 3:22

Учебник "Начальный курс C и C++". Размер программы увеличен до 5 kb.

» Кликните сюда для просмотра оффтоп текста.. «

» Кликните сюда для просмотра оффтоп текста.. «

» Кликните сюда для просмотра оффтоп текста.. «

» Кликните сюда для просмотра оффтоп текста.. «

Автор: jura_k 6.04.2018 - 12:52

Ещё раз то же самое.
20 задач, 10 килобайт кода, 28 килобайт исполняемого файла.
Условия задач:

» Кликните сюда для просмотра оффтоп текста.. «

Решение задач:
» Кликните сюда для просмотра оффтоп текста.. «

Автор: indеx 9.04.2018 - 17:16

Привет.
Ты учишься программировать, или просто от нечего делать? ab.gif

Автор: 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. Там можно получить готовую программу, вообще ничего не программируя. Правда в этом случае программа и делать ничего полезного не будет, но по крайней мере она будет иметь пустое окошко, которое можно запускать, сворачивать, раскрывать на весь экран и закрывать. А если в это пустое окошко ещё и накидать каких-нибудь кнопочек, полей для ввода текста и других элементов, то она будет выглядеть вообще круто. После чего можно будет смело всем заявлять: "Я разработал программу!"
Если интересно, могу дать ссылочки и подсказать вкратце, что да как ab.gif

Автор: 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

Ясно ay.gif Если когда-нибудь вдруг захочешь похвалиться успехами, то будет интересно ab.gif

Автор: 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

Код программы:

» Кликните сюда для просмотра оффтоп текста.. «

Автор: Ахинея 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)