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

Алгоритмы и программы по обработке одномерных и двумерных массивов - C++

Восстановить пароль Регистрация
 
Veronika Yu.
 Аватар для Veronika Yu.
2 / 2 / 0
Регистрация: 15.02.2010
Сообщений: 67
12.10.2010, 12:50     Алгоритмы и программы по обработке одномерных и двумерных массивов #1
Здравствуйте. Помогите, пожалуйста, решить задачу. Вот текст: В одномерном массиве, состоящем из n ещественных элементов, вычислить:
1) сумму положительных элементов массива
2)произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами
Упорядочить элементы массива по убыванию модулей элементов.
выполнить, используя динамические массивы.
Всё это нужно сделать в одной задаче и если можно, то с комментариями.
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2010, 12:50     Алгоритмы и программы по обработке одномерных и двумерных массивов
Посмотрите здесь:

Алгоритмы и программы по обработке одномерных и двумерных массивов C++
C++ Алгоритмы и программы по обработке одномерных и двумерных массивов
Найти произведение элементов массива, расположенных между минимальным и максимальным по модулю элементами C++
Определить количество столбцов матрицы, не содержащих ни одного нулевого элемента C++
C++ Определить количество столбцов матрицы, не содержащих ни одного нулевого элемента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.10.2010, 06:27     Алгоритмы и программы по обработке одномерных и двумерных массивов #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
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
 
// Функция, возвращающая сумму положительных элементов массива
double sum(double *mas, int n)
{
    double s = 0.0; // Переменная, хранящая сумму
    int i;          // Счётчик
 
    // В цикле пробегаем по всем элементам массива
    for (i = 0; i < n; i++)
        if (mas[i] > 0.0) // Если очередной элемент положительный
            s += mas[i]; // Прибавляем его к общей сумме
 
    return s; // Возвращаем найденную сумму
}
 
// Функция, возвращающая произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами
double product(double *mas, int n)
{
    int minIndex = 0; // Переменная, хранящая индекс минимального по модулю элемента
    int maxIndex = 0; // Переменная, хранящая индекс максимального по модулю элемента
    int tempIndex;    // Временная переменная
    double p = 1.0;   // Переменная, хранящая найденное произведение
    int i;            // Счётчик
 
    // В цикле пробегаем по всем элементам массива
    for (i = 0; i < n; i++)
    {
        if (fabs(mas[i]) > fabs(mas[maxIndex])) // Если элемент с индексом i больше по модулю, чем элемент с ранее найденным индексом,
            maxIndex = i; // то теперь индекс максимального элемента равен i
        else // Иначе
        {
            if (fabs(mas[i]) < fabs(mas[minIndex])) // Если элемент с индексом i меньше по модулю, чем элемент с ранее найденным индексом,
                minIndex = i; // то теперь индекс минимального по модулю элемента равен i
        }
    }
 
    // Если минимальный по модулю элемент расположен в массиве правее максимального
    if (minIndex > maxIndex)
    {
        // Для удобства меняем значения индексов
        tempIndex = minIndex;
        minIndex = maxIndex;
        maxIndex = tempIndex;
    }
 
    // В цикле пробегаем элементы массива от одного найденного индекса до другого
    for (i = minIndex + 1; i < maxIndex; i++)
        p *= mas[i]; // Формируем произведение
 
    return p; // Возвращаем найденное произведение
}
 
// Функция, сортирующая массив по убыванию модулей элементов
void bubbleSort(double *mas, int n)
{
    double temp; // Временная переменная
    int i, j;    // Счётчики
 
    // Во внешнем цикле пробегаем весь массив
    for (i = 0; i < n; i++)
    {
        // Во вложенном цикле пробегаем массив с конца до i
        for (j = n - 1; j > i; j--)
        {
            // Если модуль правого элемента оказался больше модуля левого
            if (fabs(mas[j]) > fabs(mas[j - 1]))
            {
                // Меняем элементы местами
                temp = mas[j];
                mas[j] = mas[j - 1];
                mas[j - 1] = temp;
            }
        }
    }
}
// (Советую почитать про пузырьковую сортировку)
 
int main()
{
    double *mas; // Указатель на будущий массив
    int n;       // Количество элементов массива
    double s;    // Сумма положительных элементов
    double p;    // Произведение элементов, расположенных между минимальным и максимальным по модулю элементами
    int i;       // Счётчик
 
    printf("Enter n: ");
    scanf("%d", &n); // Вводим количество элементов
 
    mas = (double *)malloc(n * sizeof(double)); // Выделяем память
 
    // Заполняем массив
    for (i = 0; i < n; i++)
    {
        printf("mas[%d]: ", i);
        scanf("%lf", &mas[i]);
    }
 
    s = sum(mas, n);     // Считаем сумму
    p = product(mas, n); // Считаем произведение
    bubbleSort(mas, n);  // Сортируем массив
 
    printf("\nSum: %lf", s);     // Выводим сумму
    printf("\nProduct: %lf", p); // Выводим произведение
 
    // Выводим отсортированный массив
    printf("\n\nSorted mas:\n\n");
 
    for (i = 0; i < n; i++)
        printf("%lf  ", mas[i]);
 
    free(mas); // Освобождаем память
 
    getch();
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.10.2010, 10:27     Алгоритмы и программы по обработке одномерных и двумерных массивов #3
Цитата Сообщение от Veronika Yu. Посмотреть сообщение
произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами
С этим лень было возиться

Цитата Сообщение от Veronika Yu. Посмотреть сообщение
сумму положительных элементов массива
Упорядочить элементы массива по убыванию модулей элементов.
это вот (альтернативный вариант)
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 <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int mod_cmp_desc(const void * a, const void * b){
    double diff = fabs(*(const double*)b) - fabs(*(const double*)a);
    return ( diff < 0.0 ) ? -1 : ( diff > 0.0 ) ? 1 : 0;
}
 
double p_sum(const double * arr, size_t size){
    return ( size == 0 ) ? 0.0 : ( *arr > 0.0 ) ? *arr + p_sum(arr + 1, size - 1) : p_sum(arr + 1, size - 1);
}
 
#define SIZE 10
 
int main(void){
    double arr[SIZE] = { 3.7, -2.4, 5.8, 3.1, -0.8, 2.2, 0.4, -8.3, 4.1, 2.8 };
    int i;
    
    printf("Unsorted:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%.1f ", arr[i]);
    printf("\nSum of positive elements:\n%.1f\n", p_sum(arr, SIZE));
    
    qsort(arr, SIZE, sizeof(double), mod_cmp_desc);
    printf("Sorted by MOD descendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%.1f ", arr[i]);
    
    printf("\n");
    
    exit(0);
}

Цитата Сообщение от Veronika Yu. Посмотреть сообщение
выполнить, используя динамические массивы.
после строки
Цитата Сообщение от silent_1991 Посмотреть сообщение
C
1
mas = (double *)malloc(n * sizeof(double));
добавьте
C
1
2
3
4
if ( ! mas ){
  fprintf(stderr, "Memory error!\n");
  return 1;
}
так правильнее
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.10.2010, 10:28     Алгоритмы и программы по обработке одномерных и двумерных массивов #4
Вечно у меня из головы вылетает после выделения памяти указатель проверять)))
Yandex
Объявления
13.10.2010, 10:28     Алгоритмы и программы по обработке одномерных и двумерных массивов
Ответ Создать тему
Опции темы

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