Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переворачивание массива. 
:(
    Опции темы
Wowa
Дата 16.2.2005, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Условия задачи таковы:
Дан массив со 100 элементами, который наполнен числами от 0 до 99 в обратном порядке.
Задача сделать алгоритм/написать программу, которая перевернет этот массив.

вот мои труды:

Код

#include <iostream>
#include <string>

using namespace std;


void insert(int* a) {

for (int i=99; i>=0; i--) {
 a[99-i]=i;
}

}

void sort(int* a) {
int tmp;
for (int i=0; i<=49; i++) {
 tmp=a[i];
 a[i]=a[99-i];
 a[99-i]=tmp;
}

}

void print(int* a) {

for (int i=0; i<=99; i++) {
 cout <<a[i]<<endl;

}

}

int main() {
int array[100];
//int* a = &array[99];

insert (array);
cout <<"До сортировки"<<endl;
print (array);
cout<<endl;

sort (array);
cout <<"После сортировки"<<endl;
print (array);


system("PAUSE");
return 0;
}


Программа работает. Но может быть посоветуете также другие пути реализации этого же алгоритма?
Добавлено @ 20:23
Особенно интересует введение в методе sort переменной tmp. Можно без нее обойтись?
PM WWW   Вверх
srd
Дата 16.2.2005, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Цитата(Admin @ 17.2.2005, 03:22)
Особенно интересует введение в методе sort переменной tmp. Можно без нее обойтись?

А зачем? Но раз хочется, то
Код

void sort(int* a) {
   for (int i=0; i<=49; i++) {
        a[i] ^= a[99-i];
        a[99-i] ^= a[i];
        a[i] ^= a[99-i];
   }

}




--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Wowa
Дата 16.2.2005, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



ой, а что это за шапка? smile что она делает?
Добавлено @ 20:38
Еще посоветуйте. Может как-то под другому указатели на массив передавать? Или без указателей делать?
Как бы вы сделали?
PM WWW   Вверх
bel_nikita
Дата 16.2.2005, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



это не шапка - это XOR smile

Цитата
Еще посоветуйте. Может как-то под другому указатели на массив передавать? Или без указателей делать?
Как бы вы сделали?

Естественно с указателями smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Да гость я...
Дата 12.3.2005, 08:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть ещё одно решение, к-рое не требует переменной tmp. Но, предупреждаю сразу - решение очень частное и применимо только к условиям данной задачи:

Код

void sort(int* a) 
{
   for (int i=0; i < 100; i++) 
        a[i] = i;
}

  Вверх
chaos
Дата 12.3.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



вот еще один пример с использованием стандартных шаблонов(STL)
Код

#include <iostream.h>
#include <algorithm>

int main(int argc, char* argv[])
{
  //описываем массив
  int mas[100];

  //заполняем числами от 99 до 0  
  for (int n=100; n>=1; mas[100-n]=n---1);

  //выводим на экран  
  for (n=0; n<100; n++) cout << mas[n] << "\t";

  //переворачиваем массив  
  std::reverse<int*>(mas, mas+100);    

  //выводим на экран
  for (n=0; n<100; n++) cout << mas[n] << "\t";

  return 0;
}


Это сообщение отредактировал(а) chaos - 12.3.2005, 14:00
PM WWW   Вверх
chipset
Дата 12.3.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Вариант без ксора.
Код

void sort(int* a) {
    for (int i=0; i<=49; i++) {
         a[i] =  a[i] - a[99-i];
         a[99-i] =  a[99-i] + a[i];
         a[i] =  a[99-i] - a[i];
    }
}



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Да гость я...
Дата 12.3.2005, 19:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Но может быть посоветуете также другие пути реализации этого же алгоритма?


Вот пример ещё одной реализации, к-рая доступна только языкам, поддерживающим арифметику указателей (известные мне это - такие как С/С++ и Object Pascal, ещё какие?)

Код

template<class T>
void reverse(T* a, size_t nSize) 
{
 T *p1= a;
 T *p2= a + nSize - 1;

 while(p1 < p2)
 {
  T tmp= *p1;
  *p1++= *p2;
  *p2-- = tmp;
 }
}


Для class T должны быть определены оператор присваивания и конструктор копирования.
That's it

  Вверх
Fantasist
Дата 13.3.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
- решение очень частное и применимо только к условиям данной задачи:


smile


Цитата(Admin @ 16.2.2005, 17:37)
Как бы вы сделали?



Я бы сделал именно так, как предложил Да гость я...


--------------------
Волны гасят ветер...
PM MAIL   Вверх
chipset
Дата 14.3.2005, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата(Admin @ 16.2.2005, 09:37)
Как бы вы сделали?

Я бы сделал так как сделал я, в силу своей бейсиковской молодости.. smile

Это сообщение отредактировал(а) chipset - 14.3.2005, 05:02


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.