Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Математическая задачаа, Вывод списка однофамильцев 
:(
    Опции темы
Voldemar2004
Дата 25.12.2004, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Если кто сможет...
Помогите найти ошибку в программе на Visual Basic:
подпрограмма выводит всех однофамильцев, однако, если я введу:

Иванов
Иванов
Петров
Петров
Сидоров
Сидоров

, то рограмма выведет:

Иванов
Иванов
Петров
Сидоров

а надо чтобы Петров - 2 раза и Сидоров - 2 раза.





Private Sub Command1_Click()
Dim i, j As Long
Dim A$(6)
Dim max As Long

For i = 1 To 6
A(i) = InputBox("")
Next i

P = 0
max = UBound(A$): exchange = True

While exchange = True
exchange = True
exchange = False

For i = 2 To max
If A$(i - 1) > A$(i) Then
exchange = True

P = A$(i - 1) 'меняем местами значение A$(i-1) и A$(i)
A$(i - 1) = A$(i) 'по правилу 3-х стаканов
A$(i) = P '

End If
Next i
Wend

Cls

For i = 1 To max
Print A$(i)
Print " "
Next i


i = 0
X: i = i + 1

If A$(i) = A$(i + 1) Then
Print "ОДНОФАМИЛЬЦЫ: " + A$(i)
Else: GoTo X
End If

For i = 1 To 6

If A$(i) = A$(i - 1) Then
Print "ОДНОФАМИЛЬЦЫ: " + A$(i)

End If
Next i

End Sub
smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Xena
Дата 26.12.2004, 10:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Это потому, что у тебя прога неправильно написана. smile
goto тебе зачем?
  Вверх
Voldemar2004
Дата 26.12.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Извиняй, но как без goto ? Я и так и этак, заколбасило, а ты б че сделал без goto?


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
cardinal
Дата 26.12.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(Voldemar2004 @ 26.12.2004, 14:02)
а ты б че сделал без goto?

цикл?
Цитата(Voldemar2004 @ 25.12.2004, 16:02)
подпрограмма выводит всех однофамильцев, однако, если я введу:

Иванов
Иванов
Петров
Петров
Сидоров
Сидоров

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


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Gannibal
Дата 26.12.2004, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Akina
Дата 27.12.2004, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата
exchange = True
exchange = False

smile
Код

x=2 ' Присвоим переменной значение
x=2 ' на случай если первый раз присвоится неправильно



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Voldemar2004
Дата 27.12.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Поясняю код: дело в том, что для вывода однофамильцев следует фамилии отсортировать в алфавитном порядке, что я и сделал, можете пользоваться этим кодом, проверено - работает, короче вопрос: как найти в одномерном массиве повторяющиеся цифры: ввод: 1 2 2 3 4 4 5 и вывод: 2 2, 4 4. В C++ - элементарно - но беда - надо юзать Васик.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
cardinal
Дата 27.12.2004, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(Voldemar2004 @ 27.12.2004, 14:55)
В C++ - элементарно

Тогда в VB то уж подавно должно быть элементарно?
Код

Option Explicit

Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
Dim a(10) As Integer
a(0) = 1
a(1) = 2
a(2) = 2
a(3) = 3
a(4) = 4
a(5) = 4
a(6) = 5
a(7) = 9
a(8) = 9
a(9) = 9

For i = 0 To 9
   If a(i) = a(i + 1) Then
        Debug.Print a(i)
        Do While a(i) = a(i + 1) And i <= 9
           Debug.Print a(i)
           i = i + 1
       Loop
   End If
Next
End Sub




--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Voldemar2004
Дата 28.12.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Большое спасибо, работает. Пришлось только подправить код:

Код

Option Explicit

Private Sub Command1_Click()
Dim i As Integer
Dim a(10) As Integer
a(0) = 1
a(1) = 2
a(2) = 2
a(3) = 3
a(4) = 4
a(5) = 4
a(6) = 5
a(7) = 9
a(8) = 9
a(9) = 9

For i = 0 To 9
   If a(i) = a(i + 1) Then
           Print a(i)
        Do While a(i) = a(i + 1) And i <= 9
           i = i + 1
           Print a(i)
        Loop
   End If
Next

End Sub

у меня ни в какую не работает Debug.Print (или .Assert) - может что-то не так делаю, или VB 6 у меня такой кривой (недавно установил MSDN, так после этого MS Office XP стал спрашивать регистрацию - ни один кряк не работает, пришлось самому №-)).
P.S. может я опять чего-то не понял, но зачем в объявлении переменных стоит Dim j As Integer ? Если j нигде не используется, C++ ругался бы как мой препод по программированию smile.
Все вопросов больше нет.

Это сообщение отредактировал(а) cardinal - 28.12.2004, 14:07


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Akina
Дата 28.12.2004, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(Voldemar2004 @ 28.12.2004, 12:52)
у меня ни в какую не работает Debug.Print

Открой окно отладки - Debug.Print пишет туда.

на будущее - рекомендую вместо
Код
For i = 0 To 9
использовать
Код
For i=Lbound(a) to Ubound(a)





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 28.12.2004, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(Akina @ 28.12.2004, 10:26)
на будущее - рекомендую вместо

Так как размер массива особо не известен smile и это правильно.
Цитата(Voldemar2004 @ 28.12.2004, 09:52)
Dim j As Integer

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


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Voldemar2004
Дата 29.12.2004, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Нужна свежая мысль:

Есть программка. Вопрос: требуется, чтобы программа выводила информацию об однофамильцах:
Имя, Отчество, Класс, Оценка1, Оценка2.

Я написал подпрограмму вывода всех фамилий, их сортировку по алфавиту и вывод всех повторяющихся фамилий (благодарю Cardinal'a за помощь).

Вопрос такой: информация хранится в файле *.txt, все записано в один столбец, т.е.
========================================================
Петров
Петр
Петрович
10 А
5
5
Иванов
Иван
Иваныч
10 Б
3
3
Иванов
Иван
Петрович
6 А
4
4
Петров
Аэсп
Михайлович
1 А
5
5
Сидоров
Альт
Линуксович
2 А
3
3

========================================================
как вывести Имена, Отчества, классы, и оценку1, оценку2:

Однофамильцы: Петров

Петр Петрович 10 А 5 5
Аэсп Михайлович 1 А 5 5

Однофамильцы: Иванов

Иван Иваныч 10 Б 3 3
Иван Петрович 6 А 4 4

Написано много подпрограмм (типа поиска заданного слова, количества повторяющихся слов и т.п. манипуляций со словами).
Заранее благодарен.
P.S. Если кто пишет подпрогу сортировки по алфавиту, поиска, поиска по критерию, подсчета слов, то пишите - может помогу чем смогу. smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
boevik
Дата 29.12.2004, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1) Прочитать весь файл в string
Код

Dim File_Name As String
Dim oFSO As New FileSystemObject
Dim sFile As String

File_Name = "c:\temp\1.txt"
sFile = oFSO.OpenTextFile(File_Name).ReadAll


2) Разбить на строки
Код

Dim sLines() as String
sLines = Split(sFile)


3) Вывести данные.
Код

For i=0 to UBound(sLines)/6
  For j = 0 to 5
       debug.print sLines[i=j],
  Next
  debug.print
Next


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


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Voldemar2004
Дата 30.12.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Благодарю, сейчас попорбую. ROL подарила 5 часов бесплатного инета. smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Voldemar2004
Дата 30.12.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Проверил, не работает строка:
Dim oFSO As New FileSystemObject[/color]
компилятор: "объявленный пользователем тип не определен".

как я понял

Код

Dim File_Name As String
Dim oFSO As New FileSystemObject
Dim sFile As String

File_Name = "c:\temp\1.txt"
sFile = oFSO.OpenTextFile(File_Name).ReadAll


это то же самое что:

Код

Input(Количество_считываемых_символов, #Номер_файла)


потом это хозяйство разбиваем на строки:

Код

Dim sLines() as String
sLines = Split(sFile)


ну и далее вывод
хотя компилятор ругается, что i,j это внешние переменные и нигде не объявлены.

А не проще было произвести построчное считывание с помощью
Код

Line Input #TxtFile, Str
[color=royalblue]
smile
Добавлено @ 17:59
При вводе

Код

Dim oFSO As New FileSystemObject
[/color][color=royalblue]

не появляется контекстное меню для облегчения жизни программера: может
VB 6 требуется сервис-пак?

И еще, есть ли хорошие учебники по VB 6, такие как C++ Builder (в 2-ух томах)Архангельского.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

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


 




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


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

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