From from-rk на yandex.ru Sun Dec 4 20:20:28 2011 From: from-rk на yandex.ru (=?koi8-r?B?68/exdcg98zBxMnTzMHX?=) Date: Sun, 04 Dec 2011 20:20:28 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LU=?= =?utf-8?b?0Lkp?= Message-ID: <181111323015628@web8.yandex.ru> Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: vector.c Type: application/octet-stream Size: 4994 bytes Desc: отсутствует URL: From tuskahappy на gmail.com Mon Dec 5 16:29:02 2011 From: tuskahappy на gmail.com (Natali Stepanova) Date: Mon, 5 Dec 2011 15:29:02 +0300 Subject: [cdev] =?koi8-r?b?NCDawcTB3sEu?= Message-ID: Здравствуйте, у меня возникли некоторые вопросы по задаче No.5. 1. По какому критерию сравнивать элементы и в какой тип их преобразовывать? 2. Каким образом генерировать данные? 3. Можно ли сводить к целочисленным используя указатели? 4. Что значит "Функцию элементов массива можно задать при задании массива "? 5. Нужно ли показывать результат выполнения функций? -- Натали)) ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From rg-400 на list.ru Mon Dec 5 17:11:05 2011 From: rg-400 на list.ru (rg-400) Date: Mon, 05 Dec 2011 17:11:05 +0400 Subject: [cdev] =?utf-8?b?NCDQt9Cw0LTQsNGH0LAu?= In-Reply-To: References: Message-ID: <4EDCC2E9.3060006@list.ru> >Subject: [cdev] 4 задача. > ...у меня возникли некоторые вопросы по задаче ?5 Так какая задача? From sitkarev на komitex.ru Mon Dec 5 20:09:35 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 05 Dec 2011 19:09:35 +0300 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <181111323015628@web8.yandex.ru> References: <181111323015628@web8.yandex.ru> Message-ID: <4EDCECBF.1020503@komitex.ru> Ребята, это брак. Для начала, разберитесь со стилем, я повторял это много раз. Возьмите любое классическое руководство, будь то style(8) из *BSD и прочитайте что такое KNF (Kernel Normal Form) и далее придерживайтесь его. Заголовок включал прототипы функций, некоторых у вас нет, некоторые ему не соответствуют. Весь memory management у вас безобразный и сделан неверно. У вас стоит задача написать функции для включения в API библиотеки. Там не может быть никогда ничего на stdout, т.к. никто не гарантирует что этот код будет использоваться в интерактивных программах, ассоциированных с терминалом. У демонов stdout обычно направлен в /dev/null, и сообщения диагностические и отладочные могут идти только на stderr. Нельзя делать комментарии и сообщения на русском. У нас lingua franca это английский. Это заодно и страховка от излишней "болтливости" в комментариях. Это брак, вы должны разбираться и переделывать всё. -- Г.А. 04.12.2011 19:20, Кочев Владислав пишет: > Здравствуйте, посмотрите пожалуйста нашу программу. > > > > _______________________________________________ > cdev mailing list > cdev на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev From sitkarev на komitex.ru Mon Dec 5 20:18:14 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 05 Dec 2011 19:18:14 +0300 Subject: [cdev] =?utf-8?b?NCDQt9Cw0LTQsNGH0LAu?= In-Reply-To: References: Message-ID: <4EDCEEC6.3060009@komitex.ru> Видимо, речь идёт о задаче "бинарное дерево". > 1. По какому критерию сравнивать элементы и в какой тип их преобразовывать? По какому критерию сравнивать -- это известно только тому, кто собрался в вашем дереве что-то хранить. Поэтому в функции bin_tree_new() первым аргументом пользователь должен был передать функцию, которую в свою очередь ваш код может вызывать для сравнения двух элементов. Эта функция должна возвращать значения 1, -1 или 0, что соответственно означает "элемент A больше, меньше или равен элементу B". > 2. Каким образом генерировать данные? Это ваше дело. Реализация общего применения для задач реального мира. Как вы будете проверять -- это зависит от вас. Нужно чтобы все случаи были рассмотрены и каждая ветка кода была протестирована. > 3. Можно ли сводить к целочисленным используя указатели? Если это по какой-то причине нужно -- сводите. > 4. Что значит "Функцию элементов массива можно задать при задании массива > "? Не понятно, в каком контексте вопрос. > 5. Нужно ли показывать результат выполнения функций? Это ваше дело. Мне нужен код, проверенный и хорошо написанный. Тест вы в любом случае будете писать: очевидно, что результат каким-то образом нужно анализировать на корректность. -- Г.А. From from-rk на yandex.ru Mon Dec 5 21:16:59 2011 From: from-rk на yandex.ru (=?koi8-r?B?68/exdcg98zBxMnTzMHX?=) Date: Mon, 05 Dec 2011 21:16:59 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LU=?= =?utf-8?b?0Lkp?= Message-ID: <39121323105419@web2.yandex.ru> Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Mon Dec 5 21:38:25 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 05 Dec 2011 20:38:25 +0300 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <39121323105419@web2.yandex.ru> References: <39121323105419@web2.yandex.ru> Message-ID: <4EDD0191.3000605@komitex.ru> 05.12.2011 20:16, Кочев Владислав пишет: > Здравствуйте, страшно, но рискну с Вами вступить в дисскусию. > При нарушении формы ядра программа работать не будет, поэтому подскажите, где > нарушение Kernel Normal Form? Не тех боитесь. KNF это стиль оформления Си программ. > "Весь memory management у вас безобразный и сделан неверно". Я выделяю память > массиву и освобождаю ее при удалении элемента, в какой конкретно функции, что не > так? 1. malloc(3) может не сработать и вернуть NULL. Нигде не проверяется что он возвращал. 2. realloc(3) может не сработать и вернуть NULL, в таком случае вы затрёте рабочий указатель на выделенный блок памяти в структуре. 3. Изменять размер блока памяти, где хранятся указатели, надо не каждый раз при добавлении, а сразу выделять блок большего размера а затем заполнять его, поддерживая счётчик занятых и выделенных мест для указателей. Если окажется, что места для добавления очередного указателя нет, тогда размер блока увеличивается в два раза, через realloc(3). 4. parray_free() должен освобождать все ресурсы, занимаемые массивом указателей. Кроме этого, его декларация не соответствует прототипу в заголовке, предложенного вам. Это важно. Г.А. From from-rk на yandex.ru Tue Dec 6 19:53:35 2011 From: from-rk на yandex.ru (=?koi8-r?B?68/exdcg98zBxMnTzMHX?=) Date: Tue, 06 Dec 2011 19:53:35 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LU=?= =?utf-8?b?0Lkp?= Message-ID: <109681323186815@web76.yandex.ru> Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: vector.c Type: text/x-csrc Size: 5594 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Tue Dec 6 23:58:16 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 06 Dec 2011 22:58:16 +0300 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <109681323186815@web76.yandex.ru> References: <109681323186815@web76.yandex.ru> Message-ID: <4EDE73D8.5010602@komitex.ru> Вы ничего не исправили по сути-то. Я ещё раз настаиваю на том чтобы вы прочитали style(9) и использовали KNF для этой задачи. http://www.freebsd.org/cgi/man.cgi?query=style&sektion=9 У вас же полный бардак со стилем, "кто в лес, кто по дрова". Как работает memory management в Си вы не понимаете и пока не разобрались. Всё что вы "исправили", работать не будет. То что оно, как вам показалось, работает -- лишь следствие куда как скромного размера данных, которые вы помещаете в массив. Как только вы выйдете за границу в 10 элементов, ваша библиотека уже повредит чью-то память или служебные области в ней. Включать этот код куда-то в проект просто категорически нельзя. Внимательно прочитайте man-страницы malloc(3), realloc(3) и free(3). Настоятельно рекомендую прочитать руководство по GNU C Library, а именно раздел 3, "Virtual Memory Allocation And Paging". В основном, всё что там написано, будет верно и для любой другой Unix-like ОС. http://www.gnu.org/software/libc/manual/html_node/Memory.html В очередной раз код придётся выбраковывать. -- Г.А. 06.12.2011 18:53, Кочев Владислав пишет: > Здравствуйте, исправили замечания, просьба оценить. From from-rk на yandex.ru Wed Dec 7 12:07:47 2011 From: from-rk на yandex.ru (=?koi8-r?B?68/exdcg98zBxMnTzMHX?=) Date: Wed, 07 Dec 2011 12:07:47 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LU=?= =?utf-8?b?0Lkp?= Message-ID: <398551323245267@web24.yandex.ru> Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Wed Dec 7 20:21:18 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Wed, 07 Dec 2011 19:21:18 +0300 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <398551323245267@web24.yandex.ru> References: <398551323245267@web24.yandex.ru> Message-ID: <4EDF927E.8010600@komitex.ru> Всех приветствую. 07.12.2011 11:07, Кочев Владислав пишет: > Здравствуйте, по поводу предыдущего замечания: > >"realloc(3) может не сработать и вернуть NULL, в таком случае вы > затрёте рабочий указатель на выделенный блок памяти в структуре. " > Память не затирается, т.к<цитата>: "Если запрос выполнить не > удается или новый размер равен нулю, возвращается NULL. Если вызов > realloc() завершился неудачно, то старый блок памяти остается > нетронутым: он не освобождается и не перемещается" > Честно говоря, я не вижу ошибок, все делали точь в точь как описано по ссылкам, > которые вы дали. Понимаете в чём дело, если бы я вас был вынужден набирать команду под проект и вы бы ко мне оба пришли наниматься как программисты, мне бы пришлось с вами уже распрощаться. - Во-первых, потому что вы воспринимаете любое замечание как критику лично вас, а не вашего кода. - Во-вторых, потому что вы категорически не способны сами разбираться в своих же ошибках, даже в том случае если вам укажут что "это работать не будет". - В-третьих, вы не умеете читать, а точнее, извлекать информацию из текста. Может быть вы и прочитали всё что я просил, но выводов и анализа не сделали. > В прошлый раз вы сказали, что > > "1. malloc(3) может не сработать и вернуть NULL. Нигде не проверяется что > он возвращал. > > 2. realloc(3) может не сработать и вернуть NULL, в таком случае вы > затрёте рабочий указатель на выделенный блок памяти в структуре. > > 3. Изменять размер блока памяти, где хранятся указатели, надо не каждый > раз при добавлении, а сразу выделять блок большего размера а затем > заполнять его, поддерживая счётчик занятых и выделенных мест для > указателей. Если окажется, что места для добавления очередного указателя > нет, тогда размер блока увеличивается в два раза, через realloc(3). > > 4. parray_free() должен освобождать все ресурсы, занимаемые массивом > указателей. Кроме этого, его декларация не соответствует прототипу в > заголовке, предложенного вам. Это важно. " > Вы в прошлый раз сказали еще, что нужно отслеживать была ли выделена память, > добавили тоже. > Это все исправили ведь, что еще может быть не так? > ps. Стиль еще будем смотреть. Т.к. у вас в голове модель ментальная memory management не верно сложилась, вы полагаете что вы "всё исправили". На самом деле, вы, пытаясь исправить, наделали ещё больше ошибок. Я категорически не люблю тыкать конкретно в какое-то место, по той причине что вы опять же бездумно просто переправите на так как я напишу, а в следующий раз будете делать точно такие же ошибки, потому что в сути проблемы вы не разобрались. realloc(3) не гарантирует что он выделит блок памяти запрошенного размера, но он также не гарантирует что при увеличении блока его начальный адрес останется прежним. Вы, утверждая что прочитали всё что я вам дал, этого не поняли и с семантикой realloc(3) не разобрались. Вот вырезка из parray_add(). Скобки, кстати, безобразно расставлены. И никаких `;' после них не нужно, это не определения структур и не завершения выражений. ---------------------->8------------------------------- /* * Здесь неверно определяется условие для увеличения * размера блока. Условие должно быть V->Count == V->SIZE. * Иначе говоря, "места больше нет тогда, когда хранится * указателей уже столько, сколько их было выделено". */ if (V->Count+1 == V->SIZE){ void *p; /* * Здесь realloc(3) в p может вернуть адрес * не равный V->DATA. Содержимое старого блока * будет перемещено в новый блок, это realloc(3) * выполняет самостоятельно. */ p = realloc(V->DATA, V->SIZE*sizeof(void *)*2); if (p == NULL){ fprintf(stderr, "can't realloc parray data\n"); return -1; }; /* * Новый адрес блока из p, который может не совпадать * со старым адресом блока, никуда не сохраняется. * Изменяется только поле размера блока. */ V->SIZE *= 2; }; /* * Здесь уже может быть или: * - затёрто слово в другом блоке памяти, не относящиеся * к блоку, размер которого хотелось изменить, т.к. * его начальный адрес уже не находится в V->DATA; * - затёрто слово в другом блоке или служебных структурах * аллокатора, т.к. блок нужно было увеличить, но условие * увеличения блока в `if ()' ошибочно. */ V->DATA[V->Count] = p; ----------------------8<------------------------------- Как и почему это нужно исправлять -- думайте сами. Причину, по которой я этого не делаю за вас, я уже объяснил. -- Г.А. From sevahx на mail.ru Sun Dec 11 22:59:12 2011 From: sevahx на mail.ru (=?UTF-8?B?c2VyaiB2YWg=?=) Date: Sun, 11 Dec 2011 22:59:12 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= Message-ID: Здравствуйте, проверьте пожалуйста. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 5799 bytes Desc: отсутствует URL: From from-rk на yandex.ru Wed Dec 21 23:27:21 2011 From: from-rk на yandex.ru (=?koi8-r?B?68/exdcg98zBxMnTzMHX?=) Date: Wed, 21 Dec 2011 23:27:21 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LU=?= =?utf-8?b?0Lkp?= Message-ID: <128311324495641@web66.yandex.ru> Вложение в формате HTML было извлечено… URL: From rg-400 на list.ru Wed Dec 21 23:32:56 2011 From: rg-400 на list.ru (rg-400) Date: Wed, 21 Dec 2011 23:32:56 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <128311324495641@web66.yandex.ru> References: <128311324495641@web66.yandex.ru> Message-ID: <4EF23468.5020709@list.ru> Приаттачить исходник забыли. From from-rk на yandex.ru Thu Dec 22 05:07:36 2011 From: from-rk на yandex.ru (=?koi8-r?B?68/exdcg98zBxMnTzMHX?=) Date: Thu, 22 Dec 2011 05:07:36 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LU=?= =?utf-8?b?0Lkp?= Message-ID: <206141324516056@web60.yandex.ru> Вложение в формате HTML было извлечено… URL: From rg-400 на list.ru Thu Dec 22 06:45:52 2011 From: rg-400 на list.ru (rg-400) Date: Thu, 22 Dec 2011 06:45:52 +0400 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <206141324516056@web60.yandex.ru> References: <206141324516056@web60.yandex.ru> Message-ID: <4EF299E0.3030307@list.ru> В parray_delete_nth: не предусмотрен случай с удалением последнего элемента(обращение к несуществующему элементу массива). Некоторые аргументы передаваемые функциям стоило бы проверять. Имена переменных в нижнем регистре пишут обычно. /* опасный кусок int i; for (i = 0; i <= V->Count-1; i++) */ Сколько раз этот код напишет "infinty" и почему? /* int i; size_t count = 0; for (i = 0; i <= count - 1; i++) { printf("infinty"); } */ Еще лучше использовать size_t когда бегаешь по памяти, вместо int. И нет функций: int parray_delete(struct parray *V, void *ptr); void parray_free(struct parray **V); From sitkarev на komitex.ru Thu Dec 22 09:24:09 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Thu, 22 Dec 2011 08:24:09 +0300 Subject: [cdev] =?utf-8?b?0JfQsNC00LDRh9CwIOKEljQgKNCa0L7Rh9C10LIg0JLQu9Cw?= =?utf-8?b?0LTQuNGB0LvQsNCyLCDQktCw0YXRgNGD0YjQtdCyINCh0LXRgNCz0LXQuSk=?= In-Reply-To: <206141324516056@web60.yandex.ru> References: <206141324516056@web60.yandex.ru> Message-ID: <4EF2BEF9.1050100@komitex.ru> Всех приветствую. Я вам просто поставлю зачёт. Комментировать уже, честно говоря, нету сил никаких. Вам нужно очень много ещё где закрыть пробелов, нужно много читать, смотреть хорошие чужие исходники, но главное -- иметь горячее желание этим заниматься, хорошо осваивая профессию. Практически, к сожалению, ваш код использовать нельзя. Егор добавил комментарии по существу, согласитесь, что вы должны были обнаружить эти ошибки сами. На мой взгляд, ваша ментальная модель языка и машины, предоставляемой им, на сегодняшний день не соответствует действительности. Это основная причина ваших ошибок. Вам пока не удалось освоить и принять культуру программирования, её идиомы и традиции. Время у вас ещё есть, надеюсь что в следующем году ситуация выправится. С надеждой, -- Г.А. 22.12.2011 04:07, Кочев Владислав пишет: > Сережа уже отправлял неделю назад их, не дождались еще пока комментарийев From ksenya_arueva на mail.ru Sat Dec 24 19:58:55 2011 From: ksenya_arueva на mail.ru (=?UTF-8?B?0LrRgdC10L3QuNGPINCw0YDRg9C10LLQsA==?=) Date: Sat, 24 Dec 2011 19:58:55 +0400 Subject: [cdev] =?utf-8?b?INC30LDQtNCw0YfQsCDihJYxKNCa0YHQtdC90LjRjyDQkNGA?= =?utf-8?b?0YPQtdCy0LAsINCh0L/QsNGB0LjQsdCwINCQ0L3QsNGB0YLQsNGB0LjRjyk=?= Message-ID: Здравствуйте,Григорий Александрович!Проверьте пожалуйста нашу задачу. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 3390 bytes Desc: отсутствует URL: From XXLaGR на yandex.ru Sun Dec 25 22:25:35 2011 From: XXLaGR на yandex.ru (=?koi8-r?B?7cXM2M7Jy8/XIOHS08XOyco=?=) Date: Sun, 25 Dec 2011 22:25:35 +0400 Subject: [cdev] =?utf-8?b?INCX0LDQtNCw0YfQsCDihJYyINCc0LXQu9GM0L3QuNC60L4=?= =?utf-8?b?0LIg0JDRgNGB0LXQvdC40Lkg0Lgg0KjQuNGA0Y/QtdCyINCQ0L3QtNGA?= =?utf-8?b?0LXQuQ==?= Message-ID: <511901324837535@web117.yandex.ru> Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: list.c Type: application/octet-stream Size: 4040 bytes Desc: отсутствует URL: From tuskahappy на gmail.com Thu Dec 29 23:21:24 2011 From: tuskahappy на gmail.com (Natali Stepanova) Date: Thu, 29 Dec 2011 22:21:24 +0300 Subject: [cdev] =?koi8-r?b?+sHEwd7BIE5vLjU=?= Message-ID: -- Натали)) ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: bin_tree.c Type: text/x-csrc Size: 3112 bytes Desc: отсутствует URL: