-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas04-02.txt
232 lines (200 loc) · 15.8 KB
/
bas04-02.txt
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
IV.2.1. MID$ - ф у н к ц и я
Oбщий вид MID$ - функции следующий:
MID$(α,m[,n])
где: MID ("MIDdle"-"середина") - служебное слово;
α - строковое выражение;
m, n - арифметические выражения, целые части значений которых должны
принадлежать отрезку [1,255].
Напомним, что квадратные скобки,встречающиеся при описании синтаксиса,-
обозначение, указывающее, что элемент синтаксической конструкции внутри
них не является обязательным.
Условимся целые части значений арифметических выражений m и n обозна-
чать соответственно M и N.
По умолчанию N равно количеству символов значения строкового выражения
α от позиции M и до конца строки включительно.
Рассмотрим два возможных случая.
1. Функция MID$ с л е в а от знака равенства в операторе присваива-
ния LET. ┌───────────────────────────────────┐
│ [LET] MID$(α,m[,n]) = β │
└───────────────────────────────────┘
Здесь β - строковое выражение.
Пусть L - длина значения строкового выражения β.При выполнении операто-
ра LET символы значения строкового выражения α, начиная с позиции M, по-
следовательно замещаются на первые
min(L,N)
символов строкового выражения β. Остальные символы значения строкового вы-
ражения α остаются без изменений (см. рис.1).
1-й 2-й М-й (М+1)-й (M+N-1)-й LEN(α)-й
символ символ символ символ символ символ
│ │ │ │ │ │
┌───▼───┬───▼───┬───┬───▼───┬───▼───┬───┬───▼───┬───┬───▼───┐
│ │ │...│███████│███████│...│███████│...│ │ α
└───────┴───────┴───┴───────┴───────┴───┴───────┴───┴───────┘
│◀─────── N символов ──────▶│
▲ ▲
│ │
┌───────────────────────────┐
│ MID$(α,M,N) = β │
▲───────────────────────────▲
│ │
┌────────────────────────────────────────┐
L > N │███████│███████│...│███████│ ...│███████│ β
└────────────────────────────────────────┘
│◀──────────────── L символов ──────────▶│
или ▲ ▲
│ │
┌───────────────────┐─ ─ ─ ─┐
L < N │███████│...│███████│ │β
└───────────────────┘─ ─▲─ ─┘
│◀─── L символов───▶│ │
символы из α
Р и с. 1
П р и м е р.
───────────
10 X$="12345678910":INPUT Y$,M,N:MID$(X$,M,N)=Y$:PRINT X$
run ┌────────────────┐ run ┌────────────────┐
? стол,8,4 │X$="12345678910"│ ? стул,1,4 │X$="12345678910"│
1234567стол │ └──┘ │ стул5678910 │ └──┘ │
Ok │ Y$="стол"│ Ок │Y$="стул" │
└────────────────┘ └────────────────┘
run ┌────────────────┐ run ┌────────────────┐
? сто,8,3 │X$="12345678910"│ ? казак,8,5 │X$="12345678910"│
1234567сто0 │ └─┘ │ 1234567каза │ └──┘ │
Ok │ Y$="сто" │ Ok │ Y$="каза"│
└────────────────┘ └────────────────┘
И наконец, вместо оператора присваивания вида
А$ = строковое выражение ,
используйте оператор: MID$(А$,1) = строковое выражение ,
чтобы избежать использования дополнительной памяти. Но учтите, что строко-
вая переменная A$ уже должна существовать и
LEN(A$)≥LEN(строковое выражение) !
2. Функция MID$ с п р а в а от знака равенства в операторе присваи-
вания LET. ┌─────────────────────────────────────┐
│ [LET] γ = MID$(α,m[,n]) │
└─────────────────────────────────────┘
Здесь γ - строковая переменная.
При выполнении указанной конструкции N последовательных символов значе-
ния α, начиная с позиции M, становятся значением строковой переменной γ.
Предварительное определение γ не обязательно (см. рис.2).
1-й 2-й М-й (М+1)-й (М+N-1)-й LEN(α)-й
символ символ символ символ символ символ
│ │ │ │ │ │
┌───▼───┬───▼───┬───┬───▼───┬───▼───┬───┬───▼───┬───┬───▼───┐
│ │ │...│███████│███████│...│███████│...│ │ α
└───────┴───────┴───┴───────┴───────┴───┴───────┴───┴───────┘
│ ┌─────────────────┐ │
│ │ γ = MID$(α,M,N) │ │
│ └─────────────────┘ │
▼───────┬───────┬───┬───────▼
│███████│███████│...│███████│ γ
└───────┴───────┴───┴───────┘
│◀────── N символов────────▶│
Р и с. 2
П р и м е р ы:
─────────────
1) Ok 2) Ok
? MID$("КЛАВИАТУРА",3,4) ? MID$("капрал"+"литр",4,5)
АВИА └──┘ ралли └──────┘
Ok Ok
3) Ok 4) Ok
? MID$("молоко"+"брат",5,5) ? MID$("СОР У НОР",3,5)
кобра └──────┘ Р У Н └───┘
Ok Ok
5) Ok 6) NEW
10 input I,J:? MID$("234",I,J) Ok
run run run run 1 Z$="123"
? 1,1 ? 2,90 ? 10,1 ? 1,0 2 INPUT X$,M
2 34 3 Z$=MID$(X$,M)
Ok Ok Ok Ok 4 Y$=MID$(X$,M+4)
run или run 5 PRINT Z$
? -1,1 ? 0,0 6 PRINT Y$
Illegal function call in 10 run
Ok ? Баба-Яга-костяная нога,6
run или run Яга-костяная нога
? 2,-1 ? 0,1 костяная нога
Illegal function call in 10 Ok
Ok
7) определить третий символ в слове X$.
Ok
input x$:z$=mid$(x$,3,1):print z$
? интеграл
т
Ok
Если требуется определить K-й символ в слове X$, то программа будет
иметь следующий вид (разумеется, 1≤K≤LEN(X$)):
NEW
Ok
10 INPUT X$,K
20 IF K<1 OR K>LEN(X$) THEN PRINT"Буквы с указанным номером в слове не
т":END ELSE Z$=MID$(X$,K,1):PRINT Z$:END
run run
? информатика,3 ? информатика,12
ф Буквы с указанным номером в слове нет
Оk Ok
П р и м е р 8. Для получения числа, состоящего из двух младших цифр це-
───────────── лого числа N, воспользуйтесь строкой:
10 X%=VAL(MID$(STR$(N),LEN(STR$(N))-1,2))
Заметим,что Вы можете выполнить то же самое,используя функцию INT():
10 INPUT N:PRINT N-INT(N/100)*100
П р и м е р 9. Написать программу, определяющую, сколько раз слово Z$
───────────── встречается в слове X$.
NEW
Оk
10 INPUT X$,Z$:J=0
20 FOR I=1 TO LEN(X$)-LEN(Z$)+1
30 IF Z$<>MID$(X$,I,LEN(Z$)) THEN NEXTI ELSE J=J+1:NEXTI
40 PRINT J:END
run
? БАОБАБ,БА
2
Ok
П р и м е р 10. Написать программу, заменяющую в слове X$ слово Z$ на
────────────── слово Y$ той же длины.
NEW
Оk
10 INPUT X$,Z$,Y$:IF LEN(Z$)><LEN(Y$) THEN 10
20 FOR J=1 TO LEN(X$)-LEN(Z$)+1
30 IF Z$<>MID$(X$,J,LEN(Z$)) THEN 50
40 MID$(X$,J,LEN(Y$))=Y$
50 NEXT J:PRINT X$:END
run
? ДОМ КИРПИЧНЫЙ
?? КИРПИЧНЫЙ
?? БАНАНОВЫЙ
ДОМ БАНАНОВЫЙ
Оk
Косо лети же, житель осок. Я разуму уму заря, Мечтатель! Летать чем?
В.Хлебников Я иду с мечом судия. С.Кирсанов
Г.Р.Державин
П р и м е р 11. Слова и фразы,переходящие в себя при "акустическом ото-
────────────── бражении", получили название п а л и н д р о м о в.
Это слово греческого происхождения и означает "движущийся обратно", "обра-
тимый". Найти палиндром практически невозможно, но его нетрудно построить.
В качестве "строительных блоков" простейших палиндромов следует выбирать
слова, не изменяющиеся при чтении от конца к началу. Выдерживают отраже-
ние в "акустическом зеркале" такие слова, как боб, дед, кок, мим, иди, то-
пот, потоп, колок, ротор, кабак, моном и выражения, такие, например,как
"Леша на полке клопа нашел".
Ok
10 INPUT X$:Y$=""
20 FOR I=1 TO LEN(X$):Y$=MID$(X$,I,1)+Y$:NEXT
30 IF X$=Y$ THEN PRINT"Палиндром!" ELSE PRINT"Не палиндром!"
run run run
? косолетижежителосок ? мечтателлетатчем ? я разуму уму заря
Палиндром! Палиндром! Не палиндром!
Ok Ok Ok
Сравните результат действия функции MID$(A$,I,J),стоящей справа от зна-
ка равенства в операторе присваивания, с результатом операции в ы р е з-
к и: A[i:i+j-1] ,
где: А - текст;
i - номер первого символа фрагмента,вырезаемого из текста A;
j - количество символов в фрагменте,вырезаемом из текста A,
в школьном алгоритмическом языке.
Рассмотрите интересный часто встречающийся частный случай j=1, т.е.про-
ведите аналогию между MID$(A$,I,1) и A[i:i].
И, наконец, сопоставьте результат действия функции MID$, стоящей слева
от знака равенства в операторе присваивания, с результатом работы команды
частичного изменения значения литерной величины (команды присваивания вы-
резке) A[i:j]=B ,
позволяющей заменить часть слова А,начинающуюся с i-той буквы и оканчиваю-
щуюся j-той буквой, на слово B, в школьном алгоритмическом языке.