ПЕРЕВЕДЕННЯ ЧИСЕЛ В ПОЗИЦІЙНІ СИСТЕМИ ЧИСЛЕННЯ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
РТ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Інформаційні технології

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет "Львівська політехніка"  Лабораторна робота №11 ПЕРЕВЕДЕННЯ ЧИСЕЛ В ПОЗИЦІЙНІ СИСТЕМИ ЧИСЛЕННЯ Мета роботи: засвоєння поняття позиційної системи числення, методи переходу з однієї системи числення в іншу, набуття навиків програмування операцій переходу, закріплення навиків застосування циклів та символьних змінних. Завдання 1 ПЕРЕВЕДЕННЯ ЧИСЕЛ В ПОЗИЦІЙНІ СИСТЕМИ ЧИСЛЕННЯ Перевести натуральні десяткові числа в їх двійкові еквіваленти методом ділення та методом маскування. Кожен з методів реалізувати у вигляді функції. Користувач повинен мати можливість вибору методу переведення. Результат повинен бути одержаний у вигляді послідовності символів і збережений у символьній змінній. Вивід результатів здійснювати на екран та у текстовий файл. Аналіз завдання: для переведення чисел з десяткової у двійкову систему числення треба використати алгоритми «ділення» та «маскування». Для першого алгоритму достатньо ділити число на 2, та записувати остачу. Для економії пам’яті вивід числа в 10-й системі числення буде змінною. Для того ми повинні додати до остачі принаймні двійку (для того, що б не було нулів та одиниць, адже система може проігнорувати нулі та операції з ними не будуть дотупні). Тому додамо до значення остачі 2, тоді замість 0 чи 1 отримаємо 2 чи 3. В кінцевому результаті просто віднімемо 2. Алгоритм програми: Головна функція  Ділення  Маскування  Текст програми: #include <stdio.h> #include <stdlib.h> void perevid_dilenna(int x,int buff,int bit) { while(0 != x) { printf("%d\t%d\n",x/2,x%2); if(x%2) buff++; x/=2; if(x!=0) buff *= 10; } while(buff!=0){ bit *=10; bit += (buff%10); buff /=10; } bit -=2; printf("%d\n",bit); puts(""); FILE *file; file = fopen("info.txt", "w"); fprintf(file,"Chuslo v dviykoviy sustemi chuslenna - %d", bit); fclose(file); } void perevid_maskuvanna(int x,int mask,int i,float bit) { while (mask<=x){ mask = pow(2,i); printf("%d\t%d\n",i,mask); if(i==29) break; i++; } if(mask>2) mask = mask >> 1; while(mask!=0){ if(x&mask) bit++; if(mask!=1)bit *= 10; mask = mask >> 1; } printf("%f",bit); FILE *file; file = fopen("info.txt", "w"); fprintf(file,"Chuslo v dviykoviy sustemi chuslenna - %f", bit); fclose(file); } int main(int argc, char *argv[]) { char answ; puts("Dla perevedenna metodom dilenna najmit 'd' , Dla perevedenna metodom maskuvanna najmit 'm' "); printf("Metod -> "); scanf("%c", &answ); int x; switch(answ) { case 'd': { printf("Vvedit chuslo"); puts(""); scanf("%d", &x); perevid_dilenna(x,2,0); break; } case 'm': { printf("Vvedit chuslo"); puts(""); scanf("%d", &x); perevid_maskuvanna(x,0,0,0); break; } } system("PAUSE"); return 0; } Результати:   Завдання 2 : ПОБІТОВІ ЛОГІЧНІ ОПЕРАЦІЇ Програмa повинна виконувати: 1. зчитування з клавіатури рядок iз  8-и символів (0 та 1); 2. перетворювання задану комбінацію у змінну цілого типу, яка займає в пам'яті 1 байт; 3. інвертування і-х та j-х бітів; 4. інвертування всіх 8-х бітів; 5. встановлення a-го біта в 1 ; 6. встановлення всіх бітів в 1; Результати виконання кожного кроку виводити на екран у вигляді 16-кової цілої та двійкового коду. Для отримання двійкового коду числа використати функцію, яка реалізовує метод маскування з попередньої задачі. Індивідуальне завдання: Рядок символів a i j  00011011 2 7 8   Алгоритм програми:  Код програми: #include <stdio.h> #include <stdlib.h> #include <math.h> #define A 1 #define I 6 #define J 7 int Masking(int x); unsigned char Convert(int bit_v); int main(int argc, char *argv[]) { unsigned char byte; int bin_v; scanf("%d", &bin_v); byte=Convert(bin_v); printf("%d\t%X\n",byte,byte); byte ^= (int) (pow(2,I)); //інвертування I-го біта printf("%d\t%X\n",perevid_maskuvanna(byte),byte); byte ^= (int) (pow(2,J)); //інвертування J-го біта printf("%d\t%X\n",perevid_maskuvanna(byte),byte); byte = ~byte; //інвертування всього коду printf("%d\t%X\n",perevid_maskuvanna(byte),byte); byte |= (int) (pow(2,A)); // А-й біт в 1 printf("%d\t%X\n",perevid_maskuvanna(byte),byte); byte |= 0xFF; // Всі біти в 1 (0xFF - 256 в 16-й системі числення printf("%d\t%X\n",perevid_maskuvanna(byte),byte); system("pause"); return 0; } int perevid_maskuvanna(int x) { int mask=0,i=0; int bit=0; while (mask<=x){ mask = (int) pow(2,i); if(i==29) break; i++; } if(mask>2) mask = mask >> 1; while(mask!=0){ if(x&mask) bit++; if(mask!=1)bit *= 10; mask = mask >> 1; } return bit; } unsigned char Convert(int bit_v){ int i=0; unsigned char x=0; while(bit_v!=0){ if(bit_v%10) x |= (int) pow(2,i); bit_v /=10; i++; } return x; } Результати:  Висновок: на цій лабораторній роботі я навчився переводити числа з десяткової у двійкову систему числення різними методами : маскуванням та діленням. Я написав програму, яка використовує ці алгоритми переводу чисел та автоматично їх переводить. Також я навчився програмно виконувати побітові логічні операції.
Антиботан аватар за замовчуванням

20.04.2017 17:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!