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

Перевод строки в число и обратно со знаком (+,-)

08.12.2013, 21:33. Показов 1993. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать программу, выполняющую:
- ввод строки, изображающей число в позиционной системе счисления со знаком или без знака,
- преобразование этой строки в десятичное число целого или вещественного типа,
- вывод этого числа,
- преобразование десятичного числа в строковое представление,
- вывод этой строки.

Ограничения
Для ввода и вывода строк можно использовать тип строка или вводить и выводить строки по символам. Для преобразования чисел из одной системы счисления в другую можно использовать любой алгоритм (кроме табличного), но проще применить методы «цифра за цифрой». Использовать библиотечные функции преобразования запрещено.

программа должна обработать строку, изображающую вещественное двоичное число со знаком, модуль которого меньше единицы, напр.: ‘0,011’ -> 0.375 -> ‘0,011’.
Спасибо заранее
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2013, 21:33
Ответы с готовыми решениями:

перевод со знаком из СС 16 со в десятичную и обратно
Помогите с програмкой) Задание: перевести число с СС16 в десятичную 1. Входная и выходная данные...

Перевод строки в дробное число и обратно
wimain(коллеги) { // снова зову вас на помощь Всем доброго утра и здравия в наше смутное время!...

Перевод строки в число с плавающей точкой и обратно
на форме есть Edit/Label/Button (всех по одному), нужно из поля Edit вытащить число с плавающей...

Есть число со знаком, его надо умножить на число типа double, и получить результат со знаком
Есть число со знаком, его надо умножить на число типа double, и получить результат со знаком, Как...

1
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
08.12.2013, 23:54 2
Лучший ответ Сообщение было отмечено Mob1le как решение

Решение

Перевод представлений любых чисел (целых, вещественных, положительных и отрицательных) между системами счисления с основаниями 2..36:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
program Project1;
 
{$N+} {Подключаем математический сопроцессор. Это позволит использовать тип Extended.}
 
const
  {Соответствие между цифрой и числом.}
  D : String = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
{Перевод представления числа aSNum, заданного в системе счисления
с основанием aBase - в число.}
function StrToNum(const aSNum : String; const aBase : Byte) : Extended;
var
  SNum, Sign : String;
  i, Len : Integer;
  Res, Weight : Extended;
begin
  Res := 0;
 
  SNum := UpperCase(aSNum); {Перевод символов в верхний регистр.}
  {Знак в представлении числа.}
  Len := Length(SNum);
  Sign := '+';
  if (SNum <> '') and (SNum[1] in ['+', '-']) then
  begin
    Sign := SNum[1];
    Delete(SNum, 1, 1); {Представление числа без знака.}
    Dec(Len); {Длина представления без знака.}
  end;
  {Перевод целой части.}
  i := 1;
  while (i <= Len) and not (SNum[i] in ['.', ',']) do
  begin
    Res := Res * aBase + Pos(SNum[i], D) - 1;
    Inc(i);
  end;
  {Перевод дробной части.}
  Weight := 1; {Начальный вес разряда.}
  Inc(i);
  while i <= Len do
  begin
    Weight := Weight / aBase; {Вес очередного разряда.}
    Res := Res + (Pos(SNum[i], D) - 1) * Weight;
    Inc(i);
  end;
  {Учитываем знак числа.}
  if Sign = '-' then
    Res := -Res;
  StrToNum := Res;
end;
 
{Представление числа aNum в системе счисления с основанием aBase и с точностью
aPrec знаков после запятой.}
function NumToStr(const aNum : Extended; const aBase, aPrec : Byte) : String;
var
  NInt : Longint;
  NFrac : Extended;
  i : Integer;
  Res : String;
begin
  {Значение целой части числа.}
  NInt := Trunc(Abs(aNum));
  {Представление целой части числа.}
  Res := '';
  repeat
    Res := D[NInt mod aBase + 1] + Res;
    NInt := NInt div aBase;
  until NInt = 0;
 
  {Значение дробной части числа.}
  NFrac := Frac(Abs(aNum));
  {Добавляем разделитель целой и дробной части.}
  if (NFrac <> 0) and (aPrec > 0) then
    Res := Res + '.';
  {Представление дробной части.}
  i := 0;
  while (NFrac <> 0) and (i < aPrec) do
  begin
    Inc(i);
    Res := Res + D[Trunc(NFrac * aBase) + 1];
    NFrac := Frac(NFrac * aBase);
  end;
 
  {Добавляем в представление знак.}
  if aNum < 0 then
    Res := '-' + Res;
  NumToStr := Res;
end;
 
{Перевод представления числа, заданного в системе счисления с основанием aBase1,
в представление с основанием aBase2 с точностью aPrec знаков после запятой
в целевом представлении.}
function c2c(const aSNum : String; const aBase1, aBase2, aPrec : Byte) : String;
var
  Num : Extended;
begin
  Num := StrToNum(aSNum, aBase1);
  c2c := NumToStr(Num, aBase2, aPrec);
end;
 
var
  Base1, Base2, Prec : Byte;
  S, SNum : String;
begin
  repeat
    Writeln('----------');
    Writeln('Задайте основание исходной системы счисления:');
    Readln(Base1);
    Writeln('Задайте представление числа в исходной системе счисления:');
    Readln(SNum);
    Writeln('Задайте основание целевой системы счисления:');
    Readln(Base2);
    Writeln('Задайте точность представления числа в целевой системы счисления:');
    Readln(Prec);
 
    Writeln('Представление числа в целевой системе счисления:');
    Writeln(c2c(SNum, Base1, Base2, Prec));
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
08.12.2013, 23:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2013, 23:54
Помогаю со студенческими работами здесь

перевод строк в число и обратно
Разработать программу, выполняющую: - ввод строки, изображающей число в позиционной системе...

Перевод символа в число и обратно.
Здравствуйте! Как перевести число в символ, и ,наоборот, как перевести символ в число? То есть...

Перевод даты в число и обратно
Есть такое дело: procedure TForm1.Button2Click(Sender: TObject); begin var date3:string;...

Перевод строки из десятичной сс в восьмеричную и обратно
превод строки из десятичной сс в восьмеричную и обратно тип данных: 1.Вещественный 2.без знака...

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

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


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

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