Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2016, 09:50   #31
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,506
По умолчанию

Программа построения графика в трёхмерных координатах. Для простоты выбрана функция 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;
      }
   }
}
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 02.04.2016, 10:07   #32
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Специально для вас
Специально для нас Вы бы могли написать
это хотя бы под Windows 7 или Unix/Linux системы,
а то сейчас все побегут DOS качать же.
Croessmah вне форума Ответить с цитированием
Старый 02.04.2016, 10:32   #33
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Специально для вас
Ой как здорово!
Ну прям не нарадуюсь!

Куда тут жмакать?!111

З.Ы. И перелогинься! Я тебя узнал!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.07.2016, 14:53   #34
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,506
По умолчанию

А.Г. Юркин, "Задачник по программированию". 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.
Исходное число:
30500335535340341012420224351030224 42550113213400015133325100225243433 43
Промежуточное число в десятичной системе счисления:
00000000000000005566470709304696416 81716920017828404995837479016387336 79
Основание второй системы счисления: 9.
Конечное число:
24521055280543813208204360708881333 086022846352066040662160


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

Текст программы:
Код:
/*   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");
}
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...

Последний раз редактировалось jura_k; 04.07.2016 в 14:54. Причина: Опять забыл убрать "перенос по границе окна" в Блокноте
jura_k вне форума Ответить с цитированием
Старый 04.07.2016, 15:17   #35
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

кстати, про перевод.
тут недавно была тема.
Цитата:
Натуральное число в p-ичной системе счисления задано своими цифрами, хранящимися в в массиве К(n). Проверить корректность такого представления и перевести число в q-ичную систему
там есть решение (правда на Паскале)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2016, 07:00   #36
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,506
По умолчанию

Список доступных мне языков программирования:

Turbo C 2.0: C
Turbo C 2.0: C со структурами
Borland C++ 3.1: С
Borland C++ 3.1: C со структурами
Borland C++ 3.1: С с классами
Visual Basic 5.0
Visual C++ 6.0
Visual C++ 7.0

Целых 8. И на любом из них можно написать что угодно.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 13.07.2016, 12:20   #37
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,506
По умолчанию

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

В написанном выражении
((((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.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 13.07.2016, 13:45   #38
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
По-моему, слишком заморочено. А как же "наглядность программ
Есть еще и понятие расширяемости.

Программы как правило пишутся для решения класса задач, отличающихся РАЗНЫМИ исходными данными.
В данном случае как быть если задать ДРУГОЕ выражение для расстановки знаков
и имеющее

1. другие числа при сохранении количества и порядка вставляемых операций и порядка скобок.
скажешь это легко, не спорю. читаем дальше

2. другое количество вставляемых операций при сохранении порядка скобок.
и как ???

3. и совсем уж произвольное выражение с произвольным количество операциий и скобок.
давай пожалуй остановимся на п.2.
Судя по всему Автор как раз и решает задачу из п.2.

Цитата:
Здесь отыскивается первый член ai в последовательности an, a(n-1), ..., a2, не равный 4.
Здесь автор оперирует обратной последовательностью. n n-1 ... 2 1
В твоем случае "поиск" проводится с конца (начиная с самых вложенных циклов)

найти цикл для которого ВСЕ его вложенные уже закончились (все закончившиеся циклы имеют значение 4). и который еще работает (<4 )

вот для него
Цитата:
Он увеличивается на 1
,

Цитата:
а все предыдущие полагаются равными 1."
у нас это последующие (ВСЕ его вложенные начинаются снова)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.07.2016, 16:55   #39
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,506
По умолчанию

Вот как хорошо, когда имеешь дело с книгой: с ней можно поспорить, не согласиться и предложить свой вариант.

Вы говорите: расширяемость. Хорошо. Такую задачу я уже решал приблизительно 13 лет назад, и называлась она "Оптимизация графика профилактики оборудования".

Что касается ЭТОЙ задачи, расширяемость вряд ли уместна – такие задачи дают младшеклассникам на уроках математики в качестве "усложнённого задания". Что я и имел ввиду, решая задачу "в лоб".
Будут другие условия – будет другая задача. А пока что она единственная такого типа из задачника, и повторения не будет. Дальше пойдут другие задачи.

Автор сборника говорит: не будем пересчитывать заново; вместо этого выделим дополнительный массив под промежуточные данные и будем менять данные только в нём и в массиве, где записаны номера операций (арифметических). Это я понял. Но вот реализовать не сумел. Заморочено. Поэтому начал с начала...
Он говорит: операций много, 4^5 > 1000. Я не считаю, что 1000 расчётов для компьютера – это слишком много. В конце концов, я готов и подождать. Целую секунду. Но даже на моём Celeron 333 ждать не пришлось – ответ появился мгновенно. Это же всё-таки 333000000-Герц процессор.

PS. Кстати, там нужно было найти не ВСЕ решения, а хотя бы одно. Но судя по программе, автор задачника нашёл-таки все.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...

Последний раз редактировалось jura_k; 13.07.2016 в 17:01.
jura_k вне форума Ответить с цитированием
Старый 16.08.2016, 20:31   #40
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,506
По умолчанию

Изобрёл свой способ поиска корня функции. По сути это усовершенствованный метод Ньютона.
Он быстро считает; насколько быстро – на глаз засечь не успел.

Код:
/*	p30
Алгебра: вычисление корня функции
Язык Turbo C   */

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

float f (float);


main ()
{
   int a;
   float d, e;
   float x [5], y [5];

   x [0] = -1;
   x [4] = 0;
   while (1)
   {
      y [0] = f (x [0]);
      y [4] = f (x [4]);

      d = y [4] - y [0];
      if (!d)  {x [2] = x [0]; break;}
      x [2] = (y [4] * x [0] - y [0] * x [4]) / d;

      d = (x [4] - x [2]) / 2;
      e = (x [2] - x [0]) / 2;
      if (d > e)  d = e;
      x [1] = x [2] - d;
      x [3] = x [2] + d;

      y [1] = f (x [1]);
      y [2] = f (x [2]);
      y [3] = f (x [3]);
      for (a = 0; a < 4; a++)  if (!y [a]) {x [2] = x [a]; goto aaa;}
      for (a = 0; a < 3; a++)  if (y [a] * y [a + 1] < 0)  break;
      x [0] = x [a];
      x [4] = x [a + 1];
      if (x [4] - x [0] < 10e-6)  {x [2] = x [0]; break;}
   }

aaa:
   printf ("x = %g, f (x) = %g.\n", x [2], f (x [2]));
   printf ("x [0] = %g, x [4] = %g.\n", x [0], x [4]);
   getch ();
   printf ("\n");
}


float f (float x) {return x * x * x * x * x + x + 1;}
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C под DOS jura_k Общие вопросы C/C++ 26 01.08.2015 09:03
Из Dos под Win Nozema Фриланс 3 30.10.2009 17:34
C++ под DOS. Функции Xeon332 Общие вопросы C/C++ 34 29.11.2008 18:01
borland C++под DOS Xeon332 Помощь студентам 9 20.09.2008 20:50