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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2008, 13:42   #1
Taisja
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 25
Печаль Небольшие проблемы с модулем, помогите

Задачку я почти решила, вот только не знаю как записать операции сложения, вычитания, умножения и деления в шестнадцатеричной системе счисления.
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над натуральными числами в шестнадцатеричной системе счисления:
1) сложение;
2) вычитание;
3) умножение;
4) деление;
5) перевод из двоичной системы счисления в шестнадцатеричную;
6) перевод из шестнадцатеричной системы счисления в десятичную;
7) функция проверки правильности записи числа в шестнадцатеричной системе счисления;
8) функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).
Используя этот модуль, решить задачи:
1. Возвести число в степень (основание и показатель степени записаны в шестнадцатеричной системе счисления). Ответ выдать в шестнадцатеричной и десятичной системах счисления.

Код:
unit Unit2;

interface
procedure summa(d1,d2: integer; var d: integer);
procedure razn(d1,d2: integer;var d: integer);
procedure proizv(d1,d2: integer; var d: integer);
procedure chastn(d1,d2: integer;var d: real);
procedure izdvvdes(d1: string; var d: integer);
procedure izshvdes(d1:string;var d: integer);
function proverka(d1: string): string;
function operazii(d1,d2:integer):string;

implementation
 procedure summa(d1,d2: integer; var d: integer);
begin
d:=d1+d2;
end;
procedure razn(d1,d2: integer;var d: integer);
begin
d:=d1-d2;
end;
procedure proizv(d1,d2: integer; var d: integer);
begin
d:=d1*d2;
end;
procedure chastn(d1,d2: integer;var d: real);
begin
d:=d1/d2;
end;
procedure izdvvdes(d1: string; var d: integer);
var i,k,g: integer;
f: char;
begin
   i:=length(d1);
   g:=0;
   d:=0;
   while i>=1 do
   begin
      f:=d1[i];
      case f of
      '0': k:=0;
      '1': k:=1;
      end;
      d:=d+round(k*exp(g*ln(10)));
      g:=g+1;
      i:=i-1;
   end;
end;
procedure izshvdes(d1: string;var d: integer);
var i,k,g: integer;
f: char;
begin
   i:=length(d1);
   g:=0;
   d:=0;
   while i>=1 do
   begin
      f:=d1[i];
      case f of
      '0': k:=0;
      '1': k:=1;
      '2': k:=2;
      '3': k:=3;
      '4': k:=4;
      '5': k:=5;
      '6': k:=6;
      '7': k:=7;
      '8': k:=8;
      '9': k:=9;
      'a': k:=10;
      'b': k:=11;
      'c': k:=12;
      'd': k:=13;
      'e': k:=14;
      'f': k:=15;
      end;
      d:=d+round(k*exp(g*ln(16)));
      g:=g+1;
      i:=i-1;
   end;
end;
function proverka(d1: string): string;
var i,p: integer;
begin
  i:=1;
  p:=0;
  while i<=length(d1) do
  begin
  if (d1[i] in ['1'..'9'])or(d1[i] in ['a','b','c','d','e','f']) then
  else p:=p+1;
i:=i+1;
  end;
  if p>0 then proverka:='неверно'
  else proverka:='верно';
end;
function operazii(d1,d2:integer):string;
begin
if d1>d2 then operazii:='>';
if d1<d2 then operazii:='<';
if d1=d2 then operazii:='=';
end;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 27.10.2011 в 16:06.
Taisja вне форума Ответить с цитированием
Старый 01.06.2008, 15:56   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
вот только не знаю как записать операции сложения, вычитания, умножения и деления в шестнадцатеричной системе счисления
Думаю просто.
Переведи 16-ричое число в 10-чное и работай. потом обратно.

Код:
Const
HEX:ARRAY['A'..'F'] OF INTEGER=(10,11,12,13,14,15);

function HexToInt(HexValue:String):Integer;
var
Int,i:integer;
begin
Result:=-1;
Int:=0;
FOR i:=1 TO Length(HexValue) DO
 IF HexValue[i] < 'A' THEN
  begin
   Int:=Int * 16 + ORD(HexValue[i]) - 48;
   Result:=int;
  end
 ELSE
  begin
   Int:=Int * 16 + HEX[HexValue[i]];
   Result:=int;
  end;
end;
inttohex - 10="А"
inttostr - это из числа в строку
strtoint - это из строки в число
hextoint('A'); - "А"=10

Когда будешь делить используй div - деление без остатка, mod - остаток от деления.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 02.06.2008, 21:32   #3
Taisja
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 25
По умолчанию

Спасибо за совет. Думаю сейчас все получится.
Taisja вне форума Ответить с цитированием
Старый 27.10.2011, 14:37   #4
RossO1990
Новичок
Джуниор
 
Регистрация: 27.10.2011
Сообщений: 1
По умолчанию

Помогите пожалуйста!!!!!
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над натуральными числами в двоичной системе счисления:
• перевод из десятичной системы счисления в двоичную;
• перевод из двоичной системы счисления в десятичную;
• сложение;
• вычитание;
• умножение;
• целочисленное деление;
RossO1990 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с модулем DCU grenles Общие вопросы Delphi 4 12.08.2008 13:47
Посоветуйте, как решить 2 небольшие задачи AleksIvanovich Помощь студентам 3 17.07.2008 15:55
Проблемы с системой!!! ПОМОГИТЕ!! Илюха Свободное общение 6 14.05.2008 18:36
люди помогите) проблема с модулем osvoboditeWilly Паскаль, Turbo Pascal, PascalABC.NET 1 28.04.2008 16:23