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

Одномерный массив - C++

Восстановить пароль Регистрация
 
z.a.m
49 / 0 / 1
Регистрация: 17.10.2010
Сообщений: 56
17.10.2010, 15:53     Одномерный массив #1
Нужно написать прогу с использованием статического и динамического распределения памяти.

Дан массив действительных чисел. Если его первый элемент не является максимальным элементом массива, то создать новый массив, расположив в нем элементы так, чтобы вначале массива шла группа элементов, больших первого элемента исходного массива. Затем - сам этот элемент, потом - группа элементов, меньших или равных ему в том порядке, в каком они расположены в исходном массиве.

Помогите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2010, 15:53     Одномерный массив
Посмотрите здесь:

C++ Одномерный массив
одномерный массив C++
Одномерный массив C++
C++ Одномерный массив
C++ одномерный массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
17.10.2010, 16:34     Одномерный массив #2
Если непонятно что-то , могу прокомментировать

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
#include<algorithm>
#include <iostream>
using namespace std;
 
bool IsGreater(int Array, int n) { return n > Array;}
bool IsSmallerOrEqual(int Array, int n) {return n <= Array;}
 
int main() 
{ 
    int Array[] = {5,7,9,3,1,4,6,8,3,10};
    int max = *std::max_element(Array, Array+10);
    int count = 0;
    if(Array[0] != max){
        int * Arr2 = new int[10];
        for(int i = 0;i < 10;++i){
if(IsGreater(Array[0],Array[i]))
{Arr2[count] = Array[i];
count++;
} // end if
        } // end loop
        
for(int i = 0;i < 10;++i){
    if(IsSmallerOrEqual(Array[0], Array[i]))
    {Arr2[count] = Array[i];
    count++;
    } // end if
} // end loop
for(int i = 0;i < count;++i)
cout << Arr2[i] << " ";
    } // end if
 
system("pause");
}
z.a.m
49 / 0 / 1
Регистрация: 17.10.2010
Сообщений: 56
17.10.2010, 18:14  [ТС]     Одномерный массив #3
Ничего не понятно =)
Не могли бы написать языком для начинающего?
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
24.10.2010, 19:08     Одномерный массив #4
Такая же задача у меня, посмотрите пожалуйста, иногда неправильно выдаёт ответ, а иногда правильно =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <conio.h>
#include <iostream>
using namespace std;
int function_1 (float* , int , float );
void function_2 (float* , int );
 
 void main() 
{ 
        int N, i;
        float Max;
        cout << "Input N: ";
        cin >> N;
        float *Array = new float [N];
        for (i=0; i<N; i++)
            cin >> Array[i];
        Max=Array[0];
        if (function_1 (Array, N, Max)==0)
            cout << "There is no necessity to create a new file";
        else 
        function_2(Array, N);
        getch();
 }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <conio.h>
#include <iostream>
using namespace std;
void function_2 (float*, int );
int function_1 (float* Array, int N, float Max)
{
for (int i=1; i<N; i++)
    {
        if (Array[i]>Max)
            Max=Array[i];
    }
if (Max==Array[0])
return 0;
}
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
#include <conio.h>
#include <iostream>
using namespace std;
void function_2 (float* Array, int N)
{
    int i, j=0, k;
    float *Array_2=new float [N];
        for (i=0; i<N; i++)
        {
            if (Array[i]>Array[0])
            {
                for (k=0; k<N; k++)
                Array_2[k]=Array[i];
                j++;
            }
        }
 
        
        for (i=0; i<N; i++)
        {
            if (Array[i]<=Array[0])
            {
                for (k=0; k<N; k++)
                Array_2[j]=Array[i];
                j++;
            }
        }
    
        for (i=0; i<N; i++)
        cout << "\n" << Array_2[i] << " ";
}
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
24.10.2010, 20:18     Одномерный массив #5
Народ, я лучше подробно прокомментирую свой код, он достаточно прост:

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
#include<algorithm> // подключаем файл в котором находятся функция max_element 
#include <iostream>
using namespace std;
 
bool IsGreater(int Array, int n) { return n > Array;} // в эту функцию передается каждый элемент массива(int n) 
                              // и она сравнивает его с первым элементом(Array[0]) и возвращает true если этот 
                            // элемент больше чем Array[0]
bool IsSmallerOrEqual(int Array, int n) {return n <= Array;} // эта функция аналогично сравнивает элементы,
                                        // но возвращает true если n >= Array[0]
 
int main() 
{ 
        int Array[] = {5,7,9,3,1,4,6,8,3,10};
        int max = *std::max_element(Array, Array+10); // используя функцию max_element() в одну строку
                   // кода находим максимальный элемент массива, передав ей параметры - указатель на первый
                   // элемент массива(Array) и указатель на последний элемент(Arr+10).И она находит его
                  //  в заданном диапазоне
        int count = 0; // это индекс элементов второго массива
        if(Array[0] != max){   // Если первый элемент массива не максимальный , то
                int * Arr2 = new int[10];  // динамически создаем второй  массив такого же размера
                for(int i = 0;i < 10;++i){
if(IsGreater(Array[0],Array[i])) // элементы большие чем Array[0] помещаем в начало нового массива
{Arr2[count] = Array[i];
count++;
} // end if
                } // end loop
                
for(int i = 0;i < 10;++i){
        if(IsSmallerOrEqual(Array[0], Array[i])) //  потом элементы меньшие или равные Array[0] 
        {Arr2[count] = Array[i];
        count++;
        } // end if
} // end loop
for(int i = 0;i < count;++i)
cout << Arr2[i] << " ";
        } // end if
 
system("pause");
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.10.2010, 20:30     Одномерный массив #6
NikolaWhite, Ну зачем магические числа-то?
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
24.10.2010, 21:25     Одномерный массив #7
NikolaWhite, вы понимаете, я начинающий и не знаю половины кода(операторов), которые у вас. К тому же мой препод сразу заподозрит. Не могли бы посмотреть мой код, а именно третий. Там что-то неверно.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
24.10.2010, 23:06     Одномерный массив #8
Я переписал ее заново:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void function_2 (float* Array, int N)
{
    int index = 0; // индекс массива Array_2
        float *Array_2=new float [N];
        for(int i = 0;i < N;++i) // ищем элементы большие чем Array[0]. Если находим , то вставляем в Array_2
            if(Array[i] > Array[0]) {Array_2[index] = Array[i]; index++;}
        
            for(int i = 0;i < N;++i) // То же самое с равными
            if(Array[i] == Array[0]) {Array_2[index] = Array[i]; index++;}
 
            for(int i = 0;i < N;++i) // затем меньшие чем Array[0]
                if(Array[i] < Array[0]) {Array_2[index] = Array[i]; index++;}
 
                for (int i=0; i<N; ++i)
                cout << "\n" << Array_2[i] << " ";
}
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
25.10.2010, 14:27     Одномерный массив #9
NikolaWhite, а можно вывод нового массива организовать в main? если да, то как его туда передать?
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
25.10.2010, 19:14     Одномерный массив #10
а можно вывод нового массива организовать в main? если да, то как его туда передать?
Для этого надо инициализировать Array_2 в main() и передать его в качестве параметра в функцию.
Цикл вывода на экран теперь в конце main()
Вот полный код:

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
#include <conio.h>
#include <iostream>
using namespace std;
int function_1 (float* , int , float );
void function_2 (float* , int, float * Array_2 );
 
 void main() 
{ 
                int N, i;
                float Max;
                cout << "Input N: ";
                cin >> N;
                float *Array = new float [N];
                float * Array_2 = new float[N];
                for (i=0; i<N; i++)
                        cin >> Array[i];
                Max=Array[0];
                if (function_1 (Array, N, Max)==0)
                        cout << "There is no necessity to create a new file";
                else 
                function_2(Array, N, Array_2);
                for(int i = 0;i < N;++i)
                    cout << Array_2[i] << " ";
                getch();
 } 
 
 
int function_1 (float* Array, int N, float Max)
{
for (int i=1; i<N; i++)
        {
                if (Array[i]>Max)
                        Max=Array[i];
        }
if (Max==Array[0])
return 0;
}
void function_2 (float* Array, int N,float *Array_2)
{
        int index = 0; // индекс массива Array_2
       // Array_2=new float [N];
                for(int i = 0;i < N;++i) // ищем элементы большие чем Array[0]. Если находим , то вставляем в Array_2
                        if(Array[i] > Array[0]) {Array_2[index] = Array[i]; index++;}
                
                        for(int i = 0;i < N;++i) // То же самое с равными
                        if(Array[i] == Array[0]) {Array_2[index] = Array[i]; index++;}
 
                        for(int i = 0;i < N;++i) // затем меньшие чем Array[0]
                                if(Array[i] < Array[0]) {Array_2[index] = Array[i]; index++;}
 
              
}
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
25.10.2010, 20:19     Одномерный массив #11
Хехе нашёл странный баг =) Если первый элемент массива самый большой, то программа выводит "There is no ..." и какие-то цифры =) Не пойму откуда они берутся. Хотя может быть это visual studio у меня гонит
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2010, 20:20     Одномерный массив
Еще ссылки по теме:

C++ Одномерный массив
Одномерный массив. C++
C++ одномерный массив

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

Или воспользуйтесь поиском по форуму:
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
26.10.2010, 20:20     Одномерный массив #12
NikolaWhite, сегодня сдавал прогу, статику она у меня приняла, а про динамику, говорит, что неправильно устроено(скомпановано). Есть какие-то правила. Я весь инет перерыл, везде одинаково, и от статики мало чем отличается, кроме того что N известно заранее или нет. А вот про правила написания динамического массива впервые слышу. Если знаете расскажите или ссылку скиньте. опять 3ий код подвёл =)
Yandex
Объявления
26.10.2010, 20:20     Одномерный массив
Ответ Создать тему
Опции темы

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