Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть_1.doc
Скачиваний:
23
Добавлен:
20.04.2015
Размер:
462.85 Кб
Скачать

5.2. Функции, работающие с таблицей ascii-кодов

Эти функции также могут быть использованы для управления действиями в программе.

Функция SCREEN(x,y) определяетASCII-код символа на экране, координаты которогоxиy– это номера строки и столбца.

Функция CHR$(код), аргументом которой являетсяASCII-код, определяет символ из таблицы, который соответствует этому коду. Обратная функцияASC(строка) определяет код первого символа строки, являющейся ее аргументом.

Употребление этих функций будет показано ниже в примерах.

5.3. Функции, работающие со строкой символов

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

LCASE$(строка) – делает все латинские буквы в строке строчными.

UCASE$(строка) - делает все латинские буквы в строке заглавными.

LEFT$(строка,n) – выбираетnсимволов слева из строки.

RIGHT$(строка,n) - выбираетnсимволов справа из строки.

MID(строка,m,n) - выбирает фрагмент строки изnсимволов, начиная сm-го.

LEN(строка) – вычисляет количество символов в строке.

LTRIM$(строка) – удаляет пробелы слева строки.

RTRIM$(строка) - удаляет пробелы справа строки.

STR$(число или числовая переменная) – превращает число в символьную форму.

VAL(символьное представление числа) – превращает символы (цифры) в число.

Пример 5.4.Определение скан-кодов.

Таблица ASCII–кодов имеет ограниченный объем. Поэтому не все клавиши стандартной клавиатуры могут иметьASCII–код. В связи с этим многие функциональные клавиши (например, стрелки перемещения курсора–Up,Down,Left,Right, клавиши движения страниц -PageUp,PageDounи другие) имеют так называемые скан-коды. Скан-код представляет собой строку из двух символов. Первый символ – это пробел. Второй символ – один из символов таблицыASCII–кодов. В приведенной программе выводятся на экран символ нажатой клавиши, а такжеASCII–код символа.

Private Sub Command1_Click()

'Пример 5.4 ASCII-КОДЫ

Cls

i = 1

Do

a$ = InputBox("Нажмите клавишу ")

cod = Asc(a$)

Print a$; " --"; cod,

i = i + 1

If i > 5 Then

Print

i = 1

End If

Loop While a$ <> "S"

End

End Sub

Обратите внимание на пустой Print. Счетчик i отсчитывает число символов, выведенных в строку на форме. Размер формы здесь ограничен пятью символами. Поэтому после заполнения строки пятью символами пустой Print переводит вывод на новую строку. Кстати цикл закончится при нажатии клавиши “S”. Служебные клавиши нажимать нельзя, так как они закодированы другим способом (скан-код).

Пример 5.5. Решается следующая задача: в бухгалтерии некоторой фирмы ведется учет должников. Оператор заполняет файл данных, не заботясь о правильности с точки зрения программирования. Между фамилией должника и суммой долга он оставляет произвольное количество пробелов. Если перед суммой стоит минус, значит это долг бухгалтерии. Требуется написать программу, которая выдает аккуратный отчет.

Для этого первоначальная информация из файла данных считывается построчно в символьный массив pot$(n), где n – число строк в файле данных. Затем в подпрограмме SUB extraction каждая строка анализируется посимвольно. Для этого каждый символ считывается функцией MID и присваивается переменной simb$. Пока в данной строке не встречается пробел, символы собираются (суммируются) в символьную переменную name$(i) – элемент массива. Таким образом, из строки выделяется фамилия. Когда встречается первый пробел, появляется сигнал конца фамилии – переменная flag, равная до этого нулю, становится равной единице. При этом значении переменной flag никаких действий не производится, пока в строке идут пробелы. Как только очередной символ будет отличен от пробела, фиксируется число прошедших символов в переменной jfix. Очевидно, что если теперь из длины строки (определенной раньше функцией LEN и зафиксированной в переменной k) вычесть значение jfix без единицы, то получится длина правой части исходной строки, содержащая сумму долга. Эта часть выделяется функцией RIGHT$ и преобразуется в число функцией VAL, а число фиксируется в переменной sum(i).

Private Sub Command1_Click()

'Работа с символьными строками

'Пример 5.5

'Файл данных inp5_5.txt

'_____________________

'Гамалетдинов 550

'Андреев -200

'Мордюков 320

'Костюк 770

'Савва 980

'Парамонишвили 300

'Чен -440

'Главная программа

Cls

Dim n As Integer

n = InputBox("Число должников (7)")

Dim pot(100) As String: Dim sum(100) As Integer: Dim name(100) As String

Open "F:\Tout_le_VB6\My_files\inp\inp5_5.txt" For Input As #1

For i = 1 To n: Input #1, pot$(i): Next i

extraction n, pot, name, sum

summ = add(n, sum)

Open "F:\Tout_le_VB6\My_files\out\out5_5.txt" For Output As #2

For i = 1 To n

Print #2, name$(i); Tab(20); sum(i) ‘Tab – функция, определяющая

‘координату x при выводе

Next i

Print #2, "*****************************"

Print #2, "Сумма долга "; summ

Print "*****************************"

Print "Сумма долга "; summ

End Sub

Private Function add(n, sum)

s = 0

For i = 1 To n: s = s + sum(i): Next i

add = s

End Function

Private Sub extraction(n, pot, name1, sum)

Dim summa(100) As String: Dim simb As String: Dim si As String

Dim k As Integer: Dim i As Integer: Dim j As Integer: Dim flag As Integer

Print "n="; n

For i = 1 To n

k = Len(pot(i))

'Print k

si = "" 'будущая фамилия

flag = 0

For j = 1 To k + 1

simb = Mid(pot(i), j, 1)

If flag = 0 Then si = si + simb 'сборка фамилии по символам

If flag = 0 And simb = " " Then flag = 1

If flag = 1 And simb <> " " Then jfix = j: Exit For

Next j

name1(i) = si

summa(i) = ""

summa(i) = Right$(pot(i), k - jfix + 1)

sum(i) = Val(summa(i))

‘Print k, summa(i), sum(i) – этот оператор

Next i ‘применялся при отладке

End Sub

Файл результатов out5_5.txt

Гамалетдинов 550

Андреев -200

Мордюков 320

Костюк 770

Савва 980

Парамонишвили 300

Чен –440

*************************

Сумма долга 2280

Значения sum(i) суммируются подпрограммой FUNCTION add. Сумма передается в главную программу и присваивается переменной summ, которая и выводится в файл результатов out5_5.txt вслед за фамилиями name$(i) и суммами sum(i), выведенными до этого c помощью функции разметки строки Tab.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]