В одномерном массиве, состоящем из n вещественных элементов, вычислить:

  1. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
    • минимальный элемент массива;
    • сумму элементов массива, расположенных между первым и последним положительными элементами.
    • Преобразовать массив таким образом, чтобы сначала располагались все элементы равные нулю, а потом – все остальные
#include <iostream>
using namespace std;

int main()
{
    setlocale(LC_ALL, "RUS");
    int mas[10] = { 5, 3, 7, -4, -8, 11, -3, 3, 8, 7 };
    int min = mas[0];

    for (int i = 0; i < 10; ++i)
    {
        if (mas[i] < min)
        {
            min = mas[i];
        }
        for (int i = 0; i < 10; ++i)
        if

    }
    cout << "Минимальное значение mas= " << min;
    cout << "\t\n ";
    system("PAUSE");
    return 0;
}

как мне найти :
• сумму элементов массива, расположенных между первым и последним положительными элементами.
• Преобразовать массив таким образом, чтобы сначала располагались все элементы равные нулю, а потом – все остальные

#include <iostream>

using namespace std;

int arr[64];

int min_el()
{
    int min = arr[0];
    for( int i = 1; i < 64; i++ )
    {
        if( min > arr[i] )
        {
            min = arr[i];
        }
    }
    return min;
}

int sum()
{
    int sum = 0;
    for( int i = 1; i < 63; i++ )
    {
        sum += arr[i];
    }
    return sum;
}

void sort()
{
    int buffer;
    for( int i = 0; i < 64; i++ )
    {
        if( arr[i] < arr[i+1] )
        {
            buffer = arr[i+1];
            arr[i+1] = arr[i];
            arr[i] = buffer;
        }
    }
}

int main()
{
    for( int i = 0; i < 64; i++ )
    {
        arr[i] = i;
    }
    cout << "Сумма:" << sum() << endl;
    cout << "Минимальное:" << min_el() << endl;
    sort();
    return 0;
}

Вот мой говнокод

Premium69ValeraBestGangster98, самокритика принимается: действительно говнокод.

Кратенько по ошибкам:

  1. На консоль не выводится отсортированный массив.
  2. Сортировка не работает.
  3. В функции sort() выход за границу массива.
  4. Функция sum() считает сумму неправильно.
  5. Данная программа не удовлетворяет целям поставленной задачи: найти сумму элементов массива, расположенных между первым и последним положительными элементами и преобразовать массив таким образом, чтобы сначала располагались все элементы равные нулю, а потом – все остальные.

Илья, во-первых, почитай здесь.

По второй цели задания: надо сначала найти номера первого и последнего положительных элементов (т.е. индексы) поиском с начала и поиском с конца массива соответственно, а затем посчитать сумму элементов между ними.

По третьей цели задания я бы предложил следующий алгоритм. Пусть в переменной z хранится номер элемента массива за уже отсортированными нулями. Изначально z = 0. В цикле просматриваем весь массив. Если текущий элемент массива равен 0, то меняем местами текущий элемент с элементом номер z. И увеличиваем z на единицу.

sum:

 int sum()
{
    int sum = 0; 
    int last_plus = 0; // последний полложительный
    int first_plus = 0; // первый положительный
    for( int i = 0; i < 64; i++ )
    {
        if(arr[i] >= 0) // если в начале массива найден 
                // положительный элемент
                first_plus = i; // первый положительный равен ему     
        break;  // выходим из цикла
    }
    for( int i = 63; i >= 0; i-- )
    {
        if(arr[i] >= 0)
        last_plus = i;
        break;
    }
    for( int i = first; i <= last; i++ )
    {
        sum += arr[i];
    }
    return sum;
}

Посмотрите внимательно задание, в задание не было сказанно ,что бы отсортированный массив выводился на экран, так что не надо гнать, единственное что работет неправильно, это сортировка, да и то только с последним элементом

void sort()
{
    int buffer = 0;
    for( int i = 0; i < 64; i++ )
    {
        if( arr[i] < arr[i-1] )
        {
            buffer = arr[i-1];
            arr[i-1] = arr[i];
            arr[i] = buffer;
            buffer = 0;
        }
    }
}

чет типо пузырьковой сортировки

Посмотрите внимательно задание, в задание не было сказанно ,что бы отсортированный массив выводился на экран,

В таком случае, у меня есть более оптимальная версия сортировки:

void sort()
{
}

Работает быстро и без ошибок. Главное — что бы результат этой сортировки ни где не использовался.

так что не надо гнать, единственное что работет неправильно, это сортировка, да и то только с последним элементом

Это при сортировке изначально отсортированного массива? (Смотрю инициализацию массива в твоей программе.) А если в массив загнать случайные числа? Если ты таки пойдёшь супротив задания и будешь выводить массив на экран, то ситуация не покажется тебе такой радужной.

Твой код пузырьковой сортировки — именно что «типо». Ты хотя бы в Википедии что ли посмотрел про пузырьковую сортировку, если сам написать не можешь. А то как-то некузяво получается: ты хотел помочь человеку, а с такой программой ему больше двух очков не светит.

Кстати, во второй версии «типо сортировки» от выхода за границу массива ты так и не избавился.

Вторая версия функции для суммирования также работает неправильно.

Premium69ValeraBestGangster98, ты когда на форум постишь код, ты проверяй его не только на компилируемость.

вот

Сумма работает правильно

Викидрочер ссаный, а я зашел на вики:

Сортировка простыми обменами, сортиро́вка пузырько́м (англ. bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов.
Алгоритм состоит из повторяющихся проходов по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются N-1 раз или до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При каждом проходе алгоритма по внутреннему циклу, очередной наибольший элемент массива ставится на своё место в конце массива рядом с предыдущим «наибольшим элементом», а наименьший элемент перемещается на одну позицию к началу массива («всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма).

Или я чужой код должен копипастить? Как хочу, так и реализую

    #include <iostream>
using namespace std;

int arr[64];

int min_el()
{
    int min = arr[0];
    for( int i = 1; i < 64; i++ )
    {
        if( min > arr[i] )
        {
            min = arr[i];
        }
    }
    return min;
}

int sum()
{
    int sum = 0;
    int last;
    int first;
    for( int i = 0; i < 64; i++ )
    {
        if(arr[i] >= 0)
        first = i;
        break;
    }
    for( int i = 63; i >= 0; i-- )
    {
        if(arr[i] >= 0)
        last = i;
        break;
    }
    for( int i = first; i <= last; i++ )
    {
        sum += arr[i];
    }
    return sum;
}

void sort()
{
    int buffer = 0;
    for( int i = 0; i < 64; i++ )
    {
        if( arr[i] > arr[i+1] )
        {
            buffer = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = buffer;
        }
    }
}

int main()
{
    for( int i = 63; i >= 0; i-- )
    {
        arr[i] = i*5;
    }
    cout << "Сумма:" << sum() << endl;
    cout << "Минимальное:" << min_el() << endl;
    for( int i = 0; i < 64; i++ )
    {
        cout << "Элемент под номером " << i << " равен " << arr[i] << endl;
    }
    return 0;
}

А ты здоро парню помог!!!111

О, кажется «война картинок» началась...

Premium69ValeraBestGangster98, ведите себя более спокойно, вас никто не оскорблял. А то я начинаю подозревать, что «98» в вашем нике означает год рождения, и мне становится стыдно :(

Во мне, кстати, проснулся граммар-наци:

На обоих картинках, требуется поставить запятую, так как и там и там есть обращение («товарищи» и «друзья»).

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.