From sitkarev на komitex.ru Sat Nov 20 23:32:39 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 20 Nov 2010 22:32:39 +0300 Subject: [cdev] =?utf-8?b?0KHQstGR0YDRgtC60LAgKGNvbnZvbHV0aW9uKSDQv9C+0LQ=?= =?utf-8?b?0YHRh9GR0YIg0L/QviDRgtC10L7RgNC10YLQuNGH0LXRgdC60L7QuSDRhNC+?= =?utf-8?b?0YDQvNGD0LvQtQ==?= Message-ID: <4CE82257.4050206@komitex.ru> В файле convolve.c две функции: convolve считает свёртку относительно входного сигнала x[n] convolve2 считает свёртку относительно выходного сигнала y[n] В graph.plt скрипт для gnuplot(1). В convolve.c используется функция sin(3) из libm.so так что его нужно линковать с -lm. Чтобы построить графики, нужно передать файл скрипта на стандартный ввод утилиты gnuplot(1) вот так: $ gnuplot -persist < graph.plt -- Г.А. ----------- следущая часть ----------- An embedded and charset-unspecified text was scrubbed... Name: graph.plt URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: convolve.c Type: text/x-csrc Size: 1846 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Mon Nov 22 21:04:31 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 22 Nov 2010 20:04:31 +0300 Subject: [cdev] =?utf-8?b?0KHQstGR0YDRgtC60LAgKGNvbnZvbHV0aW9uKSDQv9C+0LQ=?= =?utf-8?b?0YHRh9GR0YIg0L/QviDRgtC10L7RgNC10YLQuNGH0LXRgdC60L7QuSDRhNC+?= =?utf-8?b?0YDQvNGD0LvQtQ==?= In-Reply-To: <4CE82257.4050206@komitex.ru> References: <4CE82257.4050206@komitex.ru> Message-ID: <4CEAA29F.2080302@komitex.ru> В convolve2 я не дошёл до конца выходного сигнала. Здесь исправлено. -- Г.А. Grigoriy A. Sitkarev пишет: > В файле convolve.c две функции: > > convolve > считает свёртку относительно входного сигнала x[n] > convolve2 > считает свёртку относительно выходного сигнала y[n] ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: convolve.c Type: text/x-csrc Size: 1841 bytes Desc: отсутствует URL: From ksun_91 на mail.ru Mon Nov 29 23:26:37 2010 From: ksun_91 на mail.ru (=?koi8-r?Q?=EB=D3=C5=CE=C9=D1_=EF=C2=CF=D4=D5=D2=CF=D7=C1?=) Date: Mon, 29 Nov 2010 22:26:37 +0300 Subject: [cdev] =?koi8-r?b?+sHEwd7BIDQsIDEzNcfS?= Message-ID: Григорий Александрович, а объясните еще раз что должна делать эта функция в задаче 4(массив указателей) /* Traverse pointer array calling callback function for each element. */ void *parray_foreach(struct parray *pa, parray_callback_t callback, void *opaque); ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Tue Nov 30 01:20:01 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 30 Nov 2010 00:20:01 +0300 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIDQsIDEzNdCz0YA=?= In-Reply-To: References: Message-ID: <4CF41901.3080501@komitex.ru> Объясню. Очень простая функция, пользователь что-то хранит в массиве - указатели на свои данные. Ему может понадобиться сделать обход всех этих данных - по указателям, которые хранятся в массиве. Для этого пользователь пишет функцию, интерфейс которой соответствует типу parray_callback_t (его мы определили для удобства в заголовке) а затем натравливает parray_foreach() на массив. Указатель opaque указывает на произвольные данные, которые должны потом быть переданы в callback (функцию пользователя) как последний аргумент. Т.к. функция parray_foreach() обходит все элементы массива, пользователь может сигнализировать из своей функции о том что обход можно завершить, вернув не нулевое значение. Например, пользователь хочет печатать что-то: static int print_user_data(void *data, void *opaque) { struct user_data *up = (struct user_data *) data; float *flp = (float *) opaque; printf("%f %d\n", *flp, up->age) return 0; } Дальше где-то в другом месте: { struct parray *pa; float value; ... value = 10.0; parray_foreach(pa, print_user_data, &value); ... } Здесь в opaque мы передали адрес переменной, к которой мы потом сможем получить доступ внутри print_user_data - это для примера. А так там может быть адрес чего угодно, в этом весь смыл был его делать, пользовательская функция сама должна разобраться. По реализации, там всё вроде бы ясно. В цикле обходите массив, дёргаете callback, смотрите что он вернул, если 0 то продолжаете дальше иначе завершаете цикл. -- Г.А. Ксения Оботурова пишет: > Григорий Александрович, а объясните еще раз что должна делать эта функция в задаче 4(массив указателей) > > /* Traverse pointer array calling callback function for each element. */ > void *parray_foreach(struct parray *pa, parray_callback_t callback, void *opaque); . From ksun_91 на mail.ru Tue Nov 30 22:51:00 2010 From: ksun_91 на mail.ru (=?koi8-r?Q?=EB=D3=C5=CE=C9=D1_=EF=C2=CF=D4=D5=D2=CF=D7=C1?=) Date: Tue, 30 Nov 2010 21:51:00 +0300 Subject: [cdev] =?koi8-r?b?2sHEwd7BIDQsIDEzNcfS?= Message-ID: а функция callback что делает? вот функция compare сравнивала данные пользователя. А это что? ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From rg-400 на list.ru Tue Nov 30 23:01:51 2010 From: rg-400 на list.ru (jam) Date: Tue, 30 Nov 2010 22:01:51 +0300 Subject: [cdev] =?koi8-r?b?2sHEwd7BIDQsIDEzNcfS?= In-Reply-To: References: Message-ID: <1291143711.2668.6.camel@jam> это не функция, а указатель на нее. А вот функция, адрес которой будет передан функции parray_foreach, может делать что угодно. Сообщением выше уже был пример такой функции : static int print_user_data(void *data, void *opaque) и пример вызова parray_foreach. Обрати внимание на второй аргумент. В Втр, 30/11/2010 в 21:51 +0300, Ксения Оботурова пишет: > а функция callback что делает? > вот функция compare сравнивала данные пользователя. А это что? > > > _______________________________________________ > cdev mailing list > cdev на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev From sitkarev на komitex.ru Tue Nov 30 23:07:14 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 30 Nov 2010 22:07:14 +0300 Subject: [cdev] =?utf-8?b?0LfQsNC00LDRh9CwIDQsIDEzNdCz0YA=?= In-Reply-To: References: Message-ID: <4CF54B62.2010306@komitex.ru> Что захочет то и делает. Это пользователю виднее. Короче говоря, пользователь хочет сделать что-то с каждым элементом (или только с их частью) в массиве. Вот и написал эту функцию а потом вызывает parray_foreach() (переводится это как массивуказателей_длякаждого(), да простят меня K&R), что она делает для нас не важно, нужно предоставить пользователю такую возможность и всё. В этом весь смысл - мы пишем абстрактные типы. Что там пользователь захочет делать мы не знаем, но даём ему все возможности сделать это просто и удобно. Если не можете придумать что делать в callback - пусть печатает указатели data просто и всё. -- Г.А. Ксения Оботурова пишет: > а функция callback что делает? > вот функция compare сравнивала данные пользователя. А это что? From sitkarev на komitex.ru Tue Nov 30 23:12:00 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 30 Nov 2010 22:12:00 +0300 Subject: [cdev] =?utf-8?b?0LfQsNC00LDRh9CwIDQsIDEzNdCz0YA=?= In-Reply-To: <1291143711.2668.6.camel@jam> References: <1291143711.2668.6.camel@jam> Message-ID: <4CF54C80.406@komitex.ru> jam пишет: > это не функция, а указатель на нее. > > А вот функция, адрес которой будет передан функции parray_foreach, > может делать что угодно. > > Сообщением выше уже был пример такой функции : > static int print_user_data(void *data, void *opaque) > и пример вызова parray_foreach. Обрати внимание на второй аргумент. Да, там действительно был пример. Из него всё должно быть понятно. -- Г.А.