Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2009, 22:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос задачи на C++, на массивы (C++):

Задачи на массивы - C++
Здравствуйте, многоуважаемые пользователи! Прошу Вас помощи в начинающих заданиях. Не знаю сюда ли пишу. 1. Дан N-элементный...

Массивы(задачи) - C++
Начал изучать язык Си.Не могу решить задачи.Прошу помощи в решении: 1.Дано 2(два) массива из цифр: а)найти сумму б)разность ...

Задачи на массивы - C++
1.дан массив А(11).все элементы этого массива из интервала (с,d) обнулите,найдите сумму остальных. 2.Дан одномерный массив А. найти...

Задачи на массивы в С++ - C++
Здравствуйте, помогите пожалуйста с решением 2 задач: 1. Даны целые числа a1, ..., a30. Все члены последовательности с четными...

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

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

59
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
13.04.2009, 12:11 #16
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
76
77
78
79
80
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
        int i,k,n,imax,imin;
        double *darray1, *darray2, dmax, dmin; 
 
        cout << "Vvedite kol-vo elemebtov masiva = ";
        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] << "] ";
        }
        
        k = 0;
 
        // После этого цикла, k содержит кол-во 0
        for(i = 0; i<n; i++)
                if (darray1[i] == 0) k++;
 
        darray2 = new double[n-k];
 
        k=0; // обнуляем k (теперь k будет содержать размер нового массива)
        for (i=0; i<n; i++)
                if (darray1[i]!=0) darray2[k++]=darray1[i];
 
        delete[] darray1;
 
        darray1 = darray2;
 
        // Поиск мин и макс
        imin=0; imax=0;
        for (i=0; i<k; i++)
        {
                if (darray1[imin] > darray1[i]) imin = i;
                if (darray1[imax] < darray1[i]) imax = i;
        }
 
        // Выводим мин и макс
        cout << "\n\n" << darray1[imin] << " - minimal";
        cout << "\n" << darray1[imax] << " - maximal\n\n";
 
        if (imin > imax)
        {
                int tmp = imin;
                imin = imax;
                imax = tmp;
        }
 
        // переставляем
        int l=0;
        for (i=imin; i<=imax; i++)
        {
                double tmp = darray1[l];
                darray1[l] = darray1[i];
                darray1[i] = tmp;
                l++;
        }
 
        // выводим
        for (i=0; i<k; i++)
        {
            cout << "[" << darray1[i] << "] ";
        }
 
    delete[] darray1;
    system("pause");
    return 0;
}
0
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 12:33  [ТС] #17
слушай да ты гений

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

напр задан массив [0] [1.5] [3] [9.5] [5] [2.5]

мин - [1.5]
макс - [9.5]

я думаю должен выдать: [3] [1.5] [9.5] [5] [2.5]

а выдает тоже самое что и было тока без 0: [1.5] [3] [9.5] [5] [2.5]

или может я ошибаюсь????
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
13.04.2009, 12:42 #18
0 нет, потому-что в условии сказано удалить их... вот он и удален

насчет переноса... по-моему так... просто роисходит перенос включительно минимальный и максимальный... если включать их не надо, тогда замени:

C++
1
2
3
4
5
6
7
8
9
        // переставляем
        int l=0;
        for (i=imin; i<=imax; i++)
        {
                double tmp = darray1[l];
                darray1[l] = darray1[i];
                darray1[i] = tmp;
                l++;
        }
на
C++
1
2
3
4
5
6
7
8
9
        // переставляем
        int l=0;
        for (i=imin+1; i<imax; i++)
        {
                double tmp = darray1[l];
                darray1[l] = darray1[i];
                darray1[i] = tmp;
                l++;
        }
0
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 13:20  [ТС] #19

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

P.S.: у меня еще 4 подобных задачки)))..
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
13.04.2009, 14:47 #20
Я не понял, почему это вся слава перешла другому.

Кариша, а ты задачки пиши - чем сможем - поможем)))
0
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 19:14  [ТС] #21


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

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


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

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

Задачи на двумерные массивы - C++
Помогите решить следующие задачи: 1. В квадратном массиве поменять местами строку и столбец, на пересечении которых находится ноль. 2....

с++ задачи на массивы и мартицы - C++
помогите написать код програми: В одномірному масиві, що складається з n дійсних елементів, вирахувати: 1) кількість елементів...

с++ задачи на массивы и матрицы - C++
Люди помогите плиззззз:'( завтра уже сдавать надо)):'( последняя надежда на вас:sorry: 1. В одномерном массиве состоящем из n...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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