Марк Митчелл - Программирование для Linux. Профессиональный подход

Здесь есть возможность читать онлайн «Марк Митчелл - Программирование для Linux. Профессиональный подход» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2002, ISBN: 2002, Издательство: Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программирование для Linux. Профессиональный подход: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программирование для Linux. Профессиональный подход»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга в основном посвящена программированию в среде GNU/Linux. Авторы применяют обучающий подход, последовательно излагая самые важные концепции и методики использования расширенных возможностей системы GNU/Linux в прикладных программах. Читатели научатся писать программы, к интерфейсу которых привыкли пользователи Linux; освоят такие технологии, как многозадачность, многопотоковое программирование, межзадачное взаимодействие и взаимодействие с аппаратными устройствами; смогут улучшить свои программы, сделав их быстрее, надежнее и безопаснее; поймут особенности системы GNU/Linux, ее ограничения, дополнительные возможности и специфические соглашения.
Книга предназначена для программистов, уже знакомых с языком С и имеющих базовый опыт работы в GNU/Linux.

Программирование для Linux. Профессиональный подход — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программирование для Linux. Профессиональный подход», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

while (1) {

printf("Please enter a postfix expression:\n");

command_to_parse =

fgets(command_line, sizeof (command_line), stdin);

if (command_to_parse = NULL)

return 0;

token = strtok(command_to_parse, " \t\n");

command_to_parse = 0;

while (token != 0) {

if (isdigit(token[0]))

push_stack(&number_stack, string_to_number(token));

else if (((strcmp(token, "+ ") == 0) &&

!apply_binary_function(&add, &number_stack)) ||

((strcmp(token, "-") == 0) &&

!apply_binary_function(&subtract, &number_stack)) ||

((strcmp(token, "*") == 0) &&

!apply_binary_function(&product, &number_stack)) ||

((strcmp(token, "even") == 0) &&

!apply_unary_function(&even, &number_stack)) ||

((strcmp(token, "odd") == 0) &&

!apply_unary_function(&odd, &number_stack)))

return 1;

token = strtok(command_to_parse, " \t\n");

}

if (empty_stack(number_stack))

return 1;

else {

number answer = pop_stack(number_stack);

printf("%u\n", number_to_unsigned_int(answer));

destroy_number(answer);

clear_stack(&number_stack);

}

}

return 0;

}

Функции, приведенные в листинге А.4 выполняют операции над унарными числами, представленными в виде связных списков.

Листинг А.4. ( number.c ) Арифметика унарных чисел

/* Операции над унарными числами */

#include

#include

#include

#include "definitions.h"

/* Создание числа, равного нулю. */

number make_zero() {

return 0;

}

/* Эта функция возвращает ненулевое значение,

если аргумент равен нулю. */

int zerop(number n) {

return n == 0;

}

/* Уменьшение числа на единицу. */

number decrement_number(number n) {

number answer;

assert(!zerop(n));

answer = n->one_less_;

free(n);

return answer;

}

/* Добавление единицы к числу. */

number add_one(number n) {

number answer = malloc(sizeof(struct LinkedListNumber));

answer->one_less_ = n;

return answer;

}

/* Удаление числа. */

void destroy_number(number n) {

while (!zerop(n))

n = decrement_number(n);

}

/* Копирование числа. Эта функция необходима для того,

чтобы при временных вычислениях не искажались

исходные операнды. */

number copy_number(number n) {

number answer = make_zero();

while (!zerop(n)) {

answer = add_one(answer);

n = n->one_less_;

}

return answer;

}

/* Сложение двух чисел. */

number add(number n1, number n2) {

number answer = copy_number(n2);

number addend = n1;

while(!zerop(addend)) {

answer = add_one(answer);

addend = addend->one_less_;

}

return answer;

}

/* Вычитание одного числа из другого. */

number subtract(number n1, number n2) {

number answer = copy_number(n1);

number subtrahend = n2;

while(!zerop(subtrahend)) {

assert(!zerop(answer));

answer = decrement_number(answer);

subtrahend = subtrahend->one_less_;

}

return answer;

}

/* Умножение двух чисел. */

number product(number n1, number n2) {

number answer = make_zero();

number multiplicand = n1;

while (!zerop(multiplicand)) {

number answer2 = add(answer, n2);

destroy_number(answer);

answer = answer2;

multiplicand = multiplicand >one_less_;

}

return answer;

}

/* Эта функция возвращает ненулевое значение, если

ее аргумент является четным числом. */

number even(number n) {

if (zerop(n))

return add_one(make_zero());

else

return odd(n->one_less_);

}

/* Эта функция возвращает ненулевое значение, если

ее аргумент является нечетным числом. */

number odd (number n) {

if (zerop(n))

return make_zero();

else

return even(n->one_less_);

}

/* Приведение строки, содержащей десятичное целое,

к типу "number". */

number string_to_number(char* char_number) {

number answer = make_zero();

int num = strtoul(char_number, (char **)0, 0);

while (num != 0) {

answer = add_one(answer);

--num;

}

return answer;

}

/* Приведение значения типа "number"

к типу "unsigned int". */

unsigned number_to_unsigned_int (number n) {

unsigned answer = 0;

while (!zerop(n)) {

n = n->one_less_;

++answer;

}

return answer;

}

Функции, приведенные в листинге A.5, реализуют стек унарных чисел, представленных в виде связных списков.

Листинг А.5. ( stack.c ) Стек унарных чисел

/* Реализация стека значений типа "number". */

#include

#include

#include "definitions.h"

/* Создание пустого стека. */

Stack create_stack() {

return 0;

}

/* Эта функция возвращает ненулевое значение,

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программирование для Linux. Профессиональный подход»

Представляем Вашему вниманию похожие книги на «Программирование для Linux. Профессиональный подход» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программирование для Linux. Профессиональный подход»

Обсуждение, отзывы о книге «Программирование для Linux. Профессиональный подход» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x