powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка в программа перевода систем счисления
8 сообщений из 8, страница 1 из 1
Ошибка в программа перевода систем счисления
    #39534331
Tasia17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написала программу. Скажите пожалуйста, что не так, почему программа не работает?

В 49 строке выдает вот это:

Program1.pas(49) : Ошибка времени выполнения: Input string was not in a correct format.

49 строка вот эта
readln (F1, res.num, res.cс1, res.cс2);


Код: 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.
program perevodcc; 
const A:string[16]='0123456789ABCDEF'; 
type results = record
cс1,cс2:longint;
num, N:string
end;
var res: results;
var N: string;
var num: string;
var cс1,cс2:longint;
var i: integer; 
F1: text;

function inten(K:string;s:longint):longint; 
var i, sum1: longint; 
var sum:real; 
const A:string[16]='0123456789ABCDEF'; 
begin 
sum:=0; 
for i:=1 to length(K) do 
sum:= sum +(pos(K[i],A)-1) * power(s, (length(K)-i));
sum1:=trunc(sum); 
inten:=sum1; 
end; 


function outten(K,s:longint):string; 
var sum:string; 
const A:string[16]='0123456789ABCDEF'; 
begin 
sum:=''; 
while K<>0 do 
begin
sum:=A[(K mod s)+1]+sum; 
K:=K div s 
end; 
outten:=sum 
end; 



begin 
assign (F1, 'C:\PABCWork.NET\perevodcc.txt');
reset (F1);
readln (F1);
readln (F1);
while not EOF(F1) do
begin
readln (F1, res.num, res.cс1, res.cс2);
end;
rewrite (F1);
N:=outten(inten(num,cс1),cс2);
writeln (F1, res.N);
begin 
for i := 1 to Length(num) do 
begin 
if pos(num[i],A)=0 then begin 
N:= 'Число неверно';
writeln (F1, res.N);
end; 
end; 
end; 
begin 
if (( cс1> 16) or (cс1 < 2)) then begin
N:= 'Система счисления неверная'; 
writeln (F1, res.N);
end;
end; 
begin 
if (( cс2> 16) or (cс2 < 2)) then begin 
N:= 'Система счисления неверная';
writeln (F1, res.N);
end; 
end; 
close (F1)

end.
...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534338
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tasia17,

Покажите файл, который Вы пытаетесь читать
...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534341
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tasia17
Код: pascal
1.
readln (F1, res.num, res.cс1, res.cс2);


У тебя 1-й параметр в readln - строка. Поэтому в нее считывается вся строка из файла. Числам не остается данных и наверно это и не нравится.
Сделай 3 строки в файле и 3 readln, либо вначале числа считывай, а затем - строку, последним параметром, тогда можно будет один readln и в файле через пробел два числа и затем строку. Хотя тоже вряд ли будет хорошо - последняя строка с пробелом вначале будет.
...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534345
Tasia17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,


Перевод систем счисления Входное число Входная система счисления Конечная система счисления Результат A03 16 2 EOLN 201 3 7 EOLN 542 5 10 EOLN 39 11 20 EOLN 128 10 16 EOLN -12 2 10 EOLN 271 0 4 EOF
...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534350
Tasia17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, к сожалению от перемены параметров ничего не изменилось.
От них ничего не зависит.
...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534364
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наваял пример как конвертировать в разные системы исчисления


Код: 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.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

// Функция работает с 0x и $ а так же без. 
function StrGetBase(str: string; base: Integer = 16): Integer;
var
  p: PChar;
  s: Word;
begin
  Result := 0;
  p := Pointer(str);
  while p^ <> #0 do
  begin
    s := ord(p^) or $20;
    case chr(s) of
      '0' .. '9':
        Result := (Result * base) + (s mod 16);
      'a' .. 'f':
        Result := (Result * base) + (s mod 29);
    else
      if ((p - 1)^ <> '0') and (p^ <> 'x') and (p^ <> '$') then
        exit(0); // Неверная система
    end;
    inc(p);
  end;
end;

//  Конвертируем в нужную систему
function ToBase(v, base: Integer): String;
const
  BaseChars: PWideChar = '0123456789abcdefghijklmnopqrstuvwxyz';
begin
  Result := '';
  repeat
    Result := BaseChars[v MOD base] + Result;
    v := v Div base;
  until v = 0;
end;

var
  Res1: Integer;
  Res2: string;

begin
  try
    Res1 := StrGetBase('a6543', 16); // Число для преобразования
    Res2 := ToBase(Res1, 2); // Основание системы счисления числа

    Writeln(Res1, #10, Res2);
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.



На a6543 выдаст в 16 системе
681283
10100110010101000011
...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534366
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, думаю лучше просто игнорировать символы, при конвертировании в нужную систему

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// Функция работает с 0x и $ а так же без.
function StrGetBase(str: string; base: Integer = 16): Integer;
var
  p: PChar;
  s: Word;
begin
  Result := 0;
  p := Pointer(str);
  while p^ <> #0 do
  begin
    s := ord(p^) or $20;
    Result := (Result * base);
    case chr(s) of
      '0' .. '9':
        inc(Result, s mod 16);
      'a' .. 'f':
        inc(Result, s mod 29);
    end;
    inc(p);
  end;
end;

...
Рейтинг: 0 / 0
Ошибка в программа перевода систем счисления
    #39534455
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tasia17,

Тогда так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var
  a: Char;
  ....
begin
  .........
  res.num := '';
  read(F1, a);
  while a in ['0'..'9', 'A'..'Z', 'a'..'z'] do begin
    res.num := res.num + a;
    read(F1, a);
  end;
  readln (F1, res.cс1, res.cс2);
  .........
end;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка в программа перевода систем счисления
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]