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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одномерные массивы в с++, перестановка, добавление,отриц.элемент 
V
    Опции темы
Neon325
  Дата 3.3.2012, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня тут возникли проблемы с кодом, то при добавлении к элементов в конец массива добавляются лишние, а при перестановке теряются, и не выводится первый отрицательный элемент...посоветуйте что нибудь как можно подправить....
Код

#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

char* Rus(const char* text);

void main()
{
    int a[100];
    int i,n,k,imin,imax,i1(0),i2(0);
    randomize();
    cout << Rus(" Введите n: ");
    cin >> n;
    for (i=0; i<n; i++) a[i]=random(100);
    for (i=0; i<n; i++) cout << a[i] <<" ";
    cout << Rus(" Удаление всех элементов с четными индексами: ") << endl;
    for( i=0; i<n/2; i++) a[i]=a[i*2+1];
    for( i=0; i<n/2; i++) cout << a[i] << " ";
    cout << Rus(" Сколько к элементов хотите добавить в конец массива ? ") << endl;
    cin >> k;
    for(i=n;i<n+k;i++)
    cout << Rus("Массив имеет вид:\n ") << endl;
    for(i=0;i<n;i++) cout << a[i] <<" ";
    n+=k;
    imin=a[0];
    for (i=0; i<n; i++)
    if(a[i]<imin)
    imin=a[i];
    i1=i;
    cout<< " Min "<< imin << endl;
    imax=a[0];
    for (i=0; i<n; i++)
    if(a[i]>imax)
    imax=a[i];
    i2=i;
    cout << " Max "<< imax << endl;
    a[i2]=imin;
    a[i1]=imax;
    cout << Rus("Массив после перестановки имеет вид:\n ")<< endl;
    for (i=0; i<n; i++) cout << a[i] <<" ";
    cout << Rus("Первый отрицательный элемент массива: ")<< endl;
    for (i = 0; i < n && a[i] >= 0; i++)a[i]=random(100)-random(100);
    if(i < n)
    cout << a[i] <<" ";
    getch();
    }

char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text,bufRus);
return bufRus;
}



Это сообщение отредактировал(а) bsa - 4.3.2012, 18:08
PM MAIL   Вверх
Damarus
Дата 3.3.2012, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(Neon325 @  3.3.2012,  18:35 Найти цитируемый пост)
посоветуйте что нибудь как можно подправить....

Поюзать std::vector.
PM MAIL ICQ Jabber   Вверх
Neon325
  Дата 3.3.2012, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Damarus @ 3.3.2012,  18:33)
Цитата(Neon325 @  3.3.2012,  18:35 Найти цитируемый пост)
посоветуйте что нибудь как можно подправить....

Поюзать std::vector.

дело в том, что я еще новичок в этом, можно как нибудь без вектора обойтись?Я заблудился в этой программе smile 

PM MAIL   Вверх
marsh123
Дата 3.3.2012, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В Вашем коде действительно очень легко заблудиться, он ужасно оформлен, да и не компилится, так как содержит тучу ошибок, даже не знаю каким компилятором удалось это скомпилить  smile 

Не совсем понял, что нужно писать для "первый отрицательный элемент", смысл этого условия нулевой, оно ни на что не влияет: a[i] >= 0
Может Вы хотели перезаполнять массив, пока 1 из случайных чисел не станет отрицательным, а потом остановиться? Тогда вернее будет a[i-1] >= 0, хотя в таком случае первая проверка придется на a[-1], тогда лучше использовать break;

Короче говоря, вот код, который у меня компилится и, как мне кажется, чуть более читаем:
(если что, компилить со стандартом c99, тк уже привычка счетчики прямо в for объявлять)
Код

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
    srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
    
    int n, k; //размер массива, сколько затем добавить
    int min, max; //минимальный и максимальные элементы
    cout << "Введите размер массива:" << endl;
    cin >> n; //считываем его
    int a[n]; //объявляем массив нужного размера
    
    cout << "Массив имеет вид:" << endl;
    for (int i = 0; i < n; i++) { //заполняем массив случайными числами от 0 до 99 и печатаем
        a[i] = rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;

    cout << "Удаляем из массива элементы с четными индексами:" << endl;
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов
        a[i] = a[i * 2 + 1];
        cout << a[i] << " ";
    }
    n /= 2; //уменьшаем n, ведь якобы удалили элементы
    cout << endl;
    
    cout << "Сколько элементов добавить в конец массива:" << endl;
    cin >> k;
    if (k > n) //проверка на переполнение
        cout << "Нельзя добавить так много элементов!" << endl;
    else {
        for (int i = n; i < n+k; i++) { //добавляем еще случайных элементов в конец
            a[i] = rand() % 100;
        }
        n += k; //увеличиваем n, ведь якобы добавили элементы
        cout << "Массив теперь имеет вид:" << endl;
        for (int i = 0; i < n; i++) //печатаем наш новый массив
            cout << a[i] << " ";
        cout << endl;
    }

    min = a[0];
    max = a[0];
    for (int i = 0; i < n; i++) { //ищем минимальный и максимальный элементы
        if (a[i] < min)
            min = a[i];
        if (a[i] > max)
            max = a[i];
    }
    cout << "Минимальный элемент текущего массива:" << endl;
    cout << min << endl;

    cout << "Максимальный элемент текущего массива:" << endl;
    cout << max << endl;
    
    cout << "Первый отрицательный элемент:" << endl;
    for (int i = 0; i < n; i++) {
        a[i] = rand() % 100 - rand() % 100;
        if (a[i] < 0) break;
    }
    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}


Какие-то странные функции Вы используете, randomize(), random(int) это что-то Паскалевское?!

Это сообщение отредактировал(а) marsh123 - 3.3.2012, 22:45
PM MAIL   Вверх
feodorv
Дата 3.3.2012, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(marsh123 @  3.3.2012,  22:34 Найти цитируемый пост)
    n /= 2; //уменьшаем n, ведь якобы удалили элементы

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


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
marsh123
Дата 3.3.2012, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(feodorv @ 3.3.2012,  22:45)
Цитата(marsh123 @  3.3.2012,  22:34 Найти цитируемый пост)
    n /= 2; //уменьшаем n, ведь якобы удалили элементы

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

Он удаляет весь массив, так как индекс 0 можно считать чётным, работает верно и при четной, и при нечетной длине.

Это сообщение отредактировал(а) marsh123 - 3.3.2012, 22:52
PM MAIL   Вверх
feodorv
Дата 4.3.2012, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(marsh123 @  3.3.2012,  22:47 Найти цитируемый пост)
Он удаляет весь массив, так как индекс 0 можно считать чётным, работает верно и при четной, и при нечетной длине.

Ok, если удалять нужно чётные индексы. Просто в коде написано:
Цитата(marsh123 @  3.3.2012,  22:34 Найти цитируемый пост)
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов

а на оригинал я не посмотрел  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Neon325
  Дата 4.3.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(marsh123 @ 3.3.2012,  22:34)
В Вашем коде действительно очень легко заблудиться, он ужасно оформлен, да и не компилится, так как содержит тучу ошибок, даже не знаю каким компилятором удалось это скомпилить  smile 

Не совсем понял, что нужно писать для "первый отрицательный элемент", смысл этого условия нулевой, оно ни на что не влияет: a[i] >= 0
Может Вы хотели перезаполнять массив, пока 1 из случайных чисел не станет отрицательным, а потом остановиться? Тогда вернее будет a[i-1] >= 0, хотя в таком случае первая проверка придется на a[-1], тогда лучше использовать break;

Короче говоря, вот код, который у меня компилится и, как мне кажется, чуть более читаем:
(если что, компилить со стандартом c99, тк уже привычка счетчики прямо в for объявлять)
Код

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
    srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
    
    int n, k; //размер массива, сколько затем добавить
    int min, max; //минимальный и максимальные элементы
    cout << "Введите размер массива:" << endl;
    cin >> n; //считываем его
    int a[n]; //объявляем массив нужного размера
    
    cout << "Массив имеет вид:" << endl;
    for (int i = 0; i < n; i++) { //заполняем массив случайными числами от 0 до 99 и печатаем
        a[i] = rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;

    cout << "Удаляем из массива элементы с четными индексами:" << endl;
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов
        a[i] = a[i * 2 + 1];
        cout << a[i] << " ";
    }
    n /= 2; //уменьшаем n, ведь якобы удалили элементы
    cout << endl;
    
    cout << "Сколько элементов добавить в конец массива:" << endl;
    cin >> k;
    if (k > n) //проверка на переполнение
        cout << "Нельзя добавить так много элементов!" << endl;
    else {
        for (int i = n; i < n+k; i++) { //добавляем еще случайных элементов в конец
            a[i] = rand() % 100;
        }
        n += k; //увеличиваем n, ведь якобы добавили элементы
        cout << "Массив теперь имеет вид:" << endl;
        for (int i = 0; i < n; i++) //печатаем наш новый массив
            cout << a[i] << " ";
        cout << endl;
    }

    min = a[0];
    max = a[0];
    for (int i = 0; i < n; i++) { //ищем минимальный и максимальный элементы
        if (a[i] < min)
            min = a[i];
        if (a[i] > max)
            max = a[i];
    }
    cout << "Минимальный элемент текущего массива:" << endl;
    cout << min << endl;

    cout << "Максимальный элемент текущего массива:" << endl;
    cout << max << endl;
    
    cout << "Первый отрицательный элемент:" << endl;
    for (int i = 0; i < n; i++) {
        a[i] = rand() % 100 - rand() % 100;
        if (a[i] < 0) break;
    }
    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}


Какие-то странные функции Вы используете, randomize(), random(int) это что-то Паскалевское?!

Все равно так же получается как и у меня smile . Это не Паскалевское,я все выполняю это в Borland C++ Biulder 6, опять выводится один лишний элемент, при перестановке теряется, а отрицательный вообще не выводится smile 
PM MAIL   Вверх
marsh123
Дата 4.3.2012, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Где лишний то выводится, не пойму, перестановку min и max сразу не заметил, ёё тоже добавил, вот результат работы моего кода, объясните нормально, что именно в результате Вас не устраивает.
И еще объясните, что должен делать кусок "первый отрицательный элемент", я так и не понял, чего Вы хотите этим добиться в своем коде.

Цитата

Введите размер массива:
10
Массив имеет вид:
61 3 83 70 74 73 24 9 18 85 
Удаляем из массива элементы с четными индексами:
3 70 73 9 85 
Сколько элементов добавить в конец массива:
3
Массив теперь имеет вид:
3 70 73 9 85 79 7 1 
Минимальный элемент текущего массива:
1
Максимальный элемент текущего массива:
85
Массив после перестановки:
3 70 73 9 1 79 7 85 
Первый отрицательный элемент:
1 36 -23 9 1 79 7 85


Сам код:
Код

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
    srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
    
    int n, k; //размер массива, сколько затем добавить
    int min, max; //минимальный и максимальные элементы
    int min_pos, max_pos; //их позиции
    cout << "Введите размер массива:" << endl;
    cin >> n; //считываем его
    int a[n]; //объявляем массив нужного размера
    
    cout << "Массив имеет вид:" << endl;
    for (int i = 0; i < n; i++) { //заполняем массив случайными числами от 0 до 99 и печатаем
        a[i] = rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;

    cout << "Удаляем из массива элементы с четными индексами:" << endl;
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов
        a[i] = a[i * 2 + 1];
        cout << a[i] << " ";
    }
    n /= 2; //уменьшаем n, ведь якобы удалили элементы
    cout << endl;
    
    cout << "Сколько элементов добавить в конец массива:" << endl;
    cin >> k;
    if ((k > n && n) || (k > 1 && !n)) //проверка на переполнение
        cout << "Нельзя добавить так много элементов!" << endl;
    else {
        for (int i = n; i < n+k; i++) { //добавляем еще случайных элементов в конец
            a[i] = rand() % 100;
        }
        n += k; //увеличиваем n, ведь якобы добавили элементы
        cout << "Массив теперь имеет вид:" << endl;
        for (int i = 0; i < n; i++) //печатаем наш новый массив
            cout << a[i] << " ";
        cout << endl;
    }

    min = a[0], min_pos = 0;
    max = a[0], max_pos = 0;
    for (int i = 0; i < n; i++) { //ищем минимальный и максимальный элементы
        if (a[i] < min) {
            min = a[i];
            min_pos = i;
        }
        if (a[i] > max) {
            max = a[i];
            max_pos = i;
        }
    }
    cout << "Минимальный элемент текущего массива:" << endl;
    cout << min << endl;

    cout << "Максимальный элемент текущего массива:" << endl;
    cout << max << endl;

    a[min_pos] = max; //меняем местами минимальный и максимальный
    a[max_pos] = min;

    cout << "Массив после перестановки:" << endl;
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    cout << "Первый отрицательный элемент:" << endl;
    for (int i = 0; i < n; i++) {
        a[i] = rand() % 100 - rand() % 100;
        if (a[i] < 0) break;
    }
    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}



Это сообщение отредактировал(а) marsh123 - 4.3.2012, 16:16
PM MAIL   Вверх
Neon325
Дата 4.3.2012, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(marsh123 @ 4.3.2012,  16:13)
Где лишний то выводится, не пойму, перестановку min и max сразу не заметил, ёё тоже добавил, вот результат работы моего кода, объясните нормально, что именно в результате Вас не устраивает.
И еще объясните, что должен делать кусок "первый отрицательный элемент", я так и не понял, чего Вы хотите этим добиться в своем коде.


Постановка задачи!
1)Сформировать массив из n элементов с помощью датчика случайных чисел( n задается пользователем с клавиатуры)
2)Распечатать  полученный массив
3)Выполнить удаление всех элементов с четными индексами  из массива
4) Вывести полученный результат
5)Выполнить добавление к  элементов в конец массива
6)Вывести полученный результат
7)Выполнить перестановку минимального и максимального элементов в массиве
8)Вывести полученный результат
9)Выполнить поиск первого отрицательного элемента в массиве и подсчитать количество сравнений,необходимых для поиска нужного элемента
10)Вывести полученный результат
11)Выполнить сортировку массива  простым включением
12)Вывести полученный результат
13)Выполнить поиск первого отрицательного элемента в отсортированном массиве и подсчитать количество сравнений, необходимых для поиска нужного элемента
14)Вывести полученный результат!

В массиве должны быть записаны и положительные и отрицательные элементы, при решении задач использовать псевдодинамические массивы
Вывод результатов должен выполняться после выполнения каждого задания. Элементы массива рекомендуется выводить в строчку, разделяя их между собой пробелом, break использовать запрещено
PM MAIL   Вверх
marsh123
Дата 4.3.2012, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Введите размер массива:
10
Массив имеет вид:
4 -6 -33 82 27 29 -32 23 -61 56 
Удаляем из массива элементы с четными индексами:
-6 82 29 23 56 
Сколько элементов добавить в конец массива:
3
Массив теперь имеет вид:
-6 82 29 23 56 47 98 32 
Минимальный элемент текущего массива:
-6
Максимальный элемент текущего массива:
98
Массив после перестановки:
98 82 29 23 56 47 -6 32 
Первый отрицательный элемент:
-6
Количество сравнений для его поиска:
7
Массив, отсортированный включением:
-6 23 29 32 47 56 82 98 
Первый отрицательный элемент:
-6
Количество сравнений для его поиска:
1


Правда не уверен на счет сортировки включением, ту ли я написал, замените сами, если не та, код:
Код

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
    srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
    
    int n, k; //размер массива, сколько затем добавить
    int min, max; //минимальный и максимальные элементы
    int min_pos, max_pos; //их позиции
    cout << "Введите размер массива:" << endl;
    cin >> n; //считываем его
    int a[n]; //объявляем массив нужного размера
    
    cout << "Массив имеет вид:" << endl;
    for (int i = 0; i < n; i++) { //заполняем массив случайными числами от 0 до 99 и печатаем
        a[i] = rand() % 100 - rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;

    cout << "Удаляем из массива элементы с четными индексами:" << endl;
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов
        a[i] = a[i * 2 + 1];
        cout << a[i] << " ";
    }
    n /= 2; //уменьшаем n, ведь якобы удалили элементы
    cout << endl;
    
    cout << "Сколько элементов добавить в конец массива:" << endl;
    cin >> k;
    if ((k > n && n) || (k > 1 && !n)) //проверка на переполнение
        cout << "Нельзя добавить так много элементов!" << endl;
    else {
        for (int i = n; i < n+k; i++) { //добавляем еще случайных элементов в конец
            a[i] = rand() % 100 - rand() % 100;
        }
        n += k; //увеличиваем n, ведь якобы добавили элементы
        cout << "Массив теперь имеет вид:" << endl;
        for (int i = 0; i < n; i++) //печатаем наш новый массив
            cout << a[i] << " ";
        cout << endl;
    }

    min = a[0], min_pos = 0;
    max = a[0], max_pos = 0;
    for (int i = 0; i < n; i++) { //ищем минимальный и максимальный элементы
        if (a[i] < min) {
            min = a[i];
            min_pos = i;
        }
        if (a[i] > max) {
            max = a[i];
            max_pos = i;
        }
    }
    cout << "Минимальный элемент текущего массива:" << endl;
    cout << min << endl;

    cout << "Максимальный элемент текущего массива:" << endl;
    cout << max << endl;

    a[min_pos] = max; //меняем местами минимальный и максимальный
    a[max_pos] = min;

    cout << "Массив после перестановки:" << endl;
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    cout << "Первый отрицательный элемент:" << endl;
    int j = 0;
    while (a[j] >= 0 && j < n) j++;
    if (a[j] >= 0) 
        cout << "В массиве нет отрицательных элементов!";
    else {
        cout << a[j] << endl;
        cout << "Количество сравнений для его поиска:" << endl;
        cout << j + 1 << endl;
    }
 
    cout << "Массив, отсортированный включением:" << endl;
    for (int i = 1; i < n; i++) { //сортируем включением
        for (int m = i; m >= 0; m--) {
            if (a[i] < a[m]) {
                a[i] ^= a[m];
                a[m] = a[i] ^ a[m];
                a[i] = a[i] ^ a[m];
                if (i != 0) i--;
            }
        }
    }
    
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    } 
    cout << endl;

    cout << "Первый отрицательный элемент:" << endl;
    if (a[0] >= 0) 
        cout << "В массиве нет отрицательных элементов" << endl;
    else {
        cout << a[0] << endl;
        cout << "Количество сравнений для его поиска:" << endl;
        cout << 1 << endl;
    }
    return 0;
}


Это сообщение отредактировал(а) marsh123 - 4.3.2012, 17:20
PM MAIL   Вверх
Neon325
Дата 10.3.2012, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(marsh123 @ 4.3.2012,  17:19)
Цитата

Введите размер массива:
10
Массив имеет вид:
4 -6 -33 82 27 29 -32 23 -61 56 
Удаляем из массива элементы с четными индексами:
-6 82 29 23 56 
Сколько элементов добавить в конец массива:
3
Массив теперь имеет вид:
-6 82 29 23 56 47 98 32 
Минимальный элемент текущего массива:
-6
Максимальный элемент текущего массива:
98
Массив после перестановки:
98 82 29 23 56 47 -6 32 
Первый отрицательный элемент:
-6
Количество сравнений для его поиска:
7
Массив, отсортированный включением:
-6 23 29 32 47 56 82 98 
Первый отрицательный элемент:
-6
Количество сравнений для его поиска:
1


Правда не уверен на счет сортировки включением, ту ли я написал, замените сами, если не та, код:
Код

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
    srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
    
    int n, k; //размер массива, сколько затем добавить
    int min, max; //минимальный и максимальные элементы
    int min_pos, max_pos; //их позиции
    cout << "Введите размер массива:" << endl;
    cin >> n; //считываем его
    int a[n]; //объявляем массив нужного размера
    
    cout << "Массив имеет вид:" << endl;
    for (int i = 0; i < n; i++) { //заполняем массив случайными числами от 0 до 99 и печатаем
        a[i] = rand() % 100 - rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;

    cout << "Удаляем из массива элементы с четными индексами:" << endl;
    for (int i = 0; i < n / 2; i++) { //удаление нечетных индексов
        a[i] = a[i * 2 + 1];
        cout << a[i] << " ";
    }
    n /= 2; //уменьшаем n, ведь якобы удалили элементы
    cout << endl;
    
    cout << "Сколько элементов добавить в конец массива:" << endl;
    cin >> k;
    if ((k > n && n) || (k > 1 && !n)) //проверка на переполнение
        cout << "Нельзя добавить так много элементов!" << endl;
    else {
        for (int i = n; i < n+k; i++) { //добавляем еще случайных элементов в конец
            a[i] = rand() % 100 - rand() % 100;
        }
        n += k; //увеличиваем n, ведь якобы добавили элементы
        cout << "Массив теперь имеет вид:" << endl;
        for (int i = 0; i < n; i++) //печатаем наш новый массив
            cout << a[i] << " ";
        cout << endl;
    }

    min = a[0], min_pos = 0;
    max = a[0], max_pos = 0;
    for (int i = 0; i < n; i++) { //ищем минимальный и максимальный элементы
        if (a[i] < min) {
            min = a[i];
            min_pos = i;
        }
        if (a[i] > max) {
            max = a[i];
            max_pos = i;
        }
    }
    cout << "Минимальный элемент текущего массива:" << endl;
    cout << min << endl;

    cout << "Максимальный элемент текущего массива:" << endl;
    cout << max << endl;

    a[min_pos] = max; //меняем местами минимальный и максимальный
    a[max_pos] = min;

    cout << "Массив после перестановки:" << endl;
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    cout << "Первый отрицательный элемент:" << endl;
    int j = 0;
    while (a[j] >= 0 && j < n) j++;
    if (a[j] >= 0) 
        cout << "В массиве нет отрицательных элементов!";
    else {
        cout << a[j] << endl;
        cout << "Количество сравнений для его поиска:" << endl;
        cout << j + 1 << endl;
    }
 
    cout << "Массив, отсортированный включением:" << endl;
    for (int i = 1; i < n; i++) { //сортируем включением
        for (int m = i; m >= 0; m--) {
            if (a[i] < a[m]) {
                a[i] ^= a[m];
                a[m] = a[i] ^ a[m];
                a[i] = a[i] ^ a[m];
                if (i != 0) i--;
            }
        }
    }
    
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    } 
    cout << endl;

    cout << "Первый отрицательный элемент:" << endl;
    if (a[0] >= 0) 
        cout << "В массиве нет отрицательных элементов" << endl;
    else {
        cout << a[0] << endl;
        cout << "Количество сравнений для его поиска:" << endl;
        cout << 1 << endl;
    }
    return 0;
}

программа работает, спасибо огромное smile  smile 
PM MAIL   Вверх
Neon325
  Дата 11.3.2012, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(marsh123 @ 4.3.2012,  17:19)
Цитата

Введите размер массива:
10
Массив имеет вид:
4 -6 -33 82 27 29 -32 23 -61 56 
Удаляем из массива элементы с четными индексами:
-6 82 29 23 56 
Сколько элементов добавить в конец массива:
3
Массив теперь имеет вид:
-6 82 29 23 56 47 98 32 
Минимальный элемент текущего массива:
-6
Максимальный элемент текущего массива:
98
Массив после перестановки:
98 82 29 23 56 47 -6 32 
Первый отрицательный элемент:
-6
Количество сравнений для его поиска:
7
Массив, отсортированный включением:
-6 23 29 32 47 56 82 98 
Первый отрицательный элемент:
-6
Количество сравнений для его поиска:
1


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

Код

#include <vcl.h>
#include <iostream.h>
#include <stdlib.h>


char* Rus(const char* text);

int main()
{
srand(time(NULL)); //делаем rand() зависящим от текущего времени, по сути аналог randomize()
  int a[100];
  int i,n;
  cout << Rus("Введите количество чисел:") << endl;
  cin >> n;  /*Вводим с клавиатуры кол-во чисел в цепочке*/
  for (i=0;i < n; i++)
  a[i] = rand() % 100 - rand() % 100;
  {/*Описываем цикл от нуля до значения количества чисел*/
  if (i==0 || i==1) {   /*Если будет первое число или второе - тогда они будут равнятся единицам*/
  a[i]=1;
  }
  else {
  a[i]=a[i-1]+a[i-2]; /*Дальше число будет равняться сумме двух предыдущих*/
  }
cout << a[i] << " ";   /*Выводим массив на экран, разделяя пробелами*/
}
system("pause");
}
char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text,bufRus);
return bufRus;
}
Код








PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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