Страница: 1 | 2 |
Вопрос: Помогите решить несложную задачку.ПЛИЗ!!!
Добавлено: 12.01.06 23:15
Автор вопроса: Romikus
Ответы
Всего ответов: 22
Номер ответа: 16
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #16
Добавлено: 14.01.06 17:47
А вот с возможностью задавать размерность массива и собственно сами
элементы:
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 = "Элементы массива: "
'Для Text1 лучше поставит свойство MULTILINE=true и вертикальную полосу прокрутки
For I = 1 To N
If A(I) < 0 And intC = 0 Then intC = 1: intFirst = I
If A(I) < 0 And intFirst <> I Then intLast = I: Exit For
Next I
For I = intFirst + 1 To N - (intLast - intFirst - 1)
A(I) = A(I + (intLast - intFirst - 1))
Next I
For I = 1 To N - (intLast - intFirst - 1)
Text1.Text = Text1.Text & Str(A(I)) & " "
Next I
Exit Sub 'выход из процедуры, если нет ошибки
'подпрограмма обработки ошибок
metka:
MsgBox "Данные введены некорректно"
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
Form1.Caption = "Ввод и обработка массива"
Text1.Text = ""
Command1.Caption = "Выполнить задание"
Command2.Caption = "Выход"
End Sub
Номер ответа: 17
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #17
Добавлено: 17.01.06 13:28
Мы тут кое что не предъусмотрели!
Ошибка если не вводим отрицательных совсем и если одно отрицательное
Вот добавил пару циклов:
If intFirst > 0 And intLast > 0 Then
For I = intFirst + 1 To N - (intLast - intFirst - 1)
A(I) = A(I + (intLast - intFirst - 1))
Next I
Else
GoTo Error 'инициируем обработчик ошибок
End If
If intFirst > 0 And intLast > 0 Then
For I = 1 To N - (intLast - intFirst - 1)
Text1.Text = Text1.Text & Str(A(I)) & " "
Next I
Else
On Error GoTo Error 'инициируем обработчик ошибок
End If
Exit Sub 'выход из процедуры, если нет ошибки
'подпрограмма обработки ошибок
metka:
MsgBox "Данные введены некорректно"
End
Error:
MsgBox "В массиве нет отрицательных значений"
Номер ответа: 18
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #18
Добавлено: 17.01.06 21:22
Всё гораздо легче!
p=0
for i=1 to n
if a(i)> 0 then p=p+1
if p=2 then exif for
next i
if p<2 then exit sub:MsgBox "В массиве нет отрицательных значений"
'goto лучше не использовать
Номер ответа: 19
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #19
Добавлено: 18.01.06 12:17
Ну не знаю, вроде в моем варианте вообще ни чего сложного нет!
Номер ответа: 20
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #20
Добавлено: 18.01.06 15:02
хотя ты прав! Твой вариант лучше! Меньше циклов, больше производительность! Просто в программе переменных очень мало! А имена у них чёт очень длинные с толку сбивает!
Ещё из кожи вылези, но Goto обойди!
Номер ответа: 21
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #21
Добавлено: 18.01.06 15:41
Да это же не принципиально для автора топика - ему нужно было считать,
мы сделали, а еще плюс сделали проверку на ошибки, ему бы препод
сказал - "гуд"
Номер ответа: 22
Автор ответа:
Wolfrt
ICQ: 225421504
Вопросов: 8
Ответов: 60
Профиль | | #22
Добавлено: 18.01.06 16:36
Ищи информацию о "хороше" стиле программирования!
Просто трудно читать, искать ссылку и т.д. и т.п.
можешь тему создать может быть кто-то лучше знает!