Не работает программа перевода в различные системы счисления - Pascal

Узнай цену своей работы

Формулировка задачи:

Добрый день, не получается программа. Заранее спасибо. Извиняюсь за такой ввод программы, я новичок на форуме и не совсем освоилась. Исходный файл содержит числа в десятичной системе счисления, отделенные друг от друга запятыми. Составить программу, которая для каждого такого числа из заданного диапазона после знака равенства указывает его значение в троичной, пятеричной или восьмеричной системе счисления по выбору пользователя, например: 00101111 = 305367, 0111 = 157, 10000 = 23420, и т.д. (Фотографии текста заменены текстом)
Листинг программы
  1. program kursach;
  2. const
  3. b=10;
  4. var
  5. p,p2:string;
  6. st:char;
  7. s,n,i,n0,n2,c:integer;
  8. f1,f2:text;
  9. a:array[1..b] of integer;
  10. procedure Vara;
  11. var i:integer;
  12. begin
  13. n0:=a[i];
  14. n:=n0;
  15. for i:=1 to b do
  16. begin
  17. if n<>0 then
  18. begin
  19. s:=n mod с;
  20. n:=n div c;
  21. end
  22. else s:=0;
  23. end;
  24. a[i]:=s;
  25. for i:=1 to b do readln(a[i],st);
  26. for i:=b downto 1 do
  27. write(f1,' ',а[і]);
  28. writeln;
  29. end;
  30. Begin
  31. p:='D:\file1.txt';
  32. p2:='D:\file2.txt';
  33. writeln ('B какую систему счисления переводить?');
  34. read(c);
  35. case c of
  36. 3:writeln('Перевод в троичную систему счисления');
  37. 5:writeln('Перевод в пятиричную систему счисления');
  38. 8:writeln('Перевод в восьмиричную систему счисления');
  39. end;
  40. if (c<>3)and(c<>5)and(c<>8) then
  41. begin
  42. writeln ('Перевод в '‚с‚'-ую систему счисления не возможен');
  43. Writeln ('Операция не осуществима');
  44. halt;
  45. end;
  46. assign (f1,p);
  47. assign (f2,p2);
  48. reset (f1);
  49. while not EOF(f1) do
  50. begin
  51. for i:= to b do
  52. read1n(f1,st);
  53. end;
  54. read1n(f1,s);
  55. сlose(f1);
  56. rewrite(f2);
  57. close(f2);
  58. end.

Решение задачи: «Не работает программа перевода в различные системы счисления»

textual
Листинг программы
  1. const
  2.     CHECK: string[10] = '0123456789';
  3. function StrToInt(const s: String): Integer;
  4. var
  5.     Result, code: Integer;
  6. begin
  7.     val(s, Result, code);
  8.     if (code <> 0)
  9.     then
  10.         Result := 0;
  11.     StrToInt := Result;
  12. end;
  13. function Convert(numb: Integer; const c: Byte): String;
  14. var
  15.     Result: String;
  16. begin
  17.     Result := '';
  18.     repeat
  19.         Result := CHECK[numb mod c + 1] + Result;
  20.         numb := numb div c;
  21.     until (numb = 0);
  22.     Convert := Result;
  23. end;
  24. function ShowMenu(): Byte;
  25. var
  26.     Result: Byte;
  27. begin
  28.     repeat
  29.         WriteLn('1. перевод в 3');
  30.         WriteLn('2. перевод в 5');
  31.         WriteLn('3. перевод в 8');
  32.         WriteLn('0. Выход');
  33.         ReadLn(Result);
  34.     until (Result in [0..3]);
  35.     ShowMenu := Result;
  36. end;
  37. var
  38.     f: File Of Char;
  39.     s: String;
  40.     temp: Byte;
  41.     a, b, numb: Integer;
  42.     c: Char;
  43. begin
  44.     Write('Input a='); ReadLn(a);
  45.     repeat
  46.         Write('Input b (>=', a, ')=');
  47.         ReadLn(b);
  48.     until (b >= a);
  49.     Assign(f, 'f.txt'); ReSet(f);
  50.     s := '';
  51.     while Not (EoF(f)) do
  52.     begin
  53.         Read(f, c);
  54.         if (c in ['0'..'9'])
  55.         then
  56.             s := s + c
  57.         else
  58.             if (c = ',')
  59.             then
  60.             begin
  61.                 numb := StrToInt(s);
  62.                 if ((numb >= a) And (numb <= b))
  63.                 then
  64.                 begin
  65.                     temp := ShowMenu();
  66.                     case temp of
  67.                         1: WriteLn(s, '=', Convert(numb, 3));
  68.                         2: WriteLn(s, '=', Convert(numb, 5));
  69.                         3: WriteLn(s, '=', Convert(numb, 8));
  70.                         4: Exit;
  71.                     end;
  72.                 end;
  73.                 s := '';
  74.             end
  75.             else
  76.             begin
  77.                 WriteLn('Ошибка!');
  78.                 s := '';
  79.             end;
  80.     end;
  81.     Close(f);
  82.     numb := StrToInt(s);
  83.     if ((numb >= a) And (numb <= b))
  84.     then
  85.     begin
  86.         temp := ShowMenu();
  87.         case temp of
  88.             1: WriteLn(s, '=', Convert(numb, 3));
  89.             2: WriteLn(s, '=', Convert(numb, 5));
  90.             3: WriteLn(s, '=', Convert(numb, 8));
  91.         end;
  92.     end;
  93. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы