Имя: Пароль:
IT
 
перевод чисел в паскале
,
0 program345
 
16.09.14
15:26
доброго вечера!
задача перевести число из десятичной системы исчисления в любую.

вот мой вариант решения:

var
    a,b:integer;
    
    procedure q(a,b:integer);
      var
        c:integer;
        d,f:string;
      begin
        if a>0 then
          q(a div b,b);
          if a>0 then
            begin
              c:=a mod b
            end;
          case c of
            0..9:str(c,d);
            10:d:='A';
            11:d:='B';
            12:d:='C';
            13:d:='D';
            14:d:='E';
            15:d:='F';
            else writeln('введенное основание не поддерживается!');
          end;
          f:=f+d;
          write(f);
      end;
      
   begin
    writeln('введите число: ');
    readln(a);
    writeln('в какую систему переводим число: ');
    readln(b);
    q(a,b);
   end.
      

только вот незадача, прога выводит 0 вначале числа и даже if a>0 then не робит. как это можно исправить?
1 ObjectRelation Model
 
16.09.14
15:28
2 User_Agronom
 
16.09.14
15:29
Рекурсия...
Процедура...
Автор, подумай сам. На паскалевских оболочках пошаговый проход нормально организован.
3 program345
 
16.09.14
15:29
вот рабочий вариант, но без рекурсии:

//!

var
  a,b:integer;
  
  procedure q(a,b:integer);
    var
      c,f:integer;
      d,e:string;
    begin
      while a>0 do
        begin
          c:=a mod b;
          case c of
            0..9:str(c,d);
            10:d:='A';
            11:d:='B';
            12:d:='C';
            13:d:='D';
            14:d:='E';
            15:d:='F';
            else writeln('перевод в данную систему не поддерживается!!!');
          end;
          e:=e+d;
          a:=a div b;
        end;
          f:=length(e);
          
          while f>0 do
            begin
              write(e[f]);
              f:=f-1;
            end;
  end;
  
  begin
    writeln('введите число: ');
    readln(a);
    writeln('в какую систему переводим число: ');
    readln(b);
    q(a,b);
  end.
      
//!
4 User_Agronom
 
16.09.14
15:43
Код языка 1С:
Функция Перевод(аЧисло,аОснование)
    Цифери = "0123456789ABCDEF";
    Результат = "";
    Пока аЧисло>0 цикл
        Результат = ""+Сред(Цифери,аЧисло%аОснование+1,1)+Результат;
        аЧисло = Цел(аЧисло/аОснование);
    КонецЦикла;
    Возврат Результат
КонецФункции

На Паскаль переведи сам.
5 User_Agronom
 
16.09.14
15:46
+(4) В Паскале String можно рассматривать как Array of Char, т.е. один символ можно не вырезать, а получать его по номеру как элемент массива.
Учти это!
6 Крошка Ру
 
16.09.14
15:57
(0)>>перевести число из десятичной системы исчисления в любую
>>'введенное основание не поддерживается!'

Вижу противоречие!
7 User_Agronom
 
16.09.14
16:11
(6) Ты код ТС видишь? Что он в пример приводит.
Нет противоречий в (0)!
8 Torquader
 
17.09.14
23:04
На самом деле, нужно понимать, что внутри компьютера число хранится в двоичном виде, и перевод проводится только в момент вывода числа на экран.
Реально (10)->(Машинное представление)->(Любое основание)

Для вывода числа в системе с основанием N мы должны последовательно делить число на N, пока оно больше N, а остатки выводить как цифры числа, начиная с самой младшей.

Не забываем, что целое число может занимать M-байт в общем случае, поэтому, деление нужно проводить побайтово, пока весь массив байт, кроме последнего не станет равен нолю.
9 User_Agronom
 
17.09.14
23:54
(8) ...но и в бреду говорил только то, что всем известно:
   -- Волга впадает в Каспийское море... Лошади кушают овес и сено...

А.П. Чехов.

Удивил на форуме программистов формальным описанием перевода чисел из одной системы счисления в другую!
10 Жан Пердежон
 
18.09.14
17:48
помню в школе такие задачки были, классе в 8-9
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.