Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2] 3 4  Все   Вниз
  Печать  
Автор Тема: Написание программы  (Прочитано 61504 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KOzh1r
Участник

ru
Offline Offline

« Ответ #30 : 06-10-2019 13:16 » 

KOzh1r, Данная задача не для новичка. Как правило подобные задачи решают через нейроные сети.
Чтобы разделить строку на отдельные слова в классе string должна быть функция split
Чтобы перевести символы в нижний или верхний регистр: ToLower или ToUpper
Смотри Help как правильно пользоваться ими.
Спасибо! Пойду искать
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #31 : 08-10-2019 00:07 » 

И тут Остапов понесло... Улыбаюсь

Читаем внимательно:
Недавно стал открывать
Цитата
как это реализовать в виде программного кода понятия не имею
Цитата
Подскажите пожалуйста, как мне быть?

Быть очень просто:

1. Пишем программу (спокойно, на C#), на вводе которой задаём "А", а программа должна ответить 1.

Это под силам?
Тогда идём дальше

2. Усложняем прогу до
  * на входе Я
  * на выходе список марок японских машин
  * на входе Р
  * на выходе список марок российских машин

Это под силам?
Тогда идём дальше

Основная инфа в предложениях "выведи российские модели" и "перечисли японские марки" - это "российские" или "японские". Ессно, что прога должна выдавать какой-то результат.
Будет ли она его перечислять, выводить и тп ей это фиолетово. "Марки", "модели", "машинки", "тачки" и пр. аналогично. В результате будет то, что находится в БД под соответствующими ключами.

В конечном итоге, всё сводится к проблеме как отличить "российские" от "японские". Упростив задачу: необходимо найти минимальную информацию, достаточную для различия (сорри, забыл как это по-научному называется в теории распознавания смиволов).

Например
 * у "российские" на первом месте согласная, на втором гласная, и уже не важно рАсские, русийские и тп, это уже будет точно не ёпунские.
 * у "японские" наоборот (в данном случае добавим к гласным й, ну и с учётом  йа-панск, проверяем первые две на "гласность", точнее на й и гласную)


Для "выуживания" этой минимальной инфы из запроса, я бы использовал регулярные выражения с немного ужесточённой логикой: какие буквы могут находится в первой, второй, третьей позиции.

Как-то так.
« Последнее редактирование: 08-10-2019 00:11 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #32 : 08-10-2019 15:09 » 

И тут Остапов понесло... Улыбаюсь

Читаем внимательно:
Недавно стал открывать
Цитата
как это реализовать в виде программного кода понятия не имею
Цитата
Подскажите пожалуйста, как мне быть?

Быть очень просто:

1. Пишем программу (спокойно, на C#), на вводе которой задаём "А", а программа должна ответить 1.

Это под силам?
Тогда идём дальше

2. Усложняем прогу до
  * на входе Я
  * на выходе список марок японских машин
  * на входе Р
  * на выходе список марок российских машин

Это под силам?
Тогда идём дальше

Основная инфа в предложениях "выведи российские модели" и "перечисли японские марки" - это "российские" или "японские". Ессно, что прога должна выдавать какой-то результат.
Будет ли она его перечислять, выводить и тп ей это фиолетово. "Марки", "модели", "машинки", "тачки" и пр. аналогично. В результате будет то, что находится в БД под соответствующими ключами.

В конечном итоге, всё сводится к проблеме как отличить "российские" от "японские". Упростив задачу: необходимо найти минимальную информацию, достаточную для различия (сорри, забыл как это по-научному называется в теории распознавания смиволов).

Например
 * у "российские" на первом месте согласная, на втором гласная, и уже не важно рАсские, русийские и тп, это уже будет точно не ёпунские.
 * у "японские" наоборот (в данном случае добавим к гласным й, ну и с учётом  йа-панск, проверяем первые две на "гласность", точнее на й и гласную)


Для "выуживания" этой минимальной инфы из запроса, я бы использовал регулярные выражения с немного ужесточённой логикой: какие буквы могут находится в первой, второй, третьей позиции.

Как-то так.


Отлично! По силам всё, кроме того, как анализировать именно слово "русские" или "японские"? Я подразумеваю следующий алгоритм:
1. Программа получает запрос в виде предложения
2. Переводит в нижний регистр всё предложение
3. Ищет в предложении нужное слово
4. Обрабатывает это слово и выдаёт ответ.
Проблема только с тем, как реализовать третий пункт..
« Последнее редактирование: 08-10-2019 15:16 от KOzh1r » Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #33 : 08-10-2019 18:49 » 

В конечном итоге, всё сводится к проблеме как отличить "российские" от "японские". Упростив задачу: необходимо найти минимальную информацию, достаточную для различия (сорри, забыл как это по-научному называется в теории распознавания смиволов).

Например
 * у "российские" на первом месте согласная, на втором гласная, и уже не важно рАсские, русийские и тп, это уже будет точно не ёпунские.
 * у "японские" наоборот (в данном случае добавим к гласным й, ну и с учётом  йа-панск, проверяем первые две на "гласность", точнее на й и гласную)

Вы прослушали краткий курс реализации soundex
и алгоритма, если я не ошибаюсь стеммер Портера
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #34 : 08-10-2019 19:50 » 

Sla,  Класс! Я, к сожалению, в последний раз с этим сталкивался когда-то в начале 90-ых. Но тема интересная, наверное, поэтому и запомнилось что-то.

KOzh1r ,

Какие есть возможные комбинации букв на первом, втором и тд местах достаточные для отличия "русских" от "японцев"?

Например: комбинация ххх не удовлетворяет ни одному из условий и в этом случае, а равно в других аналогичных случаях, прога (хорошая) должна сообщить пользователю об этом и предложить правильные варианты ввода/выбора. Ибо, если пользователь уснул на клавише, например, Ж, то никакая AI не распознает, чего же именно он хочет.


« Последнее редактирование: 08-10-2019 19:52 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #35 : 09-10-2019 07:06 » 

Джон, нет, Я не об этом. Как программа поймёт в каком именно слове надо искать различия и анализ какого именно слова необходимо произвести?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #36 : 09-10-2019 07:15 » 

KOzh1r, регулярное выражение
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #37 : 09-10-2019 12:52 » 


Лёш, это же тест. А тут ещё такая возможность "пощупать" всё ручками. Обойдёмся простыми if-ами.

Джон, нет, Я не об этом. Как программа поймёт в каком именно слове надо искать различия и анализ какого именно слова необходимо произвести?

Мы знаем, точнее предполагаем, что в одном из слов запроса содержится нужная нам инфа.

Ну хорошо, исходя из предыдущего опыта:
Отлично! По силам всё...
идём дальше.

Усложняем программу
 * на входе ОДНО слово, или сочетание букв
 * на выходе
   1. Р - если распознано слово "российский" (с вариациями)
   2. Я - если распознано слово "японский" (с вариациями)
   3. Н - во всех остальных случаях

Это под силам?
Тогда идём дальше.

Прогоняем все слова запроса через фильтр. Ага

Всё.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #38 : 09-10-2019 13:11 » 

Это под силам?

Нет. В том-то и дело, Я не знаю какой код необходимо использовать для поиска определённого слова..
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #39 : 09-10-2019 13:24 » 

Шарп вроде позволяет прямое сравнение строк.
Код:
string a = "Some string";
if (a == "Some string") {
   DoSomethinf();
} else {
   Doanotherthing():
}
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #40 : 09-10-2019 14:51 » 

Это под силам?

Нет. В том-то и дело, Я не знаю какой код необходимо использовать для поиска определённого слова..

Покажите код из первых двух версий программы, из того, что было под силу.

Добавлено через 22 часа, 7 минут и 5 секунд:
Эммм сорри, не хотел напугать. Конечно ВЕСЬ код не нужен, достаточно ф-ции (или участка кода), обеспечивающей алгоритм распознавания ОДНОЙ буквы (версия 0.2).

Это будет основой для дальнейшего усложнения программы.

« Последнее редактирование: 10-10-2019 12:58 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #41 : 10-10-2019 15:33 » 

В общем, моих знаний программирования хватило лишь на это:
Код: (C#)
using System;

public class MainClass
{
        public static void Main()
        {
                Console.WriteLine("Введите запрос");
                string a = Console.ReadLine();
                a = a.ToLower();
                string b = "русские";
                string c = "российские";
                string d = "рассийские";
                string e = "росийские";
                if(a == b || a == c || a == d || a == e)
                {
                        Console.WriteLine("Ваз " + "Газ");
                }
                else
                {
                        Console.WriteLine("Mazda " + "Toyota " + "Nissan");
                }
        }
}
Понимаю насколько смешно вам смотреть на это убожество_))
Задача теперь состоит в том, чтобы из предложения, которое будет вводиться (например, перечисли русские модели) выдернуть конкретное слово "русские" для переменной "а", чтобы начать его сравнивать
« Последнее редактирование: 10-10-2019 15:40 от Джон » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #42 : 10-10-2019 16:18 » 

Ну, во-первых, ничего смешного и убожественного в этом нет, я, во всяком случае, не вижу.

Во-вторых, небольшая просьба, приводите пожалуйста цитаты из сообщений, только, если это необходимо. И по-возможности цитируйте не ВСЁ, а только существенную часть. Иначе места для полезной инфы мало остаётся, даже на 32" мониторе. Ага

Итак, я включил форматирование Вашего кода для удобочитаемости, содержимое не изменял.

Теперь, когда все бюрократические дела решены, перейдём к делу.

Вы представили первую версию программы (0.1), которая что-то получает и что-то выводит. Это уже неплохо. (Я надеюсь работоспособность проверена?)

Не зная Вашего уровня, не могу не спросить:такие вещи как ООП Вам о чём-нибудь говорят? Объектно-ориентированное программирование? Что такое в Вашем коде public class MainClass?

Мы не будем явно использовать (пока Ага ) ООП в программе, но, поскольку, C# является таковым языком, неплохо бы иметь хотя бы общее представление. Если нет, то не страшно. Для начала нам будет достаточно ф-ций, а точнее методов, так называются ф-ции класса/объекта.

Собственно программирование не есть кодирование алгоритма, а сам алгоритм. Как он будет воплощён, на каком языке, это вопрос вторичный. Поскольку у нас C#, то будем "разговаривать" на нём.

Для начала займёмся такой штукой как refactoring, или оптимизацией кода.

Метод Вашего класса Main() содержит код программы, когда он будет полным, даже просто читать такую "простыню" будет неудобно.
Что можно сделать - выделить задания во вспомогательные методы. На результат работы программы это никак не отразится, не должно во всяком случае. Улыбаюсь

Если представить прогу схематично, то она будет выглядеть примерно так (в скобках я привожу рабочее название методов на англ. тк это принято, да и компилятору легче, если для Вас это сложно, можете использовать русский транслитеративно напр. PloutchitZapros):

Ввод запроса (GetRequest)

Поиск ключа в запросе (FindKey)

Поиск данных по ключу (FindData)

Вывод результата (OutputResult)

Так и запишем

Код: (C#)
public class MainClass
{
        public static void Main()
        {
            string request = GetRequest(); // получаем запрос
            string key = FindKey(request); // передаём запрос в анализатор
            string result = ""; // создаём буфер для результата
            if (!string.IsNullOrEmpty(key)) // так осуществляется проверка пустой строки, её можно будет перенести в метод FindData
            {
                // предположим анализатор возвращает непустую строку, если он распознал ключ
                result = FindData(key); // передаём ключ в метод поиска данных
            }
            OutputResult(result); // выводим результат
      }
}

Вот собственно и всё. Никаких значительных изменений в методе Main мы больше делать не будем.

Задание: закончить оптимизацию кода (перенести строчки кода версии 0.1 в оставшиеся методы)

Подсказка.

№1. Пример первого метода
№2 Методы записываются в пределах фигурных скобок класса

Выглядит это примерно так:
Код: (C#)
public class MainClass
{
        public static void Main()
        {
            string request = GetRequest(); // получаем запрос
            string key = FindKey(request); // передаём запрос в анализатор
            string result = ""; // создаём буфер для результата
            if (!string.IsNullOrEmpty(key)) // так осуществляется проверка пустой строки, её можно будет перенести в метод FindData
            {
                // предположим анализатор возвращает непустую строку, если он распознал ключ
                result = FindData(key); // передаём ключ в метод поиска данных
            }
            OutputResult(result); // выводим результат
      }

      private static string GetRequest()
      {
          Console.WriteLine("Введите запрос");
          string a = Console.ReadLine();
          return a;
      }
}

Результат ничем не должен отличаться от работы версии 0.1 при прочих равных условиях.
« Последнее редактирование: 10-10-2019 16:37 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #43 : 10-10-2019 18:13 » 

Во-вторых, небольшая просьба, приводите пожалуйста цитаты из сообщений, только, если это необходимо. И по-возможности цитируйте не ВСЁ, а только существенную часть. Иначе места для полезной инфы мало остаётся, даже на 32" мониторе. Ага
Я понял, исправляюсь _))

Не зная Вашего уровня, не могу не спросить:такие вещи как ООП Вам о чём-нибудь говорят? Объектно-ориентированное программирование? Что такое в Вашем коде public class MainClass?
ООП не говорит ни о чём, а слова "public class MainClass" в моём коде означают какую-то неведомую штуку, которая очень важна для чего-то не менее важного, чем эти самые слова. _))

Если же говорить серьёзно, то Я только начал постигать азы, поэтому не знаю какую именно функцию несут эти команды. Догадываюсь, что они определяют какой-то принцип, по которому будет происходить алгоритм работы программы. Но какие бывают ещё и чем они отличаются друг от друга мне пока не известно. Равно как и то, что вообще возможно реализовать в рамках программы на С#.

Спасибо Вам за уделённое время, помощь и разъяснения! Написанное Вами мне пока не очень понятно, но Я почитаю и думаю разберусь что к чему. Напишу к каким выводам пришёл, по возможности прошу поправить если ошибусь _))
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #44 : 10-10-2019 21:57 » 

... слова "public class MainClass" в моём коде означают какую-то неведомую штуку

Рассматривайте пока это просто как контейнер для определённых конструкций кода. Простыми словами, где-то же он, код, должен находиться. С другой стороны, тому кто этот код читает и переваривает (делает из текста что-то, что запускается, выполняется и тд), это тоже должно быть понятно. Поэтому существуют определённые правила, тн синтаксис языка. Есть определённые ключевые слова. Например, class означает декларирование (объявление, описание) объекта, public - публичный доступ к этому объекту, те каждый извне может создавать экземпляры этого объекта. А вот методы, объявленные как private, предназначены для использования только в пределах этого класса. Ну и тд. Ессно, в рамках этой темы не имеет смысла заниматься пересказыванием любой книжки по ООП вообще и C# в частности.
Это мы оставим на домашнее задание.

Есть проблемы с литературой такого рода?

Цитата
Написанное Вами мне пока не очень понятно

Улыбаюсь если честно, это было сделано специально, чтобы понять уровень.

Собственно что имелось ввиду.

Любая программа обладает определённым уровнем сложности, как объективно, так и субъективно. Например, совершенно нормально, что это задание Вам кажется сложным (пока) и непонятным (пока). Иначе всё это не имело бы смысла.
В любом случае, гораздо удобней разбить программу на части, в идеале независимые ни от чего, каждая из которых отвечает только за свою конкретную задачу.
Мы начали с самого простого, с методов. Для конечного пользователя это не имеет никакого значения, как я уже говорил, результат ОБЯЗАН быть одинаков в обоих случаях.
Даже если ВЕСЬ код будет написан в одну строчку. Ага

Те это делается для облегчения жизни того, кто программирует. В данном случае для нас. Ведь разбираться с небольшой частью гораздо проще чем со всем целым.
Кроме того, это даст нам возможность изменять эти части, доводя их функциональность до нужного нам уровня, те до тех пор, пока они не заработают так как нам это нужно.
При этом основная программа остаётся неизменной.

К примеру. Пока программа получает запрос из консоли. А что мешает получать его из другого источника? На работу программы (основного алгоритма) это не должно оказывать никакого влияния. Таким образом выделение получения запроса в отдельный метод позволит, по необходимости, изменить логику ввода запроса только в этом методе, основная программа останется нетронутой. Всё что мы должны обеспечить, это чтобы метод Ввод запроса (GetRequest) вернул строку, содержащую этот запрос.

Собственно я не изменил программу, а просто вынес код ввода с консоли в метод, и вызвал этот метод вместо оригинального кода. Если уж быть совсем точным, то после этого изменения код выглядит след образом

Код: (C#)
public class MainClass
{
        public static void Main()
        {
                string a = GetRequest(); // получаем запрос
                a = a.ToLower();
                string b = "русские";
                string c = "российские";
                string d = "рассийские";
                string e = "росийские";
                if(a == b || a == c || a == d || a == e)
                {
                        Console.WriteLine("Ваз " + "Газ");
                }
                else
                {
                        Console.WriteLine("Mazda " + "Toyota " + "Nissan");
                }
      }

      private static string GetRequest()
      {
          Console.WriteLine("Введите запрос");
          string a = Console.ReadLine();
          return a;
      }
}

Ваше задание, аналогично этому вынести оставшийся код в методы:
 * Поиск ключа в запросе (FindKey)
 * Поиск данных по ключу (FindData)
 * Вывод результата (OutputResult)

Добавлено через 18 минут и 4 секунды:
Я почитаю и думаю разберусь что к чему. Напишу к каким выводам пришёл, по возможности прошу поправить если ошибусь _))

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

Самое главное, нужно чётко понимать, что нельзя научить программировать. Этому можно только научиться. Если я неделями буду красочно и живописно рассказывать и показвать Вам как махать руками и бултыхать ногами, Вы научитесь плавать? Ага Или, если я буду гонять мимо Вас на велосипеде и говорить, как это легко и просто, Вы сможете только на основании этой инфы самостоятельно сесть и поехать? Но совершенно очевидно, что и тому, и другому лучше учиться, если есть кому помочь, подсказать, посоветовать. Поэтому за советом, за помощью, с непонятками - всегда добро пожаловать.
« Последнее редактирование: 11-10-2019 09:51 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #45 : 12-10-2019 15:57 » 

Ломаю голову над этим который день, и никак не могу сообразить, как мне это
Код: (C#)
using System;

public class MainClass
{
        public static void Main()
        {
                Console.WriteLine("Введите запрос");
                string a = Console.ReadLine();
                a = a.ToLower();
                string b = "русские";
                string c = "российские";
                string d = "рассийские";
                string e = "росийские";
                if(a == b || a == c || a == d || a == e)
                {
                        Console.WriteLine("Ваз " + "Газ");
                }
                else
                {
                        Console.WriteLine("Mazda " + "Toyota " + "Nissan");
                }
        }
}
реализовать, используя представленный Вами метод?
Я не могу разобраться в этом коде
Код: (C#)
string request = GetRequest(); // получаем запрос
            string key = FindKey(request); // передаём запрос в анализатор
            string result = ""; // создаём буфер для результата
            if (!string.IsNullOrEmpty(key)) // так осуществляется проверка пустой строки, её можно будет перенести в метод FindData
            {
                // предположим анализатор возвращает непустую строку, если он распознал ключ
                result = FindData(key); // передаём ключ в метод поиска данных
            }
            OutputResult

Каким образом сопоставить одно с другим?  Здесь была моя ладья... Что такое "анализатор", "ключ" и куда мы его передаём?
« Последнее редактирование: 12-10-2019 19:14 от KOzh1r » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #46 : 14-10-2019 00:16 » 

Вот это понятно было?

Если представить прогу схематично, то она будет выглядеть примерно так (в скобках я привожу рабочее название методов на англ. тк это принято, да и компилятору легче, если для Вас это сложно, можете использовать русский транслитеративно напр. PloutchitZapros):

Ввод запроса (GetRequest)

Поиск ключа в запросе (FindKey)

Поиск данных по ключу (FindData)

Вывод результата (OutputResult)


если ДА
  - какие строчки Вашего оригинального кода (v.0.1) отвечают за каждый их этих четырёх пунктов?
если НЕТ
  - что именно непонятно?

Добавлено через 9 минут и 40 секунд:
зы

Что такое "анализатор", "ключ" и куда мы его передаём?

Назовите его как хотите... Что происходит с вводом? Очевидно, он анализируется. Кто это делает? Я назвал его "Анализатор".

Что мы хотим получить из ввода? Некую строку, известную нашей программе, по которой можно будет сделать однозначный выбор "японцев" или "русских". В программировании, это называется выбор/поиск по ключу. Те вот эта самая однозначная строка и является тем самым ключом. Какая переменная в Вашем оригинальном коде выполняет эту функцию (обладает этим свойством)?
« Последнее редактирование: 14-10-2019 00:28 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #47 : 14-10-2019 04:21 » 

какие строчки Вашего оригинального кода (v.0.1) отвечают за каждый их этих четырёх пунктов?
Я так понимаю, что алгоритм следующий:

Ввод запроса (GetRequest) - получение программой информации. В нашем случае это
string a = Console.ReadLine();

Поиск ключа в запросе (FindKey) - поиск в этой информации какого-то значения, которое нам необходимо
В моём коде отсутствует

Поиск данных по ключу (FindData) - поиск информации, которая относится к значению, которое мы искали в предыдущем пункте
if(a == b || a == c || a == d || a == e)

Вывод результата (OutputResult) - соответственно вывод информации, найденной выше
Console.WriteLine("Ваз " + "Газ");

Моя программа будет работать лишь в одном случае - если на ввод подаётся всего одно слово. И проводится анализ этого слова, исходя из которого выводится результат. Если же поступит запрос из нескольких слов, то результат всегда будет один.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #48 : 14-10-2019 11:51 » 

5+  Класс!

Именно так всё и есть

Моя программа будет работать лишь в одном случае...

Смотря ЧТО назвать Вашей программой? По сути, через пару дней она так и останется Вашей, немного с другим кодом. Ага

Самое главное, нужно понимать, что программа это то, что Вы описали в последнем сообщении. Алгоритм. Последовательность действий, необходимых для получения желаемого результата.
В этом случае ДА, Ваш оригинальный код (v.0.1) работает очень примитивно и с одним словом и тд и тп.
Но именно это мы и хотим изменить. Основная же программа остаётся без изменений.

Если забыть про код и оставить только задания, и предположить, что каждое задание выполняется как нам нужно, ТО
1. неважно откуда произошёл ввод - за это отвечает "Ввод запроса", а он обязан нам что-то выдать
2. неважно какой ввод (1 слово, 1 буква и тд) - ведь за это отвечает "Поиск ключа" или Анализатор, он тоже обязан нам что-то выдать
3. Неважно где и какие данные мы ищем - за это отвечает "Поиск данных" и он тоже обязан нам что-то вернуть

ну и last but not least  

4. Вывод результата. Опять же, неважно, в косоль, на печатающее устройство и тд, но результат будет куда-то выведен. Для основной программы это не имеет никакого значения, ведь за это отвечает метод "Вывод результата"

Таким образом, введя эти методы, мы абстрагируем реализацию основной программы. Всё её дальнейшее поведение, будет зависеть от реализии отдельных методов. Именно этим мы и будет в дальнейшем заниматься.

Поиск ключа в запросе (FindKey) - поиск в этой информации какого-то значения, которое нам необходимо
В моём коде отсутствует

Правильно, но есть одна строчка, которая ЧТО-ТО делает с вводом, как-то его преобразует. Давайте пока поместим эту строчку в метод "Поиск ключа в запросе".

Теперь Вы сможете добавить необходимые методы в класс MainClass?
« Последнее редактирование: 14-10-2019 12:25 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #49 : 14-10-2019 16:01 » 

Код: (C#)
string request = GetRequest(); // получаем запрос (в переменную "request" записывается "перечисли японские модели")
string key = FindKey(request); // передаём запрос в анализатор (в переменную "key" записывается как-то из "request" слово "японские" )
string result = ""; // создаём буфер для результата (создаётся пустая переменная "result", в неё запишется результат поиска)
result = FindData(key); // передаём ключ в метод поиска данных (в пустую переменную "result" записываются данные, найденные по слову "японские", записанные в "key" )

Смысл Я понял, но как это реализовать в виде кода, Я не знаю. Как задать переменной "key" значение "японские"? Какие команды необходимо написать, чтобы программа поняла что Я хочу?
« Последнее редактирование: 14-10-2019 16:15 от KOzh1r » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #50 : 14-10-2019 16:28 » 

Посмотрите мой пример с реализацие метода GetRequest. Понятно, что там было сделано? Если нет, что именно непонятно?

Как задать переменной "key" значение "русские"?

А в какой переменной находится это значение в Вашем оригинальном коде? Как вы в нём задали это значение?

Ещё раз, я не требую от Вас НИЧЕГО нового! Никаких новых команд. Просто преобразование ВАШЕГО кода (это называется refactoring) для дальнейшей работы с ним. Это необходимо для того чтобы Вы приобрели навыки:
1. создания методов. Эти методы мы будем добавлять в класс не один раз. В дальнейшем, мы будем добавлять даже целые классы.
2. присваивания переменным имён со смыслом, чтобы потом не гадать: что такое а, б, с.

Ведь именно с этим, как я понимаю, в данный момент у Вас (не)большие проблемы. Или я ошибаюсь?

Какие команды необходимо написать, чтобы программа поняла что Я хочу?

Нет готовых команд для реализации задачи. Эти, как Вы их называете, команды, нам предстоит ещё создать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #51 : 14-10-2019 17:15 » 

Код: (C#)
string a = GetRequest();
a = a.ToLower();
string b = "русские";
string b = FindKey(a);

Как Я понимаю, копаю не в ту сторону?

Вообще мне это напоминает обучение сына чтению. Он тоже понимает что такое буквы, но что такое слова - для него загадка. Вот и Я понимаю что нужно сделать, но как именно это сделать - непонятно. Как внести в переменную слово и одновременно с этим внести в неё этот загадочный FindKey?! Как ребёнок, честное слово..  Не понял
« Последнее редактирование: 14-10-2019 17:55 от KOzh1r » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #52 : 15-10-2019 07:51 » 

Улыбаюсь Ок, собственно это и выяснили.

Итак, в оригинальном коде роль ключа выполняет переменная а.

Код: (C#)
string a = Console.ReadLine();

Ей присваивается значение, которое возвращает метод ReadLine объекта Console. Я создал свой собственный метод, который назвал GetRequest, и переместил в него две строчки. Теперь переменная а, получает значение, которое возвращает этот метод. А сам метод отвечает за показ приглашения и получение запроса, который он возвращает

Код: (C#)
      private static string GetRequest()
      {
          Console.WriteLine("Введите запрос"); // показывам приглашение
          string a = Console.ReadLine(); // получаем из консоли ввод пользователя
          return a; // возвращаем его как результат метода
      }

Было (в оригинальном коде)

Код: (C#)
   Console.WriteLine("Введите запрос");
   string a = Console.ReadLine();

Стало

Код: (C#)
string a = GetRequest();

Ещё раз, на работе программы это никак не отразилось, мы пока просто подготавливаем почву для дальнейшей работы.

Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #53 : 15-10-2019 08:16 » 

Идём дальше.

След. строчка в оригинальном коде

Код: (C#)
a = a.ToLower();

Мы помним, что а - это введённый пользователем запрос. Пока код переводит все символы введённые пользователем в нижний регистр, это необходимо, тк оператор сравнения чувствителен к регистру, т.е. а != А. Таким образом эта строчка ЧТО-ТО делает с вводом, как-то его преобразует. Очень хороший повод поместить и эту строчку в отдельный метод. Конечно, ToLower это не то, что нам понадобится в дальнейшем. Именно над этим методом мы будем тщательно работать. Но пока нам достаточно и этой одной строчки.

Создаём метод, который называем FindKey

Код: (C#)
        private static string FindKey(string request)
        {
            string result = request.ToLower();
            return result;
        }
Метод GetRequest сам заботится о получении ввода, поэтому ему не нужны параметры. А вот FindKey должен что-то сделать с текстом (строкой), введённым пользователем, поэтому он получает этот в текст в качестве параметра (переменной) типа строки, я назвал его
request, и возвращает тоже строку.

Давайте на этом этапе сразу дадим нашим переменным имена со смыслом. До сих пор запрос находился в переменной с благозвучным именем а, которое абсолютно не отражает характера содержащейся в ней информации. Поскольку это запрос, то так и назовём её request, логично предположить, что метод GetRequest возвращает именно request.
Ну в дальнейшем метод FindKey возвращает ключ, поэтому и переменную назовём key

Преобразованный таким образом код на этом этапе выглядит след. образом
Код: (C#)
using System;

public class MainClass
{
        public static void Main()
        {
                string request = GetRequest(); // получаем запрос

                string key = FindKey(request); // передаём запрос в метод поиска ключа в этом запросе

                string b = "русские";
                string c = "российские";
                string d = "рассийские";
                string e = "росийские";
                if(key == b || key == c || key == d || key == e)
                {
                        Console.WriteLine("Ваз " + "Газ");
                }
                else
                {
                        Console.WriteLine("Mazda " + "Toyota " + "Nissan");
                }
        }

       private static string GetRequest()
       {
           Console.WriteLine("Введите запрос"); // показывам приглашение
           string a = Console.ReadLine(); // получаем из консоли ввод пользователя
           return a; // возвращаем его как результат метода
       }

        private static string FindKey(string request)
        {
            string result = request.ToLower();
            return result;
        }
}
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #54 : 15-10-2019 08:46 » 

Пока всё понятно? Если нет, что именно непонятно?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #55 : 15-10-2019 11:00 » 

Пока всё понятно? Если нет, что именно непонятно?

Код: (C#)
using System;

public class MainClass
{
        public static void Main()
        {
                string request = GetRequest(); // получаем запрос

                string key = FindKey(request); // передаём запрос в метод поиска ключа в этом запросе

                string b = "русские";
                string c = "российские";
                string d = "рассийские";
                string e = "росийские";
                if(key == b || key == c || key == d || key == e)
                {
                        Console.WriteLine("Ваз " + "Газ");
                }
                else
                {
                        Console.WriteLine("Mazda " + "Toyota " + "Nissan");
                }
        }

       private static string GetRequest()
       {
           Console.WriteLine("Введите запрос"); // показывам приглашение
           string a = Console.ReadLine(); // получаем из консоли ввод пользователя
           return a; // возвращаем его как результат метода
       }

        private static string FindKey(string request)
        {
            string result = request.ToLower();
            return result;
        }
}

Не понял, это один единый код, выполняющий эту программу? Почему
"Console.WriteLine("Введите запрос"); // показывам приглашение
           string a = Console.ReadLine(); // получаем из консоли ввод пользователя
           return a; // возвращаем его как результат метода
"
находится внизу хотя вверху есть
"string request = GetRequest(); // получаем запрос"
Это же то же самое? Или нет?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #56 : 15-10-2019 11:27 » 

ОК

"внизу" этот код стоит не просто так. Он определён как метод GetRequest. Он не "подвешен" в воздухе, а находится в пределах от

private static string GetRequest()
{

до

}

тело метода всегда находится в фигурных скобках, например, от

public static void Main()
{

до

}

равно как и тело всего класса от

public class MainClass
{

до самой нижней (последней)

}

Методы определяются в теле класса, и по большому счёту неважно "внизу" или "вверху". Таким образом у класса MainClass на данном этапе есть 3 метода:
 * Main - основной метод, который вызывается системой, с него всё и начинается, некая точка входа в программу.
+ два вспомогательных метода
 * GetRequest
 * FindKey

В фигурных скобках можно работать только с известными. Таковыми являются:
 * локальные переменные, которые явно определяются в теле метода (string a)
 * методы известных объектов, например, Console.WriteLine, "известность" им придаёт ключевое слово using в самой верхней части кода, в данном случае using System;
 * методы - члены этого класса, коими и являются GetRequest и FindKey

Проще говоря, где-то (вверху ли, внизу ли, главное что в пределах фигурных скобок - границ класса) в теле класса определяется метод, который можно вызывать в других методах этого класса.

Теперь ответ на "почему?"

Вот чтобы строчка

string request = GetRequest();

сработала, "внизу" должен быть определён этот самый GetRequest. Попробуйте изменить имя метода на GetRequestX (внизу). При компиляции возникнет ошибка: GetRequest неизвестен
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #57 : 15-10-2019 16:49 » 

Иными словами, под строкой "private static ... " находится метод, который позволяет задать переменной значение, которое выводится в этом методе. После выполнения метода "private static string FindKey(string request)" результатом будет:
a = result.
Я правильно понимаю?
Если да, то значит мне необходимо задать переменной "key" значение переменной "b"? А как это сделать, если "string key = FindKey(request)"? Короче опять похоже не туда Я полез..

Уважаемый Джон, как у Вас хватает терпения разъяснять кажущиеся элементарными понятия? Я бы наверное уже психанул..  Жжешь
« Последнее редактирование: 15-10-2019 16:51 от KOzh1r » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #58 : 15-10-2019 17:10 » 

Стоп, начало совершенно правильное.
Вот до этого места
Я правильно понимаю?

абсолютно ДА!!!

в переменную а будет помещено значение, которое было установлено в методе, в его локальной переменной result.

Дальше Я не совсем понял, особенно с "если"...

Пока забудьте о ключевых словах private и static, и примите их как должное. Нуу типа "тут так принято". А вот дальше...

Пример

У нас есть некий код, строчек 7-8, результатом работы которого является допустим некая строка. В этих строчках объявляются переменные, вызываются некие методы и тд и тп.

У нас возникает необходимость вызывать этот код несколько раз. В одном месте, в другом месте и тд.

Можно конечно скопировать его в нужные места, но! Если эти места находятся в пределах одной пары фигурных скобок, то возникнет проблема с переменными: невозможно объявлять переменные с одинаковыми именами в одном месте, иначе компилятор не будет знать, с какой же именно переменной мы хотим что-то сделать.
Другой недостаток (ну допустим, что мы копируем этот код в разные участки, используем его в разных методах и тд и проблем с переменными у нас не возникает). Спустя какое-то время мы находим ошибку в этом коде, или просто хотим его изменить. Делать это в разных частях программы? Одно и то же?

Вот тут и приходят на помощь методы. Мы выделяем этот код в отдельный блок и "оформляем" его как метод. Что это означает:
 - сначала мы сообщаем тип возвращаемого значения (про private и static мы пока забыли)
 - затем следует имя
 - затем обязательно круглые скобки, неважно, будем мы передавать какое-нибудь значение в качестве параметра или нет
 - после этого следует блок взятый в {} это т.н. тело метода

возвращаемый тип Имя Метода()
{
   тело метода
}

например
string GetText()
{
    int i = 3;
    sring abc = "abc";
}

Метод может и не возвращать никакого значения, в этом случае для возвращаемого используется ключевое слово void.
Если же некое значение возвращается, то в теле метода должна присутствовать команда возврата значения return

Поэтому правильно пример выше выглядит так
string GetText()
{
    int i = 3;
    sring abc = "abc";
    
    return abc;
}

Пример метода без возвращаемого значения
void ShutDown()
{
    int i = 3;
    sring abc = "abc";
}

Ну и если в метод необходимо передать некий параметр, или даже несколько параметров, то они перечисляются в круглых скобках
как при определении переменных, только разделяются не ; а просто запятой
возвращаемый тип Имя Метода( тип параметра1 имя параметра1, тип параметра2 имя параметра2 )
{
   тело метода
}

например
int Sum( int x1, int x2 )
{
    int result = x1 + x2;
    return result;
}

Ну и очевидно, что внутри метода нельзя определять переменные с именами идентичными именам параметров.

Переменные определённые внутри одного метода являются локальными переменными этого метода и не имеют ничего общего с переменными в других участках кода, даже если у них абсолютно одинаковые имена.

Ну и "ближе к телу" (с)

С учётом легенды выше вот что я сделал в Вашим кодом

       private static string GetRequest()
       {
           Console.WriteLine("Введите запрос"); // строка перенесена из оригинального кода 1:1
           string a = Console.ReadLine(); // строка перенесена из оригинального кода 1:1
           return a; // возвращаем содержимое локальной переменной а как результат метода
       }

        private static string FindKey(string request)
        {
            string result = request.ToLower(); // строка перенесена из оригинального кода 1:1, я только изменил имя переменной и имя параметра
            return result;
        }

Уважаемый Джон, как у Вас хватает терпения разъяснять кажущиеся элементарными понятия? Я бы наверное уже психанул..  Жжешь

Пока всё как должно быть. Нет никаких причин психовать.

Добавлено через 7 минут и 39 секунд:
На основании вышеизложенного попробуйте добавить метод OutputResult самостоятельно.
Подсказки
 - какой тип данных возвращается этим методом?
 - нужны ли этому методу параметры? если да, то какие?

FindData немного сложней, но если смелости хватит... то
 - какой тип данных возвращается этим методом?
 - нужны ли этому методу параметры? если да, то какие?
 - как нужно изменить оригинальный код, чтобы его можно было использовать в этом методе?
« Последнее редактирование: 15-10-2019 18:07 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
KOzh1r
Участник

ru
Offline Offline

« Ответ #59 : 15-10-2019 20:35 » 

На основании вышеизложенного попробуйте добавить метод OutputResult самостоятельно.
Код: (C#)
using System;

public class MainClass
{
        public static void Main()
        {
                string request = GetRequest(); // получаем запрос

                string key = FindKey(request); // передаём запрос в метод поиска ключа в этом запросе

                OutputResult(key);
        }

       private static string GetRequest()
       {
           Console.WriteLine("Введите запрос"); // показывам приглашение
           string a = Console.ReadLine(); // получаем из консоли ввод пользователя
           return a; // возвращаем его как результат метода
       }

        private static string FindKey(string request)
        {
            string result = request.ToLower();
            return result;
        }
        private static void OutputResult(string key)
        {
                string b = "русские";
                string c = "российские";
                string d = "рассийские";
                string e = "росийские";
                if(key == b || key == c || key == d || key == e)
            {
                Console.WriteLine("Ваз " + "Газ");
            }
            else
            {
                Console.WriteLine("Toyota " + "Nissan " + "Mazda");
            }
        }
}


Вот что смог сделать. Пришлось почитать немного, чтобы дойти до результата. По итогу программа делает то же самое, что и ранее  Отлично
Как реализовать поиск ключа в запросе Я так и не понял.. Наткнулся в интернете на такой код
 
Код: (C#)
var result = dict.Where(x => x.Value == "Сюда что ищем");
foreach(string data in result)
Console.WriteLine(data);

но так и не понял - это вообще то, что можно использовать или нет?  Здесь была моя ладья...
« Последнее редактирование: 15-10-2019 21:19 от KOzh1r » Записан
Страниц: 1 [2] 3 4  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines