Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.02.2022
Сообщений: 6

Конвертер чисел СС

15.02.2022, 09:36. Показов 779. Ответов 10

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Готовлю работу по программированию.
Задача следующая:

10. Написать программу перевода чисел из одной системы счисления в другую. Систему
счисления (десятичная, двоичная, восьмеричная или шестнадцатеричная) для задания и
перевода числа выбирает пользователь. Предусмотреть возможность перевода сразу
нескольких чисел, загруженных из файла.


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


Суть проблемы: Программа считывает только 1ую строку в файле. При повторе цикла дальнейшее считывание не происходит.

Вот проблемный блок ( Полный код - ниже блока );
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
if n=2 then //Исполняем второй пункт меню
    begin
    assign(c,'vvod.txt');
    reset(c);
    assign(f,'rezult.txt');
    rewrite(f);
     if eof(c) then writeln('файл пуст')
     else
       begin
         while not eof(c) do
            begin
            read(c, chislo);
            ClrScr;
            writeln('                 Для числа: ',chislo);//Счетчик числа из файла
            write('Из какой Системы Счисления перевести (2,8,10,16): ');
            readln(cs);//Вводим из какой системы надо переводить
            write('В какую Систему Счисления перевести (2,8,10,16): ');
            readln(cs2);//Вводим в какую систему будет сделан перевод
            Writeln('');
            writeln(chislo, '(',cs,') = ', From_10(To_10(chislo, cs), cs2),'(',cs2,')');//Пишем результат в программе
            writeln(f,chislo, '(',cs,') = ', From_10(To_10(chislo, cs), cs2),'(',cs2,')');//Записываем результат в файл
            Writeln('');
            writeln('Если вам надо записать результат, то запишите его.');
            Writeln('');//Делаем интерфейс немного понятнее.
            writeln('Чтобы продолжить, введите любое число и нажмите Enter');
            Writeln('');
            Readln(z);//Чтобы результат не пропадал сразу, вводим команду "Подтверждение"
            end;
        close(f);//Закрываем и автоматически сохраняем файл
        close(c);
       end;
    end
 else
    Writeln('              Всего доброго!');
Ругается на



Сам код:

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
Uses
CRT;
const simvol : string[16] = '0123456789ABCDEF';
var
 
cs2, cs, n, i: integer; // числа: систем счисления, количества повторений
 
chislo, z: string; // исходное число, для перевода и команда "Подтверждение"
 
f, c : textfile;
 
type TType = integer;
     TMas  = array of integer;
 
 
// перевод десятичного числа в любую СС
 
function From_10(n, r: longint): string;
var ss: String;
begin
ss := '';
repeat
ss := simvol[(n mod r) + 1] + ss;
n := n div r;
until n = 0;
From_10 := ss;
end;
 
 
// перевод числа из любой СС в десятичное
 
function To_10(n: string; r: longint): longint;
var m, i: longint;
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], simvol) - 1;
To_10 := m;
end;
 
 
 
begin //вызываем меню
  Writeln('         Добро пожаловать в конвертор Систем Счисления!');
  Writeln('Меню:');
  Writeln('1) Ввести числа для перевода в ручную:');
  Writeln('2) Ввести числа для перевода из файла:');
  Writeln('');
  Writeln('Введите другое число, чтобы закрыть программу');
  Writeln('');
  Write('Выберите пункт: ');//выбираем пункт меню
  Read(n);
  ClrScr;
if n=1 then //Исполняем первый пункт меню
begin
    assign(f,'rezult.txt');//привязываем f к файлу для записи
    rewrite(f); //Открываем файл для записи, куда будут помещены результаты
  writeln('Введите сколько чисел надо перевести: ');
  readln(n);//Вводим количество чисел, которые мы будем вводить для перевода
    for i:=1 to n do//Начинаем цикл
  begin
    ClrScr;
    writeln('                  ',i,' из ',n,'  ');//Счетчик вводимых чисел
    Writeln('');
    write('Введите число, которое будем переводить: ');
    readln(chislo);//вводим число
    write('Из какой Системы Счисления перевести (2,8,10,16): ');
    readln(cs);//Вводим из какой системы надо переводить
    write('В какую Систему Счисления перевести (2,8,10,16): ');
    readln(cs2);//Вводим в какую систему будет сделан перевод
    Writeln('');
    writeln(chislo, '(',cs,') = ', From_10(To_10(chislo, cs), cs2),'(',cs2,')');//Пишем результат в программе
    writeln(f,chislo, '(',cs,') = ', From_10(To_10(chislo, cs), cs2),'(',cs2,')');//Записываем результат в файл
    Writeln('');
    writeln('Если вам надо записать результат, то запишите его.');
    Writeln('');//Делаем интерфейс немного понятнее.
    writeln('Чтобы продолжить, введите любое число и нажмите Enter');
    Writeln('');
    Readln(z);//Чтобы результат не пропадал сразу, вводим команду "Подтверждение"
  end;
     close(f);//Закрываем и автоматически сохраняем файл
end;
if n=2 then //Исполняем второй пункт меню
    begin
    assign(c,'vvod.txt');
    reset(c);
    assign(f,'rezult.txt');
    rewrite(f);
     if eof(c) then writeln('файл пуст')
     else
       begin
         while not eof(c) do
            begin
            read(c, chislo);
            ClrScr;
            writeln('                 Для числа: ',chislo);//Счетчик числа из файла
            write('Из какой Системы Счисления перевести (2,8,10,16): ');
            readln(cs);//Вводим из какой системы надо переводить
            write('В какую Систему Счисления перевести (2,8,10,16): ');
            readln(cs2);//Вводим в какую систему будет сделан перевод
            Writeln('');
            writeln(chislo, '(',cs,') = ', From_10(To_10(chislo, cs), cs2),'(',cs2,')');//Пишем результат в программе
            writeln(f,chislo, '(',cs,') = ', From_10(To_10(chislo, cs), cs2),'(',cs2,')');//Записываем результат в файл
            Writeln('');
            writeln('Если вам надо записать результат, то запишите его.');
            Writeln('');//Делаем интерфейс немного понятнее.
            writeln('Чтобы продолжить, введите любое число и нажмите Enter');
            Writeln('');
            Readln(z);//Чтобы результат не пропадал сразу, вводим команду "Подтверждение"
            end;
        close(f);//Закрываем и автоматически сохраняем файл
        close(c);
       end;
    end
 else
    Writeln('              Всего доброго!');
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2022, 09:36
Ответы с готовыми решениями:

Конвертер чисел
Задано натуральное число n. Необходимо перевести его в k-ичную систему счисления и найти разность между произведением и суммой его цифр в...

Конвертер чисел
Задано действительное число up в системе счисления с основанием p, и основание q (p, q = 2, 8, 10, 16). Требуется: 1. Перевести число...

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

10
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.02.2022, 10:30
Цитата Сообщение от GreatTD Посмотреть сообщение
read(c, chislo);
Точка останова и смотреть, что там будет считано
0
0 / 0 / 0
Регистрация: 11.02.2022
Сообщений: 6
15.02.2022, 11:41  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
Точка останова и смотреть, что там будет считано
Считывает "0", поэтому и ошибка выходит.
Но я не могу понять, почему из файла считывается 0 ?

В файле записаны в столб числа:
100
200
300
400
500
Название: Снимок.JPG
Просмотров: 40

Размер: 16.2 Кб

По логике вещей, при повторном прочтении файла он должен последовательно переходить на строку ниже.
т.е. две команды подряд(до закрытия файла)
Pascal
1
2
Read(c,chislo);
Read(c,chislo);
Должны считывать
100
200

А по факту считывается
100
0

Из-за чего и выдает ошибку, т.к. стоит выражение, которое удаляет нули перед числом, для корректной конвертации в СС).

while n[1] = '0' do delete(n, 1, 1); //убираем нули спереди

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
// перевод числа из любой СС в десятичное
 
function To_10(n: string; r: longint): longint;
var
  m, i: longint;
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], simvol) - 1;
  To_10 := m;
end;
Если убрать эту команду, то компелируется вечный "0", т.е. считывается только 0.
Но почему так происходит? Почему файл "не читается"?
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.02.2022, 11:56
А что?
0 нельзя вводить?
Ну, так проверку!

И ещё:
Цитата Сообщение от GreatTD Посмотреть сообщение
Должны считывать
100
200
А по факту считывается
100
0
С чего это?

Должно считываться пустое значение!
В 97 строке что выводится?
0
0 / 0 / 0
Регистрация: 11.02.2022
Сообщений: 6
15.02.2022, 12:04  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
А что?
0 нельзя вводить?
Ну, так проверку!
Удалил выражение, и в результате бесконечная компиляция.

И ещё:
С чего это?

Должно считываться пустое значение!
В 97 строке что выводится?
Всё верно, считывается не 0, а пустое значние.

Но почему так?

Ведь


0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.02.2022, 12:07
На скриншоте что считывают из файла?
Там файл совершенно другого типа

А вам нужно в букваре читать про работу с текстовыми файлами.
1
0 / 0 / 0
Регистрация: 11.02.2022
Сообщений: 6
15.02.2022, 12:08  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
А что?
0 нельзя вводить?
Ну, так проверку!


Пустое выражение приравнено к 0.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.02.2022, 12:12
Это было сказано вот на такую [censored]:
Цитата Сообщение от GreatTD Посмотреть сообщение
Если убрать эту команду, то компелируется вечный "0", т.е. считывается только 0.
И вот на это:
Цитата Сообщение от GreatTD Посмотреть сообщение
Считывает "0", поэтому и ошибка выходит.
0
0 / 0 / 0
Регистрация: 11.02.2022
Сообщений: 6
15.02.2022, 12:15  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
На скриншоте что считывают из файла?
Там файл совершенно другого типа

А вам нужно в букваре читать про работу с текстовыми файлами.
Спасибо за помощь
Всё верно, использовался текстовый файл и в нем чтение данных было некорректным из-за неверный команды "read", в то время, как надо было использовать команду "readln", т.е. не происходил переход к следующей строке файла, а читалось продолжение текущей строки.

"Read" читала файл таким образом

100 --->

"ReadLn" читал файл уже нужным мне.

100
|
V
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.02.2022, 12:18
А кто-то божился, что
Цитата Сообщение от GreatTD Посмотреть сообщение
Считывает "0", поэтому и ошибка выходит.
Хотя постом выше я сказал, что смотреть в отладчике!
0
0 / 0 / 0
Регистрация: 11.02.2022
Сообщений: 6
15.02.2022, 12:32  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
А кто-то божился, что

Хотя постом выше я сказал, что смотреть в отладчике!
Увы, не понял изначально разницы между "0" и "Пустота".

Отладчик отправлял именно к строке "удаления 0 перед числом", что и наткнуло на мысль.

P.S. Это и есть часть работы программиста? Поиск вот таких курьезов и ошибок? 0_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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Uses
  CRT;
 
const
  simvol: string[16] = '0123456789ABCDEF';
 
var
  
  cs2, cs, n, i, x: integer; // числа: систем счисления, количества повторений
  
  chislo, z: string; // исходное число, для перевода и команда "Подтверждение"
  
  f, c: textfile;
 
// перевод десятичного числа в любую СС
 
function From_10(n, r: longint): string;
var
  ss: String;
begin
  ss := '';
  repeat
    ss := simvol[(n mod r) + 1] + ss;
    n := n div r;
  until n = 0;
  From_10 := ss;
end;
 
 
// перевод числа из любой СС в десятичное
 
function To_10(n: string; r: longint): longint;
var
  m, i: longint;
begin
  m := 0;
 
  for i := 1 to length(n) do
    m := m * r + pos(n[i], simvol) - 1;
  To_10 := m;
end;
 
 
 
begin //вызываем меню
  Writeln('         Добро пожаловать в конвертор Систем Счисления!');
  Writeln('Меню:');
  Writeln('1) Ввести числа для перевода в ручную:');
  Writeln('2) Ввести числа для перевода из файла:');
  Writeln('');
  Writeln('Введите другое число, чтобы закрыть программу');
  Writeln('');
  Write('Выберите пункт: ');//выбираем пункт меню
  Read(x);
  ClrScr;
  if x = 1 then //Исполняем первый пункт меню
  begin
    assign(f, 'rezult.txt');//привязываем f к файлу для записи
    rewrite(f); //Открываем файл для записи, куда будут помещены результаты
    writeln('Введите сколько чисел надо перевести: ');
    readln(n);//Вводим количество чисел, которые мы будем вводить для перевода
    for i := 1 to n do//Начинаем цикл
    begin
      ClrScr;
      writeln('                  ', i, ' из ', n, '  ');//Счетчик вводимых чисел
      Writeln('');
      write('Введите число, которое будем переводить: ');
      readln(chislo);//вводим число
      write('Из какой Системы Счисления перевести (2,8,10,16): ');
      readln(cs);//Вводим из какой системы надо переводить
      write('В какую Систему Счисления перевести (2,8,10,16): ');
      readln(cs2);//Вводим в какую систему будет сделан перевод
      Writeln('');
      writeln(chislo, '(', cs, ') = ', From_10(To_10(chislo, cs), cs2), '(', cs2, ')');//Пишем результат в программе
      writeln(f, chislo, '(', cs, ') = ', From_10(To_10(chislo, cs), cs2), '(', cs2, ')');//Записываем результат в файл
      Writeln('');
      writeln('Если вам надо записать результат, то запишите его.');
      Writeln('');//Делаем интерфейс немного понятнее.
      writeln('Чтобы продолжить, введите любое число и нажмите Enter');
      Writeln('');
      Readln(z);//Чтобы результат не пропадал сразу, вводим команду "Подтверждение"
    end;
    close(f);//Закрываем и автоматически сохраняем файл
  end;
  if x = 2 then //Исполняем второй пункт меню
  begin
    assign(c, 'vvod.txt');
    reset(c);
    assign(f, 'rezult.txt');
    rewrite(f);
    if eof(c) then writeln('файл пуст')
    else
      begin
      while not eof(c) do
      begin
        ClrScr;
        readln(c, chislo);
        writeln('                 Для числа: ', chislo);//Счетчик числа из файла
        write('Из какой Системы Счисления перевести (2,8,10,16): ');
        readln(cs);//Вводим из какой системы надо переводить
        write('В какую Систему Счисления перевести (2,8,10,16): ');
        readln(cs2);//Вводим в какую систему будет сделан перевод
        Writeln('');
        writeln(chislo, '(', cs, ') = ', From_10(To_10(chislo, cs), cs2), '(', cs2, ')');//Пишем результат в программе
        writeln(f, chislo, '(', cs, ') = ', From_10(To_10(chislo, cs), cs2), '(', cs2, ')');//Записываем результат в файл
        Writeln('');
        writeln('Если вам надо записать результат, то запишите его.');
        Writeln('');//Делаем интерфейс немного понятнее.
        writeln('Чтобы продолжить, введите любое число и нажмите Enter');
        Writeln('');
        Readln(z);//Чтобы результат не пропадал сразу, вводим команду "Подтверждение"
      end;
      close(f);//Закрываем и автоматически сохраняем файл
      close(c);//Закрываем и автоматически сохраняем файл
      Writeln('  Результаты перевода записаны в rezult.txt');
      Writeln('              Всего доброго!');
    end;
  end
  else
    Writeln('              Всего доброго!');
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2022, 12:32
Помогаю со студенческими работами здесь

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

Конвертер чисел из десятичной системы в двоичную
Как мне конвертер с десятковых чисел в двоичные 2 8 10 16. 2 месяв больнице лежал программу пропустил, а сделать надо кто может помочь...

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

Нужна функция, конвертер римских чисел в числа
Не подскажете, где бы такую найти?

Написать программу конвертер чисел из одной системы исчесления в другую
Использование библиотеки ввода-вывода языка С++ 17. Написать программу конвертор чисел из одной системы исчесления в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru