0 / 0 / 0
Регистрация: 22.11.2019
Сообщений: 1
1

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

22.11.2019, 00:41. Показов 1117. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна помощь в доработке программы.
При вводе двух- и более -значных чисел выдает
Program1.pas(6) : Ошибка времени выполнения: Индекс находился вне границ массива.
помогите
башка уже не варит

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
65
66
67
68
69
70
71
72
73
74
75
76
var s,s1,s2,s3,s4:string;
var i,j,a,b,c,k:integer;
begin
     readln(s);
     for i:=1 to length(s) do
     if (ord(s[i])>47) and (ord(s[i])<58) then
     begin
          s1:='';
          s2:='';
          s3:='';
          k:=-1;
          for j:=i to length(s) do
          if (ord(s[j])>47) and (ord(s[j])<58) then 
          begin
               s1:=s1+s[j];
               k:=k+1;
          end          
          else break;
          val(s1,a,b);
          while a>=1 do
          begin
               c:=a mod 2;
               a:=a div 2;
               str(c,s2);
               s3:=s3+s2;
          end;
          for j:=length(s3) downto 1 do
          s4:=s4+s3[j];
          delete(s,i+1,k);
     end
     else s4:=s4+s[i];
     writeln(s4);
end.
 
[size="1"][color="grey"][I]Добавлено через 21 минуту[/I][/color][/size]
Можете предлагать свои варианты решения.
Я уже исправил ошибку.
Вот новая программа.
 
var s,s1,s2,s3,s4,s5:string;
var i,j,a,b,c,k:integer;
begin
     readln(s);
     for i:=1 to length(s) do
     if (ord(s[i])>47) and (ord(s[i])<58) then
     begin
          s1:='';
          s2:='';
          s3:='';
          k:=0;
          for j:=i to length(s) do
          if (ord(s[j])>47) and (ord(s[j])<58) then 
          begin
               s1:=s1+s[j];
               k:=k+1;
          end          
          else break;
          val(s1,a,b);
          while a>=1 do
          begin
               c:=a mod 2;
               a:=a div 2;
               str(c,s2);
               s3:=s3+s2;
          end;
          for j:=length(s3) downto 1 do
          s4:=s4+s3[j];
          delete(s,i,k);
          for j:=1 to k do
          insert(chr(1),s,i);
     end
     else s4:=s4+s[i];
     for i:=1 to length(s4) do
     if (s4[i]<>chr(1)) then s5:=s5+s4[i];
     writeln(s5);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2019, 00:41
Ответы с готовыми решениями:

Заменить все встречающиеся в тексте числа на эти же числа в двоичной системе счисления
Условие задачи: На планете Роботов очень не любят десятичную систему счисления, поэтому они...

Заменить все встречающиеся в тексте числа на эти же числа, но в двоичной системе счисления
На планете Роботов очень не любят десятичную систему счисления, поэтому они попросили Вас написать...

написать программу, которая в произвольной строке ищет все числа в десятичной системе счисления(в соответствии со стандартом языка си) и заменяет их
написать программу, которая в произвольной строке ищет все числа в десятичной системе счисления(в...

Составить программу, которая все цифры, встречающиеся в тексте, заменяет на «0»
Составить программу, которая все цифры, встречающиеся в тексте, заменяет на «0». Program Zadanie1;...

3
2325 / 1433 / 521
Регистрация: 07.04.2017
Сообщений: 4,742
22.11.2019, 02:38 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
procedure AddBase2(self: StringBuilder; var num: BigInteger); extensionmethod;
begin
  var i := self.Length;
  while num<>0 do
  begin
    self.Insert(i, num.IsEven?'0':'1' );
    num := num div 2;
  end;
end;
 
begin
  var res := new StringBuilder;
  
  var last_num := new BigInteger(0);
  foreach var ch in ReadString do
    if ch.IsDigit then
      last_num := last_num*10 + ( integer(ch)-integer('0') ) else
    begin
      res.AddBase2(last_num);
      res += ch;
    end;
  res.AddBase2(last_num);
  
  res.ToString.Println;
end.
При чём этот код не упадёт даже если в тексте будет число > 2^31-1 (максимум что помещается в integer).
0
Status 418
Эксперт Python
4578 / 2345 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
22.11.2019, 10:44 3
a0a0a - ответ?
0
2325 / 1433 / 521
Регистрация: 07.04.2017
Сообщений: 4,742
22.11.2019, 22:57 4
Ну а если так:
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
procedure AddBase2(self: StringBuilder; var nnum: BigInteger?); extensionmethod;
begin
  if nnum=nil then exit;
  var num := nnum.Value;
  nnum := nil;
  
  if num=0 then
  begin
    self += '0';
    exit;
  end;
  
  var i := self.Length;
  while num<>0 do
  begin
    self.Insert(i, num.IsEven?'0':'1' );
    num := num div 2;
  end;
  
end;
 
begin
  var res := new StringBuilder;
  
  var last_num: BigInteger?;
  foreach var ch in ReadString do
    if ch.IsDigit then
      last_num := (last_num=nil?0:last_num.Value*10) + ( integer(ch)-integer('0') ) else
    begin
      res.AddBase2(last_num);
      res += ch;
    end;
  res.AddBase2(last_num);
  
  res.ToString.Println;
end.
0
22.11.2019, 22:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2019, 22:57
Помогаю со студенческими работами здесь

Написать программу,которая преобразует положительное число в двоичной системе счисления
Написать программу,которая преобразует положительное число в двоичной системе счисления и печатает...

Дана строка - запись числа в двоичной системе счисления. Преобразуйте ее в строку - запись числа в шестнадцатеричной системе счисления
Дана строка, представляющая собой запись числа в двоичной системе счисления. Преобразуйте ее в...

Описать функцию, которая возвращает строковое представление целого числа N в двоичной системе счисления
Описать функцию, которая возвращает строковое представление целого числа N в двоичной системе...

Если строка является изображением целого числа в восьмеричной системе счисления, то перевести ее в целое число в двоичной системе счисления
Вводится строка символов. Если она является изображением целого числа в восьмеричной системе...


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

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

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