Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
1

Преобразовать числовую строку по правилу

23.07.2016, 12:34. Показов 1840. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано число в виде строки S. Требуется каждый элемент
этой строки заменить на
1. Если элемент четная цифра, то заменить на большую
рядом стоящую цифру
2. Если элемент нечетная цифра, то заменить на меньшую
рядом стоящую цифру.
примечание
Дано число 12345. Числа 1 и 5 считаются рядом стоящими.
Данная программа решила задачу, создав новую строку...
Как сделать замену?
Есть мысль ввести пару переменных? Как?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
DECLARE FUNCTION M$ (n!)
DECLARE FUNCTION STO$ (u!)
CLS
DIM SHARED s AS STRING
DIM t AS STRING
 
s = "4915440847"
PRINT s
PRINT
s = M(10) + s + M(1)
 
FOR i = 2 TO 11
   n1 = VAL(M(i - 1))
   ni = VAL(M(i))
   n2 = VAL(M(i + 1))
   IF ni MOD 2 THEN
      IF n1 > n2 THEN
         t = t + STO(n2)
      ELSE
         t = t + STO(n1)
      END IF
   ELSE
      IF n1 > n2 THEN
         t = t + STO(n1)
      ELSE
         t = t + STO(n2)
      END IF
   END IF
NEXT
PRINT t
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION STO$ (u)
   STO = LTRIM$(STR$(u))
END FUNCTION
0
23.07.2016, 12:34
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2016, 12:34
Ответы с готовыми решениями:

Есть ли способ в числовую переменную преобразовать строку с математическим выражением т
Приветствую. Хочу задать вопрос. Есть ли способ в числовую переменную преобразовать строку с математическим выражением так, чтобы она...

Преобразовать строку в строку заданной длины N по указанному правилу
Дано целое число N (> 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то...

Преобразовать строку S по правилу
Вот условие - Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33076 / 21377 / 8211
Регистрация: 22.10.2011
Сообщений: 36,697
Записей в блоге: 9
24.07.2016, 10:39 2
Лучший ответ Сообщение было отмечено echs как решение

Решение

И чего, если мне понадобится добавить пару символов в строку, придется захардкоденные константы менять? Спасибо, я лучше уж вот так напишу:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var
  s : string = '4915440847';
 
function min(a, b : char) := (a < b ? a : b);
function max(a, b : char) := (a > b ? a : b);
 
function prev(i : integer) := (i > 1 ? i - 1 : length(s));
function next(i : integer) := (i < length(s) ? i + 1 : 1);
 
type f = function(a, b : char) : char;
const fn : array[boolean] of f = (max, min);
 
procedure process(i : integer);
var ch : char;
begin
  if i <= length(s) then
  begin
    ch := fn[odd(ord(s[i]))](s[prev(i)], s[next(i)]);
    process(i + 1);
  end;
  if i <= length(s) then s[i] := ch;
end;
 
begin
  process(1);
  writeln(s);
end.
И менять ничего не придется при замене исходной строки, да и строка не будет портиться добавлением последнего и первого символов... Только допускает ли QB такую работу с типами, как Паскаль, чтобы написать одну-единственную строку, подобную №18?
2
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
24.07.2016, 13:04  [ТС] 3
volvo
Спасибо!
Крайне Вам благодарен за то внимание, которое вы проявили
к моей теме. В то время как я считаю, что не имею никаких
оснований тратить Ваше драгоценное время. Но я бесконечно
восхищен вашими достижениями в области программирования
и написания алгоритмов с такой легкостью и изяществом, какая
не подвластна даже богам!
А пока
я предлагаю программу, которую переделал по образу и подобию
предыдущей программы внедрив рекурсивную процедуру. Этому
я научился у Вас, ухватив самую суть решения.
Еще раз спасибо Вам!

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
DECLARE SUB Stroka (s AS STRING, i!)
DECLARE FUNCTION M$ (n!)
DECLARE FUNCTION STO$ (u!)
CLS
DIM SHARED s AS STRING
 
s = "4915440847"
PRINT s
PRINT
s = M(10) + s + M(1)
 
CALL Stroka(s, 2)
 
s = MID$(s, 2, 10)
PRINT s
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION STO$ (u)
   STO = LTRIM$(STR$(u))
END FUNCTION
 
SUB Stroka (s AS STRING, i)
   IF i = 12 THEN EXIT SUB
 
   n1 = VAL(M(i - 1))
   ni = VAL(M(i))
   n2 = VAL(M(i + 1))
 
   CALL Stroka(s, i + 1)
 
   IF ni MOD 2 THEN
      IF n1 > n2 THEN
         MID$(s, i, 1) = STO(n2)
      ELSE
         MID$(s, i, 1) = STO(n1)
      END IF
   ELSE
      IF n1 > n2 THEN
         MID$(s, i, 1) = STO(n1)
      ELSE
         MID$(s, i, 1) = STO(n2)
      END IF
   END IF
END SUB
Добавлено через 1 час 8 минут
В этой программе я упростил код, введя еще пару функций,
а также не стал увеличивать исходную строку. Тут надо еще
подумать над тем, можно ли что-то радикально сократить?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
DECLARE FUNCTION max! (a!, b!)
DECLARE FUNCTION min! (a!, b!)
DECLARE FUNCTION M$ (n!)
DECLARE FUNCTION STO$ (u!)
DECLARE SUB STRO (i!)
 
CLS
DIM SHARED s AS STRING
 
s = "4915440847"
PRINT s
PRINT
 
CALL STRO(1)
 
PRINT s
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION max (a, b)
   IF a > b THEN max = a ELSE max = b
END FUNCTION
 
FUNCTION min (a, b)
   IF a < b THEN min = a ELSE min = b
END FUNCTION
 
FUNCTION STO$ (u)
   STO = LTRIM$(STR$(u))
END FUNCTION
 
SUB STRO (i)
   IF i > 10 THEN EXIT SUB
 
   IF i = 1 THEN j = 11 ELSE j = i
   IF i = 10 THEN k = 0 ELSE k = i
   n1 = VAL(M(j - 1))
   ni = VAL(M(i))
   n2 = VAL(M(k + 1))
 
   CALL STRO(i + 1)
 
   IF ni MOD 2 THEN
      MID$(s, i, 1) = STO(min(n1, n2))
   ELSE
      MID$(s, i, 1) = STO(max(n1, n2))
   END IF
END SUB
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33076 / 21377 / 8211
Регистрация: 22.10.2011
Сообщений: 36,697
Записей в блоге: 9
24.07.2016, 13:45 4
Лучший ответ Сообщение было отмечено echs как решение

Решение

Вот так работать будет?
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
DECLARE FUNCTION max! (a!, b!)
DECLARE FUNCTION min! (a!, b!)
DECLARE FUNCTION M$ (n!)
DECLARE FUNCTION STO$ (u!)
DECLARE SUB STRO (i!)
 
CLS
DIM SHARED s AS STRING
 
s = "4915440847"
PRINT s
PRINT
 
CALL STRO(1)
 
PRINT s
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION max (a, b)
   IF a > b THEN max = a ELSE max = b
END FUNCTION
 
FUNCTION min (a, b)
   IF a < b THEN min = a ELSE min = b
END FUNCTION
 
FUNCTION STO$ (u)
   STO = LTRIM$(STR$(u))
END FUNCTION
 
SUB STRO (i)
   IF i > LEN(s) THEN EXIT SUB
   
   SELECT CASE i
   CASE 1
      j = LEN(s) : k = 2
   CASE LEN(s)
      j = i - 1 : k = 1
   CASE ELSE
      j = i - 1 : k = i + 1
   END SELECT
 
   n1 = VAL(M(j))
   ni = VAL(M(i))
   n2 = VAL(M(k))
 
   CALL STRO(i + 1)
 
   IF ni MOD 2 THEN
      MID$(s, i, 1) = STO(min(n1, n2))
   ELSE
      MID$(s, i, 1) = STO(max(n1, n2))
   END IF
END SUB
, или тут есть что-то, чего нет в QB?
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
24.07.2016, 16:32  [ТС] 5
volvo
Она работает. У нее пара плюсов
1. Она работает со строкой любой длины.
2. Она более читабельная.
3. Она передает Вам привет!
Спасибо!
0
Кормпилятор
 Аватар для Quiet Snow
5038 / 1710 / 409
Регистрация: 25.04.2010
Сообщений: 4,801
Записей в блоге: 2
31.07.2016, 12:54 6
Она передает Вам привет!

Не по теме:

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

0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
07.08.2016, 14:05 7
volvo, офигеть, программа на паскале в функциональном стиле. Красиво.

Я извиняюсь, но какую версию надо использовать для компиляции? У меня установлены Delphi 2006 и Delphi 2010, они такое не могут, пришлось чуть переписать программу.

Неужели новые версии Delphi такой синтаксис поддерживают?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33076 / 21377 / 8211
Регистрация: 22.10.2011
Сообщений: 36,697
Записей в блоге: 9
07.08.2016, 17:20 8
rdt, я проверял на PascalABC.NET (онлайн-версия компилятора - здесь)
1
07.08.2016, 17:20
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2016, 17:20
Помогаю со студенческими работами здесь

Преобразовать строку по указанному правилу
Помогите с программкой. Данная строка символов S. Преобразовать строку , заменив : а ) каждую точку многоточием (т.е. тремя...

Каждую строку матрицы Z(5,4) преобразовать по правилу
Дана задача. Каждую строку матрицы Z(5,4) преобразовать по правилу: если максимальный элемент не первый, то поменять его местом с...

Строка: Преобразовать введенную пользователем строку по заданному правилу...
Ввести символ из интервала от «а» до «d». Если введен символ «а» - преобразовать его в символ «b», если «b» - преобразовать его в символ...

Сформировать числовую последовательность по правилу
Есть например число 3 и нужно сформировать числовую последовательность (32123) длинной 5 символов, если число 1 то (10001) как такое...

Дана действительная квадратная матрица порядка n. Преобразовать матрицу по правилу: строку с номером n сделать столбц
Как решить в C# Windows Forms? Консольной не надо)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru