Вопрос № 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.
Привет всем!
Помогите решить задачку с массивами:
Дана квадратная матрица 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
}
Здравствуйте есть макет СТК-500-й. У него 2 -COM-порта. Он нуль-модемным кабелем соединяется с COM-портом компа. Как будет примерно выглядеть приложение на С++ передачи 2 байт от компьютера к com-порту?