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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 27.08.2014
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

Зміст

Вступ

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 (c) 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

Размещено на Allbest.ru


Подобные документы

  • Методи алгоритмiчного описаня задач, програмування на основi стандартних мовних засобiв. Переклад з однієї системи числення в іншу при програмуванні. Системи числення. Двійкові системи числення. Числа з фіксованою і плаваючою комою. Програмна реалізація.

    курсовая работа [164,1 K], добавлен 07.12.2008

  • Правило перекладу цілих чисел з різних систем числення в будь-яку іншу. Правило переходу правильних десяткових дробів. Розробка інтерфейсу користувача. Алгоритмізація і програмування рішення задачі. Налагодження і тестування програми "Калькулятор".

    курсовая работа [1022,7 K], добавлен 26.01.2013

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

    курсовая работа [1,4 M], добавлен 31.01.2014

  • Розробка програмного забезпечення для розв’язування задачі обчислювального характеру у середовищі Turbo Pascal 7.0. Розгляд систем числення. Практична реалізація задачі переводу чисел з однієї системи числення у іншу. Процедура зворотного переводу.

    курсовая работа [112,2 K], добавлен 23.04.2010

  • Дослідження середовища візуального програмування Delphi. Вивчення процесу створення навчальної програми "Електронний словник". Опис графічного інтерфейсу. Характеристика структури та основних процедур даної програми. Аналіз роботи з програмним кодом.

    курсовая работа [831,2 K], добавлен 01.03.2014

  • Розробка програми калькулятора, що може виконувати найголовніші арифметичні операції над двома числами. Вимоги до апаратного і програмного забезпечення. Опис форм та компонентів програми. Розробка алгоритмів програмного забезпечення. Опис коду програми.

    курсовая работа [57,1 K], добавлен 31.05.2013

  • Характеристика формування навичок розробки додатків із використанням кнопкових компонентів у середовищі програмування Visual Studio. Створення програми, що переводить числа з однієї системи числення до іншої. Особливість застосування додатку Converter.

    практическая работа [249,7 K], добавлен 01.12.2022

  • Аналіз математичного підґрунтя двійкової та двійкової позиційної систем числення. Переведення числа з двійкової системи числення в десяткову та навпаки. Арифметичні дії в двійковій системі. Системи числення з довільною основою. Мішані системи числення.

    курсовая работа [149,5 K], добавлен 20.06.2010

  • Функції арифметико-логічного пристрою - виконання операцій над числами, що надходять до нього, за сигналами з пристрою керування. Правила переводу чисел з однієї системи числення в іншу. Розроблення алгоритму; функціональна і принципова електричні схеми.

    курсовая работа [1,0 M], добавлен 27.04.2014

  • Особливості Сонячної системи та космічних тіл в її межах. Роль площини земної орбіти — екліптики. Опис програми, яка демонструє приблизний рух планет. Блок-схеми алгоритмів та структури програми. Опис процедур та обробників. Інструкція користувача.

    курсовая работа [756,6 K], добавлен 17.03.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.