Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет Лаба2

.doc
Скачиваний:
6
Добавлен:
05.09.2014
Размер:
30.21 Кб
Скачать

Санкт-Петербургский государственный

электротехнический университет

Отчет по лабораторной работе № 2

Преподаватель

Студенты гр

2011

#include <iostream.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#include <math.h>

#include <stdio.h>

int main()

{

int val, res = 0, tmp, rank, i, i1, i2, i3, mask;

char strbuf[256];

char** endp = NULL; //обнуляем

printf("Enter value: ");

fgets(strbuf, sizeof(strbuf), stdin); //читает (количество strbuf) из stdin символы и помещяет их в указатель strbuf

val = strtoul(strbuf,endp,0); //вводим число и заносим его в val

cout<<"BIN: ";

for (i = 31; i >= 0; i--)

if ((val&(1<<i))==0) cout<<0; // печатаем исходное число в BIN виде

else cout<<1;

printf("\nEnter rank: ");

fgets(strbuf, sizeof(strbuf), stdin);

rank = strtoul(strbuf,endp,0);

printf("Enter index 1: ");

fgets(strbuf, sizeof(strbuf), stdin);

i1 = strtoul(strbuf,endp,0);

printf("Enter index 2: ");

fgets(strbuf, sizeof(strbuf), stdin);

i2 = strtoul(strbuf,endp,0);

if (rank < 0 || i1 < 1 || i2 < 1 //проверка на ошибку ввода данных - перекрестные блоки

|| i1 > i2 || (i1 + rank) > i2) {

fprintf(stderr,"Invalid argument(s)\n");

return -1;

}

i1--;

i2--;

//копирование group 1

tmp = val >> i1;

mask = (1 << rank) - 1;

res |= ((tmp & mask) << i2);

// копирование между group 1 и group 2

tmp = val >> (i1 + rank);

mask = (1 << (i2 - rank - i1)) - 1;

res |= ((tmp & mask) << (i1 + rank));

// копирование group 2

tmp = val >> i2;

mask = (1 << rank) - 1;

res |= (tmp & mask) << i1;

// копирование rest после group 2

mask = (1 << (i2 + rank)) - 1;

res |= (val & ~mask);

// копирование rest перед group 1

mask = (1 << i1) - 1;

res |= (val & mask);

printf("\nResult:\nBIN: ");

for (i3 = 31; i3 >= 0; i3--)

if ((res&(1<<i3))==0) cout<<0; // печатаем результат в BIN виде

else cout<<1;

printf("\nDEC: %d\n", res); // вывод на экран в DEC

// system("pause");

// getch();

return 0;

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете Организация ЭВМ