Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1.doc
Скачиваний:
7
Добавлен:
06.06.2015
Размер:
136.7 Кб
Скачать

1.2 Преобразование переменных типа clint в базовые типы

Преобразование CLINT-объекта в строку символов

Синтаксис: char * xclint2str_l (CLINT n_l, USHORT base, int base);

Вход: _ n l (преобразуемый CLlNT-объект)

Возврат:

base (основание численного представления искомой строки)

showbase (значение * 0: численное представление имеет префикс

«Ох» для base = 16 или «0B» для base = 2.

Значение = 0: префикса нет).

указатель на полученную строку символов, если все в порядке NULL - если 2 < base или base > 16

Преобразование CLINT-объекта в байтовый вектор

Синтаксис: UCHAR * clin(2byte_l (CLINT n_l, int *ton);

Вход: nj (преобразуемый CLINT-объект)

len (длина генерируемого байтового вектора)

Возврат:

указатель на полученный байтовый вектор NULL, если в len передан пустой указатель

1.3 Дополнительные операции с cLlNt-объектами

Копирование CLINT

Синтаксис: void cpy_l (CLINT des, CLINT src);

Вход: src (присваиваемое значение)

Выход: des (объект назначения)

Перестановка значений двух CLlNT-объектов

Синтаксис: void fswap_l (CLINT a, CLINT b);

Вход: a, b (переставляемые значения)

Выход: a, b

Число значащих двоичных разрядов CLINT-объекта

Синтаксис: unsigned int ld_l (CLINT a);

Вход: a (операнд)

Выход: Число значащих двоичных разрядов числа а

1.4Основные арифметические операции с большими числами типа clint

Функции сложения

Сложение

Синтаксис: int add_l (CLINT a, CLINT b, CLINT с);

Вход: a, b (слагаемые)

Выход: с (сумма)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_OFL в случае переполнения

Инкремент (увеличение CLINT-обьекта на 1)

Синтаксис: int inc_l (CLINT a);

Вход: а (слагаемое)

Выход: a (сумма)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_OFL в случае переполнения

Смешанное сложение переменных типа CLINT и USHORT

Синтаксис: int uadd_l (CLINT a, USHORT b, CLINT c);

Вход: a, b (слагаемые)

Выход: c (сумма)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_OFL в случае переполнения

Функции вычитания

Вычитание

Синтаксис int sub_l (CLINT a, CLINT b, CLINT с);

Вход: a (уменьшаемое),b (вычитаемое)

Выход: с (разность)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_UFL в случае потери значащих разрядов

Декремент (уменьшение CLINT-обьекта на 1)

Синтаксис: int dec_l (CLINT a);

Вход: а (уменьшаемое )

Выход: a (разность сумма)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_UFL в случае потри значащих разрядов

Вычитание числа типа USHORT из числа типа CLINT

Синтаксис: int usub_l (CLINT a, USHORT b, CLINT c);

Вход: a (уменьшаемое), b (вычитаемое)

Выход: c (разность)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_UFL в случае потери значащих разрядов

Функции умножения

Умножение

Синтаксис: int mul_l (CLINT a, CUNT b, CLINT c);

Вход: a, b (сомножители)

Выход: c(произведение)

Возврат: E_CLINT_OK, если все в порядке

E_CLlNT_OFL в случае переполнения

Возведение в квадрат

Синтаксис: inl sqr_l (CLINT a, CLINT c);

Вход: a (операнд)

Выход: c (квадрат)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_OFL в случае переполнения

Умножение CLINT- объекта на число типа USHORT

Синтаксис: inl umul_l (CLINT a, USHORT b, CLINT c);

Вход: a, b (сомножители)

Выход: c (произведение)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_OFL в случае переполнения

Функции деления

Деление

Синтаксис: inl div_l (CLINT a, CLINT b, CLINT q, CLINT tem);

Вход: a (делимое), b (делитель)

Выход: q (частное), tem (остаток)

Возврат: E_CLINT_OK, если все в порядке

E_CLINT_DBZ в случае деления на 0

Деление переменной типа CLINT на переменную типа USHORT

Синтаксис: int udiv_l (CLINT a, USHORT b, CLINT q,CLINT r);

Вход: a (делимое), b (делитель)

Выход: q (частное), r (остаток)

Возврат: E_CLINT_OK, если все в порядке E_CLINT_DBZ в случае деления на 0

Функции модульного деления

Модульное деление ( вычет по модулю )

Синтаксис: int mod_l (CLINT a, CLINT b, CLINT r);

Вход: a (делимое), b (делитель или модуль)

Выход: r (остаток)

Возврат: E_CLINT_OK, если все в порядке E_CLINT_D8Z в случае деления на 0

Модульное деление на степень двойки (вычет по модулю 2k)

Синтаксис: int mod2_l (CLINT a, ULONG b, CLINT r);

Вход: a (делимое),b (показатель степени делителя или модуля)

Выход: r (остаток)

Модульное деление переменной типа CLINT на перемен­ную типа USHORT( вычет по модулю )

Синтаксис: USHORT umod_l (CLINT a, USHORT b);

Вход: a (делимое), b (делитель или модуль)

Возврат: неотрицательный остаток, если все в порядке 0xFFFF в случае деления на 0

Пример использования основных арифметических операций

#pragma hdrstop

#include <FLINT.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#define ClintToStr xclint2str_l // Переопределение функции xclint2str_l

int main(int argc, char* argv[])

{

CLINT a,b,c; // Обьявление объектов CLINT

// Инициализаация объектов CLINT строкой 16-х цифр

char *sa =new char;sa="104576356756674567845764567456757645778467837638";

str2clint_l (a,sa,10);//Инициализация строкой

char *sb =new char;sb="1814595567567567567567635673567567567567876867897";

str2clint_l (b,sb,10);//Инициализация строкой

printf("a=%s\n",ClintToStr(a,10,1));

printf("b=%s\n",ClintToStr(b,10,1));

//Сложение

int Err= add_l (a,b,c);

printf("Err= %d c=a+b= %s\n",Err,ClintToStr(c,10,1));

// Инкремент

Err= inc_l ( a);

printf("Err= %d a=a+1= %s\n",Err,ClintToStr(a,10,1));

// Смешанное сложение переменных типа CLINT и USHORT

USHORT US=1956; printf("US= %d\n",US);

Err= uadd_l ( a,US, c);

printf("Err= %d a+US= %s\n",Err,ClintToStr(c,10,1));

//Вычитание

Err= sub_l (b,a,c);

printf("Err= %d c=b-a= %s\n",Err,ClintToStr(c,10,1));

// Денкремент

Err= dec_l ( c);

printf("Err= %d c=c-1= %s\n",Err,ClintToStr(c,10,1));

//Вычитание числа типа USHORT из числа типа CLINT

Err= usub_l ( c, US, a);

printf("Err= %d a=c-US= %s\n",Err,ClintToStr(a,10,1));

//Yмножение

Err= mul_l ( a, b, c);

printf("Err= %d c=a*b= %s\n",Err,ClintToStr(c,10,1));

// Возведение в квадрат числа a

Err= sqr_l ( a, c);

printf("Err= %d b=sql(a)= %s\n",Err,ClintToStr(b,10,1));

// Умножение CLINT- объекта на число типа USHORT

Err=umul_l (a, US, c);

printf("Err= %d c=a*US= %s\n",Err,ClintToStr(c,10,1));

//Деление

CLINT q, tem;

Err= div_l (b, a, q, tem );

printf("Err= %d q=b/a= %s\n",Err,ClintToStr(q,10,1));

printf(" tem= %s\n",ClintToStr(tem,10,1));

// Модульное деление ( вычет по модулю )

mod_l (b, a, tem);

printf(" Err= %d tem=b mod a= %s\n",Err,ClintToStr(tem,10,1));

// Модульное деление на степень двойки (вычет по модулю 2k)

Err= mod2_l ( a, 5, q);

printf(" Err= %d q=a mod (2*2*2*2*2) = %s\n",Err,ClintToStr(q,10,1));

//Модульное деление переменной типа CLINT на переменную типа USHORT

//( вычет по модулю )

US=pow(2,5) ;

USHORT F= umod_l (a, US);

printf(" F=a mod (2*2*2*2*2) = %d\n",F);

getch();

return 0; }

Рисунок Основные арифметические операции

Задание

п.п

Инициализация

Преобразование переменных , дополнительные операции

Арифметические операции

Поразрядные операции

1

Строкой 16-х цифр

Перестановка значений двух CLlNT-объектов

Сложение, деление , модульное деление на степень двойки

Сдвиг влево на один бит

2

Числом типа ULONG

Копирование CLINT

Смешанное сложение, возведение в квадрат, умножение

Сдвиг вправо на один бит

3

Вектором байт

Перестановка значений двух CLlNT-объектов

Инкремент, модульное деление на степень двойки, вычитание числа типа USHORT из числа типа CLINT

Поразрядное “И”

4

Строкой 2-х цифр

Преобр. CLINT-объекта в строку символов

Вычитание,деление, модульное деление переменной типа CLINTна перемен­ную типаUSHORT

Поразрядное “ИЛИ”

5

Строкой 8-х цифр

Перестановка значений двух CLlNT-объектов

Смешанное сложение переменных типа CLINT и USHORT, умножение, декремент

Поразрядное “исключающее ИЛИ”

6

Строкой 10-х цифр

Преобр. CLINT-объекта в строку символов

Вычитание числа типа USHORT из числа типа CLINT, деление переменной типа CLINT на переменную типа USHORT, вычитание

Проверка и задание значения бита

7

Строкой 2-х цифр

Перестановка значений двух CLlNT-объектов

Сложение, умножение, модульное деление

Проверка и обнуление значения бита

8

Числом типа ULONG

Копирование CLINT

Инкремент,деление, возведение в квадрат

Сдвиг влево на один бит

9

Строкой 8-х цифр

Копирование CLINT

Умножение CLINT- объекта на число типаUSHORT,

возведение в квадрат,

модульное деление переменной типа CLINTна перемен­ную типаUSHORT

Сдвиг вправо на один бит

10

Строкой 16-х цифр

Перестановка значений двух CLlNT-объектов

Сложение, деление, модульное деление, деление переменной типа CLINT на переменную типа USHORT

Поразрядное “И”

11

Вектором байт

Копирование CLINT

возведение в квадрат, модульное деление на степень двойки

Поразрядное “ИЛИ”

12

Строкой 2-х цифр

Число значащих двоичных разрядов CLINT-объекта

Умножение, декремент, модульное деление

Проверка двоичного разряда

13

Строкой 10-х цифр

Копирование CLINT

Смешанное сложение переменных типа CLINT и USHORT, умножение CLINT- объекта на число типаUSHORT, модульное деление на степень двойки

Поразрядное “И”

14

Строкой 16-х цифр

Преобр. CLINT-объекта в строку символов

Вычитание, умножение, модульное деление

Проверка и задание значения бита

15

Числом типа ULONG

Перестановка значений двух CLlNT-объектов

Инкремент, деление, декремент

Поразрядное “ИЛИ”

16

Строкой 8-х цифр

Копирование CLINT

Сложение, умножение, модульное деление переменной типа CLINT на перемен­ную типа USHORT

Сдвиг влево на один бит

17

Строкой 2-х цифр

Число значащих двоичных разрядов CLINT-объекта

Вычитание числа типа USHORT из числа типа CLINT, декремент, умножение

Сдвиг вправо на один бит

18

Строкой 10-х цифр

Перестановка значений двух CLlNT-объектов

Сложение, , модульное деление, смешанное сложение переменных типа CLINT и USHORT

Поразрядное “исключающее ИЛИ”

19

Числом типа ULONG

Копирование CLINT

Вычитание, декремент,умножение

Проверка и задание значения бита

20

Вектором байт

Преобр. CLINT-объекта в байтовый вектор

Сложение, возведение в квадрат, модульное деление переменной типа CLINT на перемен­ную типа USHORT

Проверка и обнуление значения бита

  • Отчет должен содержать содержать:

1. Hаименование и номер лабораторной работы;

2. Условие задачи;

3. Распечатка листинга программы;

4. Распечатка результатов выполнения задачи;

5. Выводы по результатам выполнения задач, анализ возможностей библиотеки FLINT\C .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]