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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на массив, вводим 15 чисел 
:(
    Опции темы
drossel
Дата 2.6.2008, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогитее решить задачу. Вот текст: вводим массив из 15 элементов,
находим максимум, а оставшиеся элементы меняем местами, т.е.
массив      5 2 3 6 8 10 11 15 13 14 1 0 4 7 9, 
выводим 11 10 8 6 3 2 5 15 9 7 4 0 1 14 13, как бы все числа до и после 
max ставим в обратном порядке.
max я нашёл, пожалуйста, помогите что делать дальше
Код

#include <iostream.h>
main()
{float m[15], max;
int j, jmax;
for( j = 0; j < 15; ++j)
cin >>m [j];
jmax = 0;
max = m[0];
for( j = 1; j < 15; ++j)
{if( m[j] > max )
{max = m[j];
jmax = j;
}}
cout << max<<' ';

PM MAIL   Вверх
bronislav
Дата 2.6.2008, 07:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Вспомнил первый курс. Написал. Разбирайся.
Код

#include <iostream>

int findMax( float* a, int size );
void reverse( float* a, int s, int f );
void swap( float *a, int i1, int i2 );

int main()
{
    float *m = new float [15];
    for( int j = 0; j < 15; ++j )
        std::cin >> m [j];
    int jmax = findMax( m, 15 );
    
    reverse( m, 0, jmax - 1 );
    reverse( m, jmax + 1, 14 );
    
    for( int j = 0; j < 15; ++j )
        std::cout << m[j] << " ";
    std::cout << std::endl;
    
    delete [] m;
}

int findMax( float* a, int size )
{
    int jmax = 0;
    float max = a[0];
    for( int j = 1; j < size; ++j )
    {
        if( a[j] > max )
        {
            max = a[j];
            jmax = j;
        }
    }
    return jmax;
}

void reverse( float* a, int s, int f )
{
    for( int i = 0; i < (f - s) / 2; ++i )
    {
        swap( a, s + i, f - i );
    }
}

void swap( float *a, int i1, int i2 )
{
    float t = a[i1];
    a[i1] = a[i2];
    a[i2] = t;
}



Это сообщение отредактировал(а) bronislav - 2.6.2008, 07:47


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
rrrFer
Дата 2.6.2008, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 0
Всего: 1



drossel
Код

#include <iostream>
using namespace std;
void main(){
    float m[15]={1,2,3,4,5,6,7,8,7,6,5,4,3,2,1},max;
    int j, jmax;
    jmax=0;max=m[0];
    for(j=0;j<15;j++)
        cout<<m[j]<<" ";
    cout<<endl;
    for(j=0;j < 15;j++)
        if(m[j]>max){
            max = m[j];
            jmax = j;
        }
    for(j=0;j<(jmax/2);j++){
        m[j]+=m[jmax-1-j];
        m[jmax-1-j]=m[j]-m[jmax-1-j];
        m[j]-=m[jmax-1-j];
        m[jmax+j+1]+=m[14-j];
        m[14-j]=m[jmax+j+1]-m[14-j];
        m[jmax+j+1]-=m[14-j];
    }
    for(j=0;j<15;j++)
        cout<<m[j]<<" ";
    cout<<endl;
    system("pause");
}


Это сообщение отредактировал(а) rrrFer - 2.6.2008, 07:46
PM MAIL WWW ICQ   Вверх
Rififi
Дата 2.6.2008, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 3
Всего: 36



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

// перестановки в массиве до максимального элемента и после
template <typename T>
void reverse(T* arr, const size_t N)
{
    T* maxIter = std::max_element(arr, arr + N);
    if (maxIter == arr + N)
        return;
    std::reverse(arr, maxIter);
    std::reverse(maxIter + 1, arr + N);
}

// получить размер массива
template <typename T, const size_t N>
const size_t array_count(const T (&)[N])
{
    return (N);
}

// вывод массива на экран
template <
    typename _E, typename _Tr,
    template <typename, typename> class O,
    typename T>
void print(O<_E, _Tr>& os, const T* arr, const size_t N)
{
    const _E sep[] = { _E(' '), 0 };
    std::copy(arr, arr + N, std::ostream_iterator<T, _E, _Tr>(os, sep));
    os << std::endl;
}

int main()
{
    int arr[] = {5, 2, 3, 6, 8, 10, 11, 15, 13, 14, 1, 0, 4, 7, 9};
    const size_t N = array_count(arr);
    print(std::cout, arr, N);
    reverse(arr, N);
    print(std::cout, arr, N);
    return (0);
}


Вывод:
Код
5 2 3 6 8 10 11 15 13 14 1 0 4 7 9
11 10 8 6 3 2 5 15 9 7 4 0 1 14 13


если у тебя не будет компилироваться, перепиши функцию print.
PM MAIL   Вверх
drossel
Дата 2.6.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем огромное СПАСИБО!!! smile 
PM MAIL   Вверх
drossel
Дата 2.6.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Rififi, А подскажи, как сделать , чтобы вводился при запуске 
произвольно массив из 15 элементов?
PM MAIL   Вверх
bsa
Дата 2.6.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
#include <algorithm>
#include <cstdlib>
#include <vector>

typedef std::vector<int> IntVector;
...
IntVector array(15); //массив из 15-ти элементов
std::generate(array.begin(), array.end(), std::rand); //заполнение случайными значениями
...


Это сообщение отредактировал(а) bsa - 2.6.2008, 14:13
PM   Вверх
Rififi
Дата 2.6.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 3
Всего: 36



drossel,

поскольку это C++, то можно создавать массивы переменной длинны в рантайме
делается это примерно так:

Код
size_t N;
std::cin >> N; // вводим размер с клавиатуры

int arr[N]; // создаем (на стеке) массив переменного размера

// юзаем arr[0 .. N-1]
// память будет освобождена автоматичеки при выходе из области видимости


или традиционный способ через указатель и динамическую память:

Код
int* arr = new int[N];
// юзаем arr[0 .. N-1]
delete [] arr; // подчищаем выделенную память


Это сообщение отредактировал(а) Rififi - 2.6.2008, 14:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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