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

Помощь с кодом(не доделано) - C++

Восстановить пароль Регистрация
 
Tom910
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
13.12.2012, 18:22     Помощь с кодом(не доделано) #1
Здравствуйте, имеется задание:
В одномерном массиве, состоящем из n-вещественных элементов, вычислить:
• Максимальный по модулю элемент массива;
• Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Код:
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
#include <iostream>
#include <math.h>
 
using namespace std;
double Max(double * arr, int n);
 
int main()
{
    double * arr;
    int n;
 
    std::cout << "n = ";
    std::cin >> n;
 
    arr = new double[n];
 
    std::cout << "Massiv : \n";
 
    for(int i=0; i<n; i++)
        cin >> arr[i];
 
    cout << "\nMax element massiva = " << Max(arr,n) << "\n";
 
    for (int i = n-1; i >= 0; i--)
    {
    for (int j = 0; j <= i; j++)
    {
    if (arr[j] == 0)
    {
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    break;
    }
    }
    }
 
for (int i = 0; i < n; i++)
    cout << arr[i] << " ";
    delete[] arr;
    system("pause");
    return 0;
}
 
double Max(double * arr, int n)
{
    double max = arr[0];
    for(int i=1; i<n; i++)
        if(abs(*(arr+i))>abs(max)) max = *(arr+i);
 
    return max;}
Если судить заданию, то элементы = 0 должны быть переставлены в конец, что программа и выполняет.
Но, преподавателю это не понравилось, и сказал, чтобы элементы равные по модулю 2 сортировались. (как он объяснил, если кратное 2, то это 0, и наоборот)
Есть мысли, что должно выгладить примерно так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    for (int i = n-1; i >= 0; i--)
    {
    for (int j = 0; j <= i; j++)
    {
    if (arr[j] == abs(2))
    {
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    break;
    }
    }
    }
Буду благодарен за помощь

Добавлено через 3 часа 23 минуты
Upupup
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 18:22     Помощь с кодом(не доделано)
Посмотрите здесь:

Проблемма с кодом C++
Непонятки с кодом. C++
Трудности с кодом. C++
Сложности с кодом C++
Помогите с кодом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.12.2012, 19:04     Помощь с кодом(не доделано) #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
34
#include <iostream>
#include <cmath>
 
int main() 
{ 
    int i, j, index;   
    double max;
    const int size = 10;
    double array[size] = { 12, 0, 3, -7, -8, -56, 12, -78, 0, 10 }; 
 
    max = array[0]; 
    index = 0;
 
    for ( i = 1; i < size; ++i) 
        if(max < abs(array[i])) 
        {
             max = abs(array[i]); 
             index = i; 
        }
            
    std::cout << "Max element is " << array[index] << std::endl; 
 
    for ( i = 0; i < size; ++i) 
        if(array[i] == 0)  
        {
            for ( j = i; j < size; ++j) 
                array[j] = array[j+1]; 
            array[size-1] = 0; 
        } 
 
        for ( i = 0; i < size; ++i) 
            std::cout << array[i] << " "; 
        std::cout << std::endl;
}
Tom910
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
13.12.2012, 19:09  [ТС]     Помощь с кодом(не доделано) #3
Спасибо за отклик, но это не совсем то, сортировку чисел = 0, умеет и программа выше.
Но задача несколько по другому стоит
Если судить заданию, то элементы = 0 должны быть переставлены в конец, что программа и выполняет.
Но, преподавателю это не понравилось, и сказал, чтобы элементы равные по модулю 2 сортировались. (как он объяснил, если кратное 2, то это 0, и наоборот)
Есть мысли, что должно выгладить примерно так.
Такое вообще бывает? если да, то можете подсказать, как ввести условия, что-бы был отбор по целым числам, после деления.
Хочу поставить функцию число\2 и дальше проверка, целое, или нет число)
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.12.2012, 19:11     Помощь с кодом(не доделано) #4
Ещё раз ничего, не понял. Что не понравилось, конкретно преподу и что надо в итоге получить.
Tom910
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
13.12.2012, 19:17  [ТС]     Помощь с кодом(не доделано) #5
Он переделал второй пункт задания, к виду:
Преобразовать массив таким образом, чтобы элементы, по модулю равные нулю, располагались после всех остальных.

И хочет результат другого вида, что бы не 0 выводились в конце(их не должно быть в вводимых элементах) А числа по модулю, где как он объяснил будут:
22 20 16 и т.д. кратные 2 = 0
23 17 19 и т.д. =1
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.12.2012, 19:23     Помощь с кодом(не доделано) #6
Цитата Сообщение от Tom910 Посмотреть сообщение
чтобы элементы, по модулю равные нулю
Это только 0.
Ты наверное, неправильно, понял.Надо расположить элементы так, сначала чётные потом нечётные.
то есть 1 2 3 4 5, а получится 2 4 1 3 5
Tom910
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
13.12.2012, 19:26  [ТС]     Помощь с кодом(не доделано) #7
Именно этот вариант меня устроит =)
Только вопрос, как это можно сделать? В функции ниже. нельзя подправить элементы, для сортировки по четные\нечетные?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = n-1; i >= 0; i--)
    {
    for (int j = 0; j <= i; j++)
    {
    if (arr[j] == abs(2))
    {
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    break;
    }
    }
    }
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.12.2012, 19:39     Помощь с кодом(не доделано) #8
Ты делаешь неправильно, сейчас покажу как можно.

Добавлено через 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
#include <iostream> 
#include <cmath> 
 
int main() 
{ 
    const int size = 10; 
    int array[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    int i, j, temp; 
 
    for ( i = 0; i < size; ++i) 
        if( array[i] % 2 != 0)  
        {   
            temp = array[i];
            for ( j = i; j < size; ++j)  
                array[j] = array[j+1];  
        array[size-1] = temp;  
        } 
 
        for ( i = 0; i < size; ++i) 
            std::cout << array[i] << " "; 
        std::cout << std::endl;
                 
}
Tom910
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
13.12.2012, 20:01  [ТС]     Помощь с кодом(не доделано) #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
#include <iostream>
#include <math.h>
#include <cmath> 
 
using namespace std;
 
double Max(double * arr, int n);
 
int main()
{
    double * arr;
    int n, i, j, temp; 
 
    std::cout << "n = ";
    std::cin >> n;
 
    arr = new double[n];
 
    std::cout << "Massiv : ";
 
    for(int i=0; i<n; i++)
        cin >>arr[i];
 
    cout << "\nMax po moduly element massiva = " << Max(arr,n) << "\n";
 
    for ( i = 0; i < n; ++i) 
        if((int) arr[i] % 2 != 0)  
        {   
            temp = arr[i];
            for ( j = i; j < n; ++j)  
                arr[j] = arr[j+1];  
        arr[n-1] = temp;  
        } 
 
for (i = 0; i < n; ++i)
    std::cout << arr[i] << " ";
     std::cout << std::endl;
    delete[] arr;
    system("pause");
    return 0;
}
 
double Max(double * arr, int n)
{
    double max = arr[0];
    for(int i=1; i<n; i++)
        if(abs(*(arr+i))>abs(max)) max = *(arr+i);
 
    return max;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 20:03     Помощь с кодом(не доделано)
Еще ссылки по теме:

Трабла с кодом C++
C++ что-то не то с кодом C++
C++ Не получается с кодом

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.12.2012, 20:03     Помощь с кодом(не доделано) #10
Цитата Сообщение от Tom910 Посмотреть сообщение
#include <math.h>
#include <cmath>
это одно и то же, убери одну из строк.

Если у тебе, есть строка using namespace std; Убери все std, это одно и то же.
Yandex
Объявления
13.12.2012, 20:03     Помощь с кодом(не доделано)
Ответ Создать тему
Опции темы

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