2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Спорный вопрос
Сообщение19.03.2010, 01:11 


14/12/09
306
Привет всем!) Тема вопроса - лёгкая, надеюсь мне быстро ответят.

Вот дано такое задание:
Найти самую длинную симметричную строку, читающуюся одинаково
слева направо и справа налево, в заданном массиве строк.


Какой из вариантов оформления правильный?:
1) Сделать поле для ввода строк через пробел. И поэтому из понимания слова "строка" в данном задании исключить символ пробела.

2) Учитывать, что строка также может включать в себя пробелы, и сделать кнопку для ввода элементов "Ввести массив", и будет появляться окошко "Ввести s(0)", потом "Ввести s(1)" и т.д.

Уже час думаю, какой из этих вариантов более правильный :shock:

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 01:20 
Заслуженный участник


09/08/09
3438
С.Петербург
На мой взгляд, правильный способ -- это сделать многострочное поле для ввода всего массива строк.
Вы на чем пишете? И для какой ОС?

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 01:34 


14/12/09
306
На Визуал Бейсик для Windows

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 01:41 
Заслуженный участник


09/08/09
3438
С.Петербург
Ну так и вводите весь текст целиком в одно поле, а затем уже в программе разбивайте его на отдельные строки (по символу конца строки) и анализируйте.

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 01:43 


14/12/09
306
Maslov, спасибо) Попробую справится)

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 01:52 
Заслуженный участник


09/08/09
3438
С.Петербург
Только Multiline не забудьте TextBox'у выставить, а то он Вам не даст многострочный текст ввести.

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 01:58 


14/12/09
306
Не забыл уже) Даже сделал полосы прокрутки.
Долго не мог понять, почему горизонтальная полоса прокрутки не появляется, потом узнал, что надо ведь WordWrap отменить)

-- Пт мар 19, 2010 02:04:50 --

А вот я думаю, если в массиве две наидлинных симметричных строки с одинаковой длиной, то ничего не выводить или вывести первую попавшуюся? :shock:

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 02:10 
Заслуженный участник


09/08/09
3438
С.Петербург
Если Вы анализируете строки начиная с первой, то удобнее выводить последнюю самую длинную.

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 03:26 


14/12/09
306
блин... а получается тогда что в она не самая длинная, ведь в массиве имеется строка такой же длины.

Как бы вы поступили?(

Я думаю, что надо это учесть. Программно данную проблему я смогу решить.

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 18:17 
Заслуженный участник


26/07/09
1559
Алматы
2Mikle1990
Цитата:
а получается тогда что в она не самая длинная, ведь в массиве имеется строка такой же длины.

Ну это профессора любят прикапываться к разнице в словах "максимальный" и "наибольший". :)
Предлагаю вывести все искомые строки максимальной длины (многозначный/индетерминированный алгоритм). :)

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 18:34 
Заслуженный участник


09/08/09
3438
С.Петербург
Mikle1990 в сообщении #299249 писал(а):
блин... а получается тогда что в она не самая длинная, ведь в массиве имеется строка такой же длины.

Как бы вы поступили?(
При наличии нескольких самых длинных я бы выводил все. Тем более, что подобная реализация легко приводится к двум другим вариантам:
- выводить любую
- не выводить ничего

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 21:03 


14/12/09
306
Maslov в сообщении #299436 писал(а):
- выводить любую
- не выводить ничего

Вот какой из них более правильный? Или они оба очень правильные?)

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 23:07 
Заслуженный участник


09/08/09
3438
С.Петербург
Mikle1990 в сообщении #299515 писал(а):
Вот какой из них более правильный?
Такие вещи должны в условии оговариваться. Ну а если не оговариваются, выбирайте что хотите.

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

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение19.03.2010, 23:38 


14/12/09
306
Спасибо)

 Профиль  
                  
 
 Re: Спорный вопрос
Сообщение20.03.2010, 03:28 


14/12/09
306
Что-то я попытался сделать само задание, а не получается. :(
Точнее я могу сделать, но это будет очень криво и займёт дней пять.

У меня есть один алгоритм на уме. Короче, в TextBox1 содержатся все наши строки.
При нажатии на кнопку "Выполнить":
1) Объявляем переменную в которую хотим запихнуть весь текст из TextBox1
запихиваем:
Код:
s = vvod(TextBox1) 'получаем весь текст из TextBox1

2) Объявляем переменную для внесения в неё размерности массива. Размерность массива мы получим из (3)
3) Отправляем в некую процедуру переменные (1) и (2), считаем там символы перехода на новую строку. После ещё кое-чего мы уже знаем размерность массива и учитывая то, что переменная (2) была передана по ссылке(ByRef)
4) Зная длину массива объявляем его:
Код:
Dim stmas(длина массива) As String

5) Отправляем его(по ссылке) и переменную (1)(по значению) в процедуру, где он заполнится данными. Т.е. в первый элемент массива записывается то, что до символа перехода на новую строку, потом символ перехода на новую строку пропускается и уже записывается второй элемент массива и т.д.
6) Потом этот массив отправляем(по ссылке) в процедуру где в нём будут удалены все несимметричные строки.
7) Потом этот массив и переменную в которую будет записана самая длинная симметричная строка отправляем(по ссылке) в процедуру, где будет найдена самая длинная симметричная строка. А также в процедуре будет цикл, который будет задаваться вопросом "А нет ли в массиве строк такого же размера?". Если нет, то zs = 1, если zs > 1, то это показывает, что имеется две "самых" длинных строки. Почему так? Просто в цикле о котором я говорил будет такая штука: Уже зная длину самого длинного элемента мы пройдёмся по циклу и будем её сравнивать с длинами остальных строк. Если строки будут равны, то zs = zs + 1. Т.е. если действительно есть самая длинная строка, то длина её должна быть только у одного эл-та массива.
... :oops:

Я не знаю даже что и сказать. И поговорка "терпение и труд всё перетрут" здесь не очень действует( Буду раз если какой-нибудь смельчак(-ки) мне поможет :(

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group