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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.98
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
#1

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

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

дана такая задача:

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 19:14  [ТС]     задачи на C++, на массивы #21


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

Дан линейный массив А, состоящий из 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;
ну что-то вроде этого....

а вот тут чет не знаю...
"В преобразованном массиве найти два элемента, сумма которых максимальна, и удалить элементы, расположенные между ними. "
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
14.04.2009, 18:27     задачи на C++, на массивы #26
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а ты охотник за славой? если бы я мог, я тебе бы весь свой рейтинг отдал... я на форуме не из-за рейтинга, а из-за учебы.... лишь обучая других, мы учимся..
Я не охотник за славой(ну может чуть-чуть), просто не справедливо - а тоже внес вклад в решение.
Эта задачка немного посложнее - но решаемая. Вопрос только, как "перекрутить" комбинацию с 2 по n .
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
14.04.2009, 18:40     задачи на C++, на массивы #27
Цитата Сообщение от insolent Посмотреть сообщение
просто не справедливо - а тоже внес вклад в решение.
истинный аристократ и джентельмен промолчал бы


Цитата Сообщение от insolent Посмотреть сообщение
Эта задачка немного посложнее - но решаемая.
все эти задачки просты - на обычную логику. главное правильно понять условие.
так ты решишь?
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
14.04.2009, 18:49     задачи на C++, на массивы #28
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
истинный аристократ и джентельмен промолчал бы
Джентльмены вымерли с Викторианской эпохой - а сейчас эпоха "Дикого капитализма". Хватить оффтопа
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
14.04.2009, 19:17     задачи на C++, на массивы #29
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; 
}
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
15.04.2009, 09:04  [ТС]     задачи на C++, на массивы #30
если честно то что в первой задаче, что во второй мне не очень понятна данная строчка:

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.: мне просто нужно написать комментарии ко всему этому..вот разбираюсь)
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
15.04.2009, 10:36     задачи на C++, на массивы #31
Цитата Сообщение от Кариша Посмотреть сообщение
srand(time(0));
это активирует генератор псевдослучайных числе на основе текущего времени
(если ты уберешь ее, то у тебя числа будут генирироватся одни и те же всегда, пока ты не запустишь программу на другом компьютере.)

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

Цитата Сообщение от Кариша Посмотреть сообщение
delete[] arr1;
так как мы выделили область памяти оператором new , теперь нам ее надо освободить delete[] arr1. скобочки возле delete означают что удаляется массив
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
15.04.2009, 13:28  [ТС]     задачи на C++, на массивы #32
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 что такое?...
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
15.04.2009, 21:02     задачи на C++, на массивы #33
Цитата Сообщение от Кариша Посмотреть сообщение
здесь мы присваиваем переменной imax1 значение 0...далее задаем цикл...ну тут понятно....а дальше зачем мы вводим k?..и дальше задаем новый массив n-k?...хм...
так как в условии сказано удалить максимальные элементы, мы считаем их количество..и создаем массив с кол-вом элементов n-k (текущее - кол-во максимальных)...

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

следующая)
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
22.04.2009, 12:15     задачи на C++, на массивы #35
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;
}
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
23.04.2009, 15:24  [ТС]     задачи на C++, на массивы #36
там немного не то с перестановкой...нужно было не заменять элементы в Х из У а просто вставить..ну типа того:

Х : 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
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
23.04.2009, 16:44     задачи на C++, на массивы #37
Попробуй этот код:
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;
}
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
29.04.2009, 09:22  [ТС]     задачи на C++, на массивы #38
хм....все равно что-то не так...
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.04.2009, 09:43     задачи на C++, на массивы #39
ну как сказать... из условия я так понял, и сделал как я понял....
а еслу необходимо просто вставить - это не так просто: там мороки с указателями будет... путем динмического распределения памяти. Кариша, вам как говорили сделать? со статическимим массивами или динамическими?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2009, 13:01     задачи на C++, на массивы
Еще ссылки по теме:

C++ Задачи на массивы С++
C++ Задачи на массивы
C++ Задачи на массивы

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

Или воспользуйтесь поиском по форуму:
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
29.04.2009, 13:01  [ТС]     задачи на C++, на массивы #40
динамическими...
Yandex
Объявления
29.04.2009, 13:01     задачи на C++, на массивы
Ответ Создать тему
Опции темы

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