Задание: Сформировать по строке a$ новую строку по правилу: если слово имеет нечётную длину, удалить в нём среднюю букву. QBasic Набросок:Dim a$ As String, back$ As String, B() As String, i As Long, Poz As Long, n As Long Print...

Задание: Сформировать по строке a$ новую строку по правилу: если слово имеет нечётную длину, удалить в нём среднюю букву. QBasic Набросок: Dim a$ As String, back$ As String, B() As String, i As Long, Poz As Long, n As Long Print "Vvedite stroku"; Input a$ back$ = a$: i = 1: n = 1 Do Poz = InStr(i, a$, " ") if Poz > 0 Then n = n + 1 Else Exit Do i = Poz + 1 Loop ReDim B(n) n = 1 Do Poz = InStr(1, a$, " ") if Poz > 0 Then B(n) = Left(a$, Poz - 1) a$ = Mid(a$, Poz + 1) Else Exit Do End if Loop a$ = "" For i = 1 To n If Len(B(i)) Mod 2 = 1 Then B(i) = Left(B(i), (Len(B(i)) - 1)/2) & Mid(B(i), (Len(B(i)) + 3)/2) a$ = a$ & B(i) & " " Next i a$ = Trim(a$) Print "Staraya stroka: " & back$ & CHR(13) & CHR(10) $ "Novaya stroka: " & a$ End Подскажите) И если можно исправленный вариант, премного благодарен.
Гость
Ответ(ы) на вопрос:
Гость
Принятые в программе ДОПОЛНИТЕЛЬНЫЕ К УСЛОВИЮ ЗАДАНИЯ соглашения: 1. Разделителями между словами считаются любые символы, включенные к константу delim 2. Все символы, не входящие в delim, образуют алфавит (т.е. "буквы"), из которого может быть составлено каждое слово 3. Количество разделителей, окружающих каждое слово, ограничено только здравым смыслом. Все разделители будут переданы в строку результата без изменения. 4. Если слово содержит только один символ, оно не изменяется, несмотря на то, что единица - нечетное число. В противном случае такое слово было бы исключено. К тому же, слово длиной в один символ не имеет "средней буквы" CONST delim = " .,;:!?-" DIM s AS STRING, s1 AS STRING, word AS STRING, wd AS STRING DIM i AS INTEGER, n AS INTEGER, k AS INTEGER INPUT "Введите строку: ", s 'Обеспечить наличие пробела за последним словом IF INSTR(delim, RIGHT$(s, 1)) = 0 THEN s = s + " " 'Начальные присваивания n = LEN(s): s1 = "": i = 1 DO WHILE i <= n   'Просматриваем входную строку символ за символом    'Ищем первый непробельный символ    wd = ""  'qq    DO WHILE (INSTR(delim, MID$(s, i, 1)) <> 0) AND (i <= n)       wd = wd + MID$(s, i, 1)       i = i + 1    LOOP    'Выделяем очередное слово, за которым следует пробельный символ    word = ""    DO WHILE (INSTR(delim, MID$(s, i, 1)) = 0) AND (i <= n)       word = word + MID$(s, i, 1)       i = i + 1    LOOP    'Найдено ли слово?    k = LEN(word)    IF k > 0 THEN  'Если слово найдено       '--- вырезается средний символ при нечетной длине ---       IF (k > 1) AND (k MOD 2 <> 0) THEN          k = (k - 1) \ 2          word = LEFT$(word, k) + RIGHT$(word, k)       END IF       '----------------------------------------------------       'Добавляем найденное слово через wd к выходной строке       s1 = s1 + wd + word    END IF LOOP PRINT "Результат: " + s1 END Примеры работы программы: 1. Обычный текст: слова через один пробел Введите строку: А роза упала на лапу Азора Результат: А роза упла на лапу Азра 2. Использовано больше одного пробела и разделители : и ! Введите строку: Пример №2: Ура!   Мы ломим: гнутся шведы! Результат: Пример №2: Уа!   Мы лоим: гнутся швды! 3. Использовано несколько непробельных разделителей подряд Введите строку: Пример --№3--: Какое небо голубое!... Результат: Пример --№3--: Каое небо голбое!...
Не нашли ответ?
Ответить на вопрос
Похожие вопросы