язык C в Linux: вопросы начального уровня

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 16 окт 2013, 00:25

Olej писал(а): Наблюдаемое с этим URL не поддаётся объяснению, это нельзя понять:
- обращение из Opera (v.12.16) по имени http://khpi-iip.mipk.kharkiv.edu/librar ... index.html заканчивается ошибкой 404
- обращение из Firefox (v.24.0) , в тот же момент времени, по http://khpi-iip.mipk.kharkiv.edu/librar ... index.html - ОК и мгновенно, влёт...
- обращение из Opera по имени (IP) http://194.44.157.122/library/extent/pr ... index.html - всё OK

Я такого цирка ещё не видел :-o
Но и это ещё не всё :-P - к текущему времени, т.е. по прошествии 4-х часов от предыдущего сообщения, Opera прекрасно открывает URL записанный как http://khpi-iip.mipk.kharkiv.edu/librar ... index.html (а завтра опять перестанет??? :-o ), т.е. разрешение имён в IP успешно происходит...

P.S. (дописано позже): ещё 2 часа, и опять URL в символьном написании недоступен, в записи IP4 - всё ОК.
Это какие-то петли, предполагаю, в ссылочных DNS.

P.P.S. (ещё позже - 16.10.2013 13:20): это уже "что-то с чем-то" :twisted: - теперь уже и FireFox не может подключиться к этому UDL по имени ресурса ... но замечательно делает это по IP (194.44.157.122).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 16 окт 2013, 00:28

Olej писал(а):P.S. Для любителей поразвлекаться архив всего рассказанного выше - прилагается:
В порядке компенсации за потраченное время на предшествующую ... болтовню :-( - новый вариант тестовых задач.
Расширения весьма существенны.
Вложения
examples.tgz
(4.65 КБ) 271 скачивание

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 09 ноя 2013, 12:46

Olej писал(а):Я такого цирка ещё не видел :-o
Пришлось во всех предыдущих сообщениях заменить ссылки на прямые IP адреса : http://194.44.157.122/...
Так хоть как-то можно доступаться к этой библиотеке.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 09 ноя 2013, 13:22

Olej писал(а): Она вдвое толще, чем оригинал K&R - это те задачи и упражнения, что Фьэр добавил.
(как утверждает человек, которому я не могу не доверять ;-) - это лучший сборник задач)

Вот электронный вариант именно самого задачника: А.Фьюэр, Задачи по языку С.
Пересмотрел этот сборник ... вместе с одним из обучающихся C студентов...

Лучший или не лучший (сборник) - вопрос сложный:

1. в самих текстах сборника есть ошибки ... но это вопрос, скорее, не к автору, а к типографии ;-)

2. но что существеннее, многие вопросы там имеют характер головоломок ... типа:

Код: Выделить всё

   z+=-x++ + ++y; PRINTX(x); PRINTX(z);  
... или (достаточно много там) по приоритетам операций в выражении ... но кого должны волновать приоритеты, когда существуют скобки? ;-) - нужно просто выработать привычку не жалеть скобок! ;-)

Куда интереснее могли бы быть вопросы, которые дают не совсем очевидный ответ, из которого возникают, в свою очередь, принципиальные вопросы требующие уточнения и чтения книг ;-)
Например то же:

Код: Выделить всё

   printf( "%d", strlen( "русский текст" ) );

А ещё там может быть не русский текст, китайский текст + ещё более неожиданный результат ;-) .

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 09 ноя 2013, 13:34

Olej писал(а): 2. но что существеннее, многие вопросы там имеют характер головоломок ...
Это же беда всех тестов на собеседованиях ... сколько мне их приходилось видеть, участвовать ... и выдумывать на заказ ;-)
Подавляющее большинство вопросов там - головоломки, которые вовсе не требуют глубокого понимания принципов ни языка C, ни "C в Linux", ни GCC (что может и не надо), ни принципов блочных (структурных) языков, ни компилирующих языков со строгой типизацией вообще (особенностей и ограничений).
Их наборы вопросов кочуют из одного места в другое, HR-подразделения контор ищут их в Интернет, не понимая толком что им надо...

Я предлагаю подключаться в эту тему всех кто:
- имеет отношение к преподаванию;
- интересуется оцениванием уровня знаний (например, те же HR);
- для себя хотел бы вникнуть в глубину семантики языка (и его использования) ... а не гадать чему же будет равно i++ + ++i :lol:

"Подключаться" - это значит предлагать краткие примеры "с нетривиальными последствиями" ... но, самое главное, обсуждение того, какие особенности языка (или смежных вопросов!) затрагивает такой пример.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 09 ноя 2013, 20:27

Olej писал(а): Куда интереснее могли бы быть вопросы, которые дают не совсем очевидный ответ, из которого возникают, в свою очередь, принципиальные вопросы требующие уточнения и чтения книг ;-)
Причём такие интересные вопросы находятся даже по самым простым разделам ... таким как "простейшие скалярные типы данных".
И вообще, они хорошо раскладываются, как я вижу, по таким "разделам":
1. скалярные типы данных C;
2. агрегаты данных;
3. операции и управляющие структуры;
4. функции и вызовы;
5. символьные строки;
6. расширения GCC;

И если по п.п.1,2,3... более-менее обсуждаются вопросы в "классических" учебниках и руководствах, то по п.5 никакой ... Шилдт ;-) (пишущий обо всём и по любому поводу) вам ни слова не расскажет о представлении русских текстов в строках...
Не говоря уже о п.6 ... а ведь тому, кто собирается работать в Linux (UNIX-like вообще), интересуют не "классические" дела в C ... и уж никак не фокусы в MS VisualStudio ...

Я так и поделил на группы тесты (которые показывались выше ... но они постоянно и заметно расширяются):

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ ls
1.c  2.c  3.c  4.c  5.c  6.c  examples.hist  main.c  Makefile

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 09 ноя 2013, 20:37

Olej писал(а): Я так и поделил на группы тесты (которые показывались выше ... но они постоянно и заметно расширяются):

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ ls
1.c  2.c  3.c  4.c  5.c  6.c  examples.hist  main.c  Makefile
Структура всех файлов (приложений) одинакова:

- у них общая часть main(), которая обрабатывает свой массив функций-тестов...

- каждая группа собирается в своё приложение...

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ make
gcc -Wall 1.c -o type
gcc -Wall 2.c -o struct
gcc -Wall 3.c -o opera
gcc -Wall 4.c -o func
gcc -Wall 5.c -o string
gcc -Wall 6.c -o gccex


- при желании, можно собрать то же, но не GCC, а Clang (для сравнения):

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ make clang
clang -xc -Wall 1.c -o typel
clang -xc -Wall 2.c -o structl
clang -xc -Wall 3.c -o operal
clang -xc -Wall 4.c -o funcl
clang -xc -Wall 5.c -o stringl
- поскольку число тестов возросло, и вывод стал уже объёмным, "простыни" ;-) , то для любого приложения можно указать (параметрами) только список тех тестов, которые выполнять из общего числа:

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ ./string 1 2
01 ---------------------------------------
UTF-8 строка: 'русскоязычная строка', длина в байтах = 39
02 ---------------------------------------
преобразование UTF-8 символов в широкие (wchar_t):
преобразованная строка: 'русскоязычная строка'
длина преобразованной строки = 20 символов
------------------------------------------
Вложения
examples.tgz
(7.24 КБ) 258 скачиваний

Аватара пользователя
Виктория
Писатель
Сообщения: 113
Зарегистрирован: 28 дек 2012, 14:05
Откуда: Самара
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Виктория » 10 ноя 2013, 07:27

Olej писал(а):
Olej писал(а): Куда интереснее могли бы быть вопросы, которые дают не совсем очевидный ответ, из которого возникают, в свою очередь, принципиальные вопросы требующие уточнения и чтения книг ;-)
Причём такие интересные вопросы находятся даже по самым простым разделам ... таким как "простейшие скалярные типы данных".
И вообще, они хорошо раскладываются, как я вижу, по таким "разделам":
1. скалярные типы данных C;
2. агрегаты данных;
3. операции и управляющие структуры;
4. функции и вызовы;
5. символьные строки;
6. расширения GCC;

И если по п.п.1,2,3... более-менее обсуждаются вопросы в "классических" учебниках и руководствах, то по п.5 никакой ... Шилдт ;-) (пишущий обо всём и по любому поводу) вам ни слова не расскажет о представлении русских текстов в строках...
Не говоря уже о п.6 ... а ведь тому, кто собирается работать в Linux (UNIX-like вообще), интересуют не "классические" дела в C ... и уж никак не фокусы в MS VisualStudio ...

Я так и поделил на группы тесты (которые показывались выше ... но они постоянно и заметно расширяются):

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ ls
1.c  2.c  3.c  4.c  5.c  6.c  examples.hist  main.c  Makefile
Мне не совсем понятно назначение тестов в преподавании программирования. Почему бы не использовать лишь задачи на "придумать алгоритм и реализовать его в программе"?

Или эти тесты заимствуем из методики изучения иностранного языка? Умения решать задачи - это умения писать осмысленные тексты на иностранном языке, а тесты - умения читать и понимать тексты. Грубое, м.б., сравнение. Зато полезность текстов вроде бы есть.

Я преподаю курс "ПО микропроцессорных систем". Ко мне студенты приходят на 4 курсе.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 10 ноя 2013, 12:26

Виктория писал(а): Мне не совсем понятно назначение тестов в преподавании программирования. Почему бы не использовать лишь задачи на "придумать алгоритм и реализовать его в программе"?

Или эти тесты заимствуем из методики изучения иностранного языка? Умения решать задачи - это умения писать осмысленные тексты на иностранном языке, а тесты - умения читать и понимать тексты. Грубое, м.б., сравнение. Зато полезность текстов вроде бы есть.
Ну, давайте считать, что я неправильно употребил термины ;-) .

Вообще-то, "тесты" я имел в виду не тесты для обучаемого, а тесты для языка программирования C, результаты которых могут быть для обучаемого ... несколько неожиданными, неочевидными ... иногда смешными ;-)

Т.е. это тесты семантики языка С ... пусть будет так.
Виктория писал(а):Я преподаю курс "ПО микропроцессорных систем". Ко мне студенты приходят на 4 курсе.
Вам тогда могут быть интересны ещё и дополнительные особенности, которые вылезают при использовании различных компиляторов с языка C (то, что есть 6-я группа ... задач ;-) ).

Кстати, с какими компиляторами с языка C работают и с какими знакомятся студенты на 4 курсе, изучающие ПО микропроцессорных систем? ;-) (это вопрос серьёзный, хотя и смешной получился по форме).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 10 ноя 2013, 13:45

Виктория писал(а): Мне не совсем понятно назначение тестов в преподавании программирования. Почему бы не использовать лишь задачи на "придумать алгоритм и реализовать его в программе"?
Мы одним словом ("тесты") называем разные вещи.
Вы возмущаетесь тестами типа когда показывают готовый фрагмент кода:

Код: Выделить всё

int X = 2;
X = X + 1;
И где спрашивается в вопросе:
- Ах, деточка, попробуй угадать чему после всего этого станет равно X:
1. 0
2. 3
3. -1

Так меня не менее вашего достали такие тесты! ;-)

Я же говорю о тесте (может его по-другому нужно называть?), когда я говорю:
- Вот есть такой фрагмент (это из архива выше взято):

Код: Выделить всё

void test02( void ) {      // "неточность" вещественных данных
   printf( "все вещественные типы - это только приближённые данные:\n" );
   double rd = 3.14159265358979323846264338327950288419716939937510;
   float rf = rd;
#define FMT "%15.12f"
   printf( FMT" - "FMT" = "FMT"\n", rd, rf, rd - rf );
#undef FMT
}
- Его результат может оказаться не очевидным ... хотя мы из числа (M_PI <math.h>) вычитаем его же и вправе ожидать 0 ;-) :

Код: Выделить всё

olej@notebook:~/2013_WORK/AntonG/examples$ ./type 1
01 ---------------------------------------
все вещественные типы - это только приближённые данные:
 3.141592653590 -  3.141592741013 = -0.000000087423
------------------------------------------
- И вопрос состоит не в том, чтобы угадать результат (что невозможно в принципе), а звучит так: попробуй понять почему так происходит + попытаться сделать отсюда несколько (как можно больше) выводов, предугадать последствий...

А последствий из этого простейшего примера можно сделать немало:
- вещественные значения - это всегда только приближённые представления значений (с некоторой погрешностью);
- никогда нельзя использовать вещественные значения для управления логикой алгоритма (условиями if, условиями циклов и все др.) - результаты могут быть катастрофическими, такими как бесконечные циклы на ровном месте ;-)
- результат вещественных вычислений будет зависеть от архитектуры (от железа: x86, ARM, ...) на его неизменность нельзя рассчитывать ...
- результат вещественных вычислений может зависеть от компилятора (то, в каком виде он представляет float, double ...), от опций компиляции (-O уровень оптимизации и т.п.)
- хуже того, результат вещественных вычислений может задействовать стандартную библиотеку математических функций (sin(), cos(), ...), и тогда результат вычислений может зависеть даже от версии одного и того же компилятора...
- в случаях плохой численной определённости выражений даже результаты решения элементарного квадратного уравнения могут "разбегаться" в разы в зависимости от выбранной точности представления...

И я думаю, что это ещё далеко не все выводы, которые можно сделать, если задуматься над результатом "теста" в 4 строки кода ;-) .

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей