Перейти к содержанию
Обновление форума ×
АнимеФорум

C и C++


Рекомендуемые сообщения

Очередная программа под MS-DOS. Содержит в себе энное количество примеров из книги по программированию.

 

/*   p42
    Простые программы   */

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

float ga = 3.1415926;

ja ();
jb ();
jc ();
jd (float);
je (int *);
jf ();
jg ();
jh ();
ji (int, int);
jj (int *, int *);
jk (char *, int);
jl (int a [3] [3], int b [3] [3], int c [3] [3]);

float ka (float);
float kb (float);

int *la (int *);

main ()
{
  int aa, ab, ac;
  int ba, bb;
  int *ca, *cb, **cc;
  float da, db;
  float ea;
  float *fa;
  unsigned ma;
  char pa;
  char qa;
  char *ra = "String Of Letters in Different Registers.";
  char *rb;
  char sa [80], sb [20], sc [10];
  char sd [10] = {1, 23, 4, 7, 8, 0, 1, 9, 4, 7};
  char se [10] = {1, 3, -5, 7, 9, 0, 22, 4, 6, 8};
  char ta [80];
  char ua [5] [20];
  int va [3] [3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
  int vb [3] [3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int vc [3] [3];

/* printf ("Input two integers: ");
  scanf ("%i%i", &ba, &bb);
  printf ("Input float: ");
  scanf ("%f", &ea);
  printf ("Press any key: ");
  qa = getche ();
  printf ("\nInput string: ");
  gets (sa); gets (sa);
  printf ("Input string: ");
  scanf ("%[0123456789]%s", sb, sc); */

  ba = 1; bb = 2; ea = 3; qa = 'b'; strcpy (sa, "c"); strcpy (sb, "d");
  strcpy (sc, "e");
  printf ("Input float: ");
  scanf ("%f", &ea);
  printf ("Press any key: ");
  qa = getchar (); qa = getchar ();
  printf ("Input string: ");
  gets (ta); gets (ta);

  aa = 1996;
  printf ("Сейчас %i год.\n", aa);
  da = ga * 2 * ba;
  printf ("Радиус %i, длина %.4g.\n", ba, da);
  da = ga * 2 * ea;
  db = ga * ea * ea;
  printf ("Радиус %.4g, длина окружности %.4g, площадь круга %.4g.\n",
     ea, da, db);

  ja ();
  jb ();
  jc ();
  aa = 5;
  jd (aa);
  printf ("Длина окружности радиуса %i равна %.4g.\n", aa, ka (aa));
  for (aa = 10; aa > 0; aa--)
  {
     printf ("%i", aa);
     if (aa > 1)  printf (" ");
  }

  printf ("\nСтарт!\n");
  ma = 60000;
  aa = ma;
  printf ("aa = %i, ma = %u.\n", aa, ma);
  pa = 'c';
  printf ("%c", pa);
  pa = '+';
  printf ("%c%c\n", pa, pa);
  if (qa == 'a')  printf ("Вы нажали клавишу \"a\".\n");
  printf ("Вы нажали клавишу \"%c\".\n", qa);
  printf ("Я знаю ваше имя; ваше имя %s.\n", sa);
  printf ("%s..%s\n", sb, sc);
  printf ("Целая часть %i. ", ba / bb);
  printf ("Остаток от деления %i.\n", ba % bb);
  aa = 5;
  ab = 60;
  aa++;
  ++ab;
  printf ("aa = %i, ab = %i.\n", aa, ab);
  printf ("aa = %i, ab = %i.\n", aa++, ++ab);

  aa = 101 <= 105;
  ab = 101 > 105;
  printf ("true - %i, false - %i.\n", aa, ab);
  if (ea > 0) {aa = 1; printf ("Число %g положительное, aa = %i.\n", ea, aa);}
  if (ea == 0) {aa = 0; printf ("Число %g равно нулю, aa = %i.\n", ea, aa);}
  if (ea < 0) {aa = -1; printf ("Число %g отрицательное, aa = %i.\n", ea, aa);}
  if (ea > 0) {aa = 1; printf ("Число %g положительное.\n", ea);}
  else if (ea < 0) {aa = -1; printf ("Число %g отрицательное.\n", ea);}
     else {aa = 0; printf ("Число %g равно нулю.\n", ea);}

  if (qa >= 'А'  &&  qa <= 'Я')
  {
     switch (qa)
     {
 case 'А': printf ("Алексеев\n"); break;
 case 'Б': printf ("Булгаков\n"); break;
 case 'В': printf ("Волошин\n"); break;
 case 'Г': printf ("Гоголь\n"); break;
 default: printf ("Достоевский, Зощенко и другие\n"); break;
     }
  }
  else printf ("Надо было ввести заглавную русскую букву.\n");

  if (qa >= 'А'  &&  qa <= 'Я')
  {
     switch (qa)
     {
 case 'А': printf ("Алексеев\n");
 case 'Б': printf ("Булгаков\n");
 case 'В': printf ("Волошин\n");
 case 'Г': printf ("Гоголь\n");
 default: printf ("Достоевский, Зощенко и другие\n");
     }
  }
  else printf ("Надо было ввести заглавную русскую букву.\n");

  for (aa = 0; aa < 10; aa++)
     for (ab = 0; ab < 6; ab++)
     {
 printf ("%i * %i = %-2i", aa, ab, aa * ab);
 if (ab < 5) printf ("  "); else printf ("\n");
     }

  for (aa = 0; aa < 1000; aa++)
  {
     printf ("%i - %i.", aa, aa * aa * aa);
     if (aa * aa * aa > 10000)
     {
 printf ("\n");
 break;
     }
     else printf (" ");
  }

  for (aa = 1; aa < 1000; aa++)
  {
     if (aa % 7)  continue;
     printf ("%-5i", aa);
  }

  printf ("\n");
  strcpy (sa, "Привет, ");
  strcpy (sb, "мир.");
  puts (sa);
  puts (sb);
  strcat (sa, sb);
  puts (sa);
  puts (sb);
  printf ("Строка \"%s\" имеет длину %i символов.\n", ta, strlen (ta));
  strcpy (ua [0], "Turbo Basic");
  strcpy (ua [1], "Turbo Pascal");
  strcpy (ua [2], "Borland C++");
  strcpy (ua [3], "Turbo Prolog");
  strcpy (ua [4], "Paradox");
  printf ("Неотсортированный массив:");
  for (aa = 0; aa < 10; aa++)  printf (" %i", sd [aa]);
  for (aa = 0; aa < 9; aa++)
     for (ab = 0; ab < 9; ab++)
 if (sd [ab] < sd [ab + 1])
 {
    ac = sd [ab];
    sd [ab] = sd [ab + 1];
    sd [ab + 1] = ac;
 }

  printf ("\nОтсортированный массив:");
  for (aa = 0; aa < 10; aa++)  printf (" %i", sd [aa]);
  da = 10.1;
  fa = &da;
  db = *fa;
  printf ("\nda = %g, db = %g.\n", da, db);
  (*fa)++;
  printf ("da = %g, db = %g.\n", da, db);
  db = 1 + *fa * db;
  printf ("da = %g, db = %g.\n", da, db);
  aa = 10;
  ca = &aa;
  cb = ca;
  printf ("%p\n", ca);
  printf ("%p\n", cb);
  printf ("%i, %i.\n", aa, *cb);
  da = 10.1;
  ca = (int *) &da;
  db = *ca;
  printf ("da = %g, db = %g.\n", da, db);

  ca = &aa;
  printf ("%p, %p.\n", ca, ++ca);
  printf ("Строка Будет Напечатана Заглавными Буквами.\n");
  aa = 0;
  while (ra [aa]) printf ("%c", toupper (ra [aa++]));
  printf ("\nСтрока будет напечатана строчными буквами.\n");
  rb = ra;
  while (*rb) printf ("%c", tolower (*rb++));
  aa = 7;
  ca = &aa;
  cc = &ca;
  printf ("\naa = %i, ca = %p, cc = %p.\n", aa, ca, cc);
  (*ca)++;
  printf ("aa = %i, ca = %p, cc = %p.\n", aa, ca, cc);
  **cc = 12;
  printf ("aa = %i, ca = %p, cc = %p.\n", aa, ca, cc);
  da = 5.2;
  printf ("Квадрат числа %.4g равен %.4g.\n", da, kb (da));

  la (&aa);
  aa = 10;
  je (&aa);
  jf ();
  aa = 1;
  jg ();
  printf ("В функции \"main\" значение aa равно %i.\n", aa);
  for (aa = 1; aa < 4; aa++)
  {
     printf ("Вызов # %i.\n", aa);
     jh ();
     printf ("Вызов # %i.\n", aa);
     jh ();
  }

  aa = 5;
  ab = 10;
  printf ("Сначала aa = %i, ab = %i.\n", aa, ab);
  ji (aa, ab);
  printf ("Теперь aa = %i, ab = %i.\n", aa, ab);
  printf ("Ничего не изменилось.\n");
  jj (&aa, &ab);
  printf ("Теперь aa = %i, ab = %i.\n", aa, ab);
  printf ("Значения поменялись.\n");
  aa = 10;
  printf ("До сортировки: ");
  for (ab = 0; ab < 10; ab++)
  {
     printf ("%i", se [ab]);
     if (ab < 9) printf (", "); else printf (".\n");
  }

  jk (se, aa);
  printf ("После сортировки: ");
  for (ab = 0; ab < 10; ab++)
  {
     printf ("%i", se [ab]);
     if (ab < 9) printf (", "); else printf (".\n");
  }

  jl (va, vb, vc);
  printf ("Массив \"vc\":\n");
  for (aa = 0; aa < 3; aa++)
     printf ("%-3i %-3i %-3i\n", vc [aa] [0], vc [aa] [1], vc [aa] [2]);

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

ja () {printf ("Вызвали первую функцию.\n");}
jb () {printf ("Вызвали вторую функцию.\n");}
jc () {printf ("Вызвали третью функцию.\n");}
jd (float a) {printf ("Длина окружности радиуса %.4g равна %.4g.\n",
  a, ga * 2 * a);}

je (int *a) {*a = *a * *a;}

jf ()
{
  int a;
  for (a = 0; a < 80; a++) printf ("-");
}

jg ()
{
  int aa;
  aa = 10;
  printf ("В функции \"jg\" значение aa равно %i.\n", aa);
}

jh ()
{
  int a;
  static b = 1;
  a = 1;
  printf ("a = %i, b = %i.\n", a++, b++);
}

ji (int a, int B)
{
  int c;
  c = a;
  a = b;
  b = c;
}

jj (int *a, int *B)
{
  int c;
  c = *a;
  *a = *b;
  *b = c;
}

jk (char a [], int B)
{
  int c, d, e;
  for (c = 0; c < b - 1; c++)
     for (d = 0; d < b - 1; d++)
 if (a [d] > a [d + 1])
 {
    e = a [d];
    a [d] = a [d + 1];
    a [d + 1] = e;
 }
}

jl (int a [3] [3], int b [3] [3], int c [3] [3])
{
  int d, e, f;
  for (d = 0; d < 3; d++)
     for (e = 0; e < 3; e++)
     {
 c [d] [e] = 0;
 for (f = 0; f < 3; f++)  c [d] [e] += a [d] [f] * b [f] [e];
     }
}

float ka (float a) {return ga * 2 * a;}
float kb (float a) {return a * a;}

int *la (int *a)
{
  *a = *a * *a;
  return a;
}

 

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...
  • Ответов 91
  • Создана
  • Последний ответ

Топ авторов темы

Очередной шедевр программирования. Повторил часть предыдущей программы.

 

/*   p42 - p74
Язык Turbo C 2.0   */

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

float ga = 3.1415926;		/*   число пи   */
char gb;					/*   переменная ввода   */

ja ();
jb ();
jc ();
jd (float);
float ka (float);



main ()
{
  int aa, ab;
  int ba, bb;		/*   переменная ввода   */
  float da, db;
  float ea;		/*   переменная ввода   */
  unsigned ma;
  char pa;
  char sa [80], sb [10], sc [10];		/*   массивы ввода   */

  printf ("Введите два целых числа и одно рациональное число: ");
  scanf ("%i%i%f", &ba, &bb, &ea);
  printf ("Введите символ: ");
  gb = getche ();
  printf ("\nВведите строку: ");
  gets (sa); gets (sa);
  printf ("Введите строку: ");
  scanf ("%[0123456789]%s", sb, sc);
  printf ("\n");

  aa = 1996;
  printf ("Сейчас %i год.\n", aa);
  da = ga * 2 * ba;
  printf ("Радиус = %i, длина = %.4g.\n", ba, da);
  da = ga * 2 * ea;
  db = ga * ea * ea;
  printf ("Радиус = %.4g, длина окружности = %.4g, площадь круга = %.4g.", ea, da, db);
  printf ("\n");
  ja (); jb (); jc ();
  da = 5;
  jd (da);
  printf ("Длина окружности радиуса %.4g равна %.4g.\n", da, ka (da));
  for (aa = 10; aa; aa--)  printf ("%i  ", aa);
  printf ("Старт!\n");
  ma = 60000;
  aa = ma;
  printf ("aa = %i, ma = %u.\n", aa, ma);
  je (ba);
  pa = 'c';
  printf ("%c", pa);
  pa = '+';
  printf ("%c%c\n", pa, pa);
  if (gb == 'a')  printf ("1. Вы нажали клавишу 'a'.\n");
  printf ("2. Вы нажали клавишу '%c'.\n", gb);
  printf ("Я знаю ваше имя... ваше имя - '%s'.\n", sa);
  printf ("%s..%s\n", sb, sc);
  printf ("Целая часть %i; остаток от деления %i.\n", ba / bb, ba % bb);
  aa = 5;
  ab = 60;
  aa++;
  ++ab;
  printf ("aa = %i, ab = %i.\n", aa, ab);
  printf ("aa = %i, ab = %i.\n", aa++, ++ab);
  aa = 101 <= 105;
  ab = 101 > 105;
  printf ("true: %i, false: %i.\n", aa, ab);

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



ja () {printf ("Вызвали первую функцию.\n");}
jb () {printf ("Вызвали вторую функцию.\n");}
jc () {printf ("Вызвали третью функцию.\n");}
jd (float a) {printf ("Длина окружности радиуса %.4g равна %.4g.\n", a, ga * 2 * a);}

je (int a)
{
  int b;
  for (b = 0; b < a; b++)  printf ("%c", gb);
  printf ("\n");
}

float ka (float a) {return ga * 2 * a;}

 

Скачать текст программы можно тут:

https://yadi.sk/i/ScUvvSJXkSyJy

 

Программы пишутся на IDE HDD 160 Gb под Celeron 333. На нём размечено 0,1 Gb под C: и установлен DOS с русификатором "keyrus.com". Из этих 100 Mb для DOS, Turbo C 2.0 и программы пока что понадобилось около 4 Mb.

Для переноса сюда подцепил второй HDD, с которого запустил Windows 2000 и скопировал текст программы на флэшку. Затем в Vista открыл Wordpad, в нём - текст программы под DOS (есть такая опция!) Дальше – дело техники. Форматирование в Word и выкладывание на Яндекс.Диск.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

В двадцатый раз стал читать книгу 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 и в документ.

Теперь настало время думать, какую книгу читать следующей.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

Удали функцию getch () в конце программы – просить не будет. Она всё равно только для удобства, чтобы экран сразу не исчезал по окончании работы программы, а то приходится каждый раз переключать на этот экран <Alt> + <F5> (чтобы просмотреть, что же там программа наработала).
for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Очередная книга – А.Г. Юркин, "Задачник по программированию", 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");
}

Изменено пользователем MrStitch (смотреть историю редактирования)
for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

Пришлось выдумать такую систему, которая:

 

абстрактна

подходит ко множеству разнотипных задач

несамопересекающаяся!

относительно компактна.

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)
for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Просто информация в моей памяти не задерживается. Уже лет 20 как. Пришлось завести специальную темку, чтобы хоть как-то отмечать, что же именно я изучил...

 

А то вроде прочитал книжку... и ничего не узнал.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

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

Почитать программы можно здесь: https://yadi.sk/i/c3x1x6zpnhx8r

Единственное, что я не прошёл – тему про структуры и объединения. Это тоже входит в C.

 

Дополнительно к уже созданному диску 100 Mb сделал ещё один диск 100 Mb, куда установил "Borland C++ 3.1". Все программы на C реализовал там. Отличие от "Turbo C 2.0" в том, что буковки стали цветные. Там оконная среда, позволяющая открывать сразу несколько файлов; кроме того, среда распознаёт ключевые слова, идентификаторы, строки препроцессора и комментарии, выделяя их специальным цветом.

Работать намного приятнее. И самое главное – не тормозит в отличие от Windows.

К сожалению, что-то в компьютере не так, и после выхода из этой среды компьютер перестаёт воспринимать клавиатуру. Может, потому что она USB? В общем, приходится после выхода либо нажимать <Reset>, либо выключать компьютер.

 

 

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

#include <conio.h>

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

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

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

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

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

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

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

 

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

Единственное, что я не прошёл – тему про структуры и объединения.

Лучше бы вместо графического режима (устаревшего как навоз мамонта) разобралося со структурами данных.

Ссылка на комментарий
Поделиться на другие сайты

С ними я разбирался ещё более десяти лет назад. Просто они имеют отношение к классам (очень похоже), а к классам я пока не тороплюсь.

В тех мелких задачах, с которыми я сталкивался, можно обойтись без структур. К ним ещё вернусь как-нибудь в другой раз.

Графику я тоже знаю со школьных лет.

Далее по курсу – Visual Basic 5, в котором абсолютно нечего учить. Ну а пока я читаю теорию C и теорию программирования.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

Список, дерево и прочее без понятия "структура" строить сложновато. Оно конечно можно все имитировать через разнородные массивы (в конце концов, память компа в классической архитектуре -- массив байтиков), но как-то уныло.
Ссылка на комментарий
Поделиться на другие сайты

тогда нужны кортежи / tuple.

и как только мы заговорим о реализации этих самых структур -- опять выползают структуры и указатели.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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

 

http://s6.uploads.ru/t/15oSd.jpg

 

http://s6.uploads.ru/t/7TQmA.jpg

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

турбо-среда в свое время потрясала, да.

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

правда, это привело к утрате навыков работы с debug.exe ...

Ссылка на комментарий
Поделиться на другие сайты

А я дебаггером не пользуюсь. Не приучен. Не только внешним, но и встроенным.

А когда что-то не работает, начинаю гадать, пытаясь по внешнему виду определить, что там не работает или работает неправильно. А может, всё как раз работает, а я неправильно понимаю?

Отмечу удобную навигацию в программе клавишами <Page-up>, <Page-down>, <Ctrl>+<Home>, <Ctrl>+<End>, а также возможность копирования текста и его выделения. Очень пригодилось. Например, в том участке кода, наверху.

Торможение в процессе программирования сводится, таким образом, к необходимости соображать, а вовсе не к недостаткам IDE.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

Программа, которая строит трёхмерные графики функций.

f1 = 3x2 / 5y2

f2 = x2 / y2

f3 = y - x2 / y2

f4 = (6xy + 3x2y2) / (7x - 12y)

 

Скриншоты:

http://s3.uploads.ru/t/HJtzn.png

 

 

Программа:

 

/*   p5
    Алгебра
    Язык Turbo C 2.0    */

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

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



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

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

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

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

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

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

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

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

  getch ();
  closegraph ();
}



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

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

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

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

 

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

В приличном обществе за magic numbers принято бить по рукам тем, что Гатс называет мечом.
[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]
Ссылка на комментарий
Поделиться на другие сайты

Согласно математике magic numbers можно использовать.

В приличном обществе не бьют, а если бьют, то, во-первых, это не приличное общество, а во-вторых, надо уносить ноги, чтобы спасти руки. А в-третьих, можно же и отбиваться. На том же основании.

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)
for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

это называется "воспитывают".

а если запустить твою поделку на древнем CGA, у которого 320*200 ?

понятно, что на "один раз", "на коленке" так и пишут. но другим стараются этого не показывать.

Ссылка на комментарий
Поделиться на другие сайты

....

 

Уровень знаний + желание учиться + куча свободного времени.

 

Все это отлично подходит для написания курсовых, решения контрольных - особенно для всевозможных непрофильных заочников (типа экономистов-юристов). Там overqualified скорее вреден, трудно объяснять и работы получаются неубедительные.

Когда-то давно этим занимался, но мне было проще найти клиентуру - препод-лаборант. Для начала можно по знакомым пробить тему или в СС поискать - частенько попадаются запросы в стиле - кто поможет.

 

Подработка, общение, повышение собственной квалификации - может куда в 1С потянет, а это уже практично.

Изменено пользователем Xarlamov (смотреть историю редактирования)
Ссылка на комментарий
Поделиться на другие сайты

Просто я реализую то, что собирался реализовать где-то году в 1993-ем.

Раньше тоже пытался неоднократно, у меня целая стопка распечаток лежит с начала века.

Насчёт CGA лучше не делать, когда я начинал строить графики, разрешение было уже достаточно высоким (хотя не помню конкретно). Мне просто нравится читать такие книги, разбираться в таких вещах. Ведь меня никто этому не учил и не показывал, что у него получается.

К специалистам меня не подпускают. Обычно они меня гонят. Поэтому я так и пишу.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Программа построения графика в трёхмерных координатах. Для простоты выбрана функция z = x / y. Управление: поворот графика влево-вправо, вверх-вниз, возврат на место и выход.

Скачать программу, скриншоты и текст программы можно тут: https://yadi.sk/d/i2-Z07Qjqg6bn

Программа написана под MS-DOS. Чтобы снять скриншоты, я запустил её под Windows 95. Для того, чтобы скопировать все материалы сюда (через флешку), я запустил Windows 2000.

Системные требования: 286 и выше, VGA.

Специально для вас я увеличил число комментариев в программе, так что можно считать её документированной.

 

Скриншоты:

http://sg.uploads.ru/t/3t4fo.png

 

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

http://sg.uploads.ru/t/LYNUg.png

 

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

http://sg.uploads.ru/t/Y2iVf.png

 

http://s8.uploads.ru/t/EYWrQ.png

 

http://sg.uploads.ru/t/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;
     }
  }
}



da ()
{
  float a, b, c;

  a = sqrt (ga * ga + gb * gb + gc * gc);   /*   нормирование вектора ориентации осей координат   */
  ga /= a;
  gb /= a;
  gc /= a;

  a = ga * gc;   /*   проекция вектора (0, 0, 1) на определяющий вектор   */
  b = gb * gc;
  c = gc * gc;
  gd = -a;   /*   проекция вектора (0, 0, 1) на плоскость, ортогональную определяющему вектору   */
  ge = -b;
  gf = 1 - c;
  a = sqrt (gd * gd + ge * ge + gf * gf);   /*   нормирование вектора оси Ox   */
  if (a == 0)  return;
  gd /= a;
  ge /= a;
  gf /= a;

  a = gb * gf - gc * ge;   /*   вычисление вектора оси Oy   */
  b = gc * gd - ga * gf;   /*   векторное произведение двух других осей   */
  c = ga * ge - gb * gd;
  if (a * gg + b * gh + c * gi < 0)   /*   инверсия левой тройки векторов   */
  {
     gd = -gd; ge = -ge; gf = -gf;
     gg = -a; gh = -b; gi = -c;
  }
  else {gg = a; gh = b; gi = c;}

  cleardevice ();
  setcolor (8);   /*   рисование 3D-графика   */
  dc ();
  setcolor (7);   /*   рисование осей координат в 3D   */
  db (0, 0, 0, -460, 0, 0);
  db (0, 0, 0, 0, -460, 0);
  setcolor (15);
  db (0, 0, 0, 460, 0, 0);
  db (0, 0, 0, 0, 460, 0);
  db (0, 0, 0, 0, 0, 300);
}

db (float a, float b, float c, float d, float e, float f)
{
  float g, h;   /*   первая точка на плоскости   */
  float i, j;   /*   вторая точка на плоскости   */

  g = a * gd + b * ge + c * gf;   /*   скалярное произведение первого вектора и вектора оси Ox   */
  h = a * gg + b * gh + c * gi;   /*   проекция первого вектора на ось Ox   */
  i = d * gd + e * ge + f * gf;   /*   скалярное произведение второго вектора и вектора оси Oy   */
  j = d * gg + e * gh + f * gi;   /*   проекция второго вектора на ось Oy   */
  if (g > 1000)  g = 1000;
  if (g < -1000)  g = -1000;
  if (i > 1000)  i = 1000;
  if (i < -1000)  i = -1000;
  line (320 - h, 240 - g, 320 - j, 240 - i);
}

dc ()
{
  int a, b;
  float d, e, f;

  f = 50;   /*   масштаб   */
  e = 0;
  for (a = -460; a <= 460; a += 20)
  {
     ha = 0;
     for (b = -460; b <= 460; b++)
     {
 d = ea (a / f, b / f) * f;
 if (ha == 2)  db (a, b - 1, e, a, b, d);
 e = d;
     }
  }

  for (b = -460; b <= 460; b += 20)
  {
     ha = 0;
     for (a = -460; a <= 460; a++)
     {
 d = ea (a / f, b / f) * f;
 if (ha == 2)  db (a - 1, b, e, a, b, d);
 e = d;
     }
  }
}

float ea (float a, float B)
{
  float c;

  if (b == 0)  {ha = 0; return 0;}   /*   область определения функции   */
  c = a / b;   /*   функция, график которой надо построить   */
  if (ha < 2)  ha++;
  if (c > 100)  {ha = 0; return 0;}
  if (c < -100)  {ha = 0; return 0;}
  return c;
}

 

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...

Важная информация