:сформировать по строке 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 подскажите) и если можно исправленный вариант, премного .

FoxyPixel FoxyPixel    2   28.06.2019 19:20    1

Ответы
Ламинарка Ламинарка  02.10.2020 14:29
Принятые в программе ДОПОЛНИТЕЛЬНЫЕ К УСЛОВИЮ ЗАДАНИЯ соглашения:
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--: Каое небо голбое!...
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика