Форум программистов, компьютерный форум CyberForum.ru

Определить, есть ли в массиве... - C++

Восстановить пароль Регистрация
 
Paulsan
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 14
05.01.2012, 22:40     Определить, есть ли в массиве... #1
Определить, есть ли в массиве L[1..N] значение, равное (min +max) / 2 и вывести его номер. Удалить это значение в массиве.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2012, 22:40     Определить, есть ли в массиве...
Посмотрите здесь:

C++ Определить, есть ли в массиве повторяющиеся значения.CBuilder
задачи в Двумерном массиве. Определить, есть ли в массиве два одинаковых элемента, поменять местами элементы C++
C++ Определить, есть ли в заданном массиве мажоруючий элемент
C++ Определить есть ли в массиве одинаковые строки
C++ Определить, есть ли в массиве указанный элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.01.2012, 22:48     Определить, есть ли в массиве... #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
 
template <class T> T gen() { return rand() % 21; }
 
int main()
{
    srand(time(NULL));
    std::vector<int> v(10);
    std::generate(v.begin(), v.end(), gen<int>);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    std::vector<int>::iterator pos = std::find(v.begin(), v.end(), (*std::min_element(v.begin(), v.end()) + *std::max_element(v.begin(), v.end())) / 2);
    if(pos == v.end())
        std::cout << "No element" << std::endl;
    else
    {
        std::cout << pos - v.begin() << std::endl;
        v.erase(pos);
        std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    }
    return 0;
}
Paulsan
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 14
05.01.2012, 23:14  [ТС]     Определить, есть ли в массиве... #3
Спасибо, но это пока для меня тёмный лес, а без векторов и указателей попроще нет решения на уровне 1-го курса?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.01.2012, 23:20     Определить, есть ли в массиве... #4
Есть. А почему бы вам не выложить свои наработки?
Paulsan
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 14
05.01.2012, 23:26  [ТС]     Определить, есть ли в массиве... #5
Цитата Сообщение от soon Посмотреть сообщение
Есть. А почему бы вам не выложить свои наработки?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
using namespace std;
int main()
{
    setlocale(0,"");
    cout<<"введите кол-во элементов массива: ";
    int N;
    cin>>N;
    int i,j,k,max,min;
    float L[50];
    for (i=1;i<=N;i++) L[i]=i;
    for (i=1;i<=N;i++)
    cout<<L[i]<<' ';
    cout<<endl;
    float C =(L[1]+L[N])/2;
    cout<<"(min + max) / 2 = "<<C;
    cout<<endl;
    k=0;
     for(i=0;i<N;i++)
     {
       if (!(L[i]=C))
         {
           L[k]= L[i];
           k++;
         }
     }
     for(i=0;i<k;i++)
    cout<<L[i]<<' ';
    cin.get();
}
Конечно, это не такой идеальный вариант как ваш
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
05.01.2012, 23:31     Определить, есть ли в массиве... #6
проходим массив один раз
находим минимум и максимум

вычисляем среднее
проходим второй раз
ищем среднее
если нашли запоминаем индекс и обнуляем ячейку
Paulsan
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 14
05.01.2012, 23:35  [ТС]     Определить, есть ли в массиве... #7
Цитата Сообщение от ValeryS Посмотреть сообщение
проходим массив один раз
находим минимум и максимум

вычисляем среднее
проходим второй раз
ищем среднее
если нашли запоминаем индекс и обнуляем ячейку
А как это сделать?
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
05.01.2012, 23:36     Определить, есть ли в массиве... #8
Цитата Сообщение от Paulsan Посмотреть сообщение
if (!(L[i]=C))
{
вот здесь у тебя не сравнение == а присвоение =
ты написал инверсию для равно
проще так (не равно)
C
1
if ((L[i]!=C)
хотя по логике тебе как раз нужно равно

Добавлено через 1 минуту
Цитата Сообщение от Paulsan Посмотреть сообщение
Удалить это значение в массиве.
что это значит???
обнулить???
Выкинуть элемент??? (массив будет меньше)
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.01.2012, 23:38     Определить, есть ли в массиве... #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
int main()
{
    int n;
    std::cin >> n;
    float* arr = new float [n];
    int min = 0, max = 0;
    for(int i = 0; i < n; ++i)
    {
        std::cin >> arr[i];
        if(arr[i] > arr[max])
            max = i;
        if(arr[i] < arr[min])
            min = i;
    }
    float num = (arr[min] + arr[max]) / 2.;
    int pos;
    for(pos = 0; pos < n; ++pos)
        if(arr[pos] == num)
            break;
    if(pos == n)
        std::cout << "No element" << std::endl;
    else
    {
        std::cout << pos << std::endl;
        for(int i = 0; i < pos; ++i)
            std::cout << arr[i] << ' ';
        for(int i = pos + 1; i < n; ++i)
            std::cout << arr[i] << ' ';
        std::cout << std::endl;
    }
    delete[] arr;
    return 0;
}
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
05.01.2012, 23:39     Определить, есть ли в массиве... #10
Цитата Сообщение от ValeryS Посмотреть сообщение
проходим массив один раз
находим минимум и максимум
C++
1
2
3
4
5
6
7
8
9
int min,max;
min=max=arr[0];
 for(int i=1;i<N;i++)
  {
     if(arr[i]<min)
        min=arr[i];
     if(arr[i]>max)
        max=arr[i];
}
Paulsan
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 14
05.01.2012, 23:44  [ТС]     Определить, есть ли в массиве... #11
Цитата Сообщение от ValeryS Посмотреть сообщение
вот здесь у тебя не сравнение == а присвоение =
ты написал инверсию для равно
проще так (не равно)
C
1
if ((L[i]!=C)
хотя по логике тебе как раз нужно равно

Добавлено через 1 минуту

что это значит???
обнулить???
Выкинуть элемент??? (массив будет меньше)
удаляю элемент, а в конце почему-то выводит число с плавающей запятой

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
k=0;
for(int i=0;i<N;i++)
{
    if(L[i]==C)
    {
        k=i;
    }
}
for(int i=k;i<N-1;i++)
{
    L[i]=L[i+1];
}
    cout<<L[i]<<' ';
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
05.01.2012, 23:54     Определить, есть ли в массиве... #12
Цитата Сообщение от Paulsan Посмотреть сообщение
удаляю элемент, а в конце почему-то выводит число с плавающей запятой
ты не удаляешь а переносишь в конце остаются старые значения
ты должен создать массив другого размера
надо узнать размер нового массива(меньшего чем исходный на количество совпадающих элементов) создать его
или использовать динамические массивы (тот же вектор)
в любом случае без дополнительного массива не обойтись

используй теги при написании постов читать неудобно
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.01.2012, 23:57     Определить, есть ли в массиве... #13
Цитата Сообщение от ValeryS Посмотреть сообщение
в любом случае без дополнительного массива не обойтись
Зачастую в подобных заданиях имеют в виду банальную перезапись элементов, реального перераспределения памяти не нужно.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
05.01.2012, 23:59     Определить, есть ли в массиве... #14
Цитата Сообщение от Paulsan Посмотреть сообщение
C++
1
2
3
4
5
for(int i=k;i<N-1;i++)
 {
 L[i]=L[i+1];
 }
 cout<<L[i]<<' ';
а как такое скомпилировалось
i за циклом не видна
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2012, 00:16     Определить, есть ли в массиве...
Еще ссылки по теме:

C++ Определить есть ли в массиве элементы кратные К.
Определить, есть ли в массиве элементы с одинаковыми значениями C++
Проверить, есть ли в массиве А [n] числа В и С и определить, какое из чисел встречается в массиве чаще C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Paulsan
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 14
06.01.2012, 00:16  [ТС]     Определить, есть ли в массиве... #15
Спасибо большое, soon и ValeryS!
Yandex
Объявления
06.01.2012, 00:16     Определить, есть ли в массиве...
Ответ Создать тему
Опции темы

Текущее время: 05:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru