Не работает программа перевода в различные системы счисления - 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.
- Закрывает файл. Также присутствуют проверки и сообщения об ошибках в случае, если число в файле не входит в указанный диапазон или ошибка ввода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д