Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2013, 00:05   #1
Lifesteal21
Новичок
Джуниор
 
Регистрация: 24.12.2013
Сообщений: 1
По умолчанию С++ Массивы

Здравствуйте! Прошу вас о помощи! Помогите пожалуйста написать код программы!
"Дан массив чисел, содержащий n элементов. Записать в этот же массив сначала все отрицательные числа и нули, затем все положительные, сохраняя порядок их следования. "
буду очень признателен!
Lifesteal21 вне форума Ответить с цитированием
Старый 24.12.2013, 00:14   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

что значит записать? ДОписать, или отсортировать массив таким образом, чтобы сначала шли отрицательные, нули, положительные?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 24.12.2013, 07:57   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
ДОписать, или отсортировать массив таким образом
отсортировать.
Только сортировка не должна затронуть порядок следования элементов.
например, если есть массив:
5, -7, 1, 0, -2, 15, -17, 0, 25, -1
после преобразования в массиве должно быть:
-7, 0, -2, -17, 0, -1, 5, 1, 15, 25

теперь по поводу решения.
на форуме такая задача решалась не однократно.
Если в условии нет ограничения на использование дополнительного массива, то задача вообще решается ТРИВИАЛЬНО, например, "в лоб" за два проход по исходному массиву.
А вот если запрещено использовать дополнительный массив, тогда уже решение задачки совсем не так очевидно. Но тоже вполне себе выполнимо. (поиском по форуму найдёте алгоритм/код решения).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2013, 09:09   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Serge_Bliznykov
у него сказано "записать"
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 24.12.2013, 09:29   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Serge_Bliznykov
у него сказано "записать"
точно так.
сказано "записать", это, имхо, означает, присвоить элементам массива указанные значения.
я, по крайней мере, так эту задачу понимаю.
А что, если другие толкования понятия "записать в этот же массив"?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.12.2013, 07:58   #6
Shahzod
Пользователь
 
Регистрация: 25.06.2013
Сообщений: 21
По умолчанию

Поможем этому товарищу, или спорим из-за ошибки?
Код:
int n;
cout << "n = ";
cin >> n;
float *a = new float[n + 1], *b = new float [n + 1];
for(int i = 1; i <= n; i++){
    cout << "a[" << i << "] = ";
    cin >> a[i];
}
int hisob = 1;
for(int i = 1; i <= n; i++)
    if(a[i] <= 0)
        b[hisob++] = a[i];
for(int i = 1; i <= n; i++)
    if(a[i] > 0)
        b[hisob++] = a[i];
for(int i = 1; i <= n; i++)
    a[i] = b[i];
delete [] b;
// теперь массив a готов!!!
delete [] a;
Can I be a happy, if my program every time shows me: YOU ARE HAPPY!!!???

Последний раз редактировалось Shahzod; 25.12.2013 в 21:50.
Shahzod вне форума Ответить с цитированием
Старый 25.12.2013, 10:42   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Цитата:
Сообщение от Shahzod Посмотреть сообщение
Поможем этому товарищу, или спорим из-за ошибки?
Код:
float n;
cout << "n = ";
cin >> n;
float *a = new float[n + 1], *b = new float [n + 1];
for(int i = 1; i <= n; i++){
    cout << "a[" << i << "] = ";
    cin >> a[i];
}
int hisob = 1;
for(int i = 1; i <= n; i++)
    if(a[i] <= 0)
        b[hisob++] = a[i];
for(int i = 1; i <= n; i++)
    if(a[i] > 0)
        b[hisob++] = a[i];
for(int i = 1; i <= n; i++)
    a[i] = b[i];
delete [] b;
// теперь массив a готов!!!
Есть пара вопросов...
1) Зачем объявлять переменную n как float?
2) Что у вас происходит с нулевым элементом массива a? (индексация на сколько я помню идет с 0)
3) Зачем n + 1?
Код:
n + 1
4) Память которую занимает массив a освобождать нужно?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 25.12.2013 в 10:45.
Bugrimov вне форума Ответить с цитированием
Старый 25.12.2013, 11:40   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <iostream>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
	int arr[] = { 4, -2, 6, 8, 0, -3, -7, 8, -4, -1, 0, 1, -9, -8 };
	int *end = arr + sizeof(arr) / sizeof(arr[0]);

	cout << "source arr:" << endl;
	copy(arr, end, ostream_iterator<int>(cout, " "));
	cout << endl;

	int *it = arr;
	size_t offset = 0;
	while ((it = find_if(it, end, bind2nd(less_equal<int>(), 0))) != end) {
		int *it2 = it;
		while (it2 != arr + offset) {
			swap(*it2, *(it2 - 1));
			--it2;
		}
		++it;
		++offset;
	}

	cout << "dest arr:" << endl;
	copy(arr, end, ostream_iterator<int>(cout, " "));
	cout << endl;

	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 25.12.2013, 21:45   #9
Shahzod
Пользователь
 
Регистрация: 25.06.2013
Сообщений: 21
По умолчанию

На счет пунктов 1 и 4 я действительно ошибался. Размер массива должен бить типа целого и память я забыл освободить. 2 и 3 ые пункты: раньше я использовал для программирования язык Паскаль, и там индекс массива начинается с единицы. Я привык к этому. В С++ не использую нулевой индекс, а в конце массива добавляю индекс n + 1. Получается как у Паскаля.
Can I be a happy, if my program every time shows me: YOU ARE HAPPY!!!???
Shahzod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12