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

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

Войти
Регистрация
Восстановить пароль
 
Tom910
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
#1

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

13.12.2012, 18:22. Просмотров 347. Ответов 9
Метки нет (Все метки)

Здравствуйте, имеется задание:
В одномерном массиве, состоящем из 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++
Помогите пожалуйста,если кто знает, нужно перевести этот код на С++. procedure OGI(R,S,M,N:integer;Var A:matrix); {R,S –...

C++ что-то не то с кодом - C++
Помогите пожалуйста.Задание легкое но у меня что-то не работает. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int...

Непонятки с кодом. - C++
Ребят, набрал код из книги - Аммерааль Леен STL для программистов на C++.djvu #include &lt;iostream&gt; #include &lt;vector&gt; int main() {...

Трудности с кодом - C++
Выдает такие ошибки: Error (active) &quot;exit&quot; is ambiguous Error C2365 'exit': redefinition; previous definition was 'function' ...

Помогите с кодом - C++
Всем доброго времени суток. Вот задали написать прогу для сравнения 3-х чисел введённых с клавиатуры, вроде всё нормально, только...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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++
Всем привет!!!У меня вопрос вот задание #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main...

Не получается с кодом - C++
Даны целые числа a1, a2, a3. Получить целочисленную матрицу b каждый элемент, которой определяется по следующей формуле b=a-3a,...

работа с двоичным кодом - C++
Задача не сложная но материала на ту тему Я на просторах интернета так и не нашел( Через небольшую программку (самопальный HEX ридер) Я...

Не могу разобраться с кодом - C++
Не могу разобраться с участком кода, а именно зачем нужны &quot;++&quot; *buffer-&gt;DataEnd++ = data32;

Програма завершилась с кодом 0 - C++
Написал програму на ПК работала отлично, но стоило перенести на ноут место вывода результата завершает програму с кодом 0 вот код...


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

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

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

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