Форум программистов, компьютерный форум CyberForum.ru

Подправить рабочий код. - C++

Восстановить пароль Регистрация
 
michaelk
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 10
20.12.2009, 13:29     Подправить рабочий код. #1
Программа полностью рабочая, но как сказал препод, она пойдет только на 95, 98 виндоусе((((( Нужно просто поменять какие-то команды, что бы программа запустилась на ХР.

Посмотрите/помогите пожалуйста.

1. Цель роботы
Изучение функций системного таймера и закрепление практических навыков работы с ним.

3. Постановка задачи
Построить модель аналого-цифрового преобразователя (АЦП), которая работает в реальном времени. Процесс, который дискретизуется, моделируется программой (программным блоком), который выполняет циклическое вычисление функции y=F(x), где x - номер итерации. Преобразователь моделируется программой, которая выполняет с заданной частотой (в реальном времени) прерывание процесса, считывание и запоминание текущего значения функции. Запомнить не меньше 80 значений функции. Обеспечить наглядное представление результатов работы "АЦП".

• функция - y=50*(sin(x/10)+cos(x/8))+R+150;
• R - в диапазоне 0 - 10;
• частота - 36.4 Гц.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <dos.h>
#include <math.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>
#define TIMEINT 8           /* Прерывание таймера   */
#define NN 100 /* Максимальное количество показаний */
void interrupt (*oldtime)();  /* Новый обpаботчик   */
                             /* пpеpываний таймеpа  */
void interrupt  newtime();   /* Старый обpаботчик   */
                             /* пpеpываний таймеpа  */
static int y[NN];  /* Накопитель показаний          */
static int ny;     /* Индекс в массиве y            */
static int yc;     /* Текущее значение              */
static int kf;     /* Счетчик вызовов oldtime       */
union REGS rr;     /* Запись нового вектора         */
struct SREGS sr;
void *readvect(int in);     /* Получение старого вектора */
void writevect(int in, void *h);/* Запись нового вектора */
/*--------------------------------------------------------*/
void main()
{
  unsigned oldtic=65535u;  /* Старый коэфф. деления      */
  unsigned newtic=32768u;  /* Новый коэфф. деления       */
  int dd,                  /* Графический драйвер        */
      
      m,                   /* Графический режим          */
      errorcode;           /* Код ошибки                 */
  double x;                /* Аргумент функций sin и cos */
  textbackground(0);
  clrscr();
  textattr(0x0a);
  cprintf("              Lab work N6              ");
  cprintf("\n                Control timer               ");
  textattr(0x8e);
  gotoxy(35,12);
  cprintf("Please wait");
  /* Программирование канала 0 */
  outportb(0x43,0x36);                   /* Управляющий байт */
  outportb(0x40,newtic&0x00ff); /* Младший байт счетчика */
  outportb(0x40,newtic>>8);   /* Старший байт счетчика */
  ny=-1;            /* Признак того, что АЦП еще не началось */
  kf=15;
  /* Подключение к вектору */
  oldtime=readvect(TIMEINT);
  writevect(TIMEINT,newtime);
  /* Запуск "непрерывного процесса" */
  randomize();
  for (x=ny=0; ny<NN; x+=1)
    yc=(int)(50*(sin(x/10)+cos(x/8))+random(11)+150);
  /* Восстановление вектора */
  writevect(TIMEINT,oldtime);
  /* Восстановление канала 0 */
  outportb(0x43,0x36);                   /* Управляющий байт */
  outportb(0x40,oldtic&0x00ff); /* Младший байт счетчика */
  outportb(0x40,oldtic>>8);   /* Старший байт счетчика */
  /* Вывод запомненных результатов */
  dd=3; /* EGA, 16 цветов */
  m=1;  /* Режим 640*350 */
  initgraph(&dd,&m,"");
  /* проверка результата инициализации */
  errorcode = graphresult();
  if (errorcode != grOk)       /* ошибка графического режима */
  {
   printf("Graphics error: %s\n", grapherrormsg(errorcode));
   printf("Press any key to halt:");
   getch();
   exit(1);                         /* аварийное завершение */
  }
  setcolor(10);
  settextstyle(0,0,2);
  outtextxy(15,10,"Results:");
  setcolor(9);
  rectangle(15,40,624,330);
  setcolor(11);
  for(ny=0; ny<NN; ny++)
  {
   circle(22+ny*6,330-y[ny]*1,2);
   line(22+ny*6,330,22+ny*6,330-y[ny]*1);
  }
  setcolor(12);
  settextstyle(0,0,1);
  outtextxy(260,340,"Press any key ...");
  getch();
  closegraph();
}
/* Новый обpаботчик пpеpиваний таймеpа */
void interrupt newtime()
{
  if (--kf<0) {
    /* Виклик oldtime - на 2-й раз */
    (*oldtime)();
    kf=1;
    }
  else /* иначе - сброс контроллера */
    outportb(0x20,0x20);
  if ((ny>=0)                       /* Если АЦП началось, */
    &&(ny<NN))  /* и NN показаний еще не набрано, */
      y[ny++]=yc;        /* запоминание очередного показания */
}
/* Получение старого вектора */
void *readvect(int in)
{
  rr.h.ah=0x35; rr.h.al=in;
  intdosx(&rr,&rr,&sr);
  return(MK_FP(sr.es,rr.x.bx));
}
/* Запись нового вектора */
void writevect(int in, void *h)
{
  rr.h.ah=0x25;
  rr.h.al=in;
  sr.ds=FP_SEG(h);
  rr.x.dx=FP_OFF(h);
  intdosx(&rr,&rr,&sr);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2009, 13:29     Подправить рабочий код.
Посмотрите здесь:

c++ строки. подправить код C++
getch () C++ подправить код C++
Немного подправить код C++
C++ Помогите подправить код
Подправить код C++
Подправить код C++
C++ пожалуйста, подправить код
Нужно подправить код C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru