Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/54: Рейтинг темы: голосов - 54, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23

задачи на C++, на массивы

11.04.2009, 22:13. Показов 11295. Ответов 59
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дана такая задача:

дан линейный массив А, состояий из N элементов. Составить прорграмму удаления в массиве всех элементов, значения которых равны нулю. В преобразованном линейном массиве найти макс и мин по значению элементы, считая что такие элементы единственные. Элементы, расположенные между макс и мин, переместить в начало массива с одновременным удалением с исходных мест. Найденные значения и преобразованный линейный массив выдать на экран в строку.

у меня конечно есть мысли..но как соединить все это в кучу пока не получется)...

ну во-первых, массив из N элементов нужно создавать с помощью указателя:
int n;
double *A;
cout << "Vvedite razmer massiva: ";
cin >> n;
A=new double [n];
??????...
можно ли здесь использовать метод splice для удаления элементов???

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

строго не судите я в этом деле новичок))))...пытаюсь как могу)...

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2009, 22:13
Ответы с готовыми решениями:

Массивы - задачи
http://www.ii4.ru/images/7078611.JPG http://www.ii4.ru/images/1839532.JPG задачи на C++ срочно нужно знакомому...

Задачи на массивы.
Даны 2 массива X и Y, состоящие из N элементов каждый. Каждаяпара элементов вида (Xi,yi)задаёт абсциссу и ординату одной (i-той) точки на...

Задачи на массивы
1. Заполнить массив А(n) случайными числами в диапазоне от -15 до 15. Выведите его на экран. eurostalin, обращаю Ваше внимание на...

59
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 19:14  [ТС]
Студворк — интернет-сервис помощи студентам


спасибо всем!
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
13.04.2009, 20:18
Ты на кнопочки "Спасибо" нажимай)
1
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
13.04.2009, 21:55
Цитата Сообщение от insolent Посмотреть сообщение
Я не понял, почему это вся слава перешла другому.
а ты охотник за славой? если бы я мог, я тебе бы весь свой рейтинг отдал... я на форуме не из-за рейтинга, а из-за учебы.... лишь обучая других, мы учимся..
1
 Аватар для Shargrath
1 / 1 / 0
Регистрация: 18.01.2009
Сообщений: 87
13.04.2009, 22:34
во!)
золотые слова!
1
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
14.04.2009, 14:49  [ТС]
вот следующая задачка

Дан линейный массив А, состоящий из N элементов. Составить программу преобразования массива путем удаления всех элементов, равных по значению максимальному элементу массива. В преобразованном массиве найти два элемента , сумма которых максимальна , и удалить элементы , расположенные между ними. Найденные значения и преобразованный массив выдать на экран в строку.


эээээ........

"преобразованном массиве найти два элемента , сумма которых максимальна"

с этим у меня возникли некоторые затруднения)....

Добавлено через 2 часа 36 минут 11 секунд
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
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std; 
int main()
{
        setlocale(LC_ALL,".1251");
        int i,k,n,imax;
        double *darray1, *darray2, dmax; 
 
        cout << "Введите количество элементов в массиве"<< endl;
        cin >> n;
                 cout << "\n";
         darray1 = new double[n];
                 srand(time(0));
         for(i=0; i<n; i++)
                {
               darray1[i] = rand()%20/2.0;
                           cout << "[" << darray1[i] << "] ";
        }       
 
          imax=0;
        for (i=0; i<k; i++)
        {
                if (darray1[imax] < darray1[i]) imax = i;
        }
         
        cout << "\n \n" << darray1[imax] << " - maximal\n\n";
 
        k = imax;
         // После этого цикла, k содержит кол-во 0
        for(i = 0; i<n; i++)
                if (darray1[i] == imax) k++;
         darray2 = new double[n-k];
         k=0; // обнуляем k (теперь k будет содержать размер нового массива)
        for (i=0; i<n; i++)
                if (darray1[i]!= imax) darray2[k++]=darray1[i];
 
         delete[] darray1;
         darray1 = darray2;
 
        system("pause");
    return 0;
ну что-то вроде этого....

а вот тут чет не знаю...
"В преобразованном массиве найти два элемента, сумма которых максимальна, и удалить элементы, расположенные между ними. "
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
14.04.2009, 18:27
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а ты охотник за славой? если бы я мог, я тебе бы весь свой рейтинг отдал... я на форуме не из-за рейтинга, а из-за учебы.... лишь обучая других, мы учимся..
Я не охотник за славой(ну может чуть-чуть), просто не справедливо - а тоже внес вклад в решение.
Эта задачка немного посложнее - но решаемая. Вопрос только, как "перекрутить" комбинацию с 2 по n .
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.04.2009, 18:40
Цитата Сообщение от insolent Посмотреть сообщение
просто не справедливо - а тоже внес вклад в решение.
истинный аристократ и джентельмен промолчал бы


Цитата Сообщение от insolent Посмотреть сообщение
Эта задачка немного посложнее - но решаемая.
все эти задачки просты - на обычную логику. главное правильно понять условие.
так ты решишь?
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
14.04.2009, 18:49
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
истинный аристократ и джентельмен промолчал бы
Джентльмены вымерли с Викторианской эпохой - а сейчас эпоха "Дикого капитализма". Хватить оффтопа
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.04.2009, 19:17
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std; 
int main()
{
    int n, imax1, imax2, k;
    int *arr1, *arr2; 
 
    cout << "Please, enter size of massive = ";
    cin >> n;
 
    arr1 = new int[n];
 
    srand(time(0));
 
    for(int i=0; i<n; i++)
    {
        arr1[i] = rand()%10;
        cout << "[" << arr1[i] << "] ";
    }  
 
 
    // Поиск мин и макс
    imax1=0;
    for (int i=0; i<n; i++)
        if (arr1[imax1] < arr1[i]) imax1 = i;
 
    k = 0;
    for (int i=0; i<n; i++)
        if (arr1[i] == arr1[imax1]) k++;
       
    arr2 = new int[n-k];
    k = 0;
    for (int i=0; i<n; i++)
        if (arr1[i] != arr1[imax1]) arr2[k++] = arr1[i];
    
    delete[]arr1;
    arr1 = arr2;
 
    cout << "\n";
    for (int i=0; i<k; i++)
        cout << "[" << arr1[i] << "] ";
    cout << "\n";
 
    imax1=0; imax2=1;
    for (int i=0; i<k-1; i++)
        for (int j=i+1; j<k; j++)
            if ((arr1[i]+arr1[j])>(arr1[imax1]+arr1[imax2]))
            {
                imax1 = i;
                imax2 = j;
            }
 
    n=0;
    arr2 = new int[k-(imax2-imax1)];
 
    for (int i=0; i<=imax1; i++)
        arr2[n++] = arr1[i];
 
    for (int i=imax2; i<k; i++)
        arr2[n++] = arr1[i];
 
    delete[] arr1;
    arr1 = arr2;
 
    for (int i=0; i<n; i++)
        cout << "[" << arr1[i] << "] ";
    cout << "\n";
 
    system("pause");
    return 0; 
}
1
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
15.04.2009, 09:04  [ТС]
если честно то что в первой задаче, что во второй мне не очень понятна данная строчка:

arr1 = new int[n]; - здесь понятно мы задаем массив

srand(time(0)); - ?????

for(int i=0; i<n; i++)
{
arr1[i] = rand()%10; - тут понятно что эта ф-я задает случ. порядок..а что означает %10?...числа от 0 до 10?
cout << "[" << arr1[i] << "] ";
}

delete[] arr1; - что означает данная строчка?...
arr1 = arr2;

P.S.: мне просто нужно написать комментарии ко всему этому..вот разбираюсь)
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
15.04.2009, 10:36
Цитата Сообщение от Кариша Посмотреть сообщение
srand(time(0));
это активирует генератор псевдослучайных числе на основе текущего времени
(если ты уберешь ее, то у тебя числа будут генирироватся одни и те же всегда, пока ты не запустишь программу на другом компьютере.)

Цитата Сообщение от Кариша Посмотреть сообщение
arr1[i] = rand()%10;
да, это генерация числа от 0 до 10 (10 не входит в числа генерации)

Цитата Сообщение от Кариша Посмотреть сообщение
delete[] arr1;
так как мы выделили область памяти оператором new , теперь нам ее надо освободить delete[] arr1. скобочки возле delete означают что удаляется массив
1
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
15.04.2009, 13:28  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
imax1=0;
    for (int i=0; i<n; i++)
                if (arr1[imax1] < arr1[i]) imax1 = i;
 
        k = 0;
    for (int i=0; i<n; i++)
                if (arr1[i] == arr1[imax1]) k++;
       
        arr2 = new int[n-k];
        k = 0;
    for (int i=0; i<n; i++)
                if (arr1[i] != arr1[imax1]) arr2[k++] = arr1[i];
здесь мы присваиваем переменной imax1 значение 0...далее задаем цикл...ну тут понятно....а дальше зачем мы вводим k?..и дальше задаем новый массив n-k?...хм...

Добавлено через 31 минуту 16 секунд
в первой задаче
darray1[i] = rand()%20/2.0;
числа от 0 до 20 а 2.0 что такое?...
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
15.04.2009, 21:02
Цитата Сообщение от Кариша Посмотреть сообщение
здесь мы присваиваем переменной imax1 значение 0...далее задаем цикл...ну тут понятно....а дальше зачем мы вводим k?..и дальше задаем новый массив n-k?...хм...
так как в условии сказано удалить максимальные элементы, мы считаем их количество..и создаем массив с кол-вом элементов n-k (текущее - кол-во максимальных)...

Цитата Сообщение от Кариша Посмотреть сообщение
darray1[i] = rand()%20/2.0;
числа от 0 до 20 а 2.0 что такое?...
ну там был массив из вещественных чисел (дробных)..а тут из целочисленных...
в первом случае, генерировалось число от 0 до 20 и делилось на два (в случае нечетного элемента, у нас получалось вщественное число)...
1
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
22.04.2009, 11:21  [ТС]
Даны два линейных массива Х и У, размером N каждый. Составить программу преобразования массива Х путем включения после его максимального значения элементов, находящихся между максимальным и минимальным элементами массива У . Преобразованный массив Х выдать на экран в строку.

следующая)
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
22.04.2009, 12:15
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    const int N = 10;
    int X[N], Y[N];
    int xmax=0; // индекс максимального элемента массива X
    int ymin=0, ymax=0; // индексы мин/макс элементов массива Y
 
    srand(time(0));
    cout << "X = ";
    for (int i=0; i<N; i++)
    {
        X[i] = rand()%20;
        cout.width(3);
        cout << X[i];
    }
 
    cout << "\nY = ";
    for (int i=0; i<N; i++)
    {
        Y[i] = rand()%20;
        cout.width(3);
        cout << Y[i];
    }
    
    for (int i=0; i<N; i++)
    {
        if (X[i] > X[xmax]) xmax = i;
        if (Y[i] > Y[ymax]) ymax = i;
        if (Y[i] < Y[ymin]) ymin = i;
    }
 
    if (ymin > ymax)
    {
        int t = ymin;
        ymin = ymax;
        ymax = t;
    }
 
    for (int i=xmax+1, j=1; i<N; i++, j++)
        if ((ymin+j) < ymax) X[i] = Y[ymin+j];
 
    cout << "\n\nX = ";
    for (int i=0; i<N; i++)
    {
        cout.width(3);
        cout << X[i];
    }
 
    cout << endl;
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
23.04.2009, 15:24  [ТС]
там немного не то с перестановкой...нужно было не заменять элементы в Х из У а просто вставить..ну типа того:

Х : 3 5 2 10 8 8 4
У : 4 2 5 9 3 12 4
min max

Х : 3 5 2 10 5 9 3 8 8 4
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
23.04.2009, 16:44
Попробуй этот код:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <ctime>
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL,".1251");
    int i,n,k,l,
        ximax = 0,
        yimin = 0,
        yimax = 0;
    double *x,*y,*x1;
    cout << "Введите количество элементов в массиве:" << endl;
    wcin >> n;
    _flushall();
    x = new double[n];
    y = new double[n];
    srand(time(0));
    cout << "X = [";
    for(i = 0; i < n;i++){
        x[i] = rand()%401-200;
        cout  << x[i] << ", ";
    }
    cout << "].";
    cout << endl;
    cout << "Y = [";
    for(i = 0; i < n;i++){
        y[i] = rand()%401-200;
        cout << y[i] << ", ";
    }
    cout << "].";
    cout << endl;
    _flushall();
    for (i = 0; i < n; i++){
        if (x[i] > x[ximax]) ximax = i;
        if (y[i] > y[yimax]) yimax = i;
        if (y[i] < y[yimin]) yimin = i;
    }
    cout << "xmax = " << x[ximax] << endl;
    cout << "ymax = " << y[yimax] << endl;
    cout << "ymin = " << y[yimin] << endl;
    k = ximax;
    (yimax > yimin) ? x1 = new double[yimax - yimin - 1] : x1 = new double[yimin - yimax - 1];
    l = 0;
    for(i = 0; i < ximax + 1;i++)
        x1[i] = x[i];
    if (yimax > yimin) {
        for (i = yimin + 1; i < yimax;i++)
            x1[++k] = y[i];
        l = yimax - yimin;
        k = n + l - 1;
        for (i = ximax; i < n;i++)
            x1[l++] = x[i];
    }
    else{
        for(i = yimax; i < yimin;i++)
            x1[++k] = y[i];
        l = yimin - yimax;
        k = n + l - 1;
        for(i = ximax; i < n;i++)
            x1[l++] = x[i];
    }
    _flushall();
    cout << "X = [";
    for(i = 0; i < k;i++)
        cout  << x1[i] << ", ";
    cout << "].";
    cout << endl;
        delete[]x;
        delete[]y;
        delete[]x1;
    system("PAUSE");
    return 0;
}
1
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
29.04.2009, 09:22  [ТС]
хм....все равно что-то не так...
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
29.04.2009, 09:43
ну как сказать... из условия я так понял, и сделал как я понял....
а еслу необходимо просто вставить - это не так просто: там мороки с указателями будет... путем динмического распределения памяти. Кариша, вам как говорили сделать? со статическимим массивами или динамическими?
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
29.04.2009, 13:01  [ТС]
динамическими...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2009, 13:01

Задачи на массивы
Задача D Заполнить массив из 12 элементов следующим образом:. 1 2 3 ... 12 Внимание! Заполнить массив нужно не с клавиатуры, а...

2 задачи на массивы
Доброго времени суток! У меня две задачки на массивы, помогите плиз... 1) В одномерном числовом массиве замените все нулевые элементы на...

Задачи на массивы С++
1)решить двумя способоми, сначала используя одномерный массив а потом двумерный.( и только с помощьюь массивов,никак по другому) ...

Задачи на массивы
Народ, скиньте какие нить задачи на массивы, условие задач, только не очень сложных, хочу порешать) Спасибо:)

Задачи на массивы
Помогите написать программы на С++ пожалуйста.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru