Вопрос: Помогите решить несложную задачку.ПЛИЗ!!! | Добавлено: 12.01.06 23:15 |
Автор вопроса: ![]() |
Помогите пожалуйста решить такую задачку:Нужно из массива удалить элементы,стоящие между первым и вторым отрицательными элементами.
Нужен программный код для 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 Автор ответа: ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() Вопросов: 45 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 12.01.06 23:58 |
А в общем если смогу попробую решить.
Если время будет завтра свободное! ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #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) ' çàäà¸ì ìàññèâ 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 13.01.06 02:45 |
Млин, хорошо, что ещё переменные русскими буквами не надумал писать. 8) |
Номер ответа: 5 Автор ответа: ![]() ![]() Вопросов: 45 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 13.01.06 09:58 |
Да тут(в первом варианте) после каждой строчки можно взрыв мозгов происходит! |
Номер ответа: 6 Автор ответа: ![]() ![]() Вопросов: 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) + " ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 225421504 Вопросов: 8 Ответов: 60 |
Профиль | Цитата | #7 | Добавлено: 13.01.06 18:59 |
роот вб ты хорошо знаешь но программирование у тебя хромает! через часок выложу! |
Номер ответа: 8 Автор ответа: ![]() ![]() Вопросов: 45 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 13.01.06 19:23 |
Да нет я только учусь, так что сильно не пинайте!
Давай свой вариант |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 225421504 Вопросов: 8 Ответов: 60 |
Профиль | Цитата | #9 | Добавлено: 13.01.06 19:36 |
Dim i, n, b, m1, m2 As Double
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 делаю упор на программирование, а не на оформление! Как считать и куда вывести массив другая история! На выходи имею: 1 -1 -2 1 -1 Думаю правильно! Ну помогите с выводом на печать рисунка(в файле)!!! |
Номер ответа: 10 Автор ответа: ![]() ![]() Вопросов: 45 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 13.01.06 19:54 |
Посмотрим - проверим! |
Номер ответа: 11 Автор ответа: ![]() ![]() Вопросов: 45 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 13.01.06 19:54 |
Посмотрим - проверим! |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 225421504 Вопросов: 8 Ответов: 60 |
Профиль | Цитата | #12 | Добавлено: 13.01.06 20:16 |
роот только без обид жду рецензию! |
Номер ответа: 13 Автор ответа: ![]() ![]() Вопросов: 45 Ответов: 1212 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 13.01.06 21:56 |
Всмысле?
Код? Посмотрим щас... |
Номер ответа: 14 Автор ответа: ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 225421504 Вопросов: 8 Ответов: 60 |
Профиль | Цитата | #15 | Добавлено: 14.01.06 17:01 |
что и требовалось! |
|