Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 1
Регистрация: 07.06.2012
Сообщений: 12

Вычислить количество элементов массива, лежащих в диапазоне от А до В

11.10.2013, 21:10. Показов 6549. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
• количество элементов массива, лежащих в диапазоне от А до В;
• сумму элементов массива, расположенных после максимального элемента.
Упорядочить элементы массива по убыванию модулей.

Ребята, плиз, помогите доработать код... Я только начал изучать C#...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Linq;
 
class Program
{
    static void Main(string[] args)
    {
        Int32[] mas = { 1, 2, 3, 3, 3, 3, 4, 5, 56, 6 };
        Console.WriteLine("Ввести 1-ое число промежутка:= ");
        double A = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine();
        Console.WriteLine("Ввести 2-ое число промежутка:= ");
        double B = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine();
        Console.Write(mas.Where(x => x > A && x < B).Count());
        Console.Write(mas.SkipWhile(x => x <= mas.Max()).Sum());
        Console.Write(mas.OrderByDescending(x => Math.Abs(x)));
 
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2013, 21:10
Ответы с готовыми решениями:

Вычислить количество элементов массива, лежащих в диапазоне
Доброго времени суток. У меня есть задание и есть код, который нужно проверить и поправить. Сейчас он не запускается, а найти ошибки...

Вычислить количество элементов массива, лежащих в диапазоне от А до В
Ребятки, проверьте пожалуйста и исправьте по возможности, завтра сдавать уже ;/ Проблема в том, что код работает некорректно :) 1.В...

Вычислить количество элементов массива, лежащих в диапазоне от A до B
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1.Количество элементов массива, лежащих в диапазоне от A до B ...

18
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.10.2013, 21:40
Sherlock_Holmes, а чего его дорабатывать? Он рабочий. Не самый эффективный, но рабочий.
0
0 / 0 / 1
Регистрация: 07.06.2012
Сообщений: 12
11.10.2013, 21:50  [ТС]
Не выводит у меня... Что не правильно, - не пойму... Может из-за Visula 2013? Не могу понять... Ввожу параметры А и B, а дальше ничего не происходит...
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
11.10.2013, 22:05
Цитата Сообщение от Sherlock_Holmes Посмотреть сообщение
Я только начал изучать C#...
Тогда лучше вручную через циклы... успеете еще прибегнуть к лямбда-выражениям и LINQ
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.10.2013, 22:40
Sherlock_Holmes, попробуй в конец вставить Console.ReadKey();
и вместо Write используй WriteLine. А последний Write вообще неправильный. Теоретически последний выведет что-нибудь вроде System.Collections.Generic.IEnumerable'i nt
0
0 / 0 / 1
Регистрация: 07.06.2012
Сообщений: 12
11.10.2013, 22:53  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
А последний Write вообще неправильный
Подскажите, а что с этой делать? Вообще, наверное я зря использовал лямбда выражения)))
C#
1
        Console.WriteLine(mas.OrderByDescending(x => Math.Abs(x)));
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.10.2013, 23:16
Sherlock_Holmes, вы просто не понимаете, что тут происходит, отсюда ваши ошибки. Да, рано познакомиься с синтаксическим сахаром - вроде linq - это здорово, но в данном случае попробуйте все переписать на циклах, можно тогда догадаетесь. Если нет, то скиньте рабочий код на циклах и я покажу эквивалентный на linq, тогда вы увидете ошибку и скажете "ну блин, так и знал". Вам же будет интересно порешать эту задачку) Можете считать это вызовом себе.
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
11.10.2013, 23:48
Sherlock_Holmes, примерно так
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
    class Program: IComparer<int>
    {
        static void Main(string[] args)
        {
            int[] mas = { 1, 2, 3, -3, 3, 3, 4, -5, 56, -6 };
 
            Console.Write("Введите A: ");
            int a = int.Parse(Console.ReadLine());
 
            Console.Write("Введите B: ");
            int b = int.Parse(Console.ReadLine());
 
            int i = Array.IndexOf(mas, a); // Индекс эл-та a
            int k = Array.IndexOf(mas, b); // Индекс эл-та b
 
            if (i != -1 & k != -1)
            {
                if (k > i)
                    Console.WriteLine("Кол-во элементов от {0} до {1}: {2}", a, b, k - i);
            }
            else
                Console.WriteLine("Error");
 
 
            int sum = 0;
            int max = Array.IndexOf(mas, mas.Max()); // Индекс максимального значения
 
            for (; max < mas.Length; max++) // Цикл начинается с элемента, который содержит макс.значение
            {                               
                sum += mas[max];
            }
            Console.WriteLine("Сумма эл-тов: " + sum);
 
 
            Array.Sort(mas, new Program()); // Сортировка по описанному ниже Compare
            Console.WriteLine(string.Join("  ", mas));
 
            Console.ReadKey();
        }
 
        public int Compare(int x, int y)
        {
            return Math.Abs(x).CompareTo(Math.Abs(y));
        }
    }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.10.2013, 00:19
Diman777, какой ужас... Особенно с new Program(). У вас дар запутывать простые вещи...
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
12.10.2013, 09:51
Цитата Сообщение от Psilon Посмотреть сообщение
У вас дар запутывать простые вещи...
не исключено)
Цитата Сообщение от Psilon Посмотреть сообщение
какой ужас... Особенно с new Program()
почему? Не нужно вообще было использовать IComparer или надо было его в отдельный класс вынести?
еще что ужасного, поясните
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.10.2013, 14:22
Diman777, а) нужно. Вынести в отдельный, естественно
Б) array.Sort это не ручная сортировка и она ничем не лучше, чем OrderBy
1
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
12.10.2013, 17:19
интересно стало.. решил засечь время выполнения нескольких сортировок...
Конечно же различия в каких-то долях мс, однако ради интереса
4) Самой долгой оказалась mas = mas.OrderBy(x => Math.Abs(x)).ToArray(); ~2.80 мс
3) Без метода ToArray(): IEnumerable<int> it = mas.OrderBy(x => Math.Abs(x)); ~0.86 мс
2) Array.Sort(mas, new Sorting()); ~0.27 мс
1) Был немного удивлен результатом пузырьковой сортировки ~0.003 мс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            bool flag = true;
            while (flag)
            {
                flag = false;
                for (int t = 0; t < mas.Length - 1; t++)
                    if (Math.Abs(mas[t]) > Math.Abs(mas[t + 1]))
                    {
                        int n = mas[t];
                        mas[t] = mas[t + 1];
                        mas[t + 1] = n;
                        flag = true;
                    }
            }
Добавлено через 8 минут
Цитата Сообщение от Diman777 Посмотреть сообщение
3) Без метода ToArray(): IEnumerable<int> it = mas.OrderBy(x => Math.Abs(x)); ~0.86 мс
Однако, ведь по заданию на выходе должен быть отсортированный массив типа int[]
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.10.2013, 20:19
Diman777, пузырьковая сортировка имеет лучший случай в один проход, так что это неудивительно. Почти уверен, что вы тестировали неверно Не только из-за возможного лучшего случая.
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
12.10.2013, 20:25
Цитата Сообщение от Psilon Посмотреть сообщение
Почти уверен, что вы тестировали неверно Не только из-за возможного лучшего случая.
А что так сразу?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.10.2013, 20:31
Diman777, ну просто потому что Array.Sort использует быструю сортировку, а пузырьковая - самая неэффективная из всех возможных, если только массив не отсортирован изначально.

На самом деле Array.Sort использует несколько различных стратегий сортировки, в зависимости от нескольких факторов.
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
12.10.2013, 20:52
Psilon, приведите пример программно, если не сложно
я просто отталкиваюсь от полученных цифр и хочу уточнить, где по-вашему я не прав
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
namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch st = new Stopwatch();
            Random rand = new Random();
            int[] mas = Enumerable.Range(0, 100).Select(x => rand.Next(-10, 20)).ToArray();
 
            Console.WriteLine(string.Join("  ", mas));
 
            st.Start();
 
            //Array.Sort(mas, new Sorting());
            mas = mas.OrderBy(x => Math.Abs(x)).ToArray();
 
            Console.WriteLine(string.Join("  ", mas));
 
            st.Stop();
 
            Console.WriteLine("Время выполнения: " + st.Elapsed.TotalMilliseconds);
            Console.ReadKey();
        }
    }
 
    class Sorting: IComparer<int>
    {
 
        public int Compare(int x, int y)
        {
            return Math.Abs(x).CompareTo(Math.Abs(y));
        }
    }
}
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.10.2013, 21:03
Diman777, а откуда цифры о пузырьковой сортировки?
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
12.10.2013, 21:18
Psilon, эти цифры с программы ТС
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
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch st = new Stopwatch();
            int[] mas = { 1, 2, 3, -3, 3, 3, 4, -5, 56, -6 };
 
            Console.Write("Введите A: ");
            int a = 1;// int.Parse(Console.ReadLine());
 
            Console.Write("Введите B: ");
            int b = 5;// int.Parse(Console.ReadLine());
 
            int i = Array.IndexOf(mas, a); // Индекс эл-та a
            int k = Array.IndexOf(mas, b); // Индекс эл-та b
 
            if (i != -1 & k != -1)
            {
                if (k > i)
                    Console.WriteLine("Кол-во элементов от {0} до {1}: {2}", a, b, k - i);
            }
            else
                Console.WriteLine("Error");
 
 
            int sum = 0;
            int max = Array.IndexOf(mas, mas.Max()); // Индекс максимального значения
 
            for (; max < mas.Length; max++) // Цикл начинается с элемента, который содержит макс.значение
            {                               
                sum += mas[max];
            }
            Console.WriteLine("Сумма эл-тов: " + sum);
 
            
            st.Start();
 
            //Array.Sort(mas, new Sorting());
            //var it = mas.OrderBy(x => Math.Abs(x));
            //mas = mas.OrderBy(x => Math.Abs(x)).ToArray();
 
            bool flag = true;
            while (flag)
            {
                flag = false;
                for (int t = 0; t < mas.Length - 1; t++)
                    if (Math.Abs(mas[t]) > Math.Abs(mas[t + 1]))
                    {
                        int n = mas[t];
                        mas[t] = mas[t + 1];
                        mas[t + 1] = n;
                        flag = true;
                    }
            }
 
            st.Stop();
 
            Console.WriteLine("Время операции: " + st.Elapsed.TotalMilliseconds);
 
            Console.ReadKey();
        }
    }
 
    class Sorting: IComparer<int>
    {
 
        public int Compare(int x, int y)
        {
            return Math.Abs(x).CompareTo(Math.Abs(y));
        }
    }
}
Цитата Сообщение от Psilon Посмотреть сообщение
а пузырьковая - самая неэффективная из всех возможных
теперь понял! Стоило создать массив размерностью больше - так эффективность сразу же понизилась... Но в массивах с маленькими размерами - пузырьковая быстрее... Однако Array.Sort() все же быстрее Order...
Хотя я привык к order...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.10.2013, 21:20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот относительно правильный бенчмарк (хотя и в нем не все идеально, но основные особенности учитываются):
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
 
namespace sum
{
    class Program
    {
        class Comp : IComparer<int>
        {
            public int Compare(int x, int y)
            {
                return Math.Abs(x).CompareTo(Math.Abs(y));
            }
        }
        static void Main(string[] args)
        {
            DoBenchmark();
            Console.ReadKey();
        }
 
        static Comp comp = new Comp();
 
        static void ArraySort(int[] arr)
        {
            Array.Sort(arr, comp);
        }
 
        static void OrderBy(int[] arr)
        {
            var res = arr.OrderBy(Math.Abs).ToArray();
        }
 
 
        private static readonly Random R = new Random();
        static void DoBenchmark()
        {
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;
            DisableGC();
 
            const int n = 1000009, iter = 100;
 
            var methods = new Action<int[]>[] { ArraySort, OrderBy };
 
 
 
            var arr = Enumerable.Repeat(0, n).Select(x => R.Next()).ToArray();
            foreach (var deleg in methods)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
 
                long minResult = long.MaxValue;
 
                for (int i = 0; i < iter; ++i)
                {
                    minResult = Math.Min(minResult, TestMethod(deleg, arr));
                }
 
                Console.WriteLine("{0}: {1} ticks", deleg.Method.Name, minResult);
            }
        }
 
        static void DisableGC()
        {
            GCLatencyMode oldMode = GCSettings.LatencyMode;
 
            // Make sure we can always go to the catch block, 
            // so we can set the latency mode back to `oldMode`
            RuntimeHelpers.PrepareConstrainedRegions();
 
            GCSettings.LatencyMode = GCLatencyMode.LowLatency;
        }
 
        static long TestMethod(Action<int[]> foo, int[] arr)
        {
            var watch = Stopwatch.StartNew();
 
            foo(arr);
 
            watch.Stop();
            return watch.ElapsedTicks;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2013, 21:20
Помогаю со студенческими работами здесь

Вычислить количество элементов массива, лежащих в диапазоне от А до В
Добрый вечер, дорогие друзья. Прошу у вас помощи с программой: Методические указания Ввод и вывод массива, а также три пункта...

Вычислить количество элементов массива, лежащих в диапазоне от А до B
В Одномерном массиве, состоящем из n вещественных элементов, вычислить: 1)количество элементов массива, лежащих в диапазоне от А до B; ...

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

Вычислить количество элементов массива, лежащих в диапазоне от А до B
В одномерном массиве, состоящем из n вещественных элементов: 1) количество элементов массива, лежащих в диапазоне от А до B 2) сумму...

Вычислить количество элементов массива, лежащих в диапазоне от А до В
В одномерном массиве, состоящем из N вещественных элементов, вычислить: •количество элементов массива, лежащих в диапазоне от А до В; ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru