Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: bit.pirit.info
 Профиль | | #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-сайт: bit.pirit.info
 Профиль | | #2
Добавлено: 12.01.06 23:58
А в общем если смогу попробую решить.
Если время будет завтра свободное! ;-)

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 13.01.06 02:44
Если я правильно понял задачу (честна говоря, лень было разбираться, т.к. у тебя код не моноширинным шрифтов написан):
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Sub CommandButton3_Click()
    Dim arr() As Long
    Dim i As Long, intMax As Long
    intMax = 50
    ReDim arr(intMax)
    ' &#231;&#224;&#228;&#224;&#184;&#236; &#236;&#224;&#241;&#241;&#232;&#226;
    For i = 0 To intMax
        arr(i) = i
    Next i
    arr(10) = -1
    arr(20) = -2
    ' &#232; &#242;&#229;&#239;&#229;&#240;&#252; &#229;&#227;&#238; &#247;&#232;&#241;&#242;&#232;&#236;, &#242;&#232;&#239;&#224; &#237;&#229; &#231;&#237;&#224;&#255;, &#227;&#228;&#229; &#243; &#237;&#224;&#241; &#238;&#242;&#240;&#232;&#246;&#224;&#242;&#229;&#235;&#252;&#237;&#251;&#229; &#247;&#232;&#241;&#235;&#224;
    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 "&#205;&#229;&#242; &#242;&#224;&#234;&#238;&#233; &#242;&#229;&#236;&#251;!"
    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-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 13.01.06 02:45
Млин, хорошо, что ещё переменные русскими буквами не надумал писать. 8)

Ответить

Номер ответа: 5
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #5
Добавлено: 13.01.06 09:58
Да тут(в первом варианте) после каждой строчки можно взрыв мозгов происходит!

Ответить

Номер ответа: 6
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #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-сайт: bit.pirit.info
 Профиль | | #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
        ;Dim 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-сайт: bit.pirit.info
 Профиль | | #10
Добавлено: 13.01.06 19:54
Посмотрим - проверим!

Ответить

Номер ответа: 11
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #11
Добавлено: 13.01.06 19:54
Посмотрим - проверим!

Ответить

Номер ответа: 12
Автор ответа:
 Wolfrt



ICQ: 225421504 

Вопросов: 8
Ответов: 60
 Профиль | | #12 Добавлено: 13.01.06 20:16
роот только без обид жду рецензию!

Ответить

Номер ответа: 13
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #13
Добавлено: 13.01.06 21:56
Всмысле?
Код?
Посмотрим щас...

Ответить

Номер ответа: 14
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #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
что и требовалось!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам