Программа доступна на AppStore.
Превращаем мобильные устройства в полноценный компьютер
Что делает компьютер компьютером? Собственно, это следует из его название, происходящего от слова compute – вычислять. Да, он должен вычислять. Но не как калькулятор или даже программируемый калькулятор. Компьютер должен давать нам возможность запрограммировать сложные алгоритмы расчёта, вводить исходные данные и получать результаты не только в виде чисел, но и текстов, графиков и диаграмм.
Nano C – это интерпретатор языка Си для iPhone и iPad. Nano C позволяет производить произвольные расчёты на мобильном устройстве и выводить на экран результаты в текстовом и графическом представлении.
Программу и результаты её работы можно отправить на email. Поддерживаются шаблоны быстрого ввода языковых конструкций.
В данной версии реализованы следующие элементы языка Си:
- Оператор if – else
- Оператор switch
- Операторы цикла for, while, do – while. Поддерживается break и continue.
- Переменные int, float и char.
- Массивы типов int, float и char.
- Функции типов void, int, float и char. Оператор возврата из функции return.
- Математические функции abs, acos, asin, atan, ceil, cos, random, exp, fabs, floor, log, log10, rint, sin, sinh, sqrt, tan, tanh, atan2, fmod, pow.
- Функции текстового вывода printf и print.
- Функция консольного ввода get.
- Специфические функции графического вывода moveto, line, circle, pixel, setcolor, setwidth.
- Специфические функции построения диаграмм linechart, barchart, piechart.
- Функция sizeof.
- Функции chr, ord, strlen, strcmp, strchr, strstr, strlwr, strupr, substr, str_replace.
- Операторы +, -, *, /, %, <, >, <=, >=, ==, !=, ++, --, +=, -=, /=, *=, %=.
Примеры программ на языке C
1. Переменные
float gl_a, gl_b; // Глобальные переменные
int main()
{
// Локальные переменные
int x = 5, y = 6, z;
char c = 'Some text';
gl_a = 8.25;
z = x * y + 3 - gl_a;
if(z > 10) print('text 1'); else print('text 2');
print('Hello, World! ' + z);
}
2. Строковые функции
void main()
{
char str1 = "Hello";
char str2 = "World";
char str3;
int len;
// Копирование str1 в str3
str3 = str1;
printf("strcmp(str1, str3) : %d\n", strcmp(str1, str3));
printf("strcmp(str1, str2) : %d\n", strcmp(str1, str2));
// Объединение строки str1 с str2
str1 = str1 + str2;
printf("strcat(str1, str2): %s\n", str1);
// Длина строки str1 после объединения
len = strlen(str1);
printf("strlen(str1) : %d\n", len);
// Найти символ в строке
printf("strchr(str1, 'y'): %d\n", strchr(str1, 'y'));
printf("strchr(str1, 'W'): %d\n", strchr(str1, 'W'));
// Найти подстроку в строке
printf("strstr(str1, 'lli'): %d\n", strstr(str1, 'lli'));
printf("strstr(str1, 'llo'): %d\n", strstr(str1, 'llo'));
// Преобразовать строку в нижний регистр
printf("strlwr(str3): %s\n", strlwr(str3));
// Преобразовать строку в верхний регистр
printf("strupr(str3): %s\n", strupr(str3));
// Получить подстроку в строке
printf("substr(str1, 2, 5): %s\n", substr(str1, 2, 5));
// Заменить все совпадения подстроки
// str_replace (string, substr, replacement)
printf("str_replace (str1, 'o', 'a'): %s\n", str_replace (str1, 'o', 'a'));
}
3. Массивы и циклы
int main()
{
// Массив без данных
int ar[];\n
// Массив с данными
char ch[] = {'one', 'two', 'three'};
// Массив размером в 100 ячеек
float f[100] = {1.5, 2.2, 3};\n
// Добавление данных в массив
for(int i = 0; i < 5; i++)
{
ar[] = i * 10;
}\n
print('Data from array ar');
// Печать данных из массива
for(i = 0; i < sizeof(ar); i++)
{
print(ar[i]);
}\n
// For - цикл
print('');
print('for');
for(int j = 0; j < sizeof(ch); j++) { print(ch[j]); }
// do-while - цикл
print('');
print('do - while');
i = 0;
do
{
print( ++i * 5);
} while(i < 5)\n
// while - цикл
print('');
print('while');
int x = 5;
while(x > 0)
{
print(x--);
}
}
4. Факториал
int main()
{
int number = get('Введите число');
int fact = 1;
printf('%d! = %d', number, factorial(number));
}
int factorial(int n)
{
int result = 1;
for (int c = 1; c <= n; c++)
{
result = result * c;
}
return result;
}
Скриншоты
Ограничения Nano C.
- Блоки операторов цикла всегда должны быть заключены в фигурные скобки.
- Ограниченная библиотека стандартных функций, которая будет дополнена в следующих релизах программы.
Описание встроенных функций Nano C.
- Print – вывод на экран текстовой информации. Всегда печатает с новой строки.
Формат print(<Выражение или константа 1>, <Выражение или константа 2>, <Выражение или константа>….);
Примеры
Print(‘Hello, World!’);
Int x = 10;
char name = “John”;
print(“Hi, ”, name, “. You get ”, x * 2 + 3);
- Printf – форматированный вывод на экран текстовой информации
Формат printf(<Строка формата>, <Значение плейсхолдера 1>, <Значение плейсхолдера 2>…);
Примеры
Printf(‘Hello, World!’);
Int x = 10;
char name = “John”;
printf(“Hi, %s . You get %d”, name, x * 2 + 3);
Типы поддерживаемых плейсхолдеров %s – строка, %d – целое число, %f – дробное число.
- get – Ввод данных с консоли.
Формат get(<Сообщение>);
Примеры
char name = get('What is your name?');
print(“Hi, ”, name);
char c;
while((c = get("Enter your name")) != '')
{
printf("Hi, %s\n",c);
}
- Sizeof – Размер переменной.
Вычисляет длину строки или количество элементов в массиве.
- Moveto – переместиться к заданным координатам.
Формат moveto(<X>, <Y>);
- Line (Addline) – нарисовать линию от текущего положения до заданных координат.
Формат line(<X>, <Y>);
- Circle – нарисовать окружность
Формат circle(<X>, <Y>, <Радиус>);
- Pixel – нарисовать точку
Формат pixel(<X>, <Y>);
- Setcolor – установить цвет линии
Формат setcolor(<R>, <G>, <B>); // RGB 0...255
- Setwidth – установить толщину линии
Формат setwidth(<Толщина линии>);
- linechart – нарисовать линейную диаграмму
Формат linechart(<массив значений>, <массив названий>);
Пример
float vals[] = {-10,-24,14};
char labels[] = {'January', 'February', 'March'};
linechart(vals, labels);\n"
Пример мультидиаграммы
float vals[];
vals[] = {-10,-24,14,18,28};
vals[] = {10,24,20,18,16};
vals[] = {20,30,25};
char labels[] = {'January', 'February', 'March', 'April', 'May'};
linechart(vals, labels);
- barchart – нарисовать столбчатую диаграмму
Формат barchart(<массив значений>, <массив названий>);
Пример
float vals[] = {-10,-24,14};
char labels[] = {'January', 'February', 'March'};
barchart(vals, labels);\n"
Пример мультидиаграммы
float vals[];
vals[] = {-10,-24,14,18,28};
vals[] = {10,24,20,18,16};
vals[] = {20,30,25};
char labels[] = {'January', 'February', 'March', 'April', 'May'};
barchart(vals, labels);
- piechart – нарисовать круговую диаграмму
Format piechart(<массив значений>, <массив названий>);
Пример
float vals[] = {10,24,14,18,28,40,30,20,15,16,8,4,3,1};
char labels[] = {'January', 'February', 'March', 'April', 'May'};
piechart(vals, labels);\n"