- •Информатика
- •Введение
- •1. Особенности вычислительного процесса в компьютере
- •1.1. Двоичная система счисления
- •1.2. Кодирование информации
- •2. Основы построения алгоритмов
- •2.1. Принципы описания алгоритмов
- •2.2. Примеры построения алгоритмов типовых задач
- •3. Вывод значений X и y
- •Конец цикла 2
- •3. Алгоритмический язык Visual Basic – основные сведения
- •3.1. Историческая справка
- •3.2. Среда программирования Visual Basic 6.0
- •3.3. Основные конструкции языка
- •3.3.1. Алфавит
- •3.3.2. Переменные
- •3.3.3. Константы
- •3.4. Типы переменных
- •3.4.1. Характеристики переменных
- •3.4.2. Способы задания типа
- •3.5. Основные функциональные операторы
- •3.5.1. Оператор присваивания.
- •3.5.2. Оператор условного перехода.
- •3.5.3. Операторы цикла.
- •3.6. Операторы ввода и вывода информации
- •3.6.1. Операторы ввода значений переменных с клавиатуры.
- •3.6.2. Операторы вывода значений переменных на экран.
- •3.7. Примеры типовых программ
- •4. Алгоритмический язык Visual Basic – более сложные структуры
- •4.1. Файловый ввод и вывод - общие сведения
- •4.2. Организация работы с файлом.
- •4.3. Подпрограммы и их использование для написания сложных программ
- •4.3.1. Назначение подпрограмм
- •4.3.2. Типы подпрограмм
- •4.3.3. Локальные переменные формы
- •5. Операторы и функции, работающие с символьными данными
- •5.1. Ввод символов с целью управления действиями
- •5.2. Функции, работающие с таблицей ascii-кодов
- •5.3. Функции, работающие со строкой символов
- •6. Графика
- •6.1. Воспроизведение цвета
- •6.2. Операторы (Методы) изображения стандартных фигур
- •6.3. Программирование движения фигур на экране.
- •9. Математические вычисления и встроенные функции.
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
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.
