Не работает программа перевода в различные системы счисления - Pascal
Формулировка задачи:
Добрый день, не получается программа. Заранее спасибо. Извиняюсь за такой ввод программы, я новичок на форуме и не совсем освоилась.
Исходный файл содержит числа в десятичной системе счисления, отделенные друг от друга запятыми. Составить программу, которая для каждого такого числа из заданного диапазона после знака равенства указывает его значение в троичной, пятеричной или восьмеричной системе счисления по выбору пользователя, например:
00101111 = 305367, 0111 = 157, 10000 = 23420, и т.д.
(Фотографии текста заменены текстом)
program kursach;
const
b=10;
var
p,p2:string;
st:char;
s,n,i,n0,n2,c:integer;
f1,f2:text;
a:array[1..b] of integer;
procedure Vara;
var i:integer;
begin
n0:=a[i];
n:=n0;
for i:=1 to b do
begin
if n<>0 then
begin
s:=n mod с;
n:=n div c;
end
else s:=0;
end;
a[i]:=s;
for i:=1 to b do readln(a[i],st);
for i:=b downto 1 do
write(f1,' ',а[і]);
writeln;
end;
Begin
p:='D:\file1.txt';
p2:='D:\file2.txt';
writeln ('B какую систему счисления переводить?');
read(c);
case c of
3:writeln('Перевод в троичную систему счисления');
5:writeln('Перевод в пятиричную систему счисления');
8:writeln('Перевод в восьмиричную систему счисления');
end;
if (c<>3)and(c<>5)and(c<>8) then
begin
writeln ('Перевод в '‚с‚'-ую систему счисления не возможен');
Writeln ('Операция не осуществима');
halt;
end;
assign (f1,p);
assign (f2,p2);
reset (f1);
while not EOF(f1) do
begin
for i:= to b do
read1n(f1,st);
end;
read1n(f1,s);
сlose(f1);
rewrite(f2);
close(f2);
end.Решение задачи: «Не работает программа перевода в различные системы счисления»
textual
Листинг программы
const
CHECK: string[10] = '0123456789';
function StrToInt(const s: String): Integer;
var
Result, code: Integer;
begin
val(s, Result, code);
if (code <> 0)
then
Result := 0;
StrToInt := Result;
end;
function Convert(numb: Integer; const c: Byte): String;
var
Result: String;
begin
Result := '';
repeat
Result := CHECK[numb mod c + 1] + Result;
numb := numb div c;
until (numb = 0);
Convert := Result;
end;
function ShowMenu(): Byte;
var
Result: Byte;
begin
repeat
WriteLn('1. перевод в 3');
WriteLn('2. перевод в 5');
WriteLn('3. перевод в 8');
WriteLn('0. Выход');
ReadLn(Result);
until (Result in [0..3]);
ShowMenu := Result;
end;
var
f: File Of Char;
s: String;
temp: Byte;
a, b, numb: Integer;
c: Char;
begin
Write('Input a='); ReadLn(a);
repeat
Write('Input b (>=', a, ')=');
ReadLn(b);
until (b >= a);
Assign(f, 'f.txt'); ReSet(f);
s := '';
while Not (EoF(f)) do
begin
Read(f, c);
if (c in ['0'..'9'])
then
s := s + c
else
if (c = ',')
then
begin
numb := StrToInt(s);
if ((numb >= a) And (numb <= b))
then
begin
temp := ShowMenu();
case temp of
1: WriteLn(s, '=', Convert(numb, 3));
2: WriteLn(s, '=', Convert(numb, 5));
3: WriteLn(s, '=', Convert(numb, 8));
4: Exit;
end;
end;
s := '';
end
else
begin
WriteLn('Ошибка!');
s := '';
end;
end;
Close(f);
numb := StrToInt(s);
if ((numb >= a) And (numb <= b))
then
begin
temp := ShowMenu();
case temp of
1: WriteLn(s, '=', Convert(numb, 3));
2: WriteLn(s, '=', Convert(numb, 5));
3: WriteLn(s, '=', Convert(numb, 8));
end;
end;
end.
Объяснение кода листинга программы
- CHECK = '0123456789' (константа для проверки корректности вводимого числа)
- StrToInt - функция, преобразующая строку в целое число. Принимает строку s и возвращает целое число Result. Если преобразование не удалось, Result присваивается 0.
- Convert - функция, преобразующая число из десятичной системы счисления в c-ричную. Принимает число numb и основание системы счисления c, и возвращает соответствующее число в виде строки Result.
- ShowMenu - функция, выводящая меню и возвращающая выбранный пункт меню Result.
- f - переменная файла символов.
- s - строка для хранения числа из файла.
- temp - временная переменная для хранения выбранного значения.
- a - нижняя граница диапазона чисел.
- b - верхняя граница диапазона чисел.
- numb - числовое значение s после преобразования из строки.
- c - символьная переменная из файла.
Код выполняет следующие действия:
- Открывает файл для чтения.
- Считывает числа из файла и обрабатывает их с помощью функции StrToInt.
- Если число входит в заданный диапазон, выводит меню с помощью функции ShowMenu и выполняет выбранное действие:
- Переводит число в троичную, пятеричную или восьмеричную систему счисления с помощью функции Convert.
- Закрывает файл. Также присутствуют проверки и сообщения об ошибках в случае, если число в файле не входит в указанный диапазон или ошибка ввода.