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;

}


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


 

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

34594. США в конце XX – начале XXI вв 15.84 KB
  Укрепление политического экономического военного лидерства в мире стало ведущей идеей политики США во второй половине XX начале XXI в. Этому способствовало с одной стороны ключевое положение США в ООН в составе 5 государств членов Совета Безопасности а с другой активное участие в создании НАТО сети других военнополитических блоков. Была развернута сеть военных баз и объектов США в Европе в государствах участниках НАТО на Дальнем Востоке и в бассейне Тихого океана в Латинской Америке и зоне Карибского бассейна на Ближнем...
34595. Соединенное Королевство: географическое положение, рельеф, природные условия, флора и фауна. Символы 40.5 KB
  Официально же она именуется Соединенное Королевство Великобритании и Северной Ирландии. В целом на их долю приходится приблизительно 1 3 площади Великобритании и бoльшая часть Северной Ирландии. В Северной Ирландии змей нет. Символы: Флаг Соединенного Королевства Великобритании и Северной Ирландии или как его принято называть Юнион Джек Union Jck является сочетанием трех крестов святых покровителей Англии прямой красный крест на белом поле крест Св.
34596. Столетняя война 17.15 KB
  Столетняя война наименование длительного военного конфликта между Англией и Францией 13371453 вызванного стремлением Англии вернуть принадлежавшие ей на континенте Нормандию Мен Анжу и др. а также династическими притязаниями английских королей на французский престол. война между Англией и Францией. причины войны: стремление Франции вытеснить Англию с югозапада страны провинция Гиень и ликвидировать этот последний оплот английской власти на франц.
34597. Династия Тюдоров. Генрих VII 19.17 KB
  Генрих VII Генрих VII Тюдор 28 января 1457 21 апреля 1509 король Англии и государь Ирландии 1485 1509. Родители: Эдмунд Тюдор 1й граф Ричмонд; единоутробный брак короля Генриха VI Маргарита Бофорт. 1471 гибель Генриха VI и принца Уэльского Генрих почти единственный родственник Ланкастеров. Генрих поклялся в Ренне в случае захвата власти жениться на дочери Эдуарда IV Елизавете Йоркской.
34598. Реформация, противостояние католиков и протестантов 12.42 KB
  Первоначально Генрих VIII был противником Реформации книга против Лютера В защиту 7 таинств 1521 г. Генрих был женат на Екатерина Арагонской единственный ребенок девочка Мария Тюдор. Поняв что мальчиков не будет Генрих решил добиться развода однако Папа Римский Климент VII на это не согласился. Генрих обвинил английское духовенство в неповиновении статуту статут запрещал признавать любое лицо назначенное Папой без утверждения королем заставил духовенство признать себя главой церкви Англии.
34599. Мария Тюдор 20.58 KB
  Известна как Мария Кровавая Мария Католичка. Мария была единственным выжившим ребенком Генриха от его первой жены Екатерины Арагонской. Франциск I король Франции стремился укрепить свои позиции через свадьбу Марии и французского дофина решение принято осенью 1518 Мария должна выйти замуж по достижении дофином 14летнего возраста если у Генриха не появится наследник мужского пола то корону наследует Мария.
34600. Война с Испанией. «Непобедимая Армада» 33.5 KB
  Непобедимая Армада. Однако в том же 1587 году английская эскадра адмирала Френсиса Дрейка совершила налет на Кадис где базировалась Непобедимая Армада и уничтожила около 100 кораблей. 20 мая 1588 года Непобедимая Армада в составе шести эскадр вышла в море из устья реки Тахо. Армада подвергалась постоянным нападениям более легких и маневренных английских судов адмирала Дрейка.
34601. Культура Англии в XIV –XV в. 20.06 KB
  В конце 14 века оформился единый английский язык. Однако в 14 15 веках среди английской знати особенно при дворе была широко распространена литература на французском языке. Огромную роль в развитии английской литературы сыграли Кентерберийские рассказы Джеффри Чосера вторая половина 14 века. В 70е годы 15 века в Англии появилось книгопечатание.
34602. Династия Стюартов: Яков I 20.19 KB
  Династия Стюартов: Яков I Яков VI Шотландский Яков I Английский; 19 июня 1566 1625 король Шотландии Англии первый государь правивший Шотл. Шотландия 24 июля 1567 восстание отец Якова умер убийцей считали Марию. 29 июля 1567 Стерлинг Яков коронован Ш. Яков правил при регентском совете с 29 июля 1567 самостоятельно с 12 марта 1578.