Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
1

Отсортировать косинусы элементов массива

04.10.2014, 13:27. Просмотров 1107. Ответов 18
Метки нет (Все метки)

Здравствуйте.
Только начинаю изучать C++. Столкнулся с некоторыми проблемами:
Написал вот такую программу:
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
#include <iostream>
#include <math.h>
#define M_PI ((double)3.141592653589793)
 
using namespace std;
//Функция для умножения массива на переменную k
int multiplication(int *array, int size)
{
    //Объявление динамической переменной k
    int k;
    //Ввод с клавиатуры k
    cout << "\nEnter k: ";
    cin >> k;
    //Умножение всех элементов массива на переменную k
    //Вывод массива
    for (int i = 0; i < size; i++)
    {
        array[i] = array[i] * k;
        cout << "\t" << array[i];
    }
}
double sortCos(int *array, int size)
{
    for (int i = 0; i < size; i++)
    {
        double Result = cos(array[i]*M_PI/180);
        cout << "\nCos array elements: ";
        cout << Result;
    }
}
 
int main()
{
    //Объявление динамического размера массива - size
    int size;
    //Ввод размера массива с клавиатуры
    cout << "Enter array size: ";
    cin >> size;
    //Выделение памяти под массив - array
    int *array = new int[size];
    //Ввод элементов массива с клавиатуры
    cout << "Enter array elements: " << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << "Enter " << i << " element: ";
        cin >> array[i];
    }
    //Вывод элементов массива
    cout << "Your array: " << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << "\t" << array[i];
    }
    //Вызов функции для умножения массива на переменную k
    multiplication(array, size);
     //Вызов функции для сортировки косинусов элементов по возростанию
    sortCos(array, size);
 
    return 0;
}
Нужно отсортировать косинусы элементов массива array[size]. Их я нашел и по глупости сохранил в одну переменную - Result. Как теперь их отсортировать не знаю. Чего посоветуете?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2014, 13:27
Ответы с готовыми решениями:

Отсортировать элементы заданного массива L по убыванию элементов и найти...
Отсортировать элементы заданного массива L (15) по убыванию элементов и найти отношение...

Определить количество отрицательных элементов массива и отсортировать заданную строку
Вот сам код,преподаватель сказал,что цикл зациклился и его где-то надо остановить только где вот не...

Найти позиции крайних отрицательных элементов и отсортировать элементы массива
1.Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних...

Отсортировать нечетные столбцы массива по возрастанию суммы элементов этих столбцов
:(Отсортировать нечетные столбцы массива по возрастанию суммы элементов этих столбцов

Отсортировать элементы массива по убыванию старшей цифры в записи его элементов
1. Отсортировать элементы массива по убыванию старшей цифры в записи его элементов помогите...

18
zss
Модератор
Эксперт С++
8098 / 7235 / 4505
Регистрация: 18.12.2011
Сообщений: 19,132
Завершенные тесты: 1
04.10.2014, 14:06 2
Цитата Сообщение от GetLucky Посмотреть сообщение
double Result = cos(array[i]*M_PI/180);
Вместо этого пишете
C++
1
array[i] = cos(array[i]*M_PI/180);
если исходный массив больше не нужен (или заведите другой массив такой же размерности).
Потом массив сортируйте
Алгоритмы сортировок
0
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
04.10.2014, 14:07  [ТС] 3
zss, это первое что я хотел сделать. Но при этом косинусы не будет считать. Я думаю проблема в типе данных. Отсортировать впринципе сам смогу, но массива же нет.
Еще варианты какие-нибудь есть?
0
zss
Модератор
Эксперт С++
8098 / 7235 / 4505
Регистрация: 18.12.2011
Сообщений: 19,132
Завершенные тесты: 1
04.10.2014, 14:28 4
Цитата Сообщение от GetLucky Посмотреть сообщение
Но при этом косинусы не будет считать
А это разве не подсчет косинусов :
array[i] = cos(array[i]*M_PI/180);
0
04.10.2014, 14:28
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
04.10.2014, 14:33  [ТС] 5
zss, при этом выдает все косинусы = 0.
0
Миниатюры
Отсортировать косинусы элементов массива  
sergestus
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
04.10.2014, 14:39 6
Попробуй array объявить как тип double, а не как int...
0
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
04.10.2014, 14:43  [ТС] 7
sergestus, при этом ругается на кучу ошибок в остальных функциях...
0
worldown
182 / 171 / 110
Регистрация: 22.06.2009
Сообщений: 522
04.10.2014, 14:50 8
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
#include <iostream>
#include <cstdlib>
#include <math.h>
#define M_PI ((double)3.141592653589793)
 
using namespace std;
//Функция для умножения массива на переменную k
void multiplication(int *arr, int size)
{
    //Объявление динамической переменной k
    int k;
    //Ввод с клавиатуры k
    cout << "\nEnter k: ";
    cin >> k;
    //Умножение всех элементов массива на переменную k
    //Вывод массива
    for (int i = 0; i < size; i++)
    {
        arr[i] = arr[i] * k;
        cout << "\t" << arr[i];
    }
}
int compare (const void * a, const void * b)
{
    return (cos(*(double*)a*M_PI/180) - cos(*(double*)b*M_PI/180)); 
}
 
int main()
{
    //Объявление динамического размера массива - size
    int size;
    //Ввод размера массива с клавиатуры
    cout << "Enter arr size: ";
    cin >> size;
    //Выделение памяти под массив - arr
    int *arr = new int[size];
    //Ввод элементов массива с клавиатуры
    cout << "Enter arr elements: " << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << "Enter " << i << " element: ";
        cin >> arr[i];
    }
    //Вывод элементов массива
    cout << "\nYour arr: " << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << "\t" << arr[i];
    }
    //Вызов функции для умножения массива на переменную k
    multiplication(arr, size);
     //Вызов функции для сортировки косинусов элементов по возростанию
    qsort(arr,size,sizeof(int),compare);
    cout << "\nArr after sort: " << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << "\t" << arr[i];
    }
 
    cout << "\nArr after sort and cos: " << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << "\t" << cos((double)arr[i]*M_PI/180);
    }
    cout<<endl;
    system("pause");
    return 0;
}
1
sergestus
78 / 78 / 34
Регистрация: 26.10.2011
Сообщений: 220
Завершенные тесты: 1
04.10.2014, 14:58 9
sergestus, при этом ругается на кучу ошибок в остальных функциях...
В функциях у array тоже нужно int на double поменять...
0
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
04.10.2014, 15:18  [ТС] 10
worldown, это сортировка разве не по убыванию?)

Добавлено через 17 минут
worldown, заметил, что сортировка вообще странно работает. Точнее зависит от введенных значений, иногда сортирует по убыванию, иногда по возрастанию.
0
worldown
182 / 171 / 110
Регистрация: 22.06.2009
Сообщений: 522
04.10.2014, 15:38 11
естественно, сортируем ведь относитель значения косинуса...
0
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
04.10.2014, 15:39  [ТС] 12
worldown, можно конкретнее объяснить как она работает?
Первый раз буду иметь дело с qsort. Буду очень признателен за объяснения)
0
worldown
182 / 171 / 110
Регистрация: 22.06.2009
Сообщений: 522
04.10.2014, 15:46 13
суть в compare, там происходит разность , и относительно знака от разности выстовляются элементы.. сейчас времени нет, надо срочно уходить... погугли по поводу qsort..
0
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
04.10.2014, 15:49  [ТС] 14
worldown, уже прочитал вот здесь - http://www.cplusplus.com/reference/cstdlib/qsort/
Но не понимаю, если мы от a отнимаем b, То должно быть по возрастанию, как я понял. Но он сортирует как попало..
Как будет время, отпиши, пожалуйста.
0
worldown
182 / 171 / 110
Регистрация: 22.06.2009
Сообщений: 522
05.10.2014, 12:56 15
Лучший ответ Сообщение было отмечено GetLucky как решение

Решение

Да, сортирует криво.. поменяй условия на..
C++
1
2
3
4
5
6
7
int compare (const void * a, const void * b)
{
 
    if(cos(*(int*)a*M_PI/180) > cos(*(int*)b*M_PI/180)) return  1;
    if (cos(*(int*)a*M_PI/180) < cos(*(int*)b*M_PI/180)) return -1;
    if (cos(*(int*)a*M_PI/180) == cos(*(int*)b*M_PI/180)) return 0;
}
Добавлено через 10 минут
да, возможно ты увидишь там такие значения, 6,12303176911189Е-17 или 1.7949E-009 , это не баг, просто на самом деле косинус от 90* это не 0 а число стремящейся к нулую т.е 1.7949E-009 = 0,000000017949
1
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 12:57  [ТС] 16
worldown, это я знаю. Благодарю
0
worldown
182 / 171 / 110
Регистрация: 22.06.2009
Сообщений: 522
05.10.2014, 13:01 17
qsort наглядно http://www.youtube.com/watch?v=ywWBy6J5gz8
0
GetLucky
0 / 0 / 1
Регистрация: 03.09.2014
Сообщений: 87
05.10.2014, 13:08  [ТС] 18
worldown,
0
zss
Модератор
Эксперт С++
8098 / 7235 / 4505
Регистрация: 18.12.2011
Сообщений: 19,132
Завершенные тесты: 1
05.10.2014, 14:41 19
Цитата Сообщение от GetLucky Посмотреть сообщение
int *array = new int[size];
У меня смутные подозрения, что int здесь по ошибке.
С какой стати градусы только целые?
Они же не в штуках измеряются!
0
05.10.2014, 14:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2014, 14:41

Отсортировать массив по убыванию и найти количество и произведение элементов массива кратных 5
Помогите пожалуйста. Вот задание: Найти количество и произведение элементов массива кратных 5....

Отсортировать элементы массива по убыванию старшей цифры в записи его элементов
1. Отсортировать элементы массива по убыванию старшей цифры в записи его элементов

Задан массив из 100 элементов целого типа. Отсортировать элементы массива по возрастанию
Задан массив из 100 элементов целого типа. Отсортировать элементы массива по возрастанию.


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

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

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