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;

}


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


 

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

36036. Политическая мысль эпохи Возрождения. Н. Макиавелли 31.5 KB
  Идеал 2х направлений: национально независимое суверенное госво в форме республики. В борьбе двух зарождавшихся идеологий либерализма и коммунизма победил либерализм и стал господствующей идеологией в 20 в. Он вводит понятие для определения госва stto госво – это пол оргя обва а политика – умение управлять. Определил предмет п науки – учреждение государств сохранение и управление им создание армии ведение войны.
36037. ассортименту. Под номенклатурой понимается укрупненный перечень изделий предусмотренный планом к выполнен. 33.5 KB
  В начале строится таблица где весь V продукции структурирован по группам видам изделий. Шапка: вид продукции изделие А Б Объем продукции в оптимальных стабильных ценах в к плану единицы измерения оптимальной цены за ед. выпуск продукции в натуральном выражении план и факт выпуск продукции в стоим. 1 Кср =  объемов продукции которая пошла в зачет по номенклатуре  продукции по плану.
36038. Строение и функции клеточного ядра. Деление клеток эукариот. Митоз и мейоз 33 KB
  ДНК спирализуется передделением клетки для более точного распределения генетического материала при делении. Хранение генетической информации и передача ее дочернимклеткам в процессе деления. Митоз тип клеточного деления в результате которого дочерние клетки получают генетический материал идентичный тому который содержался в материнской клетке. Хромосомы спирализуются центриоли у животных клеток расходятся к полюсам клетки распадается ядерная оболочка исчезают ядрышки и начинает формироваться веретено деления.
36039. Формы изменчивости живых организмов. Рекомбинации и мутации 33 KB
  Хромосомные мутации – возникают на основе хромосомных перестроек аберраций. Различают внутрихромосомные нехватки дупликации инверсии и межхромосомные транслокации – обмен участками негомологичных хромосом иди фрагментов; геномные – изменения чисел хромосомгаплоидия полиплоидия анеуплоидия; плазмовые – изменения цитоплазматических наследственных структур. Комбинативная; причинами служат все виды скрещивания и гибридизации а также кроссинговер обмен генетическим материалом между гомологичными хромосомами родителей во время...
36040. Необходимость международного сотрудничества в области ООС 33 KB
  Поэтому в настоящее время государства под эгидой ООН или на двухсторонней основе организуют взаимодействие с целью охраны среды обитания человека растительного и животного мира. является специализированным учреждением ООН и занимается вопросами продовольственных ресурсов и раз вития сельского хозяйства в целях улучшения условий жизни народов мира. В соответствии с своей компетенцией она обращает внимание на охрану и рациональное использование земель водных ресурсов лесов и иной растительности животного мира суши биологических ресурсов...
36041. Иван Александрович Гончаров 33 KB
  Роман интересен тем что образ Ильи Ильича Обломова мы можем отождествлять с определенным типом людей живших в России в то время. Любовь их продолжается до тех пор пока Илье не приходится столкнуться с реальной жизнью пока от него не требуется решительных действий пока Ольга не понимает что она любит будущего Обломова. Ни дружба ни даже такая чистая искренняя любовь не смогли заставить Обломова отказаться от своих идеалов: мирной покойной беззаботной жизни плотной еды и безмятежного сна. Родители Обломова понимали важность и...
36042. Дадаи́зм, или дада 32.84 KB
  Считается что дадаизм явился предшественником сюрреализма во многом определившим его идеологию и методы. Основателем и идеологом сюрреализма считается писатель и поэт Андре Бретон. Одними из величайших представителей сюрреализма в живописи стали Сальвадор Дали Макс Эрнст и Рене Магритт. Наиболее яркими представителями сюрреализма в кинематографе считаются Луис Бунюэль Жан Кокто Ян Шванкмайер и Дэвид Линч.
36043. Гидравлические потери напора по длинне 32.53 KB
  ГА в зависимости от назначения характеризуется различными техническими характеристиками: Условный проход Dу Номинальный расход Qн Номинальное давление Рн Условный проход указывается в виде диаметра в мм выбирается из стандартного ряда и примерно соответствует диаметру внутренних каналов в ГА. Номинальный расход и давление – расчет значения этих параметров при котором указываются другие технические характеристики и проводятся испытаний ГА. Давление на выходе задается при помощи регулировочного винта который создает нагрузку на...