Отправляет email-рассылки с помощью сервиса Sendsay

За 2012-03-23

[prg] Re[7]: Префиксы и постфиксы was: программа на си, печатающая массив из 9 э

Приветствую всех.

> То есть, иными словами генерализируем: при использовании цикла for в си-подобных
> языках с точки зрения семантики и быстродействия корректнее применять префиксную
> форму инкремента или декремента. Я прав или всё же есть нюансы?

Да, правы. Нюансы тоже есть, но обычно они указываются в документации к реализации
языка или в его стандарте.
Конкретно для языка C, поскольку постфиксная форма в цикле for весьма распространена,
то компиляторы, как правило, оптимизируют ее по умолчанию.
Для других языков, где нет реальных простых типов (например, скриптовые языки)
или где в качестве итератора может выступать более сложный объект (в C++), очевидность
такой оптимизации сомнительна (по крайней мере, на нее не стоит уповать).

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

Если креативная энергия бьёт через край, то для всяческих tricks есть соответствующие
конкурсы среди программистов. Там ограничений нет.

Успехов. Анатолий.

   "i_chay" 2012-03-23 22:51:42 (#2411427)

[prg] Re[6]: Префиксы и постфиксы was: программа на си, печатающая массив из 9 э

Vande omentaina, i_chay!

i> Это инкремент (увеличение).

Прошу прощения, зарапортовался :-(.
То есть, иными словами генерализируем: при использовании цикла for в си-подобных
языках с точки зрения семантики и быстродействия корректнее применять префиксную
форму инкремента или декремента. Я прав или всё же есть нюансы?
Спасибо.

   2012-03-23 15:05:24 (#2410862)

[prg] Re[5]: Префиксы и постфиксы was: программа на си, печатающая массив из 9 э

Приветствую всех.

> i> for(i=0; i<length; ++i)
>
> А есть ли в данном случае разница между преддекрементом и постдекрементом?

Это инкремент (увеличение).
Если предыдущее значение не используется, то всегда нужно применять префиксную
форму, так как она явно передает семантику выражения (особенно в C++).
Постфиксная форма имеет другую семантику и на реализацию этой семантики будут
потрачены усилия компилятора и ресурсы во время выполнения.
Конкретно в вышеприведенной строке, когда переменная цикла имеет простой тип
(т. е. явно проецируемый на регистры процессора), эти затраты могут отсутствовать
(особенно если включена оптимизация).
В языке C++ для более сложных типов эти затраты могут быть существенными, так
как постфиксная форма подразумевает сохранение (скорее всего, это будет память)
предыдущего значения перед выполнением операции .

> правильно ли я думаю, что напиши я
> for(i=0; i<length; i++)
> ничего бы не изменилось?

По большому счету, неправильно. Хотя в частном случае и для конкретного компилятора
по вышеназванным причинам это, вероятнее всего, будет верно.

Успехов. Анатолий.

   "i_chay" 2012-03-23 14:39:21 (#2410821)

[prg] Re[4]: программа на си, печатающая массив из 9 элементов в пряммом и обрат

Vande omentaina, i_chay!

i> for(i=0; i<length; ++i)

А есть ли в данном случае разница между преддекрементом и постдекрементом?
правильно ли я думаю, что напиши я
for(i=0; i<length; i++)
ничего бы не изменилось?
Спасибо.

   2012-03-23 13:43:53 (#2410731)

[prg] Re: библиотеки в delphi, с помощью которых можно открыть mp3 файлы

Приветствую всех.

> Один знакомый пытается написать
> программу медиаплеер на языке object pascal в среде Delphi.
[...]
> Нужно, чтобы открывались так
> же форматы, хотя бы mp3 и mp4. в Интернете нашли, что есть какие-то
> сторонние библиотеки, которые позволяют работать с этими файлами.

Никакие сторонние библиотеки для этого не нужны. Всё необходимое уже присутствует
в Windows.
Для воспроизведения мультимедиа-файлов нужно использовать DirectShow. Пусть ваш
знакомый либо учится работать с COM в Delphi, либо ищет родной компонент Delphi
для работы с DirectShow.
Большинство библиотек, которые вам будут рекомендовать, это обёртки поверх DirectShow
или более старой системы кодеков ACM.
Пример использования DirectShow на Delphi можно найти, например, здесь
http://www.ciuly.com/delphi/multimedia/using-directshow-with-dspack-play-multimedia-content-from-stream/

Успехов. Анатолий.

   "i_chay" 2012-03-23 09:47:39 (#2410391)

[prg] Re[3]: программа на си, печатающая массив из 9 элементов в пряммом и обрат

> void array(int *a)
> {
>
> }

Если писать сразу по правилам, то у этой функции нужно поменять имя, чтобы оно
соответствовало тому действию, которое эта функция выполняет.
Обычно в качестве имени функции (или части этого имени) используют глагол.
Второй момент: несмотря на то, что у вас жестко задан размер массива (10 элементов),
функцию можно сделать более универсальной, то есть выводящей на экран массив
любого размера, для чего передавать ей в качестве параметра этот самый размер.
Вот что из этого может получиться (код на "чистом" C):

#include <stdio.h>

void print_array(int* a, int length)
{
/* счетчик циклов */
int i;
/* в прямом порядке */
for(i=0; i<length; ++i)
{
printf("[%d] = %d\n", i, *(a+i));
}

/* в обратном порядке */
for(i=length-1; i>=0; --i)
{
printf("[%d] = %d\n", i, *(a+i));
}
} /* end of print_array */

Для простоты понимания здесь для счетчика циклов использовался тип int, а не
ptrdiff_t (что на большинстве платформ одно и то же).
Вызвать эту функцию можно так:

int main(void)
{
int i =0;
int x[10];
while(i <10)
{
x[i] =i++;
}

print_array(x,10);
return 0;
}

Успехов. Анатолий.

   "i_chay" 2012-03-23 09:22:53 (#2410356)

[prg] Re: исходники на C++

Приветствую всех.

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

Собственно говоря, хорошие учебники так и построены -- код примеров постепенно
усложняется по мере приобретения вами определенных знаний и навыков.
Если же вы хотите параллельно изучать исходники реальных программ, то в вашей
просьбе содержится противоречивое условие "от простейших и по нарастающей...".
Кто же будет для вас индивидуально подбирать исходники и сортировать их в порядке
нарастания сложности???
Берите любой код из открытого проекта (http://sourceforge.net/, http://code.google.com/intl/ru-RU/,
https://github.com/ и т.п.) и изучайте.

> под среду delphi до кучи, а под visual C++, ничего.

Опять же уточняющий вопрос: вы что ищите -- исходники или готовый проект?
Если исходники на C++, то причем здесь конкретная среда разработки?
Если готовый проект именно для Visual C++, то, как вы сами понимаете, хорошие
проекты с этим инструментарием разрабатываются на коммерческой основе, поэтому
их не так часто встретишь среди открытых проектов (но найти можно).
А исходники Delphi в ru-нете , как правило, качеством ниже плинтуса.

> может кто знает где можно взять исходников?

http://www.piter.com/download/

И на сайтах других издательств (см. ссылки в книгах, которые читаете).

Успехов. Анатолий.

   "i_chay" 2012-03-23 08:54:52 (#2410316)