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

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

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

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

11.04.2009, 22:13. Просмотров 7019. Ответов 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
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
11.04.2009, 22:27 #2
я бы сделал так:
1. посчитал бы кол-во нулей в масиве
2. создал бы новый массив размером = прошлый размер - кол-во нолей
3. переписал бы в него все ненулевые элементы
4. удалил бы первый и указателю присвоил бы адрес второго
5. работал дальше
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
12.04.2009, 04:06 #3
Попробуй этот код, но работоспособность не гарантирую(среда что-то глючила)
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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
    setlocale(LC_ALL,".1251");
    int n,i,l,k,imax,imin;
    cout << "Введите количество элементов в массиве"<< endl;
    cin >> n;
    double darray1[n], darray2[n], dmax, dmin; //у меня тут вылезает ошибка, что мол нужно использовать только константное значение, 
//но даже если n сделать константой - оно пишет туже ошибку
    cout << "Заполните массив";
    for(i = 0;i > n; i++){
        cout << "A[" << i++ << "]=";
        cin >> darray1[i];
    }
        k = 1;
    for(i = 0; i > n; i++)
        if darray1[i] == 0
        for(l = 0; l < n;l++)
                darray1[l] = darray1[k++];
    dmax = darray1[0];
    dmin = darray1[0];
    for(i = 0;i > n;i++){
        if darray1[i] > dmax {
            dmax = darray1[i]; imax = i;
        }
        if darray[i] < dmin {
            dmin = darray1[i]; imin = i;
        }
    }
    l = 0;
    if (imax - imin) > 0 {
        for(i = imin; i < imax; i++)
            darray2[l++] = darray1[i];
        for(i = 1; i > imin; i++)
            darray2[l++] = darray1[i];
        for(i = imax; i > n;i++)
            darray2[l++] = darray1[i];
    }
    if (imax - imin) < 0 {
        for(i = imax; i > imin;i++)
            darray2[l++] = darray1[i];
        for(i = 1; i > imax; i++)
            darray2[l++] = darray1[i];
        for(i = imin; i > n;i++)
            darray2[l++] = darray1[i];
    }
    cout << "Максимальное значение массива"<< dmax << endl;
    cout << "Минимальное значение массива" << dmin << endl;
    cout << "Массив после всех преобразований" << endl;
    for(i = 0; i > n;i++)
        cout << darray2[i] << "  ";
    return 0;
}
0
Практолок
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 12
12.04.2009, 05:58 #4
Я бы удивился бы еслиб этот код работал, нельзя так обьявлять массивы. Компилятор не знает сколько памяти под нево выделить. Если ты хочеш вводить с клавы размер массива, то под такой массив нада память динамически выделять с помощью нью, маллок и т.д.
"но даже если n сделать константой - оно пишет туже ошибку" - попробуй обьектный код удалить и пересобрать)
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
12.04.2009, 11:52 #5
Вот я выделяю память для массивов, но теперь как с ним работать(указатели не догоняю:'()
C++
1
2
3
4
5
6
        double *darray1, *darray2...;
    darray1 = new double[n];
    darray2 = new double[n];
    ....
    delete(darray1);
    delete(darray2);
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 12:09 #6
два варианта:
1. через адресную арифметику
C++
1
2
             for (int i=0; i<n; i++) 
                  *(darray1+i) = i;
2. как с обычным массивом
C++
1
2
             for (int i=0; i<n; i++) 
                  darray1[i] = i;

p.s: удалять лучше так
C++
1
delete[] darray1;
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
12.04.2009, 15:00 #7
Все равно оно как-то по-корявому работает
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 15:11 #8
всмысле? то что написал я - есть динамическое создании матрицы.... двумерного массива..другого варианта нет! я же не знаю что ты хочешь сделать
0
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
12.04.2009, 16:14 #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
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
// mac.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
    setlocale(LC_ALL,".1251");
    int n,i,l,k,imax,imin;
    cout << "Введите количество элементов в массиве"<< endl;
    cin >> n;
    double *darray1, *darray2, dmax, dmin; 
    darray1 = new double[n];
    darray2 = new double[n];
    cout << "Заполните массив";
    for(i = 0;i < n; i++){
        cout << "A[" << i << "]=";
        cin >> darray1[i];
    }
    k = 1;
    for(i = 0; i < n; i++)
        if darray1[i] == 0
        for(l = i; l < n;l++)
                darray1[l] = darray1[k++];
    dmax = darray1[1];
    dmin = darray1[1];
    for(i = 0;i > n;i++){
        if darray1[i] < dmax {
            dmax = darray1[i]; imax = i;
        }
        if darray[i] < dmin {
            dmin = darray1[i]; imin = i;
        }
    }
    l = 0;
    if (imax - imin) > 0 {
        for(i = imin; i < imax; i++)
            darray2[l++] = darray1[i];
        for(i = 1; i > imin; i++)
            darray2[l++] = darray1[i];
        for(i = imax; i < n;i++)
            darray2[l++] = darray1[i];
    }
    if (imax - imin) < 0 {
        for(i = imax; i < imin;i++)
            darray2[l++] = darray1[i];
        for(i = 1; i > imax; i++)
            darray2[l++] = darray1[i];
        for(i = imin; i < n;i++)
            darray2[l++] = darray1[i];
    }
    cout << "Максимальное значение массива "<< dmax << endl;
    cout << "Минимальное значение массива " << dmin << endl;
    cout << "Массив после всех преобразований" << endl;
    for(i = 0; i < n;i++)
        cout << darray2[i] << "  ";
    delete[]darray1;
    delete[]darray2;
    return 0;
}
А Вот какие ошибки выдаёт:
Код
1>c:\myprojects\mac\mac\mac.cpp(23) : error C2061: синтаксическая ошибка: идентификатор "darray1"
1>c:\myprojects\mac\mac\mac.cpp(24) : warning C4552: <: оператор не имеет результата; требуется оператор с побочным действием
1>c:\myprojects\mac\mac\mac.cpp(24) : error C2143: синтаксическая ошибка: отсутствие ";" перед ")"
1>c:\myprojects\mac\mac\mac.cpp(24) : error C2143: синтаксическая ошибка: отсутствие ";" перед ")"
1>c:\myprojects\mac\mac\mac.cpp(29) : error C2061: синтаксическая ошибка: идентификатор "darray1"
1>c:\myprojects\mac\mac\mac.cpp(29) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\myprojects\mac\mac\mac.cpp(32) : error C2061: синтаксическая ошибка: идентификатор "darray"
1>c:\myprojects\mac\mac\mac.cpp(32) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\myprojects\mac\mac\mac.cpp(37) : error C2143: синтаксическая ошибка: отсутствие ";" перед ">"
1>c:\myprojects\mac\mac\mac.cpp(37) : warning C4390: ";": обнаружен пустой контролируемый оператор; это правильно?
1>c:\myprojects\mac\mac\mac.cpp(37) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\myprojects\mac\mac\mac.cpp(45) : error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\myprojects\mac\mac\mac.cpp(45) : warning C4390: ";": обнаружен пустой контролируемый оператор; это правильно?
1>c:\myprojects\mac\mac\mac.cpp(45) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
Добавлено через 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
// mac.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
#define isize 200
int main(int argc,char *argv[])
{
    setlocale(LC_ALL,".1251");
    int n,i,l,k,imax,imin;
    cout << "Введите количество элементов в массиве"<< endl;
    cin >> n;
    double darray1[isize], darray2[isize], dmax, dmin; 
    cout << "Заполните массив";
    for(i = 0;i < n; i++){
        cout << "A[" << i << "]=";
        cin >> darray1[i];
    }
    k = 1;
    for(i = 0; i < n; i++){
        if (darray1[i] == 0)
        for(l = i; l < n;l++)
                darray1[l] = darray1[k++];
    }
    dmax = darray1[1];
    dmin = darray1[1];
    for(i = 0;i > n;i++){
        if (darray1[i] < dmax) {
            dmax = darray1[i]; imax = i;
        }
        if (darray1[i] < dmin) {
            dmin = darray1[i]; imin = i;
        }
    }
    l = 0;
    if (imax - imin) > 0 {
        for(i = imin; i < imax; i++)
            darray2[l++] = darray1[i];
        for(i = 1; i > imin; i++)
            darray2[l++] = darray1[i];
        for(i = imax; i < n;i++)
            darray2[l++] = darray1[i];
    }
    if (imax - imin) < 0 {
        for(i = imax; i < imin;i++)
            darray2[l++] = darray1[i];
        for(i = 1; i > imax; i++)
            darray2[l++] = darray1[i];
        for(i = imin; i < n;i++)
            darray2[l++] = darray1[i];
    }
    cout << "Максимальное значение массива "<< dmax << endl;
    cout << "Минимальное значение массива " << dmin << endl;
    cout << "Массив после всех преобразований" << endl;
    for(i = 0; i < n;i++)
        cout << darray2[i] << "  ";
    return 0;
}
А вот ошибки
Код
1>c:\myprojects\mac\mac\mac.cpp(37) : error C2143: синтаксическая ошибка: отсутствие ";" перед ">"
1>c:\myprojects\mac\mac\mac.cpp(37) : warning C4390: ";": обнаружен пустой контролируемый оператор; это правильно?
1>c:\myprojects\mac\mac\mac.cpp(37) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\myprojects\mac\mac\mac.cpp(45) : error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\myprojects\mac\mac\mac.cpp(45) : warning C4390: ";": обнаружен пустой контролируемый оператор; это правильно?
1>c:\myprojects\mac\mac\mac.cpp(45) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 16:44 #10
вот часть рабочего кода.. дальше справишься?
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
#include "stdafx.h"
 
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,".1251");
    int i,k,n,imax,imin;
    double *darray1, *darray2, dmax, dmin; 
 
    cout << "Введите количество элементов в массиве"<< endl;
    cin >> n;
 
    darray1 = new double[n];
    cout << "Заполните массив\n";
 
    for(i=0; i<n; i++)
    {
        cout << "A[" << i << "]=";
        cin >> 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 (для других целей)
    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 << darray1[imin] << " - minimal\n";
    cout << darray1[imax] << " - maximal\n";
 
    delete[] darray1;
    return 0;
}
Добавлено через 6 минут 34 секунды
вот финальный рабочий код.. разбирайтесь

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
// mac.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,".1251");
    int i,k,n,imax,imin;
    double *darray1, *darray2, dmax, dmin; 
 
    cout << "Введите количество элементов в массиве"<< endl;
    cin >> n;
 
    darray1 = new double[n];
    cout << "Заполните массив\n";
 
    for(i=0; i<n; i++)
    {
        cout << "A[" << i << "]=";
        cin >> 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 << darray1[imin] << " - minimal\n";
    cout << 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;
    return 0;
}
1
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 10:27  [ТС] #11
хм....пытаюсь разобраться в написанном..но что-то пока плохо получатся...

попробовала...код не работает...

и еще...простите за наверное очнь глупый вопрос, но не понимаю для чего здесь
#include "stdafx.h"

и

setlocale(LC_ALL,".1251");
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
13.04.2009, 10:37 #12
Цитата Сообщение от Кариша Посмотреть сообщение
#include "stdafx.h"
это заголовочный файл в среде Visual C++ 2005-2008. Для других компиляторов и сред он не нужен. Если вы компилируете например в C++ Builder или Visual C++ 6, эту директиву можно удалять смело.


Цитата Сообщение от Кариша Посмотреть сообщение
setlocale(LC_ALL,".1251");
это директива (она не во всех компиляторах работает) включает поддержку русского текста. В программе, как вы заметили, в cout используются русские буквы. Это директива позволяет их выводить.


Цитата Сообщение от Кариша Посмотреть сообщение
попробовала...код не работает..
у меня код работает 100%... какие ошибки выдает?
0
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 11:33  [ТС] #13
"системе не удается найти указанный путь"....
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
13.04.2009, 11:44 #14
у вас компилятор по-русски разговаривает?
код рабочий. Путей в программе нет. Поэтому либо у вас сбиты настройки среды, либой вы что-то не так делаете. В какой среде вы программируете?
0
Кариша
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 23
13.04.2009, 11:54  [ТС] #15
поторопилась)......работает....тока после "заполнения массива" окно закрывается(....

и еще вопрос...можно ли сделать так чтобы комп сам задавал массив???....

ну например так:
{
int A[N];
A[N]=rand ();
cin>> N\n;
.............
}
0
13.04.2009, 11:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2009, 11:54
Привет! Вот еще темы с ответами:

Массивы - задачи - 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...


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

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

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