Занятие
25
Цикл
DO…LOOP
Цикл DO…LOOP
позволяет организовывать циклы как с предусловием, так и
постусловием, завершать цикл при истинности или ложности условия. Этот цикл
выполняет блок оператора, пока условие верно (WHILE) или
до тех пор, пока не станет верным (UNTIL).
С предусловием DO [{WHILE/UNTIL}
условие]
Тело цикла
LOOP
C постусловием DO
Тело цикла
LOOP[{WHILE/UNTIL} условие]
Выделение слов
из предложения и подсчет их длин
CLS
INPUT A$
A$=A$ + “‗“
K = 1 : S=0
L = LEN(A$)
DO
N = INSTR (K,A$,“‗“)
S = S + 1
SL$(S) = MID$(A$, K, N-K)
SK(S)=LEN(SL$(S))
K = N + 1
LOOP WHILE N <> L
1.
A$=A$ + “‗“ прибавляем один
пробел, чтобы выделить последнее слово.
2.
K = 1 необходимо задать этот параметр для считывания первого слова с
первой позиции.
3.
L = LEN(A$) записываем в переменную L длину предложения
4.
DO цикл начинающийся с постусловием
5.
N = INSTR (K,A$,“‗“) определяем пробел с К
позиции, т.е. начинаем искать первый пробел для дальнейшего выделения слова.
6.
S = S + 1 счетчик количества слов в предложении
7.
SL$(S) = MID$(A$, K, N-K) занесение слов в массив слов, начиная с К
позиции, длиной N – K.
8.
SK(S)=LEN(SL$(S)) занесение в числовой массив длины соответствующего слова
9.
K = N + 1 определение К позиции для считывания следующего слова,
т.к. N номер пробела, то следующее слово будет начинаться с позиции K = N + 1
10. LOOP WHILE N <> L – закрываем цикл
по условию, т.е. когда N = L выходит из цикла, цикл будет выполняться до тех пор пока N < > L
Распечатать слова четной длины
Ввод
FOR I = 1 TO S
IF
SK(I)/2<>SK(I)\2 THEN PRINT SL$(I); “‗“;
NEXT I
Распечатать слова длиной больше 3, но меньше 10
Ввод
FOR I = 1 TO S
IF SK(I) > 3
AND SK(I)< 10 THEN PRINT SL$(I); “‗“;
NEXT I
Найти самое
длинное слово и распечатать его.
Ввод
max = -1000
FOR I = 1 TO S
IF SK(I) > max
THEN max = SK(I) : D = I
NEXT I
PRINT SL$(D)
Найти самое короткое
слово и распечатать его.
Ввод
min = 1000
FOR I = 1 TO S
IF SK(I) < min
THEN min = SK(I) : D = I
NEXT I
PRINT SL$(D)
Найти самое
длинное слово и распечатать его зеркально.
Ввод
max = -1000
FOR I = 1 TO S
IF SK(I) > max
THEN max = SK(I) : D = I
NEXT I
PRINT SL$(D)
FOR J = SK(D) TO
1 STEP -1
PRINT
MID$(SL$(D),J,1);
NEXT J
Определить
является ли заданное слово палиндромом или нет
CLS
INPUT A$
FOR I = 1 TO
LEN(A$) \ 2
IF MID$(A$,I,1) =
MID$(A$, LEN(A$) – I + 1,1) THEN d = d + 1
NEXT I
IF d = LEN(A$) \
2 THEN PRINT “yes“ ELSE PRINT “no“
Найти самое
длинное слово и проверить является ли оно палиндромом или нет
Ввод
max = -1000
FOR I = 1 TO S
IF SK(I) > max
THEN max = SK(I) : D = I
NEXT I
PRINT SL$(D)
FOR I = 1 TO
SK(D)\ 2
IF
MID$(SL$(D)I,1) = MID$(SL$(D), SK(d) – I + 1,1) THEN m = m + 1
NEXT I
IF m = LEN(SK(D)
\ 2 THEN PRINT “yes“ ELSE PRINT “no“
Домашнее задание
Создать
одномерный массив из слов заданного предложения так, что слова располагаются в
обратном порядке, т.е. сначала последнее, потом предпоследнее и т.д.
Ввод
FOR I = S TO 1
STEP -1
B$(I) = SL$(S – I
+ 1)
NEXT I
FOR I=1 TO S
PRINT B$(I); “‗“;
NEXT I
В заданном
предложении перевернуть все слова, в которых есть буква b в обратном порядке.
Ввод
FOR I = 1 TO S
W = 0
FOR J=1 TO SK(I)
IF
MID$(SL$(I),J,1)=”B” THEN W = 1
NEXT J
IF W = 1 THEN
FOR J = SK(I) TO
1 STEP -1
PRINT
MID$(SL$(I),J,1);
NEXT J
PRINT “‗“;
ENDIF
NEXT I
Распечатать все
слова предложения четной длины, расположенных после слова с наибольшим
количеством символов, предполагается, что слово с максимальной длинной
единственное.
Ввод
max = -1000
FOR I = 1 TO S
IF SK(I)>max
THEN max = SK(I): d =I
NEXT I
FOR I = d + 1 TO
S
IF SK(I)/2 = SK(I)\2
THEN PRINT SL$(I); “‗“;
NEXT I
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.