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

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

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

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

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

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

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

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

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

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

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

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2009, 22:13     задачи на C++, на массивы
Посмотрите здесь:
Задачи на массивы в С++ C++
Задачи на массивы C++
C++ Задачи на массивы
Массивы(задачи) C++
C++ Задачи на массивы С++
Массивы - задачи C++
C++ Задачи на массивы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
2788 / 1374 / 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
2788 / 1374 / 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
2788 / 1374 / 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
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
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.04.2009, 09:43     задачи на C++, на массивы #39
ну как сказать... из условия я так понял, и сделал как я понял....
а еслу необходимо просто вставить - это не так просто: там мороки с указателями будет... путем динмического распределения памяти. Кариша, вам как говорили сделать? со статическимим массивами или динамическими?
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
29.04.2009, 13:01  [ТС]     задачи на C++, на массивы #40
динамическими...
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.04.2009, 22:47     задачи на C++, на массивы #41
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 <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
        int  *X, *Y;
        int N;
        int xmax=0;
        int ymin=0, ymax=0;
 
        srand(time(0));
 
        cout << "Enter size of arrays: ";
        cin >> N;
        X = new int[N];
        Y = new int[N];
 
        cout << "\nX = ";
        for (int i=0; i<N; i++)
        {
                X[i] = rand()%20;
                cout.width(4);
                cout << X[i];
        }
 
        cout << "\nY = ";
        for (int i=0; i<N; i++)
        {
                Y[i] = rand()%20;
                cout.width(4);
                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;
        }
 
        int *Z = new int[xmax+(ymax-ymin)];
        
        for (int i=0; i<=xmax; i++)
            Z[i] = X[i];
        delete[] X;
 
        for (int i=ymin+1, j=1; i<ymax; i++, j++)
            Z[xmax+j] = Y[i];
 
        
        X = Z;
        
        cout << "\n\nX = ";
        for (int i=0; i<xmax+(ymax-ymin); i++)
        {
                cout.width(4);
                cout << X[i];
        }
 
        cout << endl;
 
        delete[] X;
        delete[] Y;
        system("pause");
        return 0;
}
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
06.05.2009, 19:31  [ТС]     задачи на C++, на массивы #42
C
1
2
3
4
5
6
7
8
9
10
11
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;
немогли бы откомментировать данный отрыовк)))))
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
06.05.2009, 19:56     задачи на C++, на массивы #43
C++
1
2
3
4
5
6
7
8
9
10
11
n=0; // присваеваем перменной n значение 0 =D
arr2 = new int[k-(imax2-imax1)]; // создаем массив размером k минус разница между индексами первых двух максимальных элементов
 
for (int i=0; i<=imax1; i++) // цикл от 0 до первого максимального элемента
arr2[n++] = arr1[i]; // записываем в новый массив элементы из старого массива до первого максимального
 
for (int i=imax2; i<k; i++) // цикл от второго максимального до конца массива
arr2[n++] = arr1[i]; // записываем в новый массив элемент от второго максимального до конца
 
delete[] arr1; // удаляем старый массив
arr1 = arr2; // присваеваем указателю на первый массив адрес второго (т.е. он уже указывает на новый)
Gosha_Dubinin
35 / 12 / 3
Регистрация: 06.05.2009
Сообщений: 215
06.05.2009, 19:59     задачи на C++, на массивы #44
Цитата Сообщение от Практолок Посмотреть сообщение
Я бы удивился бы еслиб этот код работал, нельзя так обьявлять массивы. Компилятор не знает сколько памяти под нево выделить. Если ты хочеш вводить с клавы размер массива, то под такой массив нада память динамически выделять с помощью нью, маллок и т.д.
"но даже если n сделать константой - оно пишет туже ошибку" - попробуй обьектный код удалить и пересобрать)
просто тупо объяви масив mas, и ставь условия на индексы....
int mas [i]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2009, 01:07     задачи на C++, на массивы
Еще ссылки по теме:
C++ Задачи на одномерные массивы
с++ задачи на массивы и мартицы C++
C++ Задачи массивы( объяснение)

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

Или воспользуйтесь поиском по форуму:
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
20.05.2009, 01:07  [ТС]     задачи на C++, на массивы #45
уууу....чет я совсем запуталась)...ну лана...с этим попозже разберусь)...эээ...надеюсь с вашей помощью)....

ща другая проблема....зачетная неделя...вот препод и издевается дает одну задачу за одной ....осталось 3 последние...если кому не сложно........то .....

1) Счастливый билет - сумма чисел на четных местах, равна сумме чисел на нечетных.
Дано число, найти номер следующего счастливиго билетика.

2) Найти наибольший общий делитель.

3) Найти сумму чисел от 1 до 1000, которые делятся или на 3 или на 5.
Yandex
Объявления
20.05.2009, 01:07     задачи на C++, на массивы
Ответ Создать тему
Опции темы

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