• Задание: Сформировать по строке 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

    Подскажите)
    И если можно исправленный вариант, премного благодарен.

Ответы 3

  • Просто божественно!!Спасибо, у вас очень профессиональный подход к решению задач,И не просто написали, а еще все объяснили) Предел моих мечтаний)
    • Автор:

      beltran
    • 6 лет назад
    • 0
  • пожалуйста
  • Принятые в программе ДОПОЛНИТЕЛЬНЫЕ К УСЛОВИЮ ЗАДАНИЯ соглашения:1. Разделителями между словами считаются любые символы, включенные к константу delim2. Все символы, не входящие в delim, образуют алфавит (т.е. "буквы"), из которого может быть составлено каждое слово3. Количество разделителей, окружающих каждое слово, ограничено только здравым смыслом. Все разделители будут переданы в строку результата без изменения.4. Если слово содержит только один символ, оно не изменяется, несмотря на то, что единица - нечетное число. В противном случае такое слово было бы исключено. К тому же, слово длиной в один символ не имеет "средней буквы"CONST delim = " .,;:!?-"DIM s AS STRING, s1 AS STRING, word AS STRING, wd AS STRINGDIM i AS INTEGER, n AS INTEGER, k AS INTEGERINPUT "Введите строку: ", s'Обеспечить наличие пробела за последним словомIF INSTR(delim, RIGHT$(s, 1)) = 0 THEN s = s + " "'Начальные присваиванияn = LEN(s): s1 = "": i = 1DO 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 IFLOOPPRINT "Результат: " + s1ENDПримеры работы программы:1. Обычный текст: слова через один пробелВведите строку: А роза упала на лапу АзораРезультат: А роза упла на лапу Азра2. Использовано больше одного пробела и разделители : и !Введите строку: Пример №2: Ура!   Мы ломим: гнутся шведы!Результат: Пример №2: Уа!   Мы лоим: гнутся швды!3. Использовано несколько непробельных разделителей подрядВведите строку: Пример --№3--: Какое небо голубое!...Результат: Пример --№3--: Каое небо голбое!...
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years