Deutsch

Воспоминания, Turbo C 01.06.2024

1767  1 2 все
uscheswoi_82 коренной житель14.06.24 00:08
uscheswoi_82
NEW 14.06.24 00:08 
в ответ uscheswoi_82 13.06.24 23:50

Результат работы кода, мерцает немножко:


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#21 
uscheswoi_82 коренной житель14.06.24 01:16
uscheswoi_82
NEW 14.06.24 01:16 
в ответ uscheswoi_82 14.06.24 00:08

Улучшил код см.:

#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#define PI 3.14159265359
#define PLANETS_COUNT 8
#define C_PLANET_MERCURY  LIGHTGRAY /* 1 Меркурий */
#define C_PLANET_VENUS    BROWN     /* 2 Венера   */
#define C_PLANET_EARTH    LIGHTBLUE /* 3 Земля    */
#define C_PLANET_MARS     BROWN     /* 4 Марс     */
#define C_PLANET_JUPITER  BROWN     /* 5 Юпитер   */
#define C_PLANET_URANUS   LIGHTCYAN /* 6 Уран     */
#define C_PLANET_NEPTUNE  LIGHTBLUE /* 7 Нептун   */
#define C_PLANET_PLUTO    LIGHTGRAY /* 8 Плутоний  */

#define SUN_X 300 /* Позиция солнце на экране*/
#define SUN_Y 200 /* Позиция солнце на экране */

void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg);

int main(void) {
  float x[PLANETS_COUNT], y[PLANETS_COUNT], angle[PLANETS_COUNT], step[PLANETS_COUNT];
  int plant_colors[PLANETS_COUNT] = { C_PLANET_MERCURY, C_PLANET_VENUS,
                                      C_PLANET_EARTH, C_PLANET_MARS,
                                      C_PLANET_JUPITER, C_PLANET_URANUS,
                                      C_PLANET_NEPTUNE, C_PLANET_PLUTO
                                    };
  int planets;
  int gdriver = DETECT, gmode, errorcode;

  initgraph(&gdriver, &gmode, "");
  errorcode = graphresult();
  if(errorcode != grOk) return -1;

  for(planets=0; planets<PLANETS_COUNT; planets++) {
    if(planets > 0) { x[planets] = x[planets-1] + 15; y[planets]=y[planets-1] + 15; }
    else { x[planets] = 40; y[planets]=40; }
  }

  for(planets=0; planets<PLANETS_COUNT; planets++) { angle[planets] = rand() % 50; step[planets] = 1 + rand() % 4; }
  while(!kbhit()) {
    setcolor(WHITE);
    circle(SUN_X, SUN_Y, 20);
    setfillstyle(SOLID_FILL, YELLOW);
    floodfill(SUN_X + 2, SUN_Y + 2, WHITE);
    for(planets=0; planets<PLANETS_COUNT; planets++) {
      angle[planets] += step[planets];
      if(angle[planets] >= 359) angle[planets] = 0;

      draw_planet(SUN_X, SUN_Y, x[planets], y[planets], angle[planets], WHITE, plant_colors[planets]);
    }
    setcolor(WHITE);
    outtextxy(10, 460, "Press any key, to exit...");
    cleardevice();
  }
  getch();
  closegraph();
  return 0;
}

/* Рисует планету */
void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg) {
  float nx, ny;
  nx = (x * cos(angle * (PI / 180))) - (y * sin(angle * (PI / 180)));
  ny = (x * cos(angle * (PI / 180))) + (y * sin(angle * (PI / 180)));
  setcolor(fg);
  circle(cx + nx, cy + ny, 5);
  setfillstyle(SOLID_FILL, bg);
  floodfill(cx + 2 + nx, cy + 2 + ny, fg);
}

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#22 
uscheswoi_82 коренной житель14.06.24 02:27
uscheswoi_82
NEW 14.06.24 02:27 
в ответ uscheswoi_82 14.06.24 01:16

Последнее, и я наверное пойду спатенькать. Если помните мы тут см. https://groups.germany.ru/12994140000001/f/41010308.html?C... делали просмоторщик картинок, а так-же программу, которая переконвиртирует фотографию в бинарный формат см.:



Вот код, программа читает бинарный файл, считывает бинарные данные из файла, и выводит изображение на экран:

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

int main(void) {
  int gdriver = DETECT, gmode, errorcode;
  FILE *f;
  int x = 0, y = 0, sx = 0, sy = 0;
  f = fopen("demo.bin", "r+b");
  if(f != NULL) {
    printf("\nSize X?");
    scanf("%d", &sx);
    printf("\nSize Y?");
    scanf("%d", &sy);
    initgraph(&gdriver, &gmode, "");
    errorcode = graphresult();
    if(errorcode != grOk) return -1;

    while(!feof(f)) {
      if(x >= sx) { x = 0; y++; }
      if(y >= sy) { break; }
      putpixel(x, y, fgetc(f));
      x ++ ;
    }
  outtextxy(10, 450, "Press any key to quit...");
  getch();
  closegraph();
  }
}


Вот результат, это изображение которое я закодировал выше написанным софтом:

1. Сначало спрашивает программа какой размер картинки, введём 320 и 200:



2. Вуаля! А вот и наша картинка см:



На последок хотел показать, что одна старая тётка про меня пишит в этом форуме:

Посмеюсь перед сном над ней хаха:



Ну ладно я баенкать пошёл.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#23 
uscheswoi_82 коренной житель14.06.24 02:33
uscheswoi_82
NEW 14.06.24 02:33 
в ответ uscheswoi_82 14.06.24 02:27, Последний раз изменено 14.06.24 02:34 (uscheswoi_82)

Завтра попробуем повернуть картику ну скажем на 30 градусов по формуле:

float nx, ny;
nx = (x * cos(angle*(PI/180))) - (y * sin(angle*(PI/180)));
ny = (x * cos(angle*(PI/180))) + (y * sin(angle*(PI/180)));


Ну ладно, всё теперь точно я спать! Всем спок. ночи!

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#24 
uscheswoi_82 коренной житель14.06.24 18:47
uscheswoi_82
NEW 14.06.24 18:47 
в ответ uscheswoi_82 14.06.24 02:33

С поворотом картинке позже покажу, а вот код в анимации солнечной системы подправил :

#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#define PI 3.14159265359
#define PLANETS_COUNT 8
#define C_PLANET_MERCURY  LIGHTGRAY /* 1 */
#define C_PLANET_VENUS    BROWN     /* 2 */
#define C_PLANET_EARTH    LIGHTBLUE /* 3 */
#define C_PLANET_MARS     BROWN     /* 4 */
#define C_PLANET_JUPITER  BROWN     /* 5 */
#define C_PLANET_URANUS   LIGHTCYAN /* 6 */
#define C_PLANET_NEPTUNE  LIGHTBLUE /* 7 */
#define C_PLANET_PLUTO    LIGHTGRAY /* 8 */
/* #define IS_DEBUG */

#define SUN_X 300
#define SUN_Y 220

void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg);
void draw_track(int cx, int cy, int radius, int color);

int main(void) {
  int planets;
  int radius[PLANETS_COUNT] = {56, 77,  98, 120, 140, 163, 185, 205};
  float x[PLANETS_COUNT], y[PLANETS_COUNT], angle[PLANETS_COUNT], step[PLANETS_COUNT];
  int plant_colors[PLANETS_COUNT] = { C_PLANET_MERCURY, C_PLANET_VENUS,
                      C_PLANET_EARTH, C_PLANET_MARS,
                      C_PLANET_JUPITER, C_PLANET_URANUS,
                      C_PLANET_NEPTUNE, C_PLANET_PLUTO
                    };
  int gdriver = DETECT, gmode, errorcode;

  initgraph(&gdriver, &gmode, "");
  errorcode = graphresult();
  if(errorcode != grOk) return -1;

  for(planets=0; planets<PLANETS_COUNT; planets++) {
    if(planets > 0) { x[planets] = x[planets-1] + 15; y[planets]=y[planets-1] + 15; }
    else { x[planets] = 40; y[planets]=40; }
  }
  for(planets=0; planets<PLANETS_COUNT; planets++) { angle[planets] = rand() % 50; step[planets] = 1 + rand() % 4; }
  while(!kbhit()) {
    setcolor(WHITE);
    circle(SUN_X, SUN_Y, 20);
    setfillstyle(SOLID_FILL, YELLOW);
    floodfill(SUN_X + 2, SUN_Y + 2, WHITE);
    for(planets=0; planets<PLANETS_COUNT; planets++) {
      angle[planets] += step[planets];
      if(angle[planets] >= 359) angle[planets] = 0;

      draw_planet(SUN_X, SUN_Y, x[planets], y[planets], angle[planets], WHITE, plant_colors[planets]);
      draw_track(SUN_X, SUN_Y, radius[planets], WHITE);
      }
    setcolor(WHITE);
    outtextxy(10, 460, "Press any key, to exit...");
    #ifndef IS_DEBUG
      delay(1500);
      cleardevice();
    #endif
  }
  getch();
  closegraph();
  return 0;
}

void draw_track(int cx, int cy, int radius, int color) {
  setcolor(color);
  circle(cx, cy, radius);
}

void draw_planet(int cx, int cy, int x, int y, float angle, int fg, int bg) {
  float nx, ny;
  char buf[80];
  nx = (x * cos(angle * (PI / 180))) - (y * sin(angle * (PI / 180)));
  ny = (x * cos(angle * (PI / 180))) + (y * sin(angle * (PI / 180)));
  setcolor(fg);
  circle(cx + nx, cy + ny, 5);
  setfillstyle(SOLID_FILL, bg);
  floodfill(cx + 2 + nx, cy + 2 + ny, fg);
}


Вуаля!

#define IS_DEBUG:




/*#define IS_DEBUG*/:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#25 
uscheswoi_82 коренной житель15.06.24 03:09
uscheswoi_82
NEW 15.06.24 03:09 
в ответ uscheswoi_82 14.06.24 18:47

Всем доброй ночи! Только что посмотрел Форсаж 7, и занимался программирование симуляции движения тела брошенного под углом к горизонту:

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

#define PI 3.14159265359

int main(void) {
  int gdriver = DETECT, gmode, errorcode;
  double vx, vy, t, step, x, y;
  int angle, v0;
  char buf[80];

  printf("v0, angle=");
  scanf("%d %d", &v0, &angle);
  sprintf(buf, "v0=%d angle=%d", v0, angle);
  initgraph(&gdriver, &gmode, "");
  errorcode = graphresult();
  if(errorcode != grOk) return -1;

  step = 0.005;
  t = 0;
  x = 1;
  y = 1;

  vx = v0 * cos((angle * PI) / 180);
  vy = v0 * sin((angle * PI) / 180);
  outtextxy(10, 10, buf);
  while(y > 0) {
    t = t + step;
    vy = vy - t;
    x = x + (vx * step);
    y = y + (vy * step);
    putpixel(x, 350 - y, WHITE);
    delay(20);
  }
  outtextxy(10, 400, "Press any key to exit...");
  getch();
  closegraph();
  return 0;
}


Вуаля! А вот и результат:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#26 
uscheswoi_82 коренной житель15.06.24 03:12
uscheswoi_82
NEW 15.06.24 03:12 
в ответ uscheswoi_82 15.06.24 03:09

Посмеюсь хаха


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#27 
uscheswoi_82 коренной житель18.06.24 13:35
uscheswoi_82
NEW 18.06.24 13:35 
в ответ uscheswoi_82 15.06.24 03:12, Последний раз изменено 18.06.24 13:36 (uscheswoi_82)

Всем привет! Продолжим болтавню. Сегодня реализуем алгоритм пузырчатой сортировки.

Алгоритм поиска больше:

#include <stdio.h>
int main(void) {
  int a = 3, b = 2;
  if(a > b)
    printf("%d больше, чем %d", a, b);
  return 0;
}


Алгоритм поиска меньше:

#include <stdio.h>
int main(void) {
  int a = 2, b = 3;
  if(a < b)
    printf("%d меньше, чем %d", a, b);
  return 0;
}


Алгоритм поменять местами 2 элемента:

if(z[a] > z<b>) {
  temp = z<b>;
  z<b> = z[a];
  z[a] = temp;
}


Вот так нужно представлять себе алгоритм с тремя чашками и водой:



А теперь сам алгоритм сортировки полностью, с маленького числа, в большое:

#include <stdio.h>
#define COUNT  10
int main(void) {
  int z[COUNT] = {10, 5, 4, 6, 1, 2, 7, 9, 3, 8};
  int temp;
  int a, b;
  for(a=0; a<COUNT; a++) printf("%d ", z[a]);
  printf("\n");
  for(a=0; a<COUNT; a++) {
    for(b=a; b<COUNT; b++) {
      if(z[a] > z<b>) {
        temp = z<b>;
        z<b> = z[a];
        z[a] = temp;
      }
    }
  }
  for(a=0; a<COUNT; a++) printf("%d ", z[a]);
  return 0;
}


Результат работы алгоритма:

10 5 4 6 1 2 7 9 3 8
1 2 3 4 5 6 7 8 9 10


Посмеёмся хахаулыб



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#28 
uscheswoi_82 коренной житель18.06.24 13:39
uscheswoi_82
NEW 18.06.24 13:39 
в ответ uscheswoi_82 18.06.24 13:35

Алгоритм пузырчатой сортировки и гравитации мы изучали в университете в Алматы в 2000 году. Но мы алгоритм строили на языке программирования Паскаль.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#29 
uscheswoi_82 коренной житель18.06.24 15:36
uscheswoi_82
NEW 18.06.24 15:36 
в ответ uscheswoi_82 18.06.24 13:39

Точнее сначало алгоритм а потом код на языке программирования Паскаль.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#30 
uscheswoi_82 коренной житель19.06.24 22:44
uscheswoi_82
NEW 19.06.24 22:44 
в ответ uscheswoi_82 18.06.24 15:36

Завтра нарисую спомощью BGI солнце, облака, машину и дом. Чтобы это нарисовать, я написал программу, которая рисует сетку.

Вот код:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main(void) {
  int gdriver = DETECT, gmode, errorcode, j;
  char buf[80];
  initgraph(&gdriver, &gmode, "");
  errorcode = graphresult();
  if(errorcode != grOk) return -1;
  setcolor(WHITE);
  for(j=25; j<getmaxy() - 25; j+=27) {
    sprintf(buf, "%d", j);
    outtextxy(1, j - 5, buf);
    line(25, j, getmaxx()-25, j);
  }
  line(25, j - 3, getmaxx()-25, j - 3);
  for(j=25; j<getmaxx() - 25; j+=27) {
    sprintf(buf, "%d", j);
    outtextxy(j - 5, 5, buf);
    line(j, 25, j, getmaxy() - 25);
  }
  line(j - 4, 25, j - 4, getmaxy() - 25);
  getch();
  closegraph();
  return 0;
}


Вот результат:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#31 
uscheswoi_82 коренной житель19.06.24 22:46
uscheswoi_82
NEW 19.06.24 22:46 
в ответ uscheswoi_82 19.06.24 22:44

Посмеёмся хаха


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#32 
uscheswoi_82 коренной житель22.06.24 23:35
uscheswoi_82
NEW 22.06.24 23:35 
в ответ uscheswoi_82 19.06.24 22:46

Всем добрый вечер, примерно в 2000 году сделал алгоритм расщепитель строки на массивы, там указываешь символ разделитель, по которому программа будет ориентироваться. Вот алгоритм:

#include <stdio.h>
char splits[10][250];  
int split_str(char *buf, char del, int idx);
int main(void) {
  int cnt;
  for(cnt=0; cnt < split_str("HELLO FROM uscheswoi_82", ' ', 3) + 1; cnt++)
    printf("\n%s", splits[cnt]);
  return 0;
}
int split_str(char *buf, char del, int idx) { 
  int j=0, i=0, k=-1; 
  for(j=0; j<idx; j++) splits[j][0] = '\0';
  for(j=0; j<strlen(buf); j++) {
    k++;
    splits[ i ][k] = buf[j];
    if(buf[j] == del) {
      splits[ i ][k] = '\0';
      i++;
      k=-1;
    }
 }
 splits[ i ][k+1] = '\0';
 return i; 
}


Результат работы программы:

HELLO
FROM
uscheswoi_82

Посмеёмся:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#33 
uscheswoi_82 коренной житель23.06.24 16:59
uscheswoi_82
NEW 23.06.24 16:59 
в ответ uscheswoi_82 22.06.24 23:35

Тут см. https://groups.germany.ru/12994140000001/f/41061285.html?C... воспоминания про Zortech C++/Symantec C++ который нам дали после Turbo C 2.0 или Borland C++ 3.0

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#34 
1 2 все