|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как выяснить размер числового массива? |
|
|
C/C++ - Как выяснить размер числового массива?
|
Ветеран Сообщения: 1404 |
Профиль | Отправить PM | Цитировать
Тип int
Ограничения: 1. Не используя глобальных переменных. 2. Вернуть из функции размер нельзя, т.к возвращается указатель на массив Память под массив выделена динамически внутри функции. Как выяснить размер массива за пределами функции? И еще один вопрос: как грамотно добавить еще один элемент в конец массива, сохранив все предыдущие. Я копирую, возможно ли это сделать эффективнее? int* sum(int* n1,int sz1,int* n2,int sz2) { int* result; int cnt_of_result; int sz_of_result = max(sz1,sz2); int tmp,vu,i,mn,cmp; result = new int[sz_of_result]; cnt_of_result = 0; vu = 0; mn=min(sz1,sz2); cmp=compare(n1,sz1,n2,sz2); for (i=0;i < sz_of_result;i++) { if (i < mn) tmp = n1[i]+n2[i]+vu; else { if (cmp==1) tmp = n1[i]+vu; else if (cmp==2) tmp = n2[i]+vu; } if(tmp>=1000) { tmp-=1000; vu = 1; } else vu = 0; result[cnt_of_result]=tmp; cnt_of_result++; } if (vu != 0) { int* cp; cp = new int[sz_of_result+1]; for (i=0;i<sz_of_result;i++) cp[i]=result[i]; cp[cnt_of_result]=vu; print(cp,sz_of_result+1); return(cp); } print(result,sz_of_result); return (result); } |
|
Отправлено: 13:10, 14-12-2008 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:14, 14-12-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать max(sz1,sz2) это не функция, а макрос, кстати.
Вспомнил, как находить размер. arr_sz=sizeof(x)/sizeof(x[0]); Хотя похоже с динамическими массивами это не работает. Вопрос по прежнему остался. Как определить размер динамического массива и не вылететь за его пределы? Размер массива будет известен только после обработки данных функцией, до этого узнать его нельзя. Изначально даже самой функции вообще неизвестно, сколько элементов будет в массиве, и в целях экономии ресурсов, чтобы не копировать постоянно один массив в другой с увеличением размера, я устанавливаю минимально возможный (имею право, так как по условию задачи числа положительные). Если были бы отрицательные, то только копирование одного массива в другой. Так же как внутри функции устанавливается размер, вне этой функции использовать нельзя. Запускать два раза обработку, чтобы узнать размер и получить указатель нельзя. Нет никаких ошибок в проектировании. |
------- Последний раз редактировалось mrcnn, 14-12-2008 в 16:04. Отправлено: 15:37, 14-12-2008 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать mrcnn, если ошибок в проектировании нет, то и вопросов возникать возникать не должно о представлении данных внутри программы
А вы даже не знаете, где в вашей программе размер массива |
Отправлено: 17:40, 14-12-2008 | #4 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Busla, Умный, да?
- Взвод идет грузить люминий! - Не люминий, а алюминий, товарищ прапорщик! . - Взвод идет грузить люминий! А самый умный идет грузить чугуний! Пофиг. Буду передавать через глобальную переменную. Мне не жалко. Класс я организовывать не буду и не хочу. |
|
------- Отправлено: 18:59, 14-12-2008 | #5 |
Забанен Сообщения: 463
|
Предлагаю использовать нулевую ячейку массива для хранения длины . Как string в старом паскале
|
Отправлено: 20:28, 14-12-2008 | #6 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата mrcnn:
|
|
Отправлено: 20:30, 14-12-2008 | #7 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Я недостаточно знаю структуры и классы, поэтому будут постоянно ошибки. У меня больше времени уйдет на разбор языка и на борьбу с ошибками, чем на написание программы и на разработку алгоритма. А программу сдать надо завтра и времени переписывать готовое нет..
Я мог бы вообще не писать эту программу, а найти и скачать готовый класс, но я не хочу. И Я БУДУ всегда изобретать новый велосипед и разбираться с деталями, лежащим в основе велосипеда. Без всяких vector, list и т.д STL. Нужно изобретать велосипеды, чтобы не сидеть в говне. Чтобы не покупать велосипеды в магазине за 20 тысяч рублей. Чтобы экономить. Чтобы он был более функциональным, удобным и красивым. И понятным для меня лично. Нужно изобретать велосипеды. |
------- Отправлено: 09:13, 15-12-2008 | #8 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата mrcnn:
Ну если очень не хочется, есть ещё способ: |
|
Отправлено: 10:14, 15-12-2008 | #9 |
Ветеран Сообщения: 902
|
Профиль | Отправить PM | Цитировать Извините за оффтоп. Время поджимает. Есть задача.
Задается размер массива в ручную (например 7), нужно найти к-ый минимум (например нужно найти 3 минимум) и вывестина экран изначальный массив и этот минимум. Как мне обьяснил препод (и если я его правильно понял), то выглядить это должно примерно так: Программа запрашивает у пользователя в вести размер массива (ввод размера массива в ручную например 7) Далее программа запрашивает, указать какой минимум он хочет найти: (например 3) После этого программа просит ввести массив в ручную (6 2 7 1 8 5 9) И в конце программа должна вывести на экран сам массив и к-ый минимум. Как мне обьяснил препод, программа должна найти первый минимум по отношению ко всему массиву в данном случае это 1, затем второй минимум - 2, потом 3 минимум - 5. Как я понял, то это должно выглядить так: программа находит первый минимум - 1, потом найти следующий минимум и сравнивать его с массивом, но не учитывать первый минимум. P.S. В С++ я не селен, понимаю, но реализовать не могу. Помогите пожайлуста. В понедельник сдавать! #include <iostream.h> #include <stdlib.h> #include <time.h> #include <conio.h> main() { int n, i, k, m; cout<<"Vvedite kolichestvo chisel v massive"<<endl; cin>>n; int A[10]; cout<<"Vvedite, kakoj po schetu minimum nado najti"<<endl; cin>>m; int min, c; for (i=0; i<n; i++) { cout << "Vvod massiva: "; cin >> A[i]; if (A[i]<min) min=A[i]; } cout<<endl; c=1; min = A[0]; for (i=0; i<n; i++) { if (A[i]>min) { min = A[i]; c++;}; if (c==m) { cout<<"Iskomoe znachenie "<< min; break; }; }; if (c<m) cout<<"Trebuemoe znachenie otsutstvuet"; getch(); } |
Отправлено: 09:51, 19-12-2008 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Как присвоить элементы массива в "перетасованном" виде другому массиву? | evg64 | AutoIt | 3 | 27-09-2009 14:09 | |
Как передать в javascript данные массива, полученного из кода на php | vagner_HATE | Вебмастеру | 1 | 18-06-2009 13:51 | |
Как просмотреть винт, вытащенный из Raid массива? | evash | Непонятные проблемы с Железом | 11 | 06-02-2009 09:50 | |
Мой комп шпионят (скрины, keylog). Как выяснить? | GEugene | Защита компьютерных систем | 8 | 02-12-2007 06:08 | |
Сетевые диски как часть единого массива данных | Urutseg | Сетевые технологии | 9 | 22-03-2006 17:08 |
|