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;

}


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


 

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

37295. Проект информационной системы Автоматизированная информационная система предприятия по изготовлению корпусной мебели «АИС Корпусная мебель» 2.91 MB
  Описание потоков данных и бизнес процессов. Описание потоков данных и бизнес процессов. Функциональный блок Изготовление частей изделия получает в качестве входных данных согласованный проект в управлении участвуют характеристики материалов методики изготовления ГОСТы по изготовлению мебели а также согласованный проект. В качестве выходных данных выступают части изделия готовые к сборке Рисунок 1.
37297. МЕТОД ПРОЕКЦИЙ. Центральные проекции и их основные свойства. 902.5 KB
  Перпендикуляр к плоскости перпендикулярен любой прямой проведенной в этой плоскости. Плоскости перпендикулярны если прямая принадлежащая одной плоскости перпендикулярна другой плоскости. Если прямая линия параллельна прямой лежащей в плоскости то она параллельна этой плоскости.
37298. Теория обучения и воспитания 481 KB
  Методические рекомендации и план освоения учебной дисциплины 13 Описание учебнометодического комплекса дисциплины Теория обучения и воспитания 15 Виды учебной работы 16 Тематический план курса 16 8. Задачи: Вооружить студентов системой научных знаний о сущности и особенностях процессов обучения воспитания и развития; Раскрыть потенциалы образовательной среды и ее возможные модификации для обеспечения качества образования; Активизировать развитие у студентов профессиональнопедагогического мышления умения видеть и анализировать...
37299. Перехідна характеристика об’єкта керування 101.5 KB
  Користуючись теоремою розкладення та стандартною функцією перетворення Лапласа розрахувати та побудувати перехідні характеристики об'єкта керування. Перехідну характеристику ht будуємо за допомогою стандартної операції зворотного перетворення Лапласа програмного середовища Mthcd. Спочатку знаходимо перетворення за Лапласом вихідної величини hp Задаємо початкові умови: Знайдемо перехідну функцію за допомогою теореми розкладення. Спочатку знаходимо перетворення за Лапласом...
37300. Общие требования к курсовой работе (для юридических дисциплин) 190 KB
  Структура и содержание курсовой работы Тема курсовой работы избирается студентом исходя из его интересов и согласовывается с научным руководителем. После утверждения темы студентом разрабатывается план работы который также должен быть согласован с научным руководителем. В дальнейшем при написании работы студенту рекомендуется обсуждать с руководителем наиболее принципиальные и спорные вопросы темы. Структура и содержание курсовой работы должны в полной мере раскрывать избранную тему.
37301. Физиология центральных и периферических эндокринных органов 57.54 KB
  Все процессы жизнедеятельности организма строго согласованы между собой по скорости, времени и месту протекания. В организме человека эту согласованность на периферии осуществляют внутриклеточные и межклеточные механизмы регуляции, важнейшую роль в которых играют гормоны.
37302. Инженерный анализ моделей технических систем с помощью MathCAD 72.5 KB
  Освоить программу MathCAD и получить практические навыки ее использования при инженерном анализе моделей технических систем.