Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Видеопамять в BC++ 3.1

16K
21 июня 2006 года
alehandro
5 / / 03.06.2006
Помогите кто нибудь плз. из-за этой проги не выхожу на экзамен в субботу, а нужно на отл. сдавать.
В кратце:
Необходимо вывести на экран несколько строк, а потом ввести номер строки и после стороки с этим номером сместить все остальные строки на одну вниз(увеличив адрес на 160) а в место откуда сдвигали вставить пустую строку. А вот оригинал задания:
[CENTER][SIZE="3"]«Непосредственная работа с экранной памятью»[/size] [/CENTER]Необходимо написать программу, в которой главная функция запрашивает необходимые данные, выполняет приготовления и вызывает функцию, выполняющую задание в соответствии с вариантом, а также при необходимости выводит результат.
Независимо от варианта к функции выдвигается ряд требований:
--она не должна содержать библиотечных функций экранного ввода-вывода
--все необходимые параметры она должна получать через список аргументов
--результат – возвращаемое значение или сохранен в массив, полученный в списке аргументов
Задание:
Написать аналог функции insline (номер строки – один из аргументов)
1.7K
22 июня 2006 года
alektrik
140 / / 16.01.2006
Вот... понял всё кроме "результат – возвращаемое значение или сохранен в массив, полученный в списке аргументов"... чё-т смысла мало наблюдаю...
А код вот (абсолютно без всяких там библиотек и комментариев ;-P ):
Код:
void InitVideo()
{
  asm {
    mov ax,13h
    int 10h
  }
}

void DoneVideo()
{
  asm {
    mov ax,3
    int 10h
  }
}

void WaitKey()
{
  asm {
    xor ax,ax
    int 16h
  }
}

void PutPixel(int x, int y, char color);
char GetPixel(int x, int y);
void HorLine(int y, int x1, int x2, char color);
void MoveDown(int row);

void main()
{
  InitVideo();
 
  for(int i=0; i<200; i++)
    HorLine(i,0,319,i%160);
   
  WaitKey();
 
  MoveDown(100);
 
  WaitKey();
 
  DoneVideo();
}

void PutPixel(int x, int y, char color)
{
  char far *ptr=(char far *)0xA0000000;
  ptr[x+y*320]=color;
}

char GetPixel(int x, int y)
{
  char far *ptr=(char far *)0xA0000000;
  return ptr[x+y*320];
}

void HorLine(int y, int x1, int x2, char color)
{
  for(int i=x1; i<=x2; i++)
    PutPixel(i,y,color);
}

void MoveDown(int row)
{
  int j=0;
  for(j=198; j>=row; j--)
    for(int i=0; i<=319; i++)
    {
      char c=GetPixel(i, j);
      PutPixel(i,j+1,c);
    }
  HorLine(row,0,319,0);
}
15K
14 июля 2006 года
FreeJ
2 / / 20.12.2005
Всё конечно путём, пример хороший, но это всё надо сделать в обычном текстовом режиме, а не графическом 320x200
1.7K
14 июля 2006 года
alektrik
140 / / 16.01.2006
Не проблема...

Код:
#include <iostream.h>

void WaitKey();
void InitTextMode();
void Print(int x, int y, char color);
char GetAt(int x, int y);
void HorLine(int y, int x1, int x2, char color);
void MoveDown(int from);

void main()
{
  InitTextMode();

  int color=1;
  for(int i=0; i<25; i++, color++)
    HorLine(i, 0, 80, color%16);

  int n;
  cin >> n;

  MoveDown(n);
  WaitKey();
}

void WaitKey()
{
  asm {
    xor ax,ax
    int 0x16
  }
}

void InitTextMode()
{
  asm {
    mov ax,3
    int 0x10
  }
}

void Print(int x, int y, char color)
{
  char far *ptr=(char far *)0xb8000000;
  ptr[(x*2)+y*160]=219;
  ptr[(x*2)+y*160+1]=color;
}

char GetAt(int x, int y)
{
  char far *ptr=(char far *)0xb8000000;
  return ptr[(x*2)+y*160+1];
}

void HorLine(int y, int x1, int x2, char color)
{
  for(int i=x1; i<x2; i++)
    Print(i, y, color);
}

void MoveDown(int from)
{
  for(int i=23; i>=from; i--)
    for(int j=0; j<80; j++)
      Print(j, i+1, GetAt(j, i));
  HorLine(from, 0, 80, 0);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог