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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2012, 19:25   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию как сделать из числа типа real число типа integer?

нужна программа перевода из любой системы исчисления в любую
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,x,p,z,q,j:integer; s,k:Real; mas:array[1..40] of Integer;
begin
x:=StrToInt(Edit1.Text);{число и}
p:=StrToInt(Edit2.Text);{его основание}
i:=0;
 while (x<>0) do
 begin
   s:=s+(x mod 10)*exp(ln(p)*i);
   inc(i);
   x:=x div 10;
 end; {перевели в десятичную}
z:=StrToInt(Edit3.Text); {основание системы, в которую нужно перевести дальше из полученного десятичного числа}
while s<>0 do
  begin
   s:=s div z;{делим число на основание желаемой системы}
   k:=s mod z;{получаем остаток от числа и}
   mas[q]:=k;{записываем его в массив}
   inc(q);
  end;
for j:=1 to q do{из остатков получаем число и выводим все его составные цифры по порядку}
 begin
  Edit4.Text:=FloatToStr(mas[j]);
 end;
end;
end.
там в операциях s:=s div z; и k:=s mod z; выдает ошибку "operator not applicable to this operand type" и это неудивительно, ведь там получается нецелочисленное число, а операции div и mod для целочисленных. что можно сделать в такой ситуации?
gylayko вне форума Ответить с цитированием
Старый 14.09.2012, 20:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
что можно сделать в такой ситуации?
отказаться от exp и ln
Код:
var
  s: integer;
  pp: integer;

 pp:=p;
 while (x<>0) do
 begin
   s:=s+(x mod 10)*p;
   pp:=pp*p;
   x:=x div 10;
 end; {перевели в десятичную}
и обратите внимание на предупрежения (когда дойдет до них дело)
Цитата:
[Warning] ...: Variable 's' might not have been initialized
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.09.2012 в 20:18.
evg_m вне форума Ответить с цитированием
Старый 14.09.2012, 20:29   #3
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
отказаться от exp и ln
Код:
var
  s: integer;
  pp: integer;

 pp:=p;
 while (x<>0) do
 begin
   s:=s+(x mod 10)*p;
   pp:=pp*p;
   x:=x div 10;
 end; {перевели в десятичную}
и обратите внимание на предупрежения (когда дойдет до них дело)
ухты! а теперь вылезла такая ошибка ш.jpg
ошибка вот в этом
Код:
Edit4.Text:=FloatToStr(mas[j]);
что же делать то?

Последний раз редактировалось gylayko; 14.09.2012 в 20:46.
gylayko вне форума Ответить с цитированием
Старый 14.09.2012, 21:49   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А у Вас массив mas какого типа? Может, ему этот Float поперек скобок встает?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.09.2012, 09:33   #5
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
А у Вас массив mas какого типа? Может, ему этот Float поперек скобок встает?
может быть! попробовал поменять типы, а результат тот же!
gylayko вне форума Ответить с цитированием
Старый 15.09.2012, 10:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы делаете большую-пребольшую ошибку!
Любая переменная, перед тем, как будет прочитана, должна быть записана.
Поэтому нужно ОБЯЗАТЕЛЬНО ИНИЦИЛИЗИРОВАТЬ используемые переменные.

вот тут:
Цитата:
Код:
   mas[q]:=k;{записываем его в массив}
   inc(q);
перед началом цикло должно быть обязательно q:=1; :
Код:
q := 1;
while s<>0 do
  begin
   s:=s div z;{делим число на основание желаемой системы}
   k:=s mod z;{получаем остаток от числа и}
   mas[q]:=k;{записываем его в массив}
   inc(q);
  end;

p.s. остальной код я не смотрел.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.09.2012, 11:41   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Вы делаете большую-пребольшую ошибку!
Любая переменная, перед тем, как будет прочитана, должна быть записана.
Я не зря вам сказал
Цитата:
и обратите внимание на предупрежения (когда дойдет до них дело)
Цитата:
[Warning] ...: Variable 's' might not have been initialized
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организовать файл типа real сона Паскаль, Turbo Pascal, PascalABC.NET 2 08.07.2012 23:10
Как умножить переменную типа byte на integer или extended (Delphi 7) IronFire Помощь студентам 2 23.10.2010 18:04
как переменную типа TFont перевести в тип integer? делфи_6 Общие вопросы Delphi 8 26.05.2010 06:02
Запись числа типа инт в ячейку двумерного массива типа char AxenicX Помощь студентам 1 25.09.2009 00:35