Опубликован: 15.11.2010 | Доступ: свободный | Студентов: 643 / 18 | Оценка: 4.00 / 5.00 | Длительность: 17:30:00
Специальности: Программист
Лекция 2:

Прямой ввод-вывод: организация и функции. Вывод на дисплей. Часть 1

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
2.1.2.2. Язык Си

В языке Си существуют две функции вывода строки на консоль: cputs и cprintf [3, 41]. Рассмотрим их синтаксис и использование:

ФУНКЦИЯ: CPUTS;
СИНТАКСИС:
int cputs( str );
char *str;
где str - указатель на строку символов.
ОПИСАНА В: <conio.h> /* Используется только для описания функции */
НАЗНАЧЕНИЕ: Функция cputs записывает строку (адрес которой задаётся параметром str ) вместе с символом конца строки на консольный терминал. При этом не выводится, но обрабатывается комбинация символов ( <CR>/<LF>, "возврат каретки"/"перевод строки" ).
ВОЗВРАЩАЕТ:
  • для системы Turbo C: - последний напечатанный символ (обычно \0);
  • для системы Microsoft C: 0 - успешное завершение; 1 - ошибка вывода.
ФУНКЦИЯ CPRINTF;
СИНТАКСИС:
int cprintf( format {, аргумент} );
char *format;
где
  • format - "строка форматов", определяющая, как преобразуются и как выводятся параметры, заданные параметрами "аргумент";
  • аргумент - константа или переменная (идентификатор или литерал), выводимая на печать.
ОПРЕДЕЛЕНА В: <conio.h> /* используется только для описания функции */
НАЗНАЧЕНИЕ: Функция cprintf форматирует и выводит последовательность символов и значений, непосредственно на консольный терминал, используя для вывода символов функцию putch.

Каждый аргумент преобразуется и выводится в том формате, который определён в строке: format. Синтаксис и семантику строки format смотри в Приложении app02001.

В отличие от функций fprintf, printf, sprintf функция cprintf не переводит символ <LF> в последовательность символов: <CR><LF>. Поэтому каждая выводимая строка должна заканчиваться или начинаться с "\r\n".
ВОЗВРАЩАЕТ: Возвращается количество напечатанных символов.

Теперь запишем функцию из примера 2.1 на языке Си:

Пример 2.4

/* Файл ex02004.c */

/* Данный файл тестировался в системе 
   программирования Borland C/C++ 3.10 */

#include <conio.h>

void main( void )
{
	char FIR_STR[] = "Это первая строка\r\n";
	char SEC_STR[] = "а это вторая строка";
	(void) cputs( FIR_STR );
	(void) cputs( SEC_STR );
}

Примечание: перед вызовом функции cputs поставлен оператор принудительного приведения типа ( void ) для того, чтобы в процессе компиляции не возникло предупреждение о несоответствии типа возвращаемого значения.

2.1.2.3. Язык C--
ФУНКЦИЯ WRITESTR
Определена в: "WRITE.H--";
Синтаксис: WRITESTR( string );
Входные параметры:
  • AX - смещение адреса строки, выводимой на экран.
Возвращаемое значение:
  • AX - неопределённое значение;
  • BX = 7.
2.1.2.4. Язык Java

Вывод любой переменной на языке Ява осуществляется при помощи методов System.out.print и System.out.println, подробно описанных в пункте 2.1.1.3 и в [26]. Ниже приводится пример функции, иллюстрирующий работу метода println.

Пример 2.5.

/* Файл ex02005.java */

/* Пример тестировался на компиляторе Sun J2EE 1.4.2
   и на виртуальной машине Java корпорации Microsoft */

public class ex02005
{
	public static void main( String [] args )
	{
		String sFirst_str = "Это первая строка";
		String sSec_str = "а это вторая строка";
		System.out.println( sFirst_str );
		System.out.println( sSec_str );
		String junk;
		System.out.println( "Press key Enter to exit..." );
		junk = SavitchIn.readline();
	}
}

В этом примере:

  1. Первая строка задаёт имя приложения;
  2. Третья строка определяет основную функцию;
  3. Пятая - шестая строка объявляет и назначает значения двум строковым переменным: sFirst_str и sSec_str ;
  4. Строки семь и восемь выводят значения этих переменных;
  5. Строки с 9 по 11 используются при создании паузы после выполнения программ. Для этого создаётся "пустая" переменная, выводится приглашение для завершения работы программы (с предложением нажать клавишу "Enter" ), а потом после ввода "пустой" строки в эту переменную (в данном случае - после нажатия клавиши "Enter" ) программа завершается.
  6. Обратите внимание, что при вводе используется модуль "SavitchIn", описание которого содержится в приложении к "Ввод с клавиатуры" .
2.1.2.5. Язык Python

Все "примитивные" типы данных на языке Питон, как и на языке Перл, представляются в виде "строковых данных". Для вывода строковых данных в языке Питон, как и в языке Перл, используется функция print [29]. Однако, в отличие от функции print на языке Perl, функция print на языке Python завершает вывод новой строки псевдосимволом "EOL".

В примере 2.6 представлен модуль языка Питон для реализации примера 2.4:

Пример 2.6.

# Файл ex02006.py
# Файл тестировался в системе программирования
# ActiveState Python 2.5 для Windows

# Модуль для вывода двух строк
def ex02006():
	first_str = "Это первая строка"
	sec_str = "а это вторая строка"
	print first_str
	print sec_str
# Конец модуля на Питоне

Автор отмечает следующие особенности этого примера:

  1. Определение процедуры и функции в модуле начинается с ключевого слова def ;
  2. Вместо открывающейся скобки блока используется окончание: ":" ;
  3. Блоки выделяются отступом. Окончание блока определяется отсутствием отступа у следующего за блоком оператора;
  4. Как и в языке Си, функция возвращает результат при помощи оператора: "return".

Для запуска функции ex02006 выполните следующие действия:

  1. Вызовите интерпретатор python;
  2. Введите команду: import ex02006 ;
  3. Введите команду: ex02006.ex02006() ;
2.1.2.6. Язык Prolog

На языке Пролог имеются две функции для вывода на экран (консоль) [19, 53]: функция write для вывода аргументов и функция writef для форматированного вывода аргументов. Обе функции позволяют вывести аргументы разных типов данных, но вторая функция позволяет задать дополнительные параметры для управления вводом значений аргументов. Описание этих функций смотри в "Буферизированный (потоковый) ввод-вывод" .

Пример 2.7.

/* Файл ex02007.pro */

/* Пример тестировался в системе программирования
   Turbo Prolog 2.0 для Windows */

/* Описание цели выполнения программы: */
goal
	write( "Это первая строка" ), nl, writef( "%s", "а это вторая строка"), nl,
	write( "Press any key to exit..." ), nl, readchar( _ ).
/* Конец программы */

2.1.3. Чтение символа и его атрибута в данной позиции (справочный раздел)

Иногда необходимо прочитать символы и их атрибуты, уже выведенные на экран дисплея. И это вовсе не обязательно "шпионские страсти" - просто Вы не знаете, например, с какими атрибутами надо выводить новые символы на экран. Это можно сделать с помощью прерывания BIOS 10H [8]. Но вначале нужно установить текущую позицию курсора, с которой будет считан символ (функция 8 прерывания BIOS 10H, см. следующие лекции)

Пример 2.8.

MOV AH, 8	; функция чтения символа/атрибутов
	MOV BH, 0	; номер страницы - 0
	INT 10H
; --- теперь в паре регистров AH:AL атрибуты и символ текущей позиции экрана

Для реализации чтения символа в указанной позиции курсора на языке Турбо Пролог необходимо воспользоваться всё той же функцией scr_char, синтаксис которой приведён в разделе 2.1.1.4. Для чтения атрибута символа можно использовать функцию scr_atr [53], синтаксис которой смотри ниже:

ФУНКЦИЯ: SCR_ATR
СИНТАКСИС: scr_atr(Row,Column,Attr), где Row - строка экрана в формате целого числа, Column - столбец экрана в формате целого числа, а Attr - число целого типа, используемого в качестве значения выводимого на экран или считываемого с указанной позиции экрана атрибута символа;
НАЗНАЧЕНИЕ: Функция считывает или устанавливает атрибут символа в указанной позиции;
ШАБЛОНЫ: (i,i,i) (i,i,o) ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Всегда успех;
ОШИБКИ:
  • 1001 Неверное значение позиции курсора.

2.2. Режимы работы дисплея

В таблице 2.3 приведены режимы, с которыми может работать совместимый с MS-DOS VGA-дисплей. Отметим, что для нас особое значение имеют режимы: 0, 1, 2, 3, 7.

Таблица 2.3. Таблица режимов работы дисплея.
Режимы работы дисплеев и их параметры.
Режим дисплея Разрешение X на Y Количество цветов Тип Поддерживаемые графические карты
0 40x25 2 text CGA,PCjr,EGA,MCGA,VGA
1 40x25 16 text CGA,PCjr,EGA,MCGA,VGA
2 80x25 2 text CGA,PCjr,EGA,MCGA,VGA
3 80x25 16 text CGA,PCjr,EGA,MCGA,VGA
4 320x200 4 graphics CGA,PCjr,EGA,MCGA,VGA
5 320x200 4 (серый) graphics CGA,PCjr,EGA,MCGA,VGA
6 640x200 2 graphics CGA,PCjr,EGA,MCGA,VGA
7 80x25 2 text MDA, EGA, VGA
8 160x200 16 graphics PCjr,
9 320x200 16 graphics PCjr,
10 640x200 4 graphics PCjr,
13 320x200 16 graphics EGA, VGA
14 640x200 16 graphics EGA, VGA
15 640x350 2 graphics EGA, VGA
16 640x350 16 graphics EGA, VGA
17 640x480 2 graphics MCGA, VGA
18 640x480 16 graphics VGA
19 320x200 256 graphics MCGA,VGA
20 640x400 16 graphics Tecmar VGA/AD ONLY
22 800x600 16 graphics Tecmar VGA/AD ONLY
23 132x25 16 text Tecmar VGA/AD ONLY
24 1024x768 16 graphics Tecmar VGA/AD ONLY
24 132x44 2 text Tseng Labs EVA ONLY
25 132x25 2 text Tseng Labs EVA ONLY
26 132x28 2 text Tseng Labs EVA ONLY
26 640x350 256 graphics Tecmar VGA/AD ONLY
27 640x400 256 graphics Tecmar VGA/AD ONLY
28 640x480 256 graphics Tecmar VGA/AD ONLY
29 800x600 256 graphics Tecmar VGA/AD ONLY
34 132x44 16 text Tseng Labs EVA ONLY
34 132x44 16 text Ahead Systems EGA2001 ONLY
34 132x43 16 text Allstar Peacock VGA ONLY
35 132x25 16 text ATI EGA, ATI VGA ONLY
35 132x25 16 text Tseng Labs EVA ONLY
35 132x25 16 text Ahead Systems EGA2001 ONLY
35 132x28 16 text Allstar Peacock VGA ONLY
36 132x28 16 text Tseng Labs EVA ONLY
36 132x25 16 text Allstar Peacock VGA ONLY
37 640x480 16 graphics VEGA VGA ONLY
38 640x480 16 graphics Ahead Systems EGA2001 ONLY
39 132x25 2 text ATI EGA, ATI VGA ONLY
39 720x512 16 graphics Genoa or VEGA VGA ONLY
41 800x600 16 graphics Orchid,STB,Genoa,Sigma,VEGA ONLY
41 800x600 16 graphics Allstar Peacock VGA ONLY
42 100x40 16 text Allstar Peacock VGA ONLY
42 100x40 16 text Orchid Prodesigner VGA ONLY
45 640x350 256 graphics Genoa,STB,VEGA VGA ONLY
46 640x480 256 graphics Orchid,STB,Genoa,Sigma,VEGA ONLY
47 720x512 256 graphics Genoa or VEGA VGA ONLY
48 800x600 256 graphics Orchid,STB,Genoa,Sigma,VEGA ONLY
51 132x44 16 text ATI EGA or ATI VGA ONLY
54 960x720 16 graphics STB or VEGA VGA
55 132x44 2 text ATI EGA or ATI VGA ONLY
55 1024x768 16 graphics Orchid,STB,Genoa,Sigma,VEGA ONLY
65 132x25 16 text Tatung, Video7, VEGA VGA ONLY
66 132x43 16 text Tatung, Video7, VEGA VGA ONLY
67 80x60 16 text Tatung, Video7, VEGA VGA ONLY
68 100x60 16 text Tatung, Video7, VEGA VGA ONLY
69 132x28 16 text Tatung, Video7, VEGA VGA ONLY
77 120x25 16 text VEGA VGA ONLY
78 120x43 16 text VEGA VGA ONLY
79 132x25 16 text VEGA VGA ONLY
80 80x43 2 text VEGA VGA ONLY
80 132x25 2 text Ahead Systems EGA2001 ONLY
81 80x34 16 text ATI EGA ONLY
81 132x25 2 text VEGA VGA ONLY
82 132x44 2 text Ahead Systems EGA2001 ONLY
82 132x43 2 text VEGA VGA ONLY
82 94x29 16 text ATI EGA Wonder ONLY
83 800x600 16 graphics ATI EGA or ATI VGA ONLY
84 800x600 16 graphics ATI EGA, ATI VGA ONLY
84 132x43 16 text Paradise VGA,Taxan 565 EGA ONLY
84 132x43 16 text AST VGA Plus ONLY
84 132x43 16 text Hewlett-Packard D1180A ONLY
85 132x25 16 text Paradise VGA,Taxan 565 EGA ONLY
85 132x25 16 text AST VGA Plus ONLY
85 132x25 16 text Hewlett-Packard D1180A ONLY
86 800x600 16 graphics ATI EGA or ATI VGA ONLY
86 800x600 16 graphics Paradise or AT&T VDC600 ONLY
86 800x600 16 graphics AST VGA Plus or Compaq VGA ONLY
86 800x600 16 graphics Dell VGA ONLY
86 800x600 16 graphics Hewlett-Packard D1180A ONLY
89 800x600 2 graphics Paradise, AT&T VDC600 ONLY
89 800x600 2 graphics ATI VIP, AST VGA Plus ONLY
89 800x600 2 graphics Compaq VGA, Dell VGA ONLY
89 800x600 2 graphics Hewlett-Packard D1180A ONLY
94 640x400 256 graphics Paradise VGA or VEGA VGA ONLY
94 640x400 256 graphics AST VGA Plus, Compaq VGA ONLY
94 640x400 256 graphics Dell VGA or AT&T VDC600 ONLY
95 640x480 256 graphics AST VGA Plus, Compaq VGA ONLY
95 640x480 256 graphics Dell VGA or AT&T VDC600 ONLY
95 640x480 256 graphics Paradise VGA ONLY
96 752x410 16 graphics VEGA VGA,Tatung VGA,Video7 ONLY
97 720x540 16 graphics VEGA VGA,Tatung VGA,Video7 ONLY
97 640x400 256 graphics ATI VGA ONLY
98 640x480 256 graphics ATI VGA ONLY
98 800x600 16 graphics VEGA VGA,Tatung VGA,Video7 ONLY
99 800x600 256 graphics ATI VGA ONLY
99 1024x768 2 graphics Video7 V-RAM VGA ONLY
100 1024x768 4 graphics Video7 V-RAM VGA ONLY
101 1024x768 16 graphics ATI VGA, Video7 V-RAM VGA ONLY
102 640x400 256 graphics Tatung VGA, Video7 V-RAM ONLY
103 640x480 256 graphics Video7 V-RAM VGA ONLY
103 1024x768 4 graphics ATI VGA Wonder ONLY
105 720x540 256 graphics Video7 V-RAM VGA ONLY
106 800x600 16 graphics VESA standard interface ONLY
124 512x512 16 graphics Genoa ONLY
125 512x512 256 graphics Genoa ONLY
< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Олег Корсак
Олег Корсак
Латвия, Рига