Задание: Сформировать по строке a новейшую строчку по правилу: если слово

Задание: Сформировать по строке 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 gt; 0 Then n = n + 1 Else Exit Do
i = Poz + 1
Loop
ReDim B(n)
n = 1
Do
Poz = InStr(1, a, " ")
if Poz gt; 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) amp; Mid(B(i), (Len(B(i)) + 3)/2)
a = a amp; B(i) amp; " "
Next i
a = Trim(a)
Print "Staraya stroka: " amp; back amp; CHR(13) amp; CHR(10) "Novaya stroka: " amp; a
End

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

Задать свой вопрос
Шешукова Дарья
1. Тот же вопрос: определение "слова" и определение "разделитель слов в строке". 2. Без обид - код корявый и управлять его - это занятие дурное, еще проще и прытче свой написать.
Daniil Sychkov
3. Солидный выигрыш в наглядности и удобстве отдало бы внедрение пользовательских процедур.
1 ответ
Принятые в программе ДОПОЛНИТЕЛЬНЫЕ К УСЛОВИЮ ЗАДАНИЯ соглашения:
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 lt;= n   'Просматриваем входную строчку знак за эмблемой
   'Ищем 1-ый непробельный символ
   wd = ""  'qq
   DO WHILE (INSTR(delim, MID(s, i, 1)) lt;gt; 0) AND (i lt;= n)
      wd = wd + MID(s, i, 1)
      i = i + 1
   LOOP
   'Выделяем очередное слово, за которым следует пробельный знак
   word = ""
   DO WHILE (INSTR(delim, MID(s, i, 1)) = 0) AND (i lt;= n)
      word = word + MID(s, i, 1)
      i = i + 1
   LOOP
   'Найдено ли слово?
   k = LEN(word)
   IF k gt; 0 THEN  'Если слово найдено
      '--- вырезается средний знак при нечетной длине ---
      IF (k gt; 1) AND (k MOD 2 lt;gt; 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. Использовано больше 1-го пробела и разделители : и !
Введите строчку: Пример 2: Ура!   Мы ломим: гнутся шведы!
Итог: Пример 2: Уа!   Мы лоим: гнутся швды!
3. Использовано несколько непробельных разделителей подряд
Введите строчку: Пример --3--: Какое небо голубое!...
Итог: Пример --3--: Каое небо голбое!...


Степанченко Валентина
Просто священно!!Спасибо, у вас очень проф подход к решению задач,И не просто написали, а еще все объяснили) Предел моих желаний)
Vasja Telpuhovskij
пожалуйста
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт