Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383

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

26.06.2010, 00:01. Показов 2087. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru