Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
3 / 3 / 1
Регистрация: 16.08.2016
Сообщений: 70
1

Замена символа при вводе

16.08.2016, 00:18. Показов 4377. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу сделать так чтоб при readln(S); если человек вводит символ '#' программа вводила символ '√' и присваивал переменной S его вместо '#'.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2016, 00:18
Ответы с готовыми решениями:

Блокирование вычисления суммы при вводе ошибочного символа
подскажите пожалуйста как дополнить программу анализом кода преобразования в функции Val, таким...

Замена символа
Пользователь вводит небольшой текст(хватит и около 200-250 символов), нужно вместо пробела вставить...

Замена символа $ на *
Составить программу, которая заменяет символ $ на *

EditText Замена символа при вводе
Всем привет! Помогите реализовать замену символа ' ' на '_' при вводе. Пытался сделать с...

18
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
16.08.2016, 06:59 2
Pascal
1
2
3
  ReadLn(s);
  while Pos('#',s)>0 do s[Pos('#',s)]:='v';
  WriteLn(s);
или
Pascal
1
2
3
  ReadLn(s);
  for i:=1 to Length(s) do if s[i]='#' then s[i]:='v';
  WriteLn(s);
Добавлено через 1 минуту
Форум в коде съел желаемый символ '√'.
1
3 / 3 / 1
Регистрация: 16.08.2016
Сообщений: 70
16.08.2016, 09:02  [ТС] 3
ОШИБКА: Нет индексного свойства по умолчанию для типа char. В обеих случаях выводит данную ошибку.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
16.08.2016, 09:39 4
Pascal
1
s: String;
Для Char:
Pascal
1
2
ReadLn(c);
if c='#' then c:='v';
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.08.2016, 09:40 5
Цитата Сообщение от MartinChobanyan Посмотреть сообщение
вводила символ '√'
Такого символа в ANSI нет. Есть в ASCII(Турбо Паскаль) #251. А юникодный символ, набираемый с клавы комбинацией Alt+251 имеет более 1 байта.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.08.2016, 09:49 6
Лучший ответ Сообщение было отмечено MartinChobanyan как решение

Решение

Тогда, воспользоваться модулем CRT.
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
28
29
30
program test;
 
uses
  CRT;
 
  procedure MyReadLn(var S: string);
  var
    C: char;
  begin
    s := '';
    repeat
      C := ReadKey;
      case C of
        #13:
          break;
        '#':
          C := '!';
      end;
      write(C);
      S := S + C;
    until False;
    writeln;
  end;
 
var
  S: string;
begin
  MyReadLn(S);
  writeln(S);
end.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.08.2016, 09:52 7
Что-то не понял, а где здесь символ радикал?
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.08.2016, 09:55 8
Sorry, за его отсутствие, по причинам, которые Вы осветили выше.
Но идею замены "на лету" одного символа другим, я продемонстрировал.
1
3 / 3 / 1
Регистрация: 16.08.2016
Сообщений: 70
16.08.2016, 15:30  [ТС] 9
Спасибо что помогли Федосеев Павел. Ответ получен!

Добавлено через 5 часов 9 минут
Павел, вы могли оптимизировать ваш код, string не нужен и цикл тоже убрать надо.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.08.2016, 15:35 10
Это не оптимизация, а полное изменение.

Не по теме:

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


А можно описать задачу по-подробнее?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.08.2016, 15:41 11
Лучший ответ Сообщение было отмечено MartinChobanyan как решение

Решение

Цитата Сообщение от MartinChobanyan Посмотреть сообщение
string не нужен и цикл тоже убрать надо.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses CRT;
var C: char;
begin
repeat
C := ReadKey;
case C of
#13:exit;
'#':C := '!';
end;
write(C);
until C=#13;
end.
2
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.08.2016, 15:46 12
Puporev, +1 за телепатию.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.08.2016, 15:49 13
Цитата Сообщение от Puporev Посмотреть сообщение
и цикл тоже убрать надо.
А цикл я не убрал, иначе вообще хрен знает что нужно...
0
3 / 3 / 1
Регистрация: 16.08.2016
Сообщений: 70
16.08.2016, 22:17  [ТС] 14
Что за "#13" и зачем оно нужно? Я без этого писал и всё ОК.(Я знаю что это код символа. )
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.08.2016, 08:27 15
#13 это код Enter. жмем чтобы закончить ввод.
1
3 / 3 / 1
Регистрация: 16.08.2016
Сообщений: 70
18.08.2016, 20:38  [ТС] 16
Этот вопрос связан с данной темой. Как сделать так чтоб программа не реагировала при выше написанной процедуре на некоторые клавиши, а именно:
Миниатюры
Замена символа при вводе  
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.08.2016, 20:42 17
Pascal
1
2
3
4
5
6
uses crt;
var c:char;
begin
c:=readkey;
if c=#0 then c:readkey;
if c in [#72,#75,#77,#80] then не надо
1
3 / 3 / 1
Регистрация: 16.08.2016
Сообщений: 70
19.08.2016, 00:15  [ТС] 18
Цитата Сообщение от Puporev Посмотреть сообщение
then не надо
В смысле?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
19.08.2016, 00:27 19

Pascal
1
2
3
4
5
6
7
8
9
10
uses crt;
 
procedure DoNothing;
begin end;
 
var c:char;
begin
c:=readkey;
if c=#0 then c:readkey;
if c in [#72,#75,#77,#80] then DoNothing;
1
19.08.2016, 00:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2016, 00:27
Помогаю со студенческими работами здесь

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал
Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе...

АвтоВыборка из БД при вводе символа
Добрый день! Сейчас есть куча форм для выбора из справочников, например контрагента... в...

При вводе символа программа зацикливается
Я пытался создать программу, которая при вводе отрицательного или типа не int выводит ошибку и...

Завершение программы при вводе символа
Задача такая: написать программу, которая переводит температуру по Форенгейту в температуру по...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru