Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 03.04.2011
Сообщений: 6
1

Упорядочить элементы массива по возрастанию модулей элементов

08.04.2011, 18:41. Показов 2779. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу ни как до конца разобраться с этой функцией. Есть часть программы где необходимо упорядочить элементы массива по возрастанию модулей элементов, но возник вопрос можно ли записать где у меня в тексте программы стоит многоточие(....), записать сортировку не внедряя дополнительной функции в программе..
И как прописать эту сортировку для вещественных чисел, вот часть программы ...
C
1
2
3
4
5
6
7
void fun3(const int aN, double *aL)
{
    int i =0,n=10;
    qsort(aL, aN, sizeof(double),....);
    for(i = 0; i < n; i++)
    printf("Упорядочить элементы массива по возрастанию модулей элементов:%d\n",aL[i]);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2011, 18:41
Ответы с готовыми решениями:

Упорядочить элементы массива по возрастанию модулей элементов
Даны натуральные числа n и m, целые числа a1, a2,...,an, b1, b2,...,bm. Среди a1, a2,...,an нет...

Упорядочить элементы массива по возрастанию модулей
1. Консольный ввод/вывод исходного одномерного массива вещественных чи- сел. 2. ...

Упорядочить элементы массива по возрастанию модулей элементов
В одномерном массиве, состоящем из n вещественных элементов. Упорядочить элементы массива по...

Упорядочить элементы массива по возрастанию модулей элементов
В одномерном массиве,состоящем из N вещественных элементов,вычислить: 1)кол-во элементов...

8
49 / 49 / 15
Регистрация: 13.08.2010
Сообщений: 160
08.04.2011, 19:07 2
нельзя(, нету лямбда выражений(

делай так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void int f(int a, int b)
{
     int _a = abs(a);
     int _b = abs(b);
     return _a < _b ? -1 : _a > b ? 1 : 0;
}
void fun3(const int aN, double *aL)
{
        int i =0,n=10;
        qsort(aL, aN, sizeof(double),f);
        for(i = 0; i < n; i++)
        printf("Упорядочить элементы массива по возрастанию модулей элементов:%d\n",aL[i]);
}
по другому никак
1
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
08.04.2011, 19:13 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от while(i)k++ Посмотреть сообщение
нету лямбда выражений(
Ну почему же, если ты щастливый владелец компиляторов/IDE - GCC4.5+ или MVS10, можно юзать такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cstdlib>
 
int main ()
{
  int n;
  int values[] = { 40, 10, 100, 90, 20, 25 };
  qsort (values, 6, sizeof(int), [](const void * a, const void * b) ->
  int{return  (*(int*)a - *(int*)b );});
  for (n=0; n<6; n++)
     std::cout << values[n] << ' ';
  return 0;
}
2
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
08.04.2011, 19:21 4
Лямбда выражения, если не ошибаюсь, ввели в новом стандарте C++, а код у ТС скорее похож на C. Без дополнительной функции никак не обойтись, потому что qsort принимает указатель на эту самую функцию, которую потом будет использовать для сравнений.

Если же ТС пишет на C++, посоветую использовать векторы и sort(), намного удобнее, и для стандартных типов (ака double) не надо писать собственную функцию сравнения.
1
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
08.04.2011, 19:25 5
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Лямбда выражения, если не ошибаюсь, ввели в новом стандарте C++,
Да я и не утверждал что лямбда есть в нынешнем стандарте, по этому и подчеркнул деталь -
Цитата Сообщение от asics Посмотреть сообщение
если ты щастливый владелец компиляторов/IDE - GCC4.5+ или MVS10
0
1 / 1 / 0
Регистрация: 03.04.2011
Сообщений: 6
08.04.2011, 19:35  [ТС] 6
Я новичок в программирование эта часть программы
C++
1
2
3
4
5
void int f(int a, int b)
{
     int a = abs(a);
     int b = abs(b);
     return a < b ? -1 : a > b ? 1 : 0;}
на чистом си будет так же выглядеть?
0
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
08.04.2011, 20:48 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdlib.h>
#include <stdio.h>
 
/* почему-то у меня на чистом С стандартный abs переводил double в int 
   пришлось написать собственный макрос */
#define ABS(a) (a<0 ? -a : a)
 
int compare (const void * a, const void * b)
{
    double c = *(double*)(a);
    double d = *(double*)(b);
    if (ABS(c) > ABS(d))
        return 1;
    if (ABS(c) < ABS(d))
        return -1;
    /* иначе abs(c) == abs(d) */
    return 0;
}
 
void fun3(const int aN, double *aL)
{
        int i;
    printf("Массив до сортировки:");
    for(i = 0; i < aN; i++)
        printf(" %g",aL[i]);
    printf("\n");
        qsort(aL, aN, sizeof(double),compare);
        printf("Массив после сортировки:");
    for(i = 0; i < aN; i++)
        printf(" %g",aL[i]);
    printf("\n");
}
1
1 / 1 / 0
Регистрация: 03.04.2011
Сообщений: 6
09.04.2011, 00:25  [ТС] 8
Просто для вещественных чисел модуль пишется как fabs(), а за алгоритм огромное спасибо...
1
49 / 49 / 15
Регистрация: 13.08.2010
Сообщений: 160
09.04.2011, 05:15 9
Цитата Сообщение от CBOY-AL Посмотреть сообщение
Я новичок в программирование эта часть программы
Код C++

void int f(int a, int b)
{
* * *int a = abs(a);
* * *int b = abs(b);
* * * * *return a < b ? -1 : a > b ? 1 : 0;}
на чистом си будет так же выглядеть?
если обратно исправиш a и b на _a и _b (с подчеркиванием), инклудни ище <math.h> - будет, на борланд спп 3 в режиме си работает
1
09.04.2011, 05:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2011, 05:15
Помогаю со студенческими работами здесь

Упорядочить элементы массива по возрастанию модулей элементов
Для всех задач сформировать одномерный массив N случайных чисел из интервала (-10; 10)....

Упорядочить элементы одномерного массива по возрастанию модулей элементов
Упорядочить элементы одномерного массива по возрастанию модулей элементов. если можно еще

В однородном массиве упорядочить элементы массива по возрастанию модулей элементов
В однородном массиве, состоящем из n вещественных элементов, вычислить: - Упорядочить элементы...

Вычислить произведение ненулевых элементов массива, упорядочить элементы массива по возрастанию модулей
Создать массив целых чисел. Вычислите произведение ненулевых элементов массива. Упорядочить...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru