Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383

Оптимизация кода

26.06.2010, 00:01. Показов 2069. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи! Подскажите, пожалуйста, или приведите пример как упростить этот код. Программа должна выполнять следующее: из массива символов посчитать и сравнить кол-во откр. и закр. скобок.
Кстати, насчет goto, знаю, что нехорошо это), но только начал изучать язык.

Заранее спс.

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
class Program
    {
        static void Main(string[] args)
        {
            line1:
            Console.Write("Введите произвольное кол-во символов c содержанием скобок: ");           
            char[] a = Console.ReadLine().ToCharArray();
            int ko = 0;
            int kz = 0;
            for (int i = 0; i < a.GetLength(0); i++)
            {                   
                char osc = '(';
                char zsk = ')';                  
                if (a[i] == osc)
                {
                    ko += 1;
                }
                if (a[i] == zsk)
                {
                    kz += 1;
                }
            }
            if ((char)ko == 0 && (char) kz == 0)
            {
                Console.WriteLine("Не содержит скобок!!!");
                return;
            }            
            if (ko == kz)
            {
               Console.WriteLine("Кол-во откр. и закр. скобок равно друг другу");
            }
            else
                Console.WriteLine("Кол-во откр. и закр. скобок НЕ равно друг другу");
                Console.ReadKey();
        }
    }
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2010, 00:01
Ответы с готовыми решениями:

Оптимизация кода
Описание задачи: В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного дома и составили список, в котором указали...

Оптимизация кода
Добрый вечер, господа! В данный момент я пишу тулзу для демонстрации алгоритмов оценки движения и временной интерполяции и столкнулся со...

Оптимизация кода
Добрый день! Может ли кто-нибудь подсказать, возможна ли оптимизация (сокращения строк, без потери функционала) данной программы. ...

10
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
26.06.2010, 00:30
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
using System;
class Program
{
    static void Main(string[] args)
    {   
        int ko = 0;
        int kz = 0;
        char[] a;
 
        Console.Write("Введите произвольное кол-во символов c содержанием скобок: ");
        a = Console.ReadLine().ToCharArray();
        
        foreach(char ch in a)
        {    
            if (ch == '(') ko++;
            if (ch == ')') kz++;
        }
 
        if ((ko == 0) && (kz == 0))
        {
            Console.WriteLine("Не содержит скобок!!!");
        }
        else
            if (ko == kz)
            {
                Console.WriteLine("Кол-во откр. и закр. скобок равно друг другу");
            }
            else
                Console.WriteLine("Кол-во откр. и закр. скобок НЕ равно друг другу");
 
        Console.ReadKey();
    }
}
2
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
26.06.2010, 00:34
второй вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Введите произвольное кол-во символов c содержанием скобок: ");
        char[] array = Console.ReadLine().ToCharArray();
        var ko = array.Where(n => n == '(').Count();
        var kz = array.Where(n => n == ')').Count();
 
        if (ko == 0 && kz == 0)
        {
            Console.WriteLine("Не содержит скобок!!!");
            return;
        }
        if (ko == kz)
            Console.WriteLine("Кол-во откр. и закр. скобок равно друг другу");
        else
            Console.WriteLine("Кол-во откр. и закр. скобок НЕ равно друг другу");
        Console.ReadKey();
    }
}
P.S. необходимо подключить System.Linq
2
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
26.06.2010, 00:37
linq - это сила
0
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
26.06.2010, 00:38  [ТС]
Спасибо за оба варианта.

kuroiryuu, не мог ты пояснить поподробнее 7 и 8 строки.
И да, за что отвечает Linq?
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
26.06.2010, 00:40
оптимальность и Linq несовместимые понятия )
мой вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            string str = Console.ReadLine();
 
            char[] charArray = str.ToCharArray();
 
            int osc = Array.FindAll(charArray, (ch) => { return ch == '('; }).Length;
            int zsk = Array.FindAll(charArray, (ch) => { return ch == ')'; }).Length;
 
            if (osc == 0 && zsk == 0)
                Console.WriteLine("Не содержит скобок!!!");
            else if (osc != zsk)
                Console.WriteLine("Кол-во откр. и закр. скобок НЕ равно друг другу");
            else
                Console.WriteLine("Кол-во откр. и закр. скобок равно друг другу");
 
            Console.ReadKey();
вообще максимально быстрый вариант почти не отличается от первого поста по сути
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 char[] a = Console.ReadLine().ToCharArray();
            int ko = 0;
            int kz = 0;
            char osc = '(';
            char zsk = ')';
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] == osc)                
                    ko++;                
                else if (a[i] == zsk)                
                    kz++;                
            }
            if (ko == 0 && kz == 0)            
                Console.WriteLine("Не содержит скобок!!!");            
            else if (ko == kz)            
                Console.WriteLine("Кол-во откр. и закр. скобок равно друг другу");            
            else
                Console.WriteLine("Кол-во откр. и закр. скобок НЕ равно друг другу");
 
            Console.ReadKey();
1
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
26.06.2010, 00:44
да и первый вариант не плохо работает
насчет производительности linq не помню...
если не ошибаюсь, от на больших объёмах информации у него скорость не большая...

Добавлено через 3 минуты
кстати на большом массиве данных первый вариант самый производительный: в нём нет вызовов никаких функций...
1
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
26.06.2010, 00:44  [ТС]
Да они так-то все работают, просто хотелось бы попроще чтоб выглядело. А то программка-то смешная, а кода ого-го).
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
26.06.2010, 00:46
проще
C#
1
2
3
4
5
6
7
8
9
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Hello Death!");
    }
}
ничего нет
0
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
26.06.2010, 00:49  [ТС]
Цитата Сообщение от kuroiryuu Посмотреть сообщение
проще
C#
1
2
3
4
5
6
7
8
9
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Hello Death!");
    }
}
ничего нет
Кто бы спорил)

Ладно, в принципе там уже упрощать нечего, так что всем спасибо, кто отозвался.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
26.06.2010, 01:09
Цитата Сообщение от kuroiryuu Посмотреть сообщение
да и первый вариант не плохо работает
насчет производительности linq не помню...
если не ошибаюсь, от на больших объёмах информации у него скорость не большая...

Добавлено через 3 минуты
кстати на большом массиве данных первый вариант самый производительный: в нём нет вызовов никаких функций...
да там ничего помнить не надо, эти 2 строки означают:
C#
1
2
3
перебрать массив, найти все подходящие элементы (полный перебор и сравнение)
сохранить их в новый массив, вернуть его
получить его размер
вторая строка делает тоже самое еще раз
фактически за этими строками комп прошелся по масиву 2 раза и создал в памяти 2 лишних массива
если Бы исходный массив занимал гигабайт памяти, то для выполнения этих строк может потребоваться еще один гигабайт - оптимальность прет из всех дыр
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2010, 01:09
Помогаю со студенческими работами здесь

Оптимизация кода
Можно ли это как то оптимизировать? public void Vn_Method(int a,ref Button btn1, ref Button btn2, ref Button btn3, ref Button btn4) ...

Оптимизация кода
Вопрос такой есть ли способ оптимизировать сей код, прибегая к помощи массивов или иными путями? Если да то какие. (Уровень моего C#:...

Оптимизация кода
Доброго времени суток. Прошу прощения, если буду ошибаться в терминах, но постараюсь правильно разъяснить проблему. Пишу приложение...

Оптимизация кода
всем привет, написал простенькую программу, где надо совершать арифметические действия до бесконечности или до ошибки. Уверен, что код...

Оптимизация кода
Здравствуйте, не знаю, по теме или нет, если нет - перенесите! Хотел поинтересоваться у Вас насчет оптимизации данного кода, что тут...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru