Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2020, 14:15   #1
NicoNi
Новичок
Джуниор
 
Регистрация: 02.04.2020
Сообщений: 1
По умолчанию Помогите задачей по программированию, срочно

Сама задача: Исходный файл содержит числа в шестнадцатеричной системе счисления, отделенные
друг от друга запятыми. Составить программу, которая для каждого такого числа из
заданного диапазона после знака равенства указывает его значение в восьмеричной системе
счисления, десятичной системе счисления или в дополнительном коде по выбору
пользователя, например:
00101111 = 33353, 0111 = 73, 10000 = 512, и т. д.

Не знаю, может где-то накосячил, но программа запускается максимально криво, так что хелп плиз

Код:
uses
  CRT;

const
  a: string[36] = '0123456789ABCDEFGHIJKLMNOPRSTUVWXYZ';

var
  n: real;
  rez, s, s2, s3, s4: string;
  t, cc, ind, cc2, k, l, t2, st: integer;
  data: file of integer;
  mat: array [1..100] of integer;

procedure Del(var ss: string);
var
  i: integer;
begin
  s2 := copy(ss, 1, pos('.', ss) - 1);
  delete(ss, 1, pos('.', ss));
  s3 := ss;
end;

function ToDec(ss2: string; cc: byte): integer;
var
  i, n, sum: integer;
begin
  sum := 0;
  n := length(ss2);
  for i := 1 to n do
  begin
    dec(n);
    sum := sum + round((pos(ss2[i], a) - 1) * exp(ln(cc) * n));
  end;
  ToDec := sum;
end;

function Cel(d: real; c: integer): string;
var
  s: string;
  n2: integer;
begin
  n2 := round(int(d));
  s := '';
  repeat
    s := ((a[n2 mod c + 1]) + s);
    n2 := n2 div c;
  until (n2 = 0);
end;

function Drob(d: real; t, c: integer): string;
var
  s: string;
  l2, k, n3: real;
  i, l: integer;
begin
  k := d - int(d);
  s := '';
  i := 0;
  if t <> 0 then
  begin
    repeat
      l2 := k * c;
      k := frac(12);
      s := s + a[round(int(12)) + 1];
      inc(i);
    until i = t;
  end
  else
      s := '0';
  Drob := s;
end;

function prov(c: integer; s: string): boolean;
var
  i, kol, j: integer;
begin
  kol := 0;
  for i := 1 to c do
  begin
    for j := 1 to length(s) do
      if s[j] = a[i] then 
        inc(kol);
  end;
  if kol = length(s) then
    prov := true
  else
        prov := false;
end;

function drob2(ss: string; c: integer): real;
var
  i: integer;
  sum: real;
begin
  for i := 1 to length(ss) do
    sum := sum + (pos(ss[i], a) - 1) * exp(ln(c) * -i);
  drob2 := sum;
end;

begin
  ClrScr;
  write('1');
  assign(data, 'data.txt');
  reset(data);
  while not eof(data) do st := st + 1;
  for var gj := 1 to st do
    read(data, mat[gj]);
  close(data);
  repeat
    cc2 := 16;
    write('Введите СС в которую хотите перевести: ');
    readln(cc);
  until (cc2 in [2..36]) and (cc in [2..36]);
  repeat
    for var gj := 1 to st do
    begin
      str(mat[gj], s);
      s4 := s;
      if pos(',', s) <> 0 then
        s[pos(',', s)] := ',';
      t2 := pos(',', s);
      val(s, n, l);
      Del(s);
      if not prov(cc2, s2) or not prov(cc2, s3) then
        write('Некорректное число. Повторите ');
    end;
  until prov(cc2, s2) and prov(cc2, s3);
  write('Введите точность: ');
  readln(t);
  if cc2 = 10 then
  begin
    if((n - round(int(n))) = 0) then
      rez := Cel(n, cc)
    else
            rez := Cel(n, cc) + ',' + Drob(n, t, cc);
  end
  else
      begin
    if t2 = 0 then
      rez := Cel(ToDec(s3, cc2), cc) + ',' + drob(drob2(s3, cc2), t, cc);
  end;
  write('Число ', s4, '_', cc2, 'в', cc, '-й систем счисления:=', rez);
  readkey
end.
NicoNi вне форума Ответить с цитированием
Старый 02.04.2020, 19:44   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Это у меня одного впечатление, что слизано из сети нечто вроде бы похожее, и "настрогайте из этого мне то, что надо" ? Речь о целых числах, каким боком тут drob, drob2 ? И при чём здесь точность? Целые числа всегда представлены точно. Не бывает "около 3", "где-то так: 5..7" И что значит: "из заданного диапазона" ? Кем он задан? И если число не влезает в него - что с ним делать? В карантин?
А после такого стилистического ... гм...
Код:
      if kol = length(s) then
    prov := true
  else
        prov := false;
читать дальше расхотелось . Обычно пишут
Код:
    prov := (kol = length(s)) ;

Последний раз редактировалось digitalis; 02.04.2020 в 19:55.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Привет всем.Помогите с задачей по программированию на языке C Fesha Помощь студентам 3 27.05.2018 20:21
Помогите с задачей срочно) Вова123ф Помощь студентам 3 01.02.2015 19:23