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;

}


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


 

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

5872. Формальные методы спецификации программ 431.5 KB
  В предлагаемом учебном пособии рассматриваются два основных метода формального описания программных систем: метод алгебраических спецификаций и метод типизированных машин абстрактных состояний. Первый метод предназначен для описания статических аспе...
5873. Асинхронная машина. Общие понятия 1.07 MB
  Асинхронная машина. Общие понятия. Асинхронная машина это электрическая машина переменного тока, частота вращения ротора которой отличается от частоты вращения основной гармонической магнитного поля воздушного зазора. Частота вращения основной гармо...
5874. Проблема правонарушений в юридической науке 134 KB
  Выбирая тему курсовой работы, мы, прежде всего, руководствовались тем, насколько она актуальна для нашего времени. На сегодняшний день проблема правонарушений остается в юридической науке столь же сложной и противоречивой, как и ранее. Ее а...
5875. Источники и показатели монопольной власти 141 KB
  Проблемы монополизации хозяйственной жизни, конкуренция на рынке привлекают сегодня не только специалистов, но и широких слоев населения. С начала 1990-х гг. эти проблемы остро стали перед Республикой Беларусь. Без принятия твёрдых и послед...
5876. Обработка сообщений клавиатуры, мыши, таймера 161 KB
  Обработка сообщений клавиатуры, мыши, таймера При создании приложений рекомендуется реализовать все функциональные возможности программы не только с помощью мыши, но и с помощью клавиатуры. Синхронизация событий клавиатуры Приложение узнает о нажати...
5877. Стили классов окон и оконные стили, Различные метрики Windows, Управление окнами Windows 133.5 KB
  Стили классов окон и оконные стили, Различные метрики Windows, Управление окнами Windows Рассмотрим различные типы окон, которые может создать приложение Windows. На базе одного класса окна приложение может создать несколько окон. Все эти окна могут...
5878. Электростатика. Сила электрического взаимодействия 91.5 KB
  Электростатика. Сила электрического взаимодействия. Сила электрического взаимодействия действует на расстоянии. Постулаты (факты, которые нельзя доказать). Существует некое количество, называемое зарядом, которое определяет взаимодействие тел...
5879. Основы безопасности жизнедеятельности в сфере государственно-правовых отношений 452.5 KB
  Брак и семья, основные понятия. Условия и порядок заключения брака. История создания Вооруженных Сил РФ, ее связь с историей и становлением Российского государства. Вопрос 1 Семья - это группа людей, связанных браком, кровным...
5880. Теоретические основы земельного управления 135.5 KB
  Шпора к экзамену по предмету Теоретические основы з/у 1. Каково экономическое значение земли в общественном производстве. Место и роль земли в общественном производстве, бесспорно, огромная, но к различных ее отраслях она выполняет неравнозначную ро...