Не работает программа перевода в различные системы счисления - 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.

Объяснение кода листинга программы

  1. CHECK = '0123456789' (константа для проверки корректности вводимого числа)
  2. StrToInt - функция, преобразующая строку в целое число. Принимает строку s и возвращает целое число Result. Если преобразование не удалось, Result присваивается 0.
  3. Convert - функция, преобразующая число из десятичной системы счисления в c-ричную. Принимает число numb и основание системы счисления c, и возвращает соответствующее число в виде строки Result.
  4. ShowMenu - функция, выводящая меню и возвращающая выбранный пункт меню Result.
  5. f - переменная файла символов.
  6. s - строка для хранения числа из файла.
  7. temp - временная переменная для хранения выбранного значения.
  8. a - нижняя граница диапазона чисел.
  9. b - верхняя граница диапазона чисел.
  10. numb - числовое значение s после преобразования из строки.
  11. c - символьная переменная из файла. Код выполняет следующие действия:
    • Открывает файл для чтения.
    • Считывает числа из файла и обрабатывает их с помощью функции StrToInt.
    • Если число входит в заданный диапазон, выводит меню с помощью функции ShowMenu и выполняет выбранное действие:
    • Переводит число в троичную, пятеричную или восьмеричную систему счисления с помощью функции Convert.
    • Закрывает файл. Также присутствуют проверки и сообщения об ошибках в случае, если число в файле не входит в указанный диапазон или ошибка ввода.

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы