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

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

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

Author24 — интернет-сервис помощи студентам
Доброй ночи! Подскажите, пожалуйста, или приведите пример как упростить этот код. Программа должна выполнять следующее: из массива символов посчитать и сравнить кол-во откр. и закр. скобок.
Кстати, насчет 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 жильцов. Однажды решили провести перепись всех жильцов данного...

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

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

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

10
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
26.06.2010, 00:30 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
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
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
26.06.2010, 00:34 3
второй вариант:
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
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
26.06.2010, 00:37 4
linq - это сила
0
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
26.06.2010, 00:38  [ТС] 5
Спасибо за оба варианта.

kuroiryuu, не мог ты пояснить поподробнее 7 и 8 строки.
И да, за что отвечает Linq?
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
26.06.2010, 00:40 6
оптимальность и 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
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
26.06.2010, 00:44 7
да и первый вариант не плохо работает
насчет производительности linq не помню...
если не ошибаюсь, от на больших объёмах информации у него скорость не большая...

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru