Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программа-переводчик, помогите с созданием 
:(
    Опции темы
Predator
Дата 13.10.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



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

тоесть букв в рус. алфавите - 33
получается у каждой буквы, своя цифра...

пишем например слово (или предложение) - "привет", нажимаем кнопку перевести, и видим такое - "17, 18, 10, 3, 6, 20" 
и то же самое, наоборот (хотя главное всё-таки из букв в цифры)

выглядеть она (программа) будет примерно так:
http://img275.imageshack.us/img275/7364/proggl9.gif

естественно, всё написать от вас не требую... но т.к. я в програмировании новичёк, прошу помочь с некоторыми вопросами:
1) как присвоить каждой букве, цифру?
тоесть можно было бы просто перечислить все буквы, и назначить им цифры, но может есть другой, более грамотный и простой способ?
2) как научить программу "читать"? 
тоесть надо чтоб она определяла слова, и понимала, что каждой букве, надо вывести её цифровое значение...
PM MAIL   Вверх
DarkDragon
Дата 13.10.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: 5
Всего: 8



Цитата

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

Наверное ты имеешь ввиду символы, а не слова?

Что тебе нужно сделать:
1. Создать массив символов
2. Создать массив чисел (Integer)
Только вот два массива, должны быть представлены ввиде таблицы.
3. Написать ф-цию перевода символов в числа, и возвращать ввиде строки.

Вобщем пример:
Код

    Dim chrTable() As Char = {"a", "b", "c", "d", "e", "o", "p", "r"}
    Dim intTable() As Integer = {2, 8, 9, 7, 5, 4, 6}

    Private Function StringToNumber(ByVal str As String) As String
        Dim retstr As String ' Строка для возврата
        Dim tmpstr As String = str.ToLower()  ' Сделать все буквы прописными, и присвоить строку к tmpstr
        Dim i As Integer ' Счетчик цикла
        Dim index As Integer ' Номер символа в массиве
        For i = 0 To tmpstr.Length - 1 ' Вся длина строки
            index = Array.IndexOf(chrTable, tmpstr.Chars(i))
            If index > -1 Then
                retstr &= intTable(index).ToString ' Если этот символ есть в массиве, значить меняем его на цифру
            Else
                retstr &= tmpstr.Chars(i) 'Если же нет, то добавляем этот символ
            End If
        Next
        Return retstr ' Возвращаем готовую строку
    End Function

Данный пример димонстрирует присвоение каждому символу, уникальное число.

То что именно тебе нужно, можно обойтись и с одним массивом, где все русские буквы идут по порядку, как в алфавите.
Код

    Dim chrRusTable() As Char = {"а", "б", "в", "г", "д", "е", "ё", "ж", _
"з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", _
"ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"}

    Private Function StringToNumber(ByVal str As String) As String
        Dim retstr As String
        Dim tmpstr As String = str.ToLower()
        Dim i As Integer
        Dim index As Integer
        For i = 0 To tmpstr.Length - 1
            index = Array.IndexOf(chrRusTable, tmpstr.Chars(i))
            If index > -1 Then
                retstr &= CInt(index+1).ToString & "," ' Вставляем порядковый номер символа в таблице + запятая
            Else
                retstr &= tmpstr.Chars(i)
            End If
        Next
        Return retstr
    End Function
 

Вот и получается у нас что символ 'а' первый символ в массиве, и его индекс равен 0, по этому прибавляем 1, если говорить по русски то это первый символ. А не нулевой. А с точки зрения программы это нулевой элемент массива.

Это грубоватый пример, его можно оптимизировать используя класс StringBuilder.
Но покамись разберись с этим, а потом уже подумай об оптимизацииsmile

PM MAIL   Вверх
Exception
Дата 14.10.2006, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



А разве так не проще?
Код
Dim input As String = "Текст"
Dim result As String
For Each c As Char In input
    result += CInt(c).ToString() + " "
Next


Добавлено @ 02:20 
А наоборот так:
Код
Dim result As String = "..." ' тут строка, полученная предыдущим кодом
Dim input As String
For Each number As String In result.Split(" ")
    input += CChar(CInt(number))
Next
Правда, сам не проверял, так что код, вероятно, можно упростить.

Это сообщение отредактировал(а) Exception - 14.10.2006, 02:22
PM   Вверх
Predator
Дата 14.10.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



что-то ничё не получается  smile 
PM MAIL   Вверх
Naum
Дата 14.10.2006, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



Цитата(DarkDragon @  14.10.2006,  00:54 Найти цитируемый пост)
Что тебе нужно сделать:
1. Создать массив символов
2. Создать массив чисел (Integer)
Только вот два массива, должны быть представлены ввиде таблицы.
3. Написать ф-цию перевода символов в числа, и возвращать ввиде строки.


Имхо лучше реализовать интерфейс IDictionary. 


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

Идея в том, чтобы реализовать IDictionary в каком либо классе, например, MyDictionary, а затем можно

Код

 Public Sub AnySub()
  Dim myEncoder As New MyDictionary
  Dim i As Integer
  myEncoder.Add("а",1)
  i=myEncoder.Item("а") ' i=1
 End Sub



Exception
Цитата(Exception @  14.10.2006,  03:11 Найти цитируемый пост)
CInt©.ToString()

эта штука по идее должна возвращать ASCII код символа с?

Добавлено @ 10:53 
 smile 
Цитата(Exception @  14.10.2006,  03:11 Найти цитируемый пост)
CInt©.

Прикольно получилось.  smile 



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Exception
Дата 14.10.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



По идее должна smile . Сам не проверял.
Predator, мы не телепаты, и поэтому "ничё не получается" вряд ли поможет решить твою проблему. Что не получается? Не работает код? Не компилируется? Ты не знаешь, как его использовать?
PM   Вверх
Predator
Дата 14.10.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



Exception,
код не работает...
хотя может это я что-то неправильно делаю...  smile 
наверное всё-таки я косячю...

как данные коды подстроить под текстбоксы для ввода символов, и для вывода? (ввод textbox1, вывод textbox2)

в коде у DarkDragon`a функция не хочет объявляться... тоесть слова "Private Function" подчёркиваются синей волнистой линией...

про интерфейс IDictionary вообще ничё не понял  smile 
PM MAIL   Вверх
Exception
Дата 14.10.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Тогда мой тебе совет - не ставь задач, которые не можешь выполнить, а подучи язык.
PM   Вверх
DarkDragon
Дата 15.10.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 19.8.2006

Репутация: 5
Всего: 8



Цитата(Exception @ 14.10.2006,  02:11)
А разве так не проще?
Код
Dim input As String = "Текст"
Dim result As String
For Each c As Char In input
    result += CInt(c).ToString() + " "
Next


Добавлено @ 02:20 
А наоборот так:
Код
Dim result As String = "..." ' тут строка, полученная предыдущим кодом
Dim input As String
For Each number As String In result.Split(" ")
    input += CChar(CInt(number))
Next
Правда, сам не проверял, так что код, вероятно, можно упростить.

Ну это ты уже про конвертацию символа, в цифровое значение, (хотя какая там конвертация?smile ведь символ это и есть числоsmile, процессор уж точно это знаетsmile) Символ - Код. А скажем попробуй присобачить цифре 'D' числовое значение 1:) 

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

А Predator ты куда её вставляешь. Небось в пустое пространство
Созданй вот такой класс:
Код

    Public Class AddFunc
       Public Shared Function StringToNumber(ByVal str As String) As String
          ' Перенесешь все что я указал в предыдущем примере.
       End Function
    End Class


Далее вызов моей функции:
Код

   TextBox2.Text = AddFunc.StringToNumber (TextBox1.Text)

Попробуй вставить этот отрывок в обработчик события (Button1.Click())

Запомни у многих компонентов .NET(визуальный имею ввиду) есть свойство [Text], чаще всего ему можно дать значение (Тип: String), или получить значение того же типа. Как раз такие свойства, и отвечают за отображения, текста, ну и ввод текста осуществляется туда же.

PM MAIL   Вверх
Predator
Дата 16.10.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



DarkDragon,
о... спасибо, получилось...
Exception,
а как учить язык, не ставя целей?  smile 
PM MAIL   Вверх
ivashkanet
Дата 16.10.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149



Цитата(Predator @  16.10.2006,  00:09 Найти цитируемый пост)
а как учить язык, не ставя целей?  

Predator, почему не ставя цели?
Ставя, но, пока, не такие сложные smile
Сначала лучше всего наловчиться на консольных приложениях. Попробовать реализовать простые алгоритмы. Потом перейти к вкусностям .Net. А потом уже переходить к WinForm.

P.S. А еще раньше нужно просто тупо выучить синтаксис языка.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0860 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.