Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 29
1

Заменить во введенном строковом выражении указанную подстроку нужным числовым значением

12.03.2013, 18:24. Показов 1895. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку нужным числовым значением в строковом представлении. min(x,y,z), где x и y и z- числа.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2013, 18:24
Ответы с готовыми решениями:

Составить программу, заменяющую во введенном строковом выражении указанную подстроку нужным числовым значением
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...

Заменить во введенном строковом выражении указанную подстроку нужным числовым значением
Cоставить программу, заменяющую во введенном строковом выражении указанную подстроку нужным...

Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку нужным числовым значение
exp(x), где x - число.

Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку нужным числовым значение
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...

5
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
12.03.2013, 19:43 2
Так, например.
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
program Mini;
uses crt;
 
var s, p: string;
    i, j, k, x, y, z: integer;
begin
writeln('Input string:');
readln(s);
p := '';
i := Pos('min(', s);
if i = 0 then writeln(s)
  else
  begin
  k := i;
  j := i + 4;
  while s[j] <> ',' do 
    begin 
    p := p + s[j];
    j := j + 1;
    end;
  x := StrToInt(p);
  p := '';
  j := j + 1;
  while s[j] <> ',' do 
    begin 
    p := p + s[j];
    j := j + 1;
    end;
  y := StrToInt(p);
  p := '';
  j := j + 1;
  while s[j] <> ')' do 
    begin 
    p := p + s[j];
    j := j + 1;
    end;
  z := StrToInt(p);
  j := j + 1;
  if x > y then x := y;
  if x > z then x := z;
  p := IntToStr(x);
  i := 1;
  while i < k do 
    begin
    write(s[i]);
    i := i + 1;
    end;
  write(p);
  for i := j to Length(s) do write(s[i]);
  end;
readln;
end.
1
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 29
13.03.2013, 09:00  [ТС] 3
StrToInt пишет неверный индификатор
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
13.03.2013, 11:38 4
Да... Как-то не подумал... В Pascal не всегда есть StrToInt и IntToStr... Нужно будет использовать процедуры val и str. В переменных добавляете ещё одну, почти не нужную (err, например)
Pascal
1
2
var s, p: string;
    i, j, k, x, y, z, err: integer;
вместо сточек наподобие
Pascal
1
x := StrToInt(p);
пишете
Pascal
1
val(p, x, err);
, далее, если нужна проверка корректности перевода, можно проверить переменную err на предмет неравенства нулю, в этом случае err указывает на позицию первого неправильного символа в строке, а x := 0. Но, как правило, при выполнении заданий этого и не требуется.

Вместо чего-то такого
Pascal
1
p := IntToStr(x);
пишете
Pascal
1
str(x, p);
. Всё, вроде бы... Да, для корректной работы val может понадобится прописать ключ компилятора {$R+} или {$R-}.

Ещё раз извините. Просто Turbo Pascal я давно не использую, работаю на Delphi. Диалекты несколько разные...

Всего Вам доброго.

Добавлено через 5 минут
Ещё при разборе подстроки min(...) я считал, что внутри скобок три числа, разделённые двумя запятыми, и ничего более, возможные пробелы не учитывал... Если нужно, перепишу покорректнее...
1
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 29
19.03.2013, 08:45  [ТС] 5
Если можешь напиши по конкретнее, а то я поменял как ты писал и у меня не получилось.
0
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,011
20.03.2013, 01:06 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот. Вроде так. Добавил игнорирование пробелов, чтобы можно было писать min(1,2,3), или min(1, 2, 3), или min(1, 2, 3), перед '1', перед ',' и перед ')' пробелы недопустимы - будет ошибка преобразования. Можно, конечно, везде напихать
Pascal
1
while s[j] = ' ' do j := j + 1;
, только зачем - и так пойдёт. Но на всякий случай проверки ошибок преобразования навтыкал - они выкидывают из программы с сообщением Error. Ещё подрихтовал всё слегка и комментарии написал. В принципе, можно ещё преобразование чисел (вместе с Error) в подпрограмму вынести.
Кликните здесь для просмотра всего текста
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
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
59
60
61
62
63
64
program Mini;
uses crt;
 
var s, p: string;
    i, j, k, x, y, z, err: integer;
 
//подстрока min(x,y,z) после запятых может содержать пробелы
begin
writeln('Input string:');
readln(s);
p := ''; //инициализируем буфер строки
i := Pos('min(', s); //поиск 'min('
if i = 0 then writeln(s) //не найдено, печатаем строку как есть
  else //найдено
  begin
  k := i; //запоминаем позицию в строке, где встретился 'min('
  j := i + 4; //'min(' - 4 символа - игнорируем
  while s[j] <> ',' do //до запятой - x, читаем в строку
    begin 
    p := p + s[j];
    j := j + 1;
    end;
  val(p, x, err); //преобразуем строку в число
  if err <> 0 //если есть ошибка в числе
    then begin
    write('Error'); readln; exit;
    end;
  p := ''; //инициализируем буфер строки
  j := j + 1; //запятую игнорируем
  while s[j] = ' ' do j := j + 1; //если есть пробелы перед y - игнорируем
  while s[j] <> ',' do //до запятой - y, читаем в строку
    begin 
    p := p + s[j];
    j := j + 1;
    end;
  val(p, y, err); //преобразуем строку в число
  if err <> 0 //если есть ошибка в числе 
    then begin
    write('Error'); readln; exit;
    end;
  p := ''; //инициализируем буфер строки
  j := j + 1; //запятую игнорируем
  while s[j] = ' ' do j := j + 1; //если есть пробелы перед z - игнорируем
  while s[j] <> ')'  do //до скобки - z, читаем в строку
    begin 
    p := p + s[j];
    j := j + 1;
    end;
  val(p, z, err);  //преобразуем строку в число
  if err <> 0 //если есть ошибка в числе 
    then begin
    write('Error'); readln; exit;
    end;
  j := j + 1; //скобку игнорируем
  if x > y then x := y; Выясняем минимум
  if x > z then x := z;
  //печатаем то, что было до 'min(', если есть что печатать
  if k > 1 then for i := 1 to k do  write(s[i]);
  write(x); //печатаем найденный минимум
  //печатаем то, что было после 'min(...)', если есть что печатать
  if j < Length(s) then for i := j to Length(s) do write(s[i]);
  end;
readln;
end.
1
20.03.2013, 01:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2013, 01:06
Помогаю со студенческими работами здесь

Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку нужным числовым значение
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...

Составить программу заменяющую во введенном строковом выражении подстроку нужным числовым значением
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...

Заменить указанную подстроку нужным числовым значением
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...

Заменить указанную подстроку нужным числовым значением.
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...


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

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