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;

}


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


 

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

12932. Разработка технологии изготовления высокоплотных изделий сложной формы из Al2О3 5.36 MB
  Области применения и виды изделий высокоглиноземистой керамики –различны. Их применяют: в режущих инструментах, в различных двигателях, в контейнерах для хранения радиоактивных отходов, в микроэлектронике, в ракето космической промышленности, в виде брони.
12933. Ввічлива людина 54 KB
  Тема: Ввічлива людина. Мета: 1. Виховна: виховувати почуття відповідальності за свої вчинки підвищувати рівень виховуваності. 2. Навчальна: впроваджувати елементи естетичного виховання культури спілкування; 3. Розвиваюча: розширити знання учнів з ввічливо
12934. Як перетворити звичну виховну годину на інтерактивне заняття 29 KB
  Як перетворити звичну виховну годину на інтерактивне заняття розробник: Бойченко В.В. Класному керівнику завжди хочеться щоб його виховна година в основу якої закладено обговорення ключових якостей доброчинної поведінки людини не перетворювалася на нудне читан...
12935. Бухгалтерский учет. Методические указания по выполнению дипломных работ 292.38 KB
  Методические указания по выполнению дипломных работ для студентов очной и заочной форм обучения Методические указания по выполнению дипломных работ для студентов очной и заочной форм обучения специальности 080109.65 Бухгалтерский учет анализ и аудит / Сост. К. В. П...
12936. Лекции Маркетинг 241.5 KB
  ПОНЯТИЕ ПРИНЦИПЫ ФУНКЦИИ И КОНЦЕПЦИИ МАРКЕТИНГА Лекция 1 1. Основные понятия маркетинга. МАРКЕТИНГ вид человеческой деятельности направленный на удовлетворение нужд потребностей по средством обмена. Нужда чувство ощущаемое человеком в нехватке чеголибо.
12937. Відомі люди України 4.96 MB
  познайомити дітей з деякими відомими людьми України; розвивати інтерес розширювати кругозір учнів в області іскуства спорту; учити працювати самостійно і в колективі; слухати дорослого і однолітків; щепити любов учнів до України; .развівать мислення уяву память; вих...
12938. Классные часы 1.39 MB
  Наш выбор наша судьба Состав творческого коллектива: Человек взрослый; Мальчик 810 лет; Дети 68 лет 10 человек; Юноша 1516 лет; Девушки юноши 10 человек; Массовка любое количество. На сцену выходит массовка. Под фонограмму песни Широка страна моя родная исполн...
12939. Классный час на тему: Зачем потребителю права 1.43 MB
  Классный час по основам потребительских знаний Тема: Зачем потребителю права Цели урока: Продолжить формирование знаний о правах потребителя о санитарных нормах хранения пищевых продуктов об опасных добавках к пищевым продуктам; Научить читать штри
12940. Сценарий классного часа на тему: По планетам знаний 1.02 MB
  Сценарий классного часа на тему: По планетам знаний Класс: 4 Цели: Образовательная: продолжить знакомство детей с различными категориями знаний; Развивающая: развитие любознательности эрудиции и кругозор личности учащихся; Воспитательная: сплочение коллектива...