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;

}


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


 

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

14836. Алтын жүлге 45 KB
  Алтын жүлге Халық мұрасының қайнар көзі көне заман әндері жөніндегі толғам Тарихымызды жазуда пәлен айтты түген айтты деп неше түрлі қазақ жерлерінде жолшыбай болғандардың айтқан жазғандарына сүйеніп жүреміз. Әрине оларды жоққа шығарудан аулақпыз. Ол да кер...
14837. АР ТҮЗЕЙТІН БІР ҒЫЛЫМ ТАБЫЛМАСА 39.5 KB
  АР ТҮЗЕЙТІН БІР ҒЫЛЫМ ТАБЫЛМАСА Шәкәрімнің танымдық әлеміне Абай мұрасы арқылы кіру ұтымды боларына айрықша ден қою керек өйткені бұл жол жантану ілімін танып білуде адастырмас темірқазығымыз. Екі ой алыбы өз туындыларында қазақтың қоғамдық ой санасындағы шеш...
14838. Тақырыбы: Аристотель 69.5 KB
  Тақырыбы: Аристотель Аристотель грекше: Ἀριστοτέλης Aristotélēs б.з.д. 384 б.з.д. 322 жылдар грек пәлсапашысы Платонның шәкірті Ұлы Александрдың ұстазы. Ол түрлітүрлі та
14839. Атлантида Ол қандай болған 52 KB
  Атлантида Ол қандай болған Сократ тыңда мені. Бұл таңғажайып ертегі емес түпкі жағында негіз бар әңгіме. Ол жөнінде жеті дананың данасы атанған Солон баян етіпті. Ол біздің арғы атамыз Дропидтің жақын туысы онымен аз уақыт болса да бірге болған достасқан адам. Ол до
14840. ДОМБЫРА ФИЛОСОФИЯСЫ 61 KB
  ДОМБЫРА ФИЛОСОФИЯСЫ Домбыра қазақтың жаны. Ол тар жол тайғақ кешу жолдарын бастан өткерген қазақ тарихын парақтауға негiз бола алады. Ұлтымыздың болмысына куә болған әдетғұрпы мен салтдәстүрлерiне жан бiтiрiп оның құнды қалпын сақтауға негiз болғанын көремiз. Бұл
14841. Көне түрік жазбаларындағы алғы философиялық ойлар 63 KB
  Көне түрік жазбаларындағы алғы философиялық ойлар Қазақтың ататегі болып табылатын сақтар ғұндар үйсіндердің түп төркіндеріндегі қарамақайшылықтарға қарамастан көшпенділк әмбебапшылығы басымдылыққа ие болды. Солай бола тұра жер өңдеушілерді
14842. ҚАЗАҚ БАТЫРЛАРЫНЫҢ НАНЫМ - СЕНІМДЕРІ МЕН МОРАЛЬДЫҚ ЭТИКАСЫ 50.5 KB
  ҚАЗАҚ БАТЫРЛАРЫНЫҢ НАНЫМ СЕНІМДЕРІ МЕН МОРАЛЬДЫҚ ЭТИКАСЫ С.Г.Есенов Ғылыми жетекшісі: т.ғ.к. Каримов М.К. Семей қаласы М.О.Әуезов атындағы Семей университеті. Қазақтың этноргафиялық суреттерінде кескінделген адам батыр бейнесі негізінен өте қарапайым түрде...
14843. ҚАЗАҚ ӘДЕБИЕТІНДЕГІ ДАНАЛЫҚ ҮРДІС 63.5 KB
  ҚАЗАҚ ӘДЕБИЕТІНДЕГІ ДАНАЛЫҚ ҮРДІС Г.Ә.Өтетілеуова Г.Ә.Мұраталиева Ыбырайым Сүлейменов атындағы № 37 қазақ орта мектебі Тараз қ. Даналық адамды басыбүтін және үнемі баурайтын соңғы лебіз соңғы дау. Даналық өне бойы өткенге көз тастап тарихқа үңілумен болады...
14844. Қазақ философиясы қалыптасуының тарихи ерекшеліктері 48.5 KB
  Қазақ философиясы қалыптасуының тарихи ерекшеліктері Кіріспе бөлімі Әдетте адамдардың барлығы да ізденуші өмірге қажеттінің бәрін өзімен бірге ала келген жоқ. Тарихты адам жасайды адамзат тарихы дегеніміз дарияның асау тасқыны да толқынға қарсы жүзетін кем...