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

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 893
от 01.11.2007, 04:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 480, Экспертов: 68
В номере:Вопросов: 3, Ответов: 5


Вопрос № 106741: Час добрый! В следующей функции (longsum) возникают проблемы с очисткой памяти. Память выделяется, но в конце функции не очищается. Подскажите, как можно сделать функцию вида: c = longsum(a, b) , чтобы избежать всех проблем с памятью. Буду бл...
Вопрос № 106766: Привет всем! Помогите решить задачку с массивами: Дана квадратная матрица <b>n</b>-ого порядка (n<100). Получить массив, k-ый элемент которого равен единице, если все элементы соответствующего столбца равно нулю. Алгоритм (метод решения ...
Вопрос № 106939: Здравствуйте есть макет СТК-500-й. У него 2 -COM-порта. Он нуль-модемным кабелем соединяется с COM-портом компа. Как будет примерно выглядеть приложение на С++ передачи 2 байт от компьютера к com-порту?...

Вопрос № 106.741
Час добрый! В следующей функции (longsum) возникают проблемы с очисткой памяти.
Память выделяется, но в конце функции не очищается. Подскажите, как можно сделать функцию вида: c = longsum(a, b) , чтобы избежать всех проблем с памятью.
Буду благодарен, если будут показаны подробные примеры.

Приложение:

Отправлен: 25.10.2007, 15:05
Вопрос задал: Ufc
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Ufc!

Универсального решения для Вашей проблемы нет. У каждого подхода есть свои прелести и недостатки.
1. Обращение с динамической памятью требует определённой дисциплины, потому нужно указать в описании функции, что возвращённый массив должен быть удалён. Достоинство: никаких изменений в коде метода. Недостатки: невозможно проконтролировать исполнение.
2. Есть такое правило хорошего дизайна: объект создаётся и удаляется тем, кто им пользуется. К сожалению это не всегда возможно: есть производители товаров, а есть потребители. В вашем случае этот подход означает, что буфер должен быть аллоцирован вызывающей функцией и передан Вам в качестве параметра. Достоинства: создание и удажение массива сосредоточены в родном месте и потому легче отслеживаются. Недостатки: нет гарантии, что аллоцирован буфер достаточного размера.
3. Использование классов из стандартных C++ библиотек типа std::string. Очень удобный класс. Сам следит за размером буфера и своевременной очисткой. Недостатки: производительность из-за необхдоимости переаллокаций, операции с буфером только через интерфейс. Но в Вашем случае это не должно быть проблемой, если Вы предварительно предаллоцируете буфер под макимальную длину, как Вы делаете сейчас, а потом будете прописывать данные по цифре.
4. Попытаться создать свой подобный класс. Плюсы: имеете полный контроль и это хорошее упражнение. Минусы: большие затраты по времени + обычно получается не так хорошо как в коде вылизанном профессионалами:)
С моей точки зрения для Вас самый подходящий путь 3.
Ответ отправил: Воробьёв Алексей Викторович (статус: 8-ой класс)
Ответ отправлен: 26.10.2007, 05:57


Вопрос № 106.766
Привет всем!
Помогите решить задачку с массивами:
Дана квадратная матрица n-ого порядка (n<100). Получить массив, k-ый элемент которого равен единице, если все элементы соответствующего столбца равно нулю.
Алгоритм (метод решения и блок-схему я составил), а вот как это написать на Си не знаю.
Жду ответов!
Отправлен: 25.10.2007, 17:58
Вопрос задал: LexXx (статус: Практикант)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, LexXx!
Судя по условию n < 100 речь идёт о статическом массиве. В общем-то, задача совсем простая, смотрите решение в приложении (VS 2005).
Удачи!

Приложение:

---------
Эта история - не для истории, понимаешь?

Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 25.10.2007, 18:23
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!Особенно за комментарии!

Отвечает: Rockie
Здравствуйте, LexXx!
Можно создать функцию, проверяющую нулевые элементы столбца - ColumnHasAllNulls(), и передавать в нее матрицу. Функция вернет 0 - если среди элементов есть отличные от нуля, и вернет единицу - если все элементы колонки равны нулю. Проверяем каждый столбец матрицы и выводим результат. Код в приложении.
p.s.: в таких случаях стоит указывать также компилятор. Адаптировал под TC 3.0

Приложение:

Ответ отправил: Rockie (статус: 5-ый класс)
Ответ отправлен: 25.10.2007, 18:48
Оценка за ответ: 5
Комментарий оценки:
Интересное решение... Большое Спасибо! :)

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, LexXx!

int a[100][100]; // входной массив
int res[100]; // выходной массив

for(int i = 0; i < n; ++i) // по всем столбцам
{
for(int j = 0; j < n && a[j][i] == 0; ++j) // по всем элементам столбца пока нулевые
{
// do nothing
}
res[i] = (j == n) ? 1 : 0; // если дошли до конца (все були нули), то прописываем в результат 1. Иначе - 0
}
Ответ отправил: Воробьёв Алексей Викторович (статус: 8-ой класс)
Ответ отправлен: 26.10.2007, 06:39


Вопрос № 106.939
Здравствуйте есть макет СТК-500-й. У него 2 -COM-порта. Он нуль-модемным кабелем соединяется с COM-портом компа. Как будет примерно выглядеть приложение на С++ передачи 2 байт от компьютера к com-порту?
Отправлен: 26.10.2007, 22:44
Вопрос задал: Alexeev Alexandr Viktorvich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Виктор Пырлик
Здравствуйте, Alexeev Alexandr Viktorvich!

Пример простейшей передачи 2-х байтов в приложении

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Практикант)
Ответ отправлен: 26.10.2007, 23:41
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное