![]() |
Как выяснить размер числового массива?
Тип int
Ограничения: 1. Не используя глобальных переменных. 2. Вернуть из функции размер нельзя, т.к возвращается указатель на массив Память под массив выделена динамически внутри функции. Как выяснить размер массива за пределами функции? И еще один вопрос: как грамотно добавить еще один элемент в конец массива, сохранив все предыдущие. Я копирую, возможно ли это сделать эффективнее? Код:
int* sum(int* n1,int sz1,int* n2,int sz2) |
точно так же как и внутри функции:
Код:
int sz_of_result = max(sz1,sz2); Это называется "ошибка проектирования" - похоже, нужно переписывать не отдельную функцию, а всю программу. |
max(sz1,sz2) это не функция, а макрос, кстати.
Вспомнил, как находить размер. arr_sz=sizeof(x)/sizeof(x[0]); Хотя похоже с динамическими массивами это не работает. Вопрос по прежнему остался. Как определить размер динамического массива и не вылететь за его пределы? Размер массива будет известен только после обработки данных функцией, до этого узнать его нельзя. Изначально даже самой функции вообще неизвестно, сколько элементов будет в массиве, и в целях экономии ресурсов, чтобы не копировать постоянно один массив в другой с увеличением размера, я устанавливаю минимально возможный (имею право, так как по условию задачи числа положительные). Если были бы отрицательные, то только копирование одного массива в другой. Так же как внутри функции устанавливается размер, вне этой функции использовать нельзя. Запускать два раза обработку, чтобы узнать размер и получить указатель нельзя. Нет никаких ошибок в проектировании. |
mrcnn, если ошибок в проектировании нет, то и вопросов возникать возникать не должно о представлении данных внутри программы ;)
А вы даже не знаете, где в вашей программе размер массива ;) |
Busla, Умный, да?
- Взвод идет грузить люминий! - Не люминий, а алюминий, товарищ прапорщик! . - Взвод идет грузить люминий! А самый умный идет грузить чугуний! Пофиг. Буду передавать через глобальную переменную. Мне не жалко. Класс я организовывать не буду и не хочу. |
Предлагаю использовать нулевую ячейку массива для хранения длины . Как string в старом паскале
|
Цитата:
|
Я недостаточно знаю структуры и классы, поэтому будут постоянно ошибки. У меня больше времени уйдет на разбор языка и на борьбу с ошибками, чем на написание программы и на разработку алгоритма. А программу сдать надо завтра и времени переписывать готовое нет..
Я мог бы вообще не писать эту программу, а найти и скачать готовый класс, но я не хочу. И Я БУДУ всегда изобретать новый велосипед и разбираться с деталями, лежащим в основе велосипеда. Без всяких vector, list и т.д STL. Нужно изобретать велосипеды, чтобы не сидеть в говне. Чтобы не покупать велосипеды в магазине за 20 тысяч рублей. Чтобы экономить. Чтобы он был более функциональным, удобным и красивым. И понятным для меня лично. Нужно изобретать велосипеды. |
Цитата:
Ну если очень не хочется, есть ещё способ: Код:
int* calculate(int* arg1, int size1, int* rag2, int size2, int* return_size=0) |
Извините за оффтоп. Время поджимает. Есть задача.
Задается размер массива в ручную (например 7), нужно найти к-ый минимум (например нужно найти 3 минимум) и вывестина экран изначальный массив и этот минимум. Как мне обьяснил препод (и если я его правильно понял), то выглядить это должно примерно так: Программа запрашивает у пользователя в вести размер массива (ввод размера массива в ручную например 7) Далее программа запрашивает, указать какой минимум он хочет найти: (например 3) После этого программа просит ввести массив в ручную (6 2 7 1 8 5 9) И в конце программа должна вывести на экран сам массив и к-ый минимум. Как мне обьяснил препод, программа должна найти первый минимум по отношению ко всему массиву в данном случае это 1, затем второй минимум - 2, потом 3 минимум - 5. Как я понял, то это должно выглядить так: программа находит первый минимум - 1, потом найти следующий минимум и сравнивать его с массивом, но не учитывать первый минимум. P.S. В С++ я не селен, понимаю, но реализовать не могу. Помогите пожайлуста. В понедельник сдавать! Код:
#include <iostream.h> |
скажу честно, код не смотрел. Но подскажу идею, куда копать (С++). Используй частичную сортировку. Код приведён скорее для демонстрации различных фичей стандартной библиотеки, чем шаблона partial_sort. Рабочий, проверял.
Код:
#include <iostream> |
Время: 21:58. |
Время: 21:58.
© OSzone.net 2001-