Побудова та аналіз алгоритмів: переклад чисел у різних системах числення

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

КУРСОВА РОБОТА

Побудова та аналіз алгоритмів: Переклад чисел у різних системах числення"

Зміст

Вступ

1. Пояснювальна записка

1.1 Завдання

1.2 Теоретична частина

1.3 Обґрунтування і вибір алгоритму

1.4 Опис процедур та обробників

1.5 Структура програми

1.6 Результати роботи програми та контрольні приклади

Висновок

Список використаної літератури

Лістинг програми

Вступ

Життя у цивілізованих країнах без комп’ютера уявити дуже складно. Адже комп’ютери використовуються повсякденно, як для роботи, так і для відпочинку. Завдяки комп’ютерам ми здатні швидко і точно обробляти інформацію. Жодна успішна компанія не обходиться без допомоги систем. Він полегшує життя, робить його цікавішим і легшим, дає змогу розмовляти на відстані, допомагає у роботі, та багато іншого без чого ми не можемо уявити наше повсякденне життя, він наповнює яскравими барвами наш світ своїм розмаїттям можливостей.

Зараз, багато людей використовують комп’ютер для роботи. Але поступово деякі обов’язки стали переходити на мобільні смартфони. Наприклад відправити електрону пошту зручніше відправити через телефон, зробити пошуковий запит на ваш улюблений ресторан, також зручніше. Ми живемо вже у той період коли телефонів більше ніж комп’ютерів. По факту телефони і є комп’ютерами. Тому я і вирішив розробити свою програму для мобільного приладу

1. Пояснювальна записка

1.1 Завдання

Написати програму яка буде переводити числа з однієї системи числення в іншу. Також розробити графічний інтерфейс, яким зручно буде користуватись. Тобто, користувач сам обирає з я систему числення в яку він бажає перевести число. Для прикладу: бінарне число в десяткове.

1.2 Теоретична частина

Я прихильник компанії Apple, тому саме я і вирішив розробити свою програму для iPhone. Операційна система, яку використовує iPhone називається IOS.

Всього є 12 варіантів переводу чисел:

· Bin to Dec

· Bin to Oct

· Bin to Hex

· Oct to Bin

· Oct to Dec

· Oct to Hex

· Dec to Bin

· Dec to Oct

· Dec to Hex

· Hex to Bin

· Hex to Oct

· Hex to Dec

1.3 Обґрунтування і вибір алгоритму

Тобто можна вважати що потрібно 12 алгоритмів, але при оптимізації зрозуміло що знадобиться тільки 6, але як казав Дональд Кнут: «Преждевременная оптимизация -- корень всех зол».

Розглянемо найпростіший варіант:

· Перевод числа с бінарної системи в десятичну. То для цього нам потрібно знати довжину бінарного числа. Після визначення довжини, ми почергово, починаючи з кінця нашого бінарного числа, беремо елемент, нуль чи одиницю і множимо на двійку, яка знаходиться у степені довжини від кінця числа до елементу. Тоді додаємо всі отримані числа і отримуємо результат.

1.4 Опис процедур та обробників

У цій Програмі ми використовували мову Objective-C. За Основу інтерфейсу ми взяли мобільний пристрій iPhone. Середа розробки Xcode, ця середа надається тільки для користувачів комп’ютерів Macintoch. Xcode має так вбудовані можливості як додавання кнопок на екран, підключення їх до коду, Вивід тексту на екран, строка для вводу даних.

Язик Objective-C відрізняється від С++, але функціонал схожий, наведемо приклад:

· С++ - Objective-C

· std: :string str — NSString *str;

· sub. str (1,2) — [str substringWithRange: NSMakeRange]

· std: :stoi (str[k]) — [str intValue]

· str. length () — [str length]

· toupper (str) — [str uppercaseString]

у язика Objectine-C є свої плюси, але також є і недоліки. Наприклад те що мені не сподобалось в ньому, так це неможливість додавання строк шляхом використання звичайного «+». Щоб додати строку вам знадобиться виповнити спочатку переформатування її

str = [NSString stringWithFormat: @"%@%@", str, strYouWant2add];

Також для коректної роботи програми нам знадобиться перевірити вхідні дані правильність вводу, тобто визначити чи присутні у вхідних даних елементи окрім цифр та великих літер A-F. В моєму випадку алгоритм ігнорує усі зайві елементи, і обирає з них вказані вище елементи. Після обробки вхідної строки, вихідна строка буде позбавлена зайвих елементів. У випадку якщо користувач ввів помилкове значення для і натиснув на кнопку, то він побачить повідомлення з помилкою.

1.5 Структура програми

графічний інтерфейс мобільний програмування

Програма розбита на логічні частини.

1. Interface (Інтерфейс)

1.1. Label (Єтикетка, місце де відображується результат)

1.2. TextField (Поле куди вводяться дані)

1.3. Buttons (Кнопки)

1.3.1. All Action Buttons (усі діючі кнопки)

2. Implimentation (Пояснення)

2.1. All Buttons (Усі кнопки)

2.1.1. Bin to Dec

2.1.2. Bin to Oct

2.1.3. Bin to Hex

2.1.4. Oct to Bin

2.1.5. Oct to Dec

2.1.6. Oct to Hex

2.1.7. Dec to Bin

2.1.8. Dec to Oct

2.1.9. Dec to Hex

2.1. 10. Hex to Bin

2.1. 11. Hex to Oct

2.1. 12. Hex to Dec

2.2. All Buttons Defenition (Функції у яких перетворюються числа з однієї систему в інші

Усі дії які виконує програма будуть детально описані в лістингу.

1. 6 Результати роботи програми та контрольні приклади

Висновок

В даній курсовій роботі було розроблено програму яка переводить числа з різних систем числення. Програма поділена на логічні частини, які зручно використовувати. Мовою програмування в даній роботі був Objective-C.

Список використаної літератури

1. Bjorn Straustrup «The C++ Programming Language, 2010, Addison Visley, p. 51, p. 633, p. 798.

2. http: //stackoverflow. com/questions/tagged/objective-c

3. Michael A. Vine «C Programming Second Edition», 2009, Course Technology, p. 218−240.

Лістинг програми

//

// HelloWorldViewController. m

// HelloWorld

//

// Created by Osadchy Dima on 5/7/13.

// Copyright © 2013 Osadchy Dima. All rights reserved.

//

#include < math. h>

#import «HelloWorldViewController. h»

@interface HelloWorldViewController ()

@property (weak, nonatomic) IBOutlet UILabel *label; //підключення лейблу

@property (weak, nonatomic) IBOutlet UITextField *textField; //підключення строки вводу

@property (weak, nonatomic) IBOutlet UIPickerView *ChoseField; //вибір кольору дисплея

— (IBAction)changeGreeting: (id)sender; //підключення кнопок переводу чисел

— (IBAction)BintoOct: (id)sender;

— (IBAction)BintoHex: (id)sender;

— (IBAction)OcttoBin: (id)sender;

— (IBAction)OcttoDec: (id)sender;

— (IBAction)OcttoHex: (id)sender;

— (IBAction)DectoBin: (id)sender;

— (IBAction)DectoOct: (id)sender;

— (IBAction)DectoHex: (id)sender;

— (IBAction)HextoBin: (id)sender;

— (IBAction)HextoOct: (id)sender;

— (IBAction)HextoDec: (id)sender;

@end

@implementation HelloWorldViewController

— (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

//уникає помилок перевантаження памяті

— (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

— (IBAction)changeGreeting: (id)sender {

NSString *str = self. textField. text;

if (test_to_bin (return_only_number (str))) {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_decimal (str)];

}

else

self. label. text = [[NSString alloc] initWithFormat: @"Input only: 0,1 «];

}

— (IBAction)BintoOct: (id)sender {

NSString *str = self. textField. text;

if (test_to_bin (return_only_number (str))) {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_octal (str)];

}

else

self. label. text = [[NSString alloc] initWithFormat: @"Input only: 0,1 «];

}

— (IBAction)BintoHex: (id)sender {

NSString *str = self. textField. text;

if (test_to_bin (return_only_number (str))) {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_hex (str)];

}

else

self. label. text = [[NSString alloc] initWithFormat: @"Input only: 0,1 «];

}

— (IBAction)OcttoBin: (id)sender {

NSString *str = self. textField. text;

if (test_to_octal (return_only_number (str))) {

self. label. text = [[NSString alloc] initWithFormat: @"%@", octal_to_binary (str)];

}

else

self. label. text = [[NSString alloc] initWithFormat: @"Input only: 0,1,2,3,4,5,6,7"];

}

— (IBAction)OcttoDec: (id)sender {

NSString *str = self. textField. text;

if (test_to_octal (return_only_number (str))) {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_decimal (octal_to_binary (str))];

}

else

self. label. text = [[NSString alloc] initWithFormat: @"Input only: 0,1,2,3,4,5,6,7"];

}

— (IBAction)OcttoHex: (id)sender {

NSString *str = self. textField. text;

if (test_to_octal (return_only_number (str))) {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_hex (octal_to_binary (str))];

}

else

self. label. text = [[NSString alloc] initWithFormat: @"Input only: 0,1,2,3,4,5,6,7"];

}

— (IBAction)DectoBin: (id)sender {

self. label. text = [[NSString alloc] initWithFormat: @"%@", decimal_to_binary (return_only_number (self. textField. text)) ];

}

— (IBAction)DectoOct: (id)sender {

self. label. text = [[NSString alloc] initWithFormat: @"%@", decimal_to_octal (return_only_number (self. textField. text)) ];

}

— (IBAction)DectoHex: (id)sender {

self. label. text = [[NSString alloc] initWithFormat: @"%@", decimal_to_hex (return_only_number (self. textField. text))];

}

— (IBAction)HextoBin: (id)sender {

self. label. text = [[NSString alloc] initWithFormat: @"%@", hex_to_bin (return_hex (self. textField. text))];

}

— (IBAction)HextoOct: (id)sender {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_octal (hex_to_bin (return_hex (self. textField. text)))];

}

— (IBAction)HextoDec: (id)sender {

self. label. text = [[NSString alloc] initWithFormat: @"%@", binary_to_decimal (hex_to_bin (return_hex (self. textField. text)))];

}

— (BOOL)textFieldShouldReturn: (UITextField *)theTextField {

if (theTextField == self. textField) {

[theTextField resignFirstResponder];

}

return YES;

}

NSString *binary_to_decimal (NSString *str) {

int num = 0;

int k = 0;

NSString *str_number;

for (k = 0; (k+1)< =[str length]; k++) {

num +=[[str substringWithRange: NSMakeRange (k, 1)] intValue]*pow (2, [str length]-(k+1));

}

return str_number = [NSString stringWithFormat: @"%d", num]; ;

}

NSString *binary_to_octal (NSString *str){

str = [NSString stringWithFormat: @"%o", [binary_to_decimal (str) integerValue] ];

return str;

}

NSString *binary_to_hex (NSString *str){

str = [NSString stringWithFormat: @"0x%X", [binary_to_decimal (str) integerValue]];

return str;

}

NSString *octal_to_binary (NSString *str){

NSString *outputstring;

outputstring =@"";

for (int k =0; k< [str length]; k++) {

switch ([[str substringWithRange: NSMakeRange (k, 1)] intValue]) {

case 0:

outputstring = [NSString stringWithFormat: @"%@000″, outputstring];

break;

case 1:

outputstring = [NSString stringWithFormat: @"%@001″, outputstring];

break;

case 2:

outputstring = [NSString stringWithFormat: @"%@010″, outputstring];

break;

case 3:

outputstring = [NSString stringWithFormat: @"%@011″, outputstring];

break;

case 4:

outputstring = [NSString stringWithFormat: @"%@100″, outputstring];

break;

case 5:

outputstring = [NSString stringWithFormat: @"%@101″, outputstring];

break;

case 6:

outputstring = [NSString stringWithFormat: @"%@110″, outputstring];

break;

case 7:

outputstring = [NSString stringWithFormat: @"%@111″, outputstring];

break;

default:

break;

}

}

return outputstring;

}

NSString *decimal_to_binary (NSString *str){

int inNumber;

NSString *outputString;

outputString=@"";

int temp;

inNumber=[str integerValue];

while (inNumber ≠ 0) {

temp=inNumber%2;

inNumber=(inNumber-temp)/2;

outputString=[NSString stringWithFormat: @"%i%@", temp, outputString];

}

return outputString;

}

NSString *decimal_to_octal (NSString *str){

str = [NSString stringWithFormat: @"%o", [str intValue]];

return str;

}

NSString *decimal_to_hex (NSString *str){

str = [NSString stringWithFormat: @"0x%X", [str integerValue]];

return str;

}

NSString *hex_to_bin (NSString *str){

str = [str uppercaseString];

NSDictionary *hexMap = [NSDictionary dictionaryWithObjectsAndKeys:

@"0000″, @"0″,

@"0001″, @"1″,

@"0010″, @"2″,

@"0011″, @"3″,

@"0100″, @"4″,

@"0101″, @"5″,

@"0110″, @"6″,

@"0111″, @"7″,

@"1000″, @"8″,

@"1001″, @"9″,

@"1010″, @"A",

@"1011″, @"B",

@"1100″, @"C",

@"1101″, @"D",

@"1110″, @"E",

@"1111″, @"F",

nil];

NSMutableString *result=[NSMutableString string];

for (NSUInteger i=0; i ≠ [str length]; i++){

NSString *hexDigit = [str substringWithRange: NSMakeRange (i, 1)];

[result appendString: [hexMap objectForKey: hexDigit]];

}

return result;

}

NSString *return_only_number (NSString *str) {

NSString *number_str = @"";

for (int k = 0; k≠[str length]; k++) {

if (isdigit ([str characterAtIndex: k])) {

number_str = [NSString stringWithFormat: @"%@%@", number_str,[str substringWithRange: NSMakeRange (k, 1)]]; //add symbol to a new number string

}

}

return number_str;

}

bool test_to_bin (NSString *str){

for (int k = 0; k≠[str length]; k++) {

if ([[str substringWithRange: NSMakeRange (k, 1)] intValue] > =2) {

return false;

}

}

return true;

}

bool test_to_octal (NSString *str) {

for (int k = 0; k≠[str length]; k++) {

if ([[str substringWithRange: NSMakeRange (k, 1)] intValue] > =8) {

return false;

return true;

NSString *return_hex (NSString *str) {

str = [str uppercaseString];

NSString *hex_str = @"";

int number_charachter = 0;

for (int k =0; k≠[str length]; k++) {

number_charachter = [str characterAtIndex: k];

if (isdigit ([str characterAtIndex: k]) || (number_charachter > =65 & & number_charachter <= 70)) {

hex_str = [NSString stringWithFormat: @"%@%@", hex_str,[str substringWithRange: NSMakeRange (k, 1)]];

return hex_str;

}

@end

ПоказатьСвернуть
Заполнить форму текущей работой