1375

Вычислительная техника

Лабораторная работа

Информатика, кибернетика и программирование

Возвращаем массив битов в место вызова функции. Сложение в двоичном коде уже преобразованных чисел. Перевод двоичного числа в десятичное представление. Количество битов в двоичном представлении числа.

Русский

2013-01-06

111 KB

3 чел.

Министерство образования и науки Украины

кафедра «Компьютеризированные системы управления»

Отчёт

по лабораторной работе №1

дисциплина: «Вычислительная техника»

Выполнил:

Студент 3 курса

Группы АТ-092

Папач В.В.

  

                                                    

                                                           Одесса  2012

                         


Листинг программы

#include<stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#include <iostream>

#include <math.h>

intPerenos = 0;

/*

Открытые файлы. В случае успешного действия возвращает

Указатель на файл или NULLв противном случае

*/

FILE* OpenFileResult(char *filename, // Режимдоступакфайлу

char* mode /*Имя файла*/)

{

setlocale(LC_ALL, "Russian");

printf("%s", filename);

     FILE *fp; // Указательнафайл

if ((fp = fopen(filename, mode)) == NULL) // Проверкаоткрития

     {

         // ВозвращаемNULL –файланет

return NULL;

     }

else

     {

         // Открываемфайлfilenameс режимомmode

fp = fopen(filename, mode);

     }

     // Возвращаем указатель на файл

returnfp;

}

/*

Считывание числа из файла filename и возврат массива битов

*/

int* ReadNumberFromFile(char* filename, intsize_num)

{

setlocale(LC_ALL, "Russian");

    FILE *fp;

int* number = new int[size_num];

fp = OpenFileResult(filename, "r"); // Открываемфайл

    //std::cout<<fp<<" "<<filename<<std::endl;

if (fp == NULL) // Если файла нет, завершаем работу программы

{

printf("Ошибкачтенияфайла %s.Проверьтеегоналичие и права доступа!!!\n\n\n", filename);

getch();

getch();

fclose(fp); // Закрываем файловый поток

exit(0);

    }

else

    {

        // Считываем побитово информацию из файла в массив Number

for (inti = 0; i<size_num; i++)

        {

fscanf(fp, "%d ", &number[i]);

        }

    }

printf("\n");

for (inti = 0; i<size_num; i++)

printf("%d ", number[i]);

printf("\n\n");

fclose(fp); // Закрываем файловый поток

returnnumber; // возвращаем массив битов в место вызова функции

}

// Инвертируемчисло mas

int* InverseCode(int *mas, intsize_mas)

{

setlocale(LC_ALL, "Russian");

int* result_inverse = new int [size_mas];

for (inti = 0; i<size_mas; i++)

    {

if (mas[i] == 0)

result_inverse[i] = 1;

else if (mas[i] == 1)

result_inverse[i] = 0;

}

returnresult_inverse;

}

// Сложение в двоичном коде уже преобразованных чисел

int* AdditionInBoolCode(int *num1, int* num2, intsize_num)

{

Perenos = 0;

setlocale(LC_ALL, "Russian");

int *result = new int[size_num];

printf("\n");

for (inti = (size_num - 1); i >= 0; i--)

    {

result[i] = num1[i] + num2[i] + Perenos;

        //printf("%d +%d + %d = %d", num1[i], num2[i], Perenos, result[i]);

if (result[i] == 2)

        {

result[i] = 0;

Perenos = 1;

        }

if (result[i] == 3)

        {

result[i] = 1;

Perenos = 1;

        }

else

Perenos = 0;

        //printf(" %d\n", result[i]);

    }

return result;

}

// Добавление 00000001кчислу

int* AddOneByte(int* number, intsize_num)

{

setlocale(LC_ALL, "Russian");

int *one = new int[8];

int *result = new int[8];

printf("\n\nOutputAddOneByte:\n");

for (inti = 0; i< (size_num - 1); i++)

one[i] = 0;

one[size_num - 1] = 1;

for (inti = 0; i<size_num; i++)

printf("%d ", one[i]);

printf("\n\n");

result = AdditionInBoolCode(number, one, size_num);

returnresult;

}

// Перевод двоичного числа в десятичное представление

int Perevod10(int *mas, intsize_mas)

{

setlocale(LC_ALL, "Russian");

int number = 0;

int step = size_mas;

for (inti = 0; i<size_mas; i++)

   {

step--;

if (mas[i] == 1)

number += (int) pow(2, step);

   }

return number;

}

voidPrint_Result(int* num1, int* num2, intsize_num, int* obr, int* obr_preobr, int* dop_code)

{

setlocale(LC_ALL, "Russian");

printf("Выводрезультатанаэкран:\n\n");

printf("\Результат вычитания в обратном коде:\n");

for (inti = 0; i<size_num; i++)

{

printf("%d ", obr[i]);

    }

printf("\Результат в прямом коде(Обратное преобразование):\n");

for (inti = 0; i<size_num; i++)

    {

printf("%d ", obr_preobr[i]);

}

printf("\nПредставление результата в дополнительном коде:\n");

for (inti = 0; i<size_num; i++)

    {

printf("%d ", dop_code[i]);

}

}

intmain(void)

{

   // Количество битов в двоичном представлении числа

constintsize_number = 8;

int *number1 = new int[size_number], // 1 число

       *number2 = new int[size_number], // 2 число

*result_dop = newint[size_number], // Результатвычитаниявдополнительном коде

       *result_obr = newint[size_number], // Результатвычитаниявобратном коде

       *num1 = newint[size_number], // Временный массив (если будут нужны промежуточные вычисления )

       *num2 = newint[size_number], // Временный массив (если будут нужны промежуточные вычисления)

*temp = new int[size_number];

char *FirstNumberFile = "input_first.txt",

        *SecondNumberFile = "input_second.txt";

   // Считываемчиславфайл

   number1 = ReadNumberFromFile(FirstNumberFile, size_number);

   number2 = ReadNumberFromFile(SecondNumberFile, size_number);

for (inti = 0; i<size_number; i++)

   {

num1[i] = number1[i];

num2[i] = number2[i];

}

   // Вычитание в обратном коде

   // Инвертируем числа если их знаковые разряды отрицательные

if (number1[0] == 1)

   {

      num1 = InverseCode(number1, size_number);

   }

if (number2[0] == 0)

   {

      num2 = InverseCode(number2, size_number);

printf("\n");

for (inti = 0; i < 8; i++)

printf("%d ", num2[i]);       

   }

temp = AdditionInBoolCode(num1, num2, size_number);

if (Perenos == 1)

   {

result_obr = AddOneByte(temp, size_number);

   }

else

   {

result_obr = InverseCode(temp, size_number);

   }

result_dop = AddOneByte(temp, size_number);

Print_Result(number1, number2, 8, temp, result_obr, result_dop);

// Вычитание в дополнительном коде

getch();

return 0;

}


Блок-схема алгоритма


 

А также другие работы, которые могут Вас заинтересовать

23074. Суб`єкти національної безпеки 37.5 KB
  Суб`єкти національної безпеки З конспекту. ТЕМА: Система національної безпеки України. Суб`єкти національної безпеки. Вимоги до системи національної безпеки.
23075. Вимоги до системи національної безпеки 33 KB
  Вимоги до системи національної безпеки З конспекту Кожна країна створює певну систему органів які могли б реагувати на загрози така система називається системою національної безпеки. Система забезпечення національно міжнародної безпеки включає певну діяльність органів по підтримці стану захищеності. Наявність механізмів які забезпечують стан безпеки. Система національної безпеки наявність певних органів тільки обмежена територією певної країни.
23076. Роль та повноваження органів спеціальної компетенції в системі забезпечення національної безпеки України 69.5 KB
  Роль та повноваження органів спеціальної компетенції в системі забезпечення національної безпеки України. Національний банк України відповідно до основних засад грошовокредитної політики визначає та проводить грошовокредитну політику в інтересах національної безпеки України; міністерства Служба безпеки України та інші центральні органи виконавчої влади в межах своїх повноважень забезпечують виконання передбачених Конституцією і законами України актами Президента України Кабінету Міністрів України завдань здійснюють...
23077. Вимірювання напруг при механічних деформаціях поляризаційним методом 447 KB
  Різницю фаз Δ що виникає між двома взаємно перпендикулярними лінійнополяризованими хвилями визначають за формулою 16 де λ довжина хвилі; σ1 σ2 головні нормальні напруги; d товщина деталі; с стала фотопружності яка залежить від матеріалу деталі. Таким чином при постійній товщині зразка лінії однакового зсуву фаз відповідають лініям однакових різниць нормальних напруг або лініям рівних максимальних дотичних напруг оскільки максимальна дотична напруга τmax пов'язана з...
23078. Дослідження анізотропних кристалів під поляризаційним мікроскопом 458 KB
  Прилади: поляризаційний мікроскоп клин або компенсатор Берека набір шліфів і пластинок з одновісних та двовісних кристалів вирізаних під різними кутами до оптичної осі. Різниця яку вносить пластинка залежить від її товщини матеріалу зразка та орієнтації оптичної осі відносно зрізу. Форма і розміщення ізохромат залежать від напряму оптичної осі відносно зрізу товщини зразка і довжини хвилі Форма і розміщення ізогір залежать від орієнтації осі відносно зрізу і взаємного положення поляризатора та аналізатора. Для пластинки вирізаної...
23079. Вимірювання оптичних сталих металів та напівпровідників за допомогою компенсатора Бабіне 278.5 KB
  Відомо що лінійнополяризоване світло яке падає на межу поділу діелектрик провідне середовище після відбиття перетворюється на еліптичнополяризоване крім того випадку коли напрям коливань електричного вектора лежить в площині падіння або в перпендикулярній площині. Вимірюючи параметри еліптичнополяризованого світла а саме; зсув фаз Δ між р та s складовими електричного вектора відбитої хвилі азимут відновленої поляризації ψ а також кут падіння світлової хвилі на площину дзеркала φ можна обчислити оптичні сталі n і κ з співвідношень...
23080. Вимірювання оптичних сталих металів та напівпровідників фотоелектричним методом Бітті 933.5 KB
  Якщо поляризатор утворює з площиною падіння кут β а аналізатор кут α то електричний вектор після проходження світлом поляризатора відбиття від зразка та проходження через аналізатор складатиметься з двох проекцій р та s компонент зсунутих по фазі одна відносно іншої. Проекції р та s компонент на площину аналізатора визначають з формул де α кут між площиною коливань в аналізаторі і р площиною А0 амплітуда коливань пропущених поляризатором; rp rs амплітудні коефіцієнти відбиття для р та...
23081. Визначення залежності ступеня поляризації стопи від кута паління та числа пластин за допомогою поляриметра Корню 391 KB
  Визначення залежності ступеня поляризації стопи від кута паління та числа пластин за допомогою поляриметра Корню. Ступінь поляризації залежить від кута падіння на межу поділу і відносного показника заломлення. Для світла що проходить значної поляризації при одноразовому проходженні досягти неможливо тому звичайно використовують стопу набір з кількох пластин. Ступінь поляризації частково поляризованого світла визначається за формулою 7 де і максимальна та мінімальна...
23082. Дослідження залежності зсуву фаз від кута падіння при повному відбитті за допомогою компенсатора Сенармона 894.5 KB
  Дослідження залежності зсуву фаз від кута падіння при повному відбитті за допомогою компенсатора Сенармона. Теоретичні відомості Світло що відбивається від межі поділу двох середовищ з різною оптичною густиною проходить у середовище з меншої густиною лише при кутах падіння менших деякого граничного кута якай можна знайти за формулою φгр = arcsin n 10 де n показник заломлення другого середовища відносно першого. При куті падіння φгр кут заломлення у другому...