Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: C++
Форум Точек.нет - общение без границ ! > Техномир > Программирование
Страницы: 1, 2
jura_k
Я ввёл число с клавиатуры.
» Кликните сюда для просмотра оффтоп текста.. «
Ну и что, что на написание этого мне понадобилось 15 лет? В учебнике этого не было.
Неандертальцы вон сколько тысячелетий не могли огонь разжечь.
jura_k
Я посадил дерево написал программу. Она ничего не делает. Но в неё можно ввести три целых числа. Предлагаю вам попробовать. Программа работает под Windows на 32-битной платформе. (Windows 2000, Windows Vista)
Ещё там работают клавиши <Backspace> и <Enter>.
Прошу заценить.
https://yadi.sk/d/bmwYbfm-gVCDs

У меня сначала была Debug-версия, и там всё работало. Но когда я стал компилировать Release-версию, вылезли ошибки. Помучившись полчаса, я выяснил, что не там определил пару внутренних функций. Это надо было сделать в другом файле, и линковщик сообщал мне об ошибках. Помогла разобрать ситуацию интуиция...
jura_k
Модификация программы. Теперь приступаем к решению задач (из-за чего всё и затевалось). Скачать программу, текст программы и задачи можно здесь:
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
Очередной шедевр программирования.
» Кликните сюда для просмотра оффтоп текста.. «
ЛеПа
Цитата(jura_k @ 29.06.2015 - 9:34) *
Очередной шедевр программирования.
» Кликните сюда для просмотра оффтоп текста.. «

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

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

Программа:
» Кликните сюда для просмотра оффтоп текста.. «
jura_k
А вот программа под 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
В двадцатый раз стал читать книгу 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
Очередная книга – А.Г. Юркин, "Задачник по программированию", 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
Возвращаюсь обратно к учебнику "Начальный курс 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
Среда программирования IDE, или тайная лаборатория алхимика. Состав: MS-DOS + Turbo C.



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

Скриншоты:

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

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

Скриншоты:


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


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






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

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

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



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



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

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

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

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

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

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

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

      if (aa == 0x3b00)   /*   возврат в исходную точку наблюдения <F1>   */
      {
     ga = gb = gc = 1;
     gg = 1; gh = gi = 0;
      }
   }
}
jura_k
А.Г. Юркин, "Задачник по программированию". 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
jura_k По ходу старался напрасно.... нет желающих посмотреть на твои графики....
jura_k
Эксперимент! Эх, никто не оценил мои способности программиста... Я ещё в 1991-ом писал программы, но до сих пор никто даже не пикнул. Сколько ещё ждать? Лет 20?
hook
Пиши такие, которые нужны.... а вот какие??????..... иди на тематические форумы - например с окончанием или началом на hack..... там много чего интересного....
jura_k
Нужнее всего программа, которой можно прикрыть рекламу. The wall. Я её уже написал.
Она нужна при посещении больше половины сайтов. Даже очень нужна!
jura_k
Арифметика длинных целых чисел.

Дано:
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
Всё то же самое, но другим макаром.

Код
/*   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
2. Решить квадратное уравнение.
6. Решить биквадратное уравнение.

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



jura_k
В очередной раз решил все те же задачи из задачника. Новая редакция.
В этой программе сгруппированы задачи, которым для работы нужно либо 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
А в этой программе нужно вводить только три целых числа.
» Кликните сюда для просмотра оффтоп текста.. «
jura_k
Ещё раз всё то же самое.

» Кликните сюда для просмотра оффтоп текста.. «
Ангел Рая
Интересно все это конечно. Спасибо.
Эллочка
Цитата(ЧеРтЁнОк_Ф_кЕдАх @ 22.02.2017 - 20:23) *
Интересно все это конечно. Спасибо.

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


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


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


Ещё там были многострочные отрывки кодов.
» Кликните сюда для просмотра оффтоп текста.. «
jura_k
Решаем задачи из учебника "Основы программирования".
» Кликните сюда для просмотра оффтоп текста.. «
jura_k
Учебник "Начальный курс C и C++". Размер программы увеличен до 5 kb.
» Кликните сюда для просмотра оффтоп текста.. «

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

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

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

Решение задач:
» Кликните сюда для просмотра оффтоп текста.. «
indеx
Привет.
Ты учишься программировать, или просто от нечего делать? ab.gif
jura_k
Я хочу прочитать книгу. А вообще мозгам надо работать. У меня, может, есть талант выстраивать структурированные конструкции, но в жизни это вообще нигде не требуется, только здесь. Иначе говоря, некоторые мыслительные способности "спят", а я хочу их использовать, чтобы получить от жизни удовльствие.
Получается эстетическое наслаждение, которое получает, например, музыкант, когда пишет симфонию.
льдинка
jura_k
А почему не выучился на программиста? Сидел бы дома, деньги зарабатывал
Фарит
jura_k
Твоя работа связана с программированием?
jura_k
Цитата(Фарит @ 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
Цитата(jura_k @ 12.05.2018 - 18:45) *
Я хочу прочитать книгу. А вообще мозгам надо работать. У меня, может, есть талант выстраивать структурированные конструкции, но в жизни это вообще нигде не требуется, только здесь. Иначе говоря, некоторые мыслительные способности "спят", а я хочу их использовать, чтобы получить от жизни удовльствие.
Получается эстетическое наслаждение, которое получает, например, музыкант, когда пишет симфонию.
Есть такая штука, называется Delphi. Там можно получить готовую программу, вообще ничего не программируя. Правда в этом случае программа и делать ничего полезного не будет, но по крайней мере она будет иметь пустое окошко, которое можно запускать, сворачивать, раскрывать на весь экран и закрывать. А если в это пустое окошко ещё и накидать каких-нибудь кнопочек, полей для ввода текста и других элементов, то она будет выглядеть вообще круто. После чего можно будет смело всем заявлять: "Я разработал программу!"
Если интересно, могу дать ссылочки и подсказать вкратце, что да как ab.gif
jura_k
То же самое есть в "Visual C++ 6.0" и "Visual Basic 5.0". И то, и другое запускается из-под "Windows 95".
Конкретно сегодня я занимался разработкой спиралевидных карт в игре "Heroes III", а вовсе не программированием.
indеx
Ясно ay.gif Если когда-нибудь вдруг захочешь похвалиться успехами, то будет интересно ab.gif
jura_k
Работа мозга - это и есть самая главная награда от всех этих "телодвижений".
jura_k
ООП.

Код
/*   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
Здесь основной состав форума далек от языков программирования.... если что то выкладываешь, так объясни для чего и каких целей-задач этот код....
indеx
Цитата(hook @ 8.07.2018 - 12:30) *
Здесь основной состав форума далек от языков программирования.... если что то выкладываешь, так объясни для чего и каких целей-задач этот код....
Полностью поддерживаю.
jura_k
Читаю книгу "Начальный курс C и C++". При переходе от C к C++ есть несколько примеров кода, я их слил в одну программу, реализовал, запустил. Вывожу, что получилось.
Конкретно в этом коде - неправильно. Потому что на самом деле в классе есть собственный конструктор, совпадающий с именем класса, и не нужно определять новую функцию-конструктор класса.
jura_k
Программа создана для решения учебных задач в среде 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 - программа





Код программы:
» Кликните сюда для просмотра оффтоп текста.. «
Ахинея
Чувак, ты для чего так ужасно массивы объявляешь? Такими структурами никто, программирующие на плюсах, не пользуется. Юзай вектор из STL или динамически объявляй при помощи умных указателей из boost. А твой код выглядит пугающе, если честно...
jura_k
А меня этому никто не учил.
В 1993-1997 "vector" ещё не было. И тогда я думал, как освоить программирование под MS-DOS, а о STL даже не слышал.
Даже сейчас про STL я знаю лишь то, что она существует, но даже в глаза не видел.
А что такое "умных указателей из boost"? И чем вам традиционный подход не нравится? Мне всего лишь массив нужен. Массива из BASIC'а 1990-го года вполне достаточно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.