Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

Упражнения

Напишите программу, которая запрашивает у пользователя ввод двух целых значений. Проверьте, делится ли первое число без остатка на второе число, и выведите на терминал соответствующее сообщение.

Программа 6.8А выводит значение, содержащееся в сумматоре, даже если введен неверный оператор или пользователь пытается выполнить деление на нуль. Решите эту проблему.

Внесите изменения в метод print из класса Fraction, чтобы целые числа выводились в обычном виде (например, дробь 5/1 должна выводиться как 5). Внесите изменения в этот метод, чтобы дроби с делителем, равным 0, выводились просто как 0.

Напишите программу, которая действует как простой калькулятор.

Эта программа должна позволять пользователю вводить выражения в следующей форме: число оператор Программа должна распознавать следующие операторы:

/ S Е Оператор S указывает, что программа должна присвоить сумматору (accumulator) введенное число, и оператор Е указывает программе, что нужно закончить выполнение. Арифметические операции выполняются для содержимого сумматора с числом, которое введено для операции как второй операнд. Ниже приводится пример, показывающий, как должна работать эта программа. Начало вычислений 10 S Сумматору (Accumulator) присваивается значение = 10.000000 Содержимое сумматора 2 / Divide by 2 = 5.000000 Содержимое сумматора 55 - Вычитание 55 10 = -50.000000 100.25 S Сумматору присваивается значение 100.25 = 100.250000 4 Умножение на 4 = 401.000000 0 Е Завершение программы = 401.000000 End of Calculations. (Конец вычислений) Сделайте так, чтобы программа обнаруживала деление на 0, а также выполняла проверку на неизвестные операторы. Используйте для своих вычислений класс Calculator из программы 6.8 5, В программе 5.9 выполняется вывод цифр введенного числа в обратном порядке. Однако эта программа не работает должным образом, если введено отрицательное число. Определите, что происходит в этом случае, и затем внесите в программу изменения, чтобы правильно обрабатывались отрицательные числа. Это означает, например, что если введено число -8645, то программа должна вывести 5468-. 6 Напишите программу, которая читает число, введенное с терминала, и выводит каждую цифру этого числа буквами. Например, если пользователь ввел 932, то программа должна вывести следующее. девять три два (Выведите слово нуль, если пользователь ввел 0.) Примечание. Это довольно трудное упражнение!

Программа 6.10 в ряде случаев работает неэффективно. Например, это касается проверки четных чисел. Поскольку любое четное число больше 2 не может быть простым, программа могла бы пропускать все четные числа и как возможные простые числа, и как возможные делители. Внутренний цикл for тоже работает неэффективно, поскольку для р все время выполняется деление на все значения d от 2 до р-1. Чтобы избежать этой неэффективности, можно добавить значение isPrime в условия for. Тогда вы можете задать выполнение цикла for до тех пор, пока не найден делитель и значение d меньше р. Модифицируйте программу 6.10, чтобы внести эти два изменения, затем выполните эту программу, чтобы проверить ее работу.

Глава 7. Более подробно о классах

В этой главе мы продолжим изучение классов и методов и научимся работать с программными циклами, выражениями и операторами выбора, которые изучили в предыдущей главе. Начнем с разбиения программы на несколько файлов, которое упрощает работу с большими программами. 7.1. Разделение файлов объявлений и определений (секции interface и implementation)

Объявления классов и определения классов для сложных программ принято размещать в отдельных файлах.

Если вы используете Xcode, начните с нового проекта с именем FractionTest. Введите следующую программу в файл FractionTest.m. #import Traction.h" int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Fraction *myFraction = [[Fraction alloc] init]; //

задание дроби (fraction) 1/3 [myFraction setNumerator: 1]; [myFraction setDenominator: 3]; // вывод дроби NSLog (@"The value of myFraction is:"); [myFraction print]; [myFraction release]; [pool drain]; return 0; }

В этот файл не включено определение класса Fraction, имеется импорт файла Fraction.h.

Обычно объявление класса (то есть секцию @interface) помещают в отдельный файл с именем классМ. Определение класса (то есть секцию @implementation) помещают обычно в файл с тем же именем, но с расширением .т. Мы помещаем объявление класса Fraction в файл Fraction.fi, а определение этого класса — в файл Fraction.m.

В Xcode выберите New File (Новый файл) в меню File (Файл). В левой панели выберите Cocoa. В верхней правой панели выберите Objective-C class (рис. 7.1).

Рис. 7.1. Меню New File в Xcode

Щелкните на кнопке Next (Далее). Введите Fraction.m в поле имени файла (File name). Оставьте установленным флажок Also Create Fraction.h (Создать также Fraction.h). Местоположением (Location) этого файла должна быть папка с файлом FractionTest.m (рис. 7.2).

Теперь щелкните на кнопке Finish (Готово). Xcode добавит в ваш проект два файла: Fraction.h и Fraction.m (рис. 7.3).

Мы не работаем здесь с Cocoa, поэтому заменим в файле Fraction.h строку #import <Cocoa/Cocoa.h>

на строку #import <Foundation/Foundation.h>

Рис. 7.2. Добавление нового класса к проекту

Рис. 7.3. Xcode создает файлы для нового класса

В этом файле (Fraction.h) введем секцию interface для класса Fraction. // // Fraction.h // FractionTest // // Created by Steve Kochan on 7/5/08. // Copyright 2008 _MyCompanyName_. All rights reserved. // #import <Foundation/Foundation.h> // Класс Fraction @interface Fraction : NSObject { int numerator; int denominator; } -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; -(int) numerator; -(int) denominator; -(double) convertToNum; @end

Этот файл указывает компилятору (и программистам, см. ниже), как должен выглядеть объект класса Fraction: он содержит две целых переменных экземпляра с именами numerator (числитель) и denominator (знаменатель). Он также содержит шесть методов экземпляра: print, setNumerator:, setDenominator:, numerator, denominator и convertToNum. Первые три метода не возвращают никакого значения, следующие два возвращают значение типа int, а последний метод возвращает значение типа double. Методам setNumerator: и setDenominator: передается аргумент целого типа.

Детали определения (implementation) класса Fraction содержатся в файле Fraction.m. // // Fraction.m // FractionTest // // Created by Steve Kochan on 7/5/08. // Copyright 2008 _MyCompanyName_. All rights reserved. // #import Traction.h" @implementation Fraction -(void) print { NSLog (@"%i/%in, numerator, denominator); } -(void) setNumerator: (int) n { numerator = n; } -(void) setDenominator: (int) d { denominator = d; } -(int) numerator { return numerator; } -(int) denominator { return denominator; } -(double) convertToNum { if (denominator != 0) return (double) numerator / denominator; else return 1.0; } @end

Поделиться:
Популярные книги

Газлайтер. Том 9

Володин Григорий
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда IX

Гранд империи

Земляной Андрей Борисович
3. Страж
Фантастика:
фэнтези
попаданцы
альтернативная история
5.60
рейтинг книги
Гранд империи

Имя нам Легион. Том 14

Дорничев Дмитрий
14. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
фантастика: прочее
5.00
рейтинг книги
Имя нам Легион. Том 14

Черный дембель. Часть 3

Федин Андрей Анатольевич
3. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 3

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Кодекс Охотника. Книга XXXIX

Сапфир Олег
39. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIX

Лекарь Империи 6

Карелин Сергей Витальевич
6. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 6

Неудержимый. Книга XXIX

Боярский Андрей
29. Неудержимый
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Неудержимый. Книга XXIX

Воин-Врач

Дмитриев Олег
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
Воин-Врач

Ученик

Листратов Валерий
2. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ученик

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Тринадцатый V

NikL
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый V

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII