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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2010, 21:07   #1
abelix
 
Регистрация: 18.03.2010
Сообщений: 5
По умолчанию перевод в другие системы исчисления программа есть

Добрый вечер программисты ,у меня есть один ,наверно сложный, вопрос,
проблема вот в чем когда я начал писать программу но я не задумывался о самом важном дума вставлю тип exsteded или как он там ну вообщим самый большой и оно значит выдаст мне ответ стопудов, а не ука не захотело оно по-моему ну вообщем мне нужно вписать число из 50 символов и перевести их в 2 ,3,4...16(-ную) систему исчисления ,так вот вторую часть условия я зделал а вот как мне реализовать ввод числа из 50 символов и в дальнешем его как небудь пощитать без понятия


а сама програмка вот она

Код:
uses crt;

type
mas=array[1..200]of byte;
mac=array[1..200]of char;

label 1,2;
VAR
K,I,J,N,C:BYTE;
A:LONGINT;
B1,b:mas;
h:mac;
BEGIN
clrscr;
writeln('vvedite cictemu');readln(c);
writeln('chislo :=>  ');
read(a);
repeat
inc(i);
b[i]:=a mod c;
a:=a div c;
until (a=1)  or (a=0);
{----------------------------------}
for J:=1 to I do
begin{1}
if (c>10) AND (c<=16) then     begin INC(k);
if b[J]=10 then h[J]:='a';
if b[J]=11 then h[J]:='b';
if b[J]=12 then h[J]:='c';
if b[J]=13 then h[J]:='d';
if b[J]=14 then h[J]:='e';
if b[J]=15 then h[J]:='f';
end
end;
{---------------------------------}
writeln('----');
if a=0 then
           begin
           for j:=i downto 1 do
           IF b[j]>9 then
            begin
            goto 1;
            write(b[j]);
            1: WRITE(H[J])
            end
           else begin write(b[j]); write(h[j]);end;
           end
else begin
     write(a);
     for j:=i downto 1 do
     if b[j]>9 then
     begin
     goto 2;
     write(b[j]);
     2:WRITE(H[J])
     end
     else begin write(b[j]); write(h[j]);end;
     end;
writeln;
readln;readln;
END.

Последний раз редактировалось abelix; 18.03.2010 в 21:09.
abelix вне форума Ответить с цитированием
Старый 18.03.2010, 21:20   #2
abelix
 
Регистрация: 18.03.2010
Сообщений: 5
По умолчанию

ну у меня есть одно идея вот токо голова не варит как сделать (с математикой плохо)...
взять все число в тип string после это число как-то разбить на десятки ,сотни, единици попереводить каждый разряд а после сложить все ответы в одну кучу но с не в тупую а с умом ...))
abelix вне форума Ответить с цитированием
Старый 18.03.2010, 21:24   #3
abelix
 
Регистрация: 18.03.2010
Сообщений: 5
По умолчанию

если у кого в это сторону извилины движутся то помогите ,бо мои уже розплылись
abelix вне форума Ответить с цитированием
Старый 18.03.2010, 21:40   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

извините, разбираться в вашем коде нет сил.
но ввести число до 255 разрядов очень просто с помощью строки! Впрочем, я бы рекомендовал прямо со строкой и работать! но, если Вам удобнее работать с
type
mas=array[1..200]of byte;

то перегнать строку в массив очень просто.
например:
Код:
 WriteLn('Введите число (до 255 разрядов): ');
  Readln(s);
  for i:=1 to Length(s) do
     b[i] := ord(s[i])-ord('0');

{если же в тип maс=array[1..200] of char;
то ещё проще:}
  for i:=1 to Length(s) do
     h[i] := s[i];
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2010, 21:45   #5
abelix
 
Регистрация: 18.03.2010
Сообщений: 5
По умолчанию

да проблема не вводе а переводе ,я не могу делить столь большое число или допустим как представить 1*10^50 для понимания машини чтоби она могла выполнить простую опереации div & mod
abelix вне форума Ответить с цитированием
Старый 18.03.2010, 21:51   #6
Deamonig
Форумчанин
 
Аватар для Deamonig
 
Регистрация: 19.09.2009
Сообщений: 166
По умолчанию

Не знаю поможет или нет, но вот посмотри как реализован перевод чисел из одной системы счисления в другую. Делал не я, скачивал не помню от куда.
Вложения
Тип файла: rar converter.rar (166.9 Кб, 13 просмотров)
Deamonig вне форума Ответить с цитированием
Старый 18.03.2010, 21:54   #7
abelix
 
Регистрация: 18.03.2010
Сообщений: 5
По умолчанию

ребята я умею переводить числа из одной в другую но я не могу вписать число из 50 символов,и данный конвектор тоже сломан

Последний раз редактировалось abelix; 18.03.2010 в 22:02.
abelix вне форума Ответить с цитированием
Старый 19.03.2010, 08:52   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

Цитата:
я не могу делить столь большое число или допустим как представить 1*10^50 для понимания машини чтоби она могла выполнить простую опереации div & mod
если компьютер не может то его надо научить

написать простую функцию для вычисления остатка и частного путем деления многозначного( для программы) числа x на однозначное (для программы) osh.

function CalcDivMod(x: atring; osh: integer): record div: string; mod: integer; end;

или две
function CalcDiv(x: atring; osh: integer): string;
function CalcMod(x: string; osh: integer): integer;

Код:
function CalcDiv(x: atring; osh: integer): string;
begin
  for j:=1 to length(x) do
  begin
    r:=r*10 +strtoint(x[j]);
    d:=r div osh;
    r:=r mod osh;
    result:=result + inttostr(d);
  end;
end;
писал прямо здесь могут быть ошибки но смысл думаю ясен
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из одной системы исчисления в другую. Svop Помощь студентам 7 20.12.2010 19:00
Системы исчисления С++ lamak Помощь студентам 0 09.11.2009 12:02
Перевод в различные системы исчисления ~AngelOK~ Компоненты Delphi 1 11.10.2009 16:57
перевод системы исчисления (16 ->10) adwaer Помощь студентам 5 15.06.2008 20:29