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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2018, 15:40   #131
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

«Тетрисом» меня не удивишь.
Ещё в начале века, когда я написал программу оптимизации графика вытирания пыли с оборудования, я создал интересную модификацию, в которой «оптимизировать» можно было поручить не компьютеру, а человеку. То есть вручную в графическом режиме. Это тоже что-то наподобие тетриса. У человека результат получался где-то на 20% хуже, чем у компьютера. Так что можно сказать, аналог тетриса я делал.

У меня сегодня радость! Я написал совершенно новую функцию:
Код:
aa (char *a, char *b, int c, int d, int e)
/*   Из строки “a”, начиная с символа “c”, копировать “d” символов
в строку “b”, начиная с позиции “e”   */
{
   int f;
   for (f = 0; f < d; f++)  b [e + f] = a [c + f];
}
И она работает! Я уже, наверное, лет 5 не писал новых функций.

Кстати говоря, 16 лет назад я написал игру "Сокобан" на языке "FoxPro 2.6" под "Windows 3.11".
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 30.01.2018, 15:42   #132
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от jura_k Посмотреть сообщение
И она работает!
Я вас огорчу...Без проверок хотя бы границ строк, это туфта.
p51x вне форума Ответить с цитированием
Старый 30.01.2018, 15:47   #133
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

В учебнике "Основі программирования" стояла конкретная задача:
из слова "величина" получить слово "наличие". (Или "величие"?
И там она решалась на Паскале. А я решил не тащить громоздкие библиотеки C для решения одной-единственной задачи и написал свою; ту, которую считал нужной.

Завтра другое слово перекодирую.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 30.01.2018, 15:47   #134
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

...и под "символом с" скорее всего имели в виду символ, а не позицию.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.02.2018, 13:10   #135
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от jura_k Посмотреть сообщение
В учебнике "Основі программирования" стояла конкретная задача:
из слова "величина" получить слово "наличие". (Или "величие"?
И там она решалась на Паскале. А я решил не тащить громоздкие библиотеки C для решения одной-единственной задачи и написал свою; ту, которую считал нужной.

Завтра другое слово перекодирую.
Вы знаете, громоздкость сильно переоценена.
Я вот под ардуино как-то переписал программу с С/макросов на С++ натуральный. Сразу, конечно, превысил лимит памяти...но добавление указаний компилятору решило проблему:

-ffunction-sections -fdata-sections -Wl,--gc-sections

код стал буквально до байтов равный по размеру коду С, а удобство/читаемость намного выше, чем самопал на макросах.
alexzk вне форума Ответить с цитированием
Старый 01.02.2018, 13:19   #136
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Какой еще С++? Автор про "громоздкие библиотеки С" говорил, видимо речь о стандартных strcpy и т.п. из string.h
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.02.2018, 13:41   #137
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Какой еще С++? Автор про "громоздкие библиотеки С" говорил, видимо речь о стандартных strcpy и т.п. из string.h
Ну не важно, принцип тот же - ключами компилятора можно убрать все лишнее.
alexzk вне форума Ответить с цитированием
Старый 02.02.2018, 15:53   #138
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Alex11223, да. Лень изучать эти функции. Не знаю, как они работают. Каков их код. Поэтому страшусь использовать то, что до конца не понятно. Предпочитаю делать своё, где всё ясно, прозрачно, понятно как работает.

alexzk
Про ключи компиляции слышал. Но поскольку человек ленивый, не стал их изучать и применять. У меня не стоит вопрос об экономии памяти или длины программы, потому что сейчас не 60-е годы, когда приходилось...

Обратите внимание: ёмкость HDD 80000 Mb, ёмкость C: - 100 Mb, ОС вместе с компилятором занимают 2-3 Mb, а мои программы, которые я пишу, занимают 0,02-0,03 Mb вместе с компилируемыми библиотеками.
Никто никогда не жаловался на нехватку памяти. Даже тогда, когда я случайно превысил размер программы 64 кб, компилятор даже не пикнул и запустил её, хотя размер памяти под программу был "small". И я бы так об этом и не узнал, если бы вдруг не "вспомнил" спустя много лет...
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 01.03.2018, 03:26   #139
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Учебник "Начальный курс C и C++". Размер программы увеличен до 5 kb.
Код:
/*   p42
     Начальный курс C и C++
     Язык Turbo C 2.0
     Количество больших программ: 5

     1 - 15k, 2 - 20k, 3 - 21k, 5 - 22k, 12 - 23k
     18 - 24k, 22 - 28k   */


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

float g = 3.1415926;   /*   число пи   */
char y;

m (); n (); o ();
p (float);
q (int);
float s (float);


main ()
{
   int a, b;   /*   ввод данных   */
   float d, e;
   float j;    /*   ввод данных   */
   unsigned v;
   char aa [80], ab [10];
   int ad;

   printf ("? (1-3) ");
   scanf ("%i", &a);
   if (a == 1) goto aaa;   /*   нет ввода             */
   if (a == 2) goto aab;   /*   ввод данных           */
   if (a == 3) goto aac;   /*   дополнительный ввод   */
   printf ("\n");
   return;

aaa:
   a = 1996;
   printf ("1. Сейчас %i год.\n", a);
   printf ("4. ");
   m (); n (); o ();
   printf ("5. ");
   d = 5;
   p (d);
   printf ("6. Длина окружности радиуса %.4g равна %.4g.\n", d, s (d));
   printf ("7.");
   for (a = 10; a; a--) printf (" %i", a);
   printf (" Старт!\n");
   v = 60000;
   a = v;
   printf ("8. a = %i, v = %u.\n", a, v);

   y = 'c';
   printf ("10. %c", y);
   y = '+';
   printf ("%c%c.\n", y, y);
   a = 5; b = 60;
   a++; ++b;
   printf ("15. a = %i, b = %i.\n", a, b);
   printf ("a = %i, b = %i.\n", a++, ++b);
   a = 101 <= 105;
   b = 101 > 105;
   printf ("16. true - %i, false - %i.\n", a, b);

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

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

   printf ("\n");
   goto aaz;

aab:
   printf ("Введите два целых числа: ");
   scanf ("%i%i", &a, &b);
   printf ("Введите рациональное число: ");
   scanf ("%f", &j);
   printf ("Введите символ: ");
   scanf ("%c", &y); scanf ("%c", &y);
   printf ("Введите строку: ");
   gets (aa); gets (aa);

   d = 2 * g * a;
   printf ("2. Радиус %i, длина %.4g.\n", a, d);
   d = 2 * g * j;
   e = g * j * j;
   printf ("3. Радиус %.4g, длина окружности %.4g, площадь круга %.4g.\n", j, d, e);
   printf ("9. ");
   q (a);
   printf ("12. Я знаю ваше имя. Ваше имя %s.\n", aa);
   ad = b;
   if (!ad) ad = 1;
   printf ("14. Целая часть %i, остаток от деления %i.\n", a / ad, a % ad);
   printf ("17. Число %.4g ", j);
   if (j > 0) {ad = 1; printf ("положительное, ad = %i.\n", ad);}
   if (j == 0) {ad = 0; printf ("равно нулю, ad = %i.\n", ad);}
   if (j < 0) {ad = -1; printf ("отрицательное, ad = %i.\n", ad);}

   printf ("18. ");
   if (j > 0) {ad = 1; printf ("Число %.4g положительное.\n", j);}
   else if (j < 0) {ad = -1; printf ("Число %.4g отрицательное.\n", j);}
      else {ad = 0; printf ("Число %.4g равно нулю.\n", j);}

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

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

   goto aaz;

aac:
   printf ("11. Нажмите какую-либо клавишу: ");
   y = getche ();
   if (y == 'a') printf ("\nВы нажали клавишу a.");
   printf ("\nВы нажали клавишу %c.\n", y);
   printf ("13. Введите строку: ");
   gets (aa);
   scanf ("%[0123456789]%s", aa, ab);
   printf ("%s..%s.\n", aa, ab);
   printf ("21. Нажмите какую-либо клавишу: ");
   for (;;)
   {
      y = getche ();
      if (y == 'Q') break;
      printf (" %c ", y);
   }

   /*   p80. a, b, ad - int.   */
   randomize ();
   a = 0;
   b = random (100);
   printf ("\n22. Введите число от 0 до 99: ");
   do {
      scanf ("%i", &ad);
      a++;
      if (b < ad) printf ("Загаданное число меньше. ");
      if (b > ad) printf ("Загаданное число больше. ");
   } while (b - ad);
   printf ("Вы угадали число. Затратили на угадывание %i попыток.\n", a);

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


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

q (int a)
{
   int b;
   for (b = 0; b < a  &&  b < 200; b++) printf ("%c", y);
   printf ("\n");
}

float s (float a) {return 2 * g * a;}
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 01.03.2018, 03:27   #140
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Вторая часть того же самого. Продолжение.
Код:
/*   p82
     Начальный курс C и C++
     Язык Turbo C 2.0
     Количество больших программ: 1

     1 - 15k, 2 - 16k, 6 - 17k, 7 - 23k, 12 - 24k
     13 - 25k, 16 - 26k   */


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

float aa (float);
int *ad (int *);
ag (int *);
ah (); ai (); aj ();


main ()
{
   int a, b, c;
   char d [80], e [20];
   char f [10] = {1, 23, 4, 7, 8, 0, 1, 9, 4, 7};
   char g [5] [20];
   float j, k;
   float *m;
   int *p, *q;
   char *s = "String of Letters in Different Registers";
   char *t;
   char *v [] = {"exe", "com", "dat", "c", "pas", "cpp"};
   int **y;

   printf ("? (1-2) ");
   scanf ("%i", &a);
   if (a == 1) goto aaa;   /*   простые программы   */
   if (a == 2) goto aab;   /*   специальный ввод    */
   printf ("\n");
   return;

aaa:
   printf ("1.   ");
   for (a = 1; a < 1000; a++)
   {
      if (a % 7) continue;
      printf ("%i  ", a);
   }

   strcpy (d, "Привет, ");
   strcpy (e, "мир!");
   printf ("\n\n3. ");
   puts (d); puts (e);
   strcat (d, e);
   puts (d); puts (e);
   strcpy (g [0], "Turbo Basic");
   strcpy (g [1], "Turbo Pascal");
   strcpy (g [2], "Borland C++");
   strcpy (g [3], "Turbo Prolog");
   strcpy (g [4], "Paradox");

   printf ("6. Неотсортированный массив:");
   for (a = 0; a < 10; a++) printf (" %i", f [a]);
   for (a = 0; a < 9; a++)
      for (b = 0; b < 9; b++)
	 if (f [b] < f [b + 1])
	 {
	    c = f [b];
	    f [b] = f [b + 1];
	    f [b + 1] = c;
	 }

   printf ("\nОтсортированный массив:");
   for (a = 0; a < 10; a++) printf (" %i", f [a]);
   j = 10.1;
   m = &j;
   k = *m;
   printf ("\n7. j = %g, k = %g.\n", j, k);
   (*m)++;
   printf ("j = %g, k = %g.\n", j, k);
   k = 1 + *m * k;
   printf ("j = %g, k = %g.\n", j, k);
   a = 10;
   p = &a;
   q = p;
   printf ("8. %p, ", p);
   printf ("%p, ", q);
   printf ("%i, %i.\n", a, *q);

   j = 10.1;
   p = (int *) &j;
   k = *p;
   printf ("9. j = %.4g, k = %.4g.\n", j, k);
   p = &a;
   printf ("10. %p, ", p++);
   printf ("%p.\n", p);
   printf ("11. Строка будет напечатана заглавными буквами.\n");
   a = 0;
   while (s [a]) printf ("%c", toupper (s [a++]));
   printf ("\n");
   printf ("12. Строка будет напечатана строчными буквами.\n");
   t = s;
   while (*t) printf ("%c", tolower (*t++));

   a = 7;
   p = &a;
   y = &p;
   printf ("\n14. a = %i, p = %p, y = %p.\n", a, p, y);
   (*p)++;
   printf ("a = %i, p = %p, y = %p.\n", a, p, y);
   **y = 12;
   printf ("a = %i, p = %p, y = %p.\n", a, p, y);
   j = 5.2;
   printf ("15. Квадрат числа %.4g равен %.4g.\n", j, aa (j));
   ad (&a);
   a = 10;
   ag (&a);
   ah ();

   a = 1;
   ai ();
   printf ("19. В функции \"main\" значение \"a\" равно %i.\n", a);
   printf ("20. ");
   for (a = 1; a <= 3; a++)
   {
      printf ("Вызов # %i.\n", a);
      aj ();
      printf ("Вызов # %i.\n", a);
      aj ();
   }

   goto aaz;

aab:
   printf ("2. Введите строку длиной менее 80 символов: ");
   gets (d); gets (d);
   printf ("Вы ввели строку: %s.\n", d);
   printf ("Введите еще одну строку длиной менее 80 символов: ");
   scanf ("%s", d);
   printf ("Вы ввели строку: ");
   puts (d);
   printf ("4. Введите строку: ");
   gets (d); gets (d);
   printf ("Строка \"%s\" имеет длину %i символов.\n", d, strlen (d));

   printf ("13. ");
   do {
      do {
	 printf ("Файлы с расширением: 1. exe; 2. com; 3. dat; 4. c; ");
	 printf ("5. pas; 6. cpp; 7. quit.\nВаш выбор: ");
	 scanf ("%i", &a);
      } while (a < 1  ||  a > 7);

      if (a == 7) break;
      strcpy (d, "dir *.");
      strcat (d, v [a - 1]);
      system (d);
      printf ("\n");
   } while (1);

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


float aa (float a) {return a * a;}

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

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

ah ()
{
   int a;
   for (a = 0; a < 80; a++) putch ('-');
}

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

aj ()
{
   int a = 1;
   static int b = 1;
   printf ("a = %i, b = %i.\n", a++, b++);
}
мой канал на Ютубе: 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