Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/197: Рейтинг темы: голосов - 197, средняя оценка - 4.93
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
1

Перевод из одной системы счисления в другую

06.11.2009, 03:15. Просмотров 36814. Ответов 26
Метки нет (Все метки)

Дали задание: написать программу для перевода из одной системы счисления в другую.
Системы счисления задаются с клавиатуры.
Т.е. Программа спрашивает В какой системе будет число. Пишу "2"
Программа "введите число в двоичной системе"
Ввожу число.
Программа спрашивает "В какую систему будем переводить?"
Отвечаю"10"
Ответ на экране Число N в двоичной системе = числу М в десятичной системе
и так применительно к другим системам
Вообще не понимаю как делать
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2009, 03:15
Ответы с готовыми решениями:

Перевод из одной системы счисления в другую
помогите пожалуйста(ошибка): Program perevod; Uses crt; Const Hex:string='ABCDEF'; Var ...

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

ПЕРЕВОД дробных чисел из одной системы счисления в другую. СПОСОБЫ ВНУТРЕННЕГО представления чисел с фиксированной точк
2) Создать блок-схему алгоритма программы перевода правильных дробей из одной системы счисления в...

Перевод из одной системы в другую
Помогите написать программу перевода натуральных чисел из одной системы в другую без использованния...

26
Puporev
Модератор
59503 / 44890 / 30988
Регистрация: 18.05.2008
Сообщений: 107,711
06.11.2009, 08:17 2
Ktara, А какие ограничения по системам? Что, задание по переводу от 2 до 36 туда и обратно, или какое-то другое?
0
кот Бегемот
Платежеспособный зверь
8624 / 4046 / 1577
Регистрация: 28.10.2009
Сообщений: 10,742
06.11.2009, 10:28 3
Обратитесь к Inadequate , у него есть программа перевода из любой системы в любую
1
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 11:56  [ТС] 4
Цитата Сообщение от Puporev Посмотреть сообщение
Ktara, А какие ограничения по системам? Что, задание по переводу от 2 до 36 туда и обратно, или какое-то другое?
Системы 2,4,5,7,8,9,16
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 14:45 5
Лучший ответ Сообщение было отмечено как решение

Решение

вот вроде так, а там проверяйте:
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
uses
  crt;
var
  cs1,cs2,res,change:integer;
  TD:string;
{функция перевода Dec числа в любую сс}
function FromDec(n,r:longint):string;
var
  s:String;
const
  digit:string[16]='0123456789ABCDEF';
begin
  s:='';
  repeat
    s:=digit[(n mod r)+1]+s;
    n:=n div r;
  until n=0;
    FromDec:=s;
end;
{фунция перевода любой сс в Dec}
function ToDec(n:string;r:longint):longint;
var
  m,i:longint;
const
  digit:string[16]='0123456789ABCDEF';
begin
  m:=0;
  while n[1]='0' do
    delete(n,1,1);
  for i:=1 to length(n) do
    m:=m*r+pos(n[i],digit)-1;
  ToDec:=m;
end;
{осоновная программы}
begin
  writeln('Ввыберите из какой сс перевод:');
  writeln('-------------------------------------------------------------------------------');
  writeln('1: из 2 сс');
  writeln('2: из 4 сс');
  writeln('3: из 5 сс');
  writeln('4: из 7 сс');
  writeln('5: из 8 сс');
  writeln('6: из 9 сс');
  writeln('7: из 10 сс');
  writeln('8: из 16 сс');
  writeln('-------------------------------------------------------------------------------');
  write('ВАШ ВЫБОР: ');
  repeat
    readln(change);
  until
    (change>=1) and (change<=8);
  case change of
    1: cs1:=2;
    2: cs1:=4;
    3: cs1:=5;
    4: cs1:=7;
    5: cs1:=8;
    6: cs1:=9;
    7: cs1:=10;
    8: cs1:=16;
  end;
  writeln('-------------------------------------------------------------------------------');
  writeln('Введите число для перевода с учетом выбранной вами сс:');
  writeln('-------------------------------------------------------------------------------');
  readln(TD);
  res:=ToDec(TD,cs1);
  writeln('-------------------------------------------------------------------------------');
  writeln('Ввыберите в какую сс перевод:');
  writeln('-------------------------------------------------------------------------------');
  writeln('1: в 2 сс');
  writeln('2: в 4 сс');
  writeln('3: в 5 сс');
  writeln('4: в 7 сс');
  writeln('5: в 8 сс');
  writeln('6: в 9 сс');
  writeln('7: в 10 сс');
  writeln('8: в 16 сс');
  writeln('-------------------------------------------------------------------------------');
  write('ВАШ ВЫБОР: ');
  repeat
    readln(change);
  until
    (change>=1) and (change<=8);
  writeln('-------------------------------------------------------------------------------');
  case change of
    1: cs2:=2;
    2: cs2:=4;
    3: cs2:=5;
    4: cs2:=7;
    5: cs2:=8;
    6: cs2:=9;
    7: cs2:=10;
    8: cs2:=16;
  end;
  writeln('ОТВЕТ: ',FromDec(Res,cs2));
  writeln('-------------------------------------------------------------------------------');
  writeln('                              КОНЕЦ ПРОГРАММЫ                                  ');
  writeln('-------------------------------------------------------------------------------');
end.
Добавлено через 4 минуты
хотя конечно можно было сделать просто без меню и намного короче, но так "покрасивее")
3
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 15:05  [ТС] 6
Inadequate, а можно там дописать, что если при выборе системы написать неправильное значение, то сообщало бы об ошибке?
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 15:16 7
вот переделанный вариант с вариантом выхода если нажать 0:
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
uses
  crt;
var
  cs1,cs2,res,change:integer;
  TD:string;
{функция перевода Dec числа в любую сс}
function FromDec(n,r:longint):string;
var
  s:String;
const
  digit:string[16]='0123456789ABCDEF';
begin
  s:='';
  repeat
    s:=digit[(n mod r)+1]+s;
    n:=n div r;
  until n=0;
    FromDec:=s;
end;
{фунция перевода любой сс в Dec}
function ToDec(n:string;r:longint):longint;
var
  m,i:longint;
const
  digit:string[16]='0123456789ABCDEF';
begin
  m:=0;
  while n[1]='0' do
    delete(n,1,1);
  for i:=1 to length(n) do
    m:=m*r+pos(n[i],digit)-1;
  ToDec:=m;
end;
{осоновная программы}
begin
  writeln('Ввыберите из какой сс перевод:');
  writeln('-------------------------------------------------------------------------------');
  writeln('1: из 2 сс');
  writeln('2: из 4 сс');
  writeln('3: из 5 сс');
  writeln('4: из 7 сс');
  writeln('5: из 8 сс');
  writeln('6: из 9 сс');
  writeln('7: из 10 сс');
  writeln('8: из 16 сс');
  writeln('0: выход из программы');
  writeln('-------------------------------------------------------------------------------');
  write('ВАШ ВЫБОР: ');
  repeat
    readln(change);
    if (change<0) or (change>8) then
      writeln('Неверно выбранная сс! Повторите попытку или введите 0 для выхода.')
  until
    (change>=0) and (change<=8);
  case change of
    1: cs1:=2;
    2: cs1:=4;
    3: cs1:=5;
    4: cs1:=7;
    5: cs1:=8;
    6: cs1:=9;
    7: cs1:=10;
    8: cs1:=16;
    0: exit;
  end;
  writeln('-------------------------------------------------------------------------------');
  writeln('Введите число для перевода с учетом выбранной вами сс:');
  writeln('-------------------------------------------------------------------------------');
  readln(TD);
  res:=ToDec(TD,cs1);
  writeln('-------------------------------------------------------------------------------');
  writeln('Ввыберите в какую сс перевод:');
  writeln('-------------------------------------------------------------------------------');
  writeln('1: в 2 сс');
  writeln('2: в 4 сс');
  writeln('3: в 5 сс');
  writeln('4: в 7 сс');
  writeln('5: в 8 сс');
  writeln('6: в 9 сс');
  writeln('7: в 10 сс');
  writeln('8: в 16 сс');
  writeln('0: выход из программы');
  writeln('-------------------------------------------------------------------------------');
  write('ВАШ ВЫБОР: ');
  repeat
    readln(change);
    if (change<0) or (change>8) then
      writeln('Неверно выбранная сс! Повторите попытку или введите 0 для выхода.')
  until
    (change>=0) and (change<=8);
  writeln('-------------------------------------------------------------------------------');
  case change of
    1: cs2:=2;
    2: cs2:=4;
    3: cs2:=5;
    4: cs2:=7;
    5: cs2:=8;
    6: cs2:=9;
    7: cs2:=10;
    8: cs2:=16;
    0: exit;
  end;
  writeln('ОТВЕТ: ',FromDec(Res,cs2));
  writeln('-------------------------------------------------------------------------------');
  writeln('                              КОНЕЦ ПРОГРАММЫ                                  ');
  writeln('-------------------------------------------------------------------------------');
end.
1
Puporev
Модератор
59503 / 44890 / 30988
Регистрация: 18.05.2008
Сообщений: 107,711
06.11.2009, 16:03 8
Вообще программа все считает неправильно, проверил 8-2, 10-2.
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 16:22 9
Puporev,хммм, а ведь действительно неправильно... Но считала правильно минут за пять до того как я её выложил... Скорее всего где-то ляпнул я ляпнул какую нибудь бредятину, из за сегоднешнего тупняка... Ты проверь отдельно по функциям(без этого меню) сначала в десятичное а потом в то что нужно...

Добавлено через 26 секунд
А я пока найду ошибку...

Добавлено через 2 минуты
блин в меню где то накосячил потому как без меню все работает на 100ку...

Добавлено через 8 минут
вот вариант без меню(только тут нет(!) ограничений на ввод):
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
uses
  crt;
var
  cs1,cs2,res,change:integer;
  TD:string;
{функция перевода Dec числа в любую сс}
function FromDec(n,r:longint):string;
var
  s:String;
const
  digit:string[16]='0123456789ABCDEF';
begin
  s:='';
  repeat
    s:=digit[(n mod r)+1]+s;
    n:=n div r;
  until n=0;
    FromDec:=s;
end;
{фунция перевода любой сс в Dec}
function ToDec(n:string;r:longint):longint;
var
  m,i:longint;
const
  digit:string[16]='0123456789ABCDEF';
begin
  m:=0;
  while n[1]='0' do
    delete(n,1,1);
  for i:=1 to length(n) do
    m:=m*r+pos(n[i],digit)-1;
  ToDec:=m;
end;
{осоновная программы}
begin
  writeln('Введите из какой сс');
  readln(cs1);
  writeln('Введите число в соответствии с сс');
  readln(TD);
  writeln('Введите в какую сс');
  readln(cs2);
  writeln(FromDec(ToDec(TD,cs1),cs2));
end.
он работает правильно... Puporev протестируй, а то может это только у меня работает

Добавлено через 1 минуту
а я пока постараюсь найти в той "каше" эту злостную ошибку....
2
Puporev
Модератор
59503 / 44890 / 30988
Регистрация: 18.05.2008
Сообщений: 107,711
06.11.2009, 16:28 10
Сейчас нормально для 2, 8, 16. Остальные надо калькулятор в инете искать, лень.
0
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 16:32  [ТС] 11
Цитата Сообщение от Puporev Посмотреть сообщение
Вообще программа все считает неправильно, проверил 8-2, 10-2.
Я проверяла 2-10 и 10-2 считало правильно
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 16:33 12
Puporev, ну оно и все остальные должно считать точно правильно как и эти, так как формулы универсальные, а самое смешное что ошибку найти не могу сделаю сейчас без этого меню с ограничением на ввод и все дела, видно быть с меню этой программе не судьба
0
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 16:40  [ТС] 13
Не знаю проверила всеми тремя версиями перевод числа 258 (10) в восьмиричную. Ответ верный во всех трех версия программы 402
1 версия
ВАШ ВЫБОР: 7
-------------------------------------------------------------------------------
Введите число для перевода с учетом выбранной вами сс:
-------------------------------------------------------------------------------
258
-------------------------------------------------------------------------------
Ввыберите в какую сс перевод:
-------------------------------------------------------------------------------
1: в 2 сс
2: в 4 сс
3: в 5 сс
4: в 7 сс
5: в 8 сс
6: в 9 сс
7: в 10 сс
8: в 16 сс
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 5
-------------------------------------------------------------------------------
ОТВЕТ: 402

2 версия
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 7
-------------------------------------------------------------------------------
Введите число для перевода с учетом выбранной вами сс:
-------------------------------------------------------------------------------
258
-------------------------------------------------------------------------------
Ввыберите в какую сс перевод:
-------------------------------------------------------------------------------
1: в 2 сс
2: в 4 сс
3: в 5 сс
4: в 7 сс
5: в 8 сс
6: в 9 сс
7: в 10 сс
8: в 16 сс
0: выход из программы
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 5
-------------------------------------------------------------------------------
ОТВЕТ: 402

3 версия
Введите из какой сс
10
Введите число в соответствии с сс
258
Введите в какую сс
8
402
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 16:44 14
Лучший ответ Сообщение было отмечено как решение

Решение

вот вариант без меню но зато 100% рабочий:
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
uses
  crt;
var
  cs1,cs2,res,change:integer;
  TD:string;
{функция перевода Dec числа в любую сс}
function FromDec(n,r:longint):string;
var
  s:String;
const
  digit:string[16]='0123456789ABCDEF';
begin
  s:='';
  repeat
    s:=digit[(n mod r)+1]+s;
    n:=n div r;
  until n=0;
    FromDec:=s;
end;
{фунция перевода любой сс в Dec}
function ToDec(n:string;r:longint):longint;
var
  m,i:longint;
const
  digit:string[16]='0123456789ABCDEF';
begin
  m:=0;
  while n[1]='0' do
    delete(n,1,1);
  for i:=1 to length(n) do
    m:=m*r+pos(n[i],digit)-1;
  ToDec:=m;
end;
{осоновная программы}
begin
  writeln('Введите из какой CC:');
  repeat
    readln(cs1);
  until
    (cs1>=2) and (cs1<=36);
  writeln('Введите число в соответствии с CC:');
  readln(TD);
  writeln('Введите в какую CC:');
  repeat
    readln(cs2);
  until
    (cs2>=2) and (cs2<=36);
  writeln('Перевод из ',cs1,' CC --> ',cs2,' CC:');
  writeln(FromDec(ToDec(TD,cs1),cs2));
end.
Добавлено через 3 минуты
Ktara, почитал ваши посты и понял... парадокс...
9
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 16:49  [ТС] 15
Не поверите. Но во всех версиях программы ответы одинаковые. уже взяла шестизначное число. так что там неправильно считает? Или сегодня день такой: тут правильно. а тут неправильно?
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 16:53 16
Видимо да потому как за сегодня такая ситуация во второй задаче...
0
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 16:56  [ТС] 17
Версия 1
выберите из какой сс перевод:
-------------------------------------------------------------------------------
1: из 2 сс
2: из 4 сс
3: из 5 сс
4: из 7 сс
5: из 8 сс
6: из 9 сс
7: из 10 сс
8: из 16 сс
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 7
-------------------------------------------------------------------------------
Введите число для перевода с учетом выбранной вами сс:
-------------------------------------------------------------------------------
121277
-------------------------------------------------------------------------------
Ввыберите в какую сс перевод:
-------------------------------------------------------------------------------
1: в 2 сс
2: в 4 сс
3: в 5 сс
4: в 7 сс
5: в 8 сс
6: в 9 сс
7: в 10 сс
8: в 16 сс
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 5
-------------------------------------------------------------------------------
ОТВЕТ: 354675
-------------------------------------------------------------------------------
КОНЕЦ ПРОГРАММЫ

Версия2
выберите из какой сс перевод:
-------------------------------------------------------------------------------
1: из 2 сс
2: из 4 сс
3: из 5 сс
4: из 7 сс
5: из 8 сс
6: из 9 сс
7: из 10 сс
8: из 16 сс
0: выход из программы
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 7
-------------------------------------------------------------------------------
Введите число для перевода с учетом выбранной вами сс:
-------------------------------------------------------------------------------
121277
-------------------------------------------------------------------------------
Ввыберите в какую сс перевод:
-------------------------------------------------------------------------------
1: в 2 сс
2: в 4 сс
3: в 5 сс
4: в 7 сс
5: в 8 сс
6: в 9 сс
7: в 10 сс
8: в 16 сс
0: выход из программы
-------------------------------------------------------------------------------
ВАШ ВЫБОР: 5
-------------------------------------------------------------------------------
ОТВЕТ: 354675
-------------------------------------------------------------------------------
КОНЕЦ ПРОГРАММЫ

Версия 3
Введите из какой сс
10
Введите число в соответствии с сс
121277
Введите в какую сс
8
354675

Версия 4(последняя)
Введите из какой CC:
10
Введите число в соответствии с CC:
121277
Введите в какую CC:
8
Перевод из 10 CC --> 8 CC:
354675

ну и? Ничего не понимаю. Где ж считало неправильно? Или я тестирую неудачно?
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
06.11.2009, 17:20 18
Ktara, последний 4 вариант 100% рабочий. Предыдущие давали у каждого свой результат так что лучше возьмите последний

Добавлено через 50 секунд
без меню конечно, скромненький, зато будете уверены что это правильно
1
Ktara
0 / 0 / 0
Регистрация: 06.11.2009
Сообщений: 8
06.11.2009, 17:23  [ТС] 19
Та я взяла все 4. спасибо большое за помощь. Сижу играю в детскую игру, называется "найди отличие". Ну хоть убейте, но все варианты дают одинаковый результат. Точно сегодня день заколдованный

Добавлено через 1 минуту
Если еще с чем-то застряну - буду обращаться
0
Nephilim
0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 10
11.11.2013, 23:23 20
Спасибо за код. Очень пригодился на контрольную...
0
11.11.2013, 23:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 23:23

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

Программа для перевода чисел из одной системы счисления в другую
Написать программу для перевода чисел из одной системы счисления в другую. Из 10 в 2, Из 16 в 8....

Написать программу для перевода чисел из одной системы счисления в другую
написать программу для перевода из одной системы счисления в другую. Из 8 в 2; из 10в 8

Перевод дроби из одной системы счисления в другую
Перевод ДРОБИ из одной системы счисления в другую

Перевод чисел из одной системы счисления в другую, требуется пояснение
var provint,celoe,chislo,sistem2,max,i,q,f,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.