Страница: 1 | 2 |
Вопрос: Помогите решить несложную задачку.ПЛИЗ!!!
Добавлено: 12.01.06 23:15
Автор вопроса: Romikus
Помогите пожалуйста решить такую задачку:Нужно из массива удалить элементы,стоящие между первым и вторым отрицательными элементами.
Нужен программный код для visual basic 6.
вот отрывок из прогр. кода который я сделал сам,но почему-то прога не работает:
Private Sub mnuTask3_Click()
Option Explicit
Private n1 As Integer, a() As Integer, b() As Integer
i as integer
Dim k As Integer, t As Integer
FrameARez.Visible = True
FrameARez.Caption = "Задача №1"
lbltask1.Caption = "Из массива удалить элементы, стоящие между первым и вторым отрицательными элементами."
Call init1
For i = 1 To n1
If b(i) < 0 Then
k = i
Exit Sub
End If
Next i
For i = k + 1 To n1
If b(i) < 0 Then
t = i
Exit Sub
End If
Next i
For i = t To n1
b(i) = b(i - (t - k - 1))
Next i
ReDim Preserve b(1 To n1 - (t - k - 1))
Call vivod(b(), n1 - (t - k - 1))
End Sub
Private Sub init1()
ReDim b(1 To n1)
For i = 1 To n1
b(i) = a(i)
Next i
End Sub
Public Sub vivod(d() As Integer, nn As Integer)
PictureARez.Cls
For i = 1 To nn
PictureARez.Print Spc(2); d(i);
Next i
End Sub
p.s. n1-кол-во элементов массива
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #1
Добавлено: 12.01.06 23:56
Интересно почему же она не работает!!!
Если же ты это сам написал, то теперь возьми и разбери построчно - поищи ошибки!
А оно может бы и заработало, но не в таком виде.
>Private Sub mnuTask3_Click()
>Option Explicit
>Private n1 As Integer, a() As Integer, b() As >Integer
>i as integer
Много ошибок!
Номер ответа: 2
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #2
Добавлено: 12.01.06 23:58
А в общем если смогу попробую решить.
Если время будет завтра свободное!
Номер ответа: 3
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #3
Добавлено: 13.01.06 02:44
Если я правильно понял задачу (честна говоря, лень было разбираться, т.к. у тебя код не моноширинным шрифтов написан):
Private Sub CommandButton3_Click()
Dim arr() As Long
Dim i As Long, intMax As Long
intMax = 50
ReDim arr(intMax)
' çàäà¸ì ìàññèâ
For i = 0 To intMax
arr(i) = i
Next i
arr(10) = -1
arr(20) = -2
' è òåïåðü åãî ÷èñòèì, òèïà íå çíàÿ, ãäå ó íàñ îòðèöàòåëüíûå ÷èñëà
Dim num1 As Long, num2 As Long
num1 = -1: num2 = -1
For i = 0 To intMax
If arr(i) < 0 Then
If num1 = -1 Then
num1 = i
Else
num2 = i
Exit For
End If
End If
Next i
If num1 >= 0 And num2 > 0 Then
PrintArr arr
CopyMemory arr(num1 + 1), arr(num2), (intMax - num2) * 4
intMax = intMax - (num2 - num1)
ReDim Preserve arr(intMax)
PrintArr arr
Else
MsgBox "Íåò òàêîé òåìû!"
End If
End Sub
Private Sub PrintArr(arr() As Long)
Dim i As Long, rez As String
For i = 0 To UBound(arr)
rez = rez + CStr(i) + " -> " + CStr(arr(i)) + vbCrLf
Next i
MsgBox rez
End Sub
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #4
Добавлено: 13.01.06 02:45
Млин, хорошо, что ещё переменные русскими буквами не надумал писать. 8)
Номер ответа: 5
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #5
Добавлено: 13.01.06 09:58
Да тут(в первом варианте) после каждой строчки можно взрыв мозгов происходит!
Номер ответа: 6
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #6
Добавлено: 13.01.06 11:00
Я тут чего то сбацал.
Только не до конца, - сам учусь!
В общем умные люде посмотрите и исправьте.
Ошибка в цикле, при нахождении отриц значений.
Две переменные intFirst и intLast должны хранить первое отрицательное значение и последние.
Ну и нужно еще удалить элементы между ними.
Вот:
Option Explicit
Private Sub Command1_Click()
Dim N As Integer 'размерность массива
Dim A() As Integer 'массив
Dim I As Integer 'переменная цикла
Dim intFirst As Integer
Dim intLast As Integer
Dim intC As Integer
'при отмене возникает ошибка, которую надо обрабатывать
On Error GoTo metka 'инициируем обработчик ошибок
N = InputBox("Введите размер массива"
ReDim A(0 To N) As Integer
'REDIM сбрасывает элементы массива на ноль
For I = 1 To N
A(I) = InputBox("A (" + Str(I) + "=", "Размерность вашего массива - " & N)
Next I
On Error GoTo 0 'выключаем обработчик ошибок
Text1.Text = "Элементы массива: "
For I = 1 To N
Text1.Text = Text1.Text & Str(A(I)) & " "
'лучше использовать значок & вместо +
Next I
'Для Text1 лучше поставит свойство MULTILINE=true и вертикальную полосу прокрутки
'Вот тут и начинается аааааааа!!!!
For I = 1 To N
If intC = 0 Then
If A(I) < intFirst Then intFirst = A(I) And intC = intC + 1 And Label1.Caption = intFirst
Else
If A(I) < 0 Then intLast = A(I) And Label1.Caption = intLast
End If
Next I
Exit Sub 'выход из процедуры, если нет ошибки
'подпрограмма обработки ошибок
metka:
MsgBox "Данные введены некорректно"
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
Form1.Caption = "Ввод и обработка массива"
Text1.Text = ""
Label1.Caption = ""
Command1.Caption = "Выполнить задание"
Command2.Caption = "Выход"
End Sub
toRomikus - Да и лучше книжку почитай какую нибудь и просмотри свой первый вариант на ошибки, думаю будешь смеяться!
Номер ответа: 7
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #7
Добавлено: 13.01.06 18:59
роот вб ты хорошо знаешь но программирование у тебя хромает! через часок выложу!
Номер ответа: 8
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #8
Добавлено: 13.01.06 19:23
Да нет я только учусь, так что сильно не пинайте!
Давай свой вариант
Номер ответа: 9
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #9
Добавлено: 13.01.06 19:36
Dim i, n, b, m1, m2 As Double
n = 10
 im a(n) As Double
a(1) = 1
a(2) = -1
a(3) = 2
a(4) = 3
a(5) = 4
a(6) = 5
a(7) = 1
a(8) = -2
a(9) = 1
a(10) = -1
For i = 1 To n
If a(i) < 0 And b = 0 Then b = 1 : m1 = i
If a(i) < 0 And m1 <> i Then m2 = i : Exit For
Next i
For i = m1 + 1 To n - (m2 - m1 - 1)
a(i) = a(i + (m2 - m1 - 1))
Next i
For i = 1 To n - (m2 - m1 - 1)
Text1.Text = Text1.Text & Str(a(i)) & " "
Next i
делаю упор на программирование, а не на оформление! Как считать и куда вывести массив другая история!
На выходи имею: 1 -1 -2 1 -1
Думаю правильно! Ну помогите с выводом на печать рисунка(в файле)!!!
Номер ответа: 10
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #10
Добавлено: 13.01.06 19:54
Посмотрим - проверим!
Номер ответа: 11
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #11
Добавлено: 13.01.06 19:54
Посмотрим - проверим!
Номер ответа: 12
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #12
Добавлено: 13.01.06 20:16
роот только без обид жду рецензию!
Номер ответа: 13
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #13
Добавлено: 13.01.06 21:56
Всмысле?
Код?
Посмотрим щас...
Номер ответа: 14
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #14
Добавлено: 13.01.06 22:59
Я бы сказал – Вот так, точнее будет.
Option Explicit
Dim i, n, b, m1, m2 As Integer
Dim a(10) As Integer
Private Sub Command1_Click()
Text1.Text = "Ответ: "
n = 10
a(1) = 1
a(2) = -1
a(3) = 2
a(4) = 3
a(5) = 4
a(6) = 5
a(7) = 1
a(8) = -2
a(9) = 1
a(10) = -1
For i = 1 To n
If a(i) < 0 And b = 0 Then b = 1: m1 = i
If a(i) < 0 And m1 <> i Then m2 = i: Exit For
Next i
For i = m1 + 1 To n - (m2 - m1 - 1)
a(i) = a(i + (m2 - m1 - 1))
Next i
For i = 1 To n - (m2 - m1 - 1)
Text1.Text = Text1.Text & Str(a(i)) & " "
Next i
End Sub
>>>На выходи имею: 1 -1 -2 1 -1
Номер ответа: 15
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #15
Добавлено: 14.01.06 17:01
что и требовалось!