Вот программа. Задание :
В одномерном массиве, состоящем из 20 целых элементов (значения элементов массива задать случайными числами из интервала [-5, 5]), вычислить произведение элементов массива с четными номерами. Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы массива, а потом — все отрицательные.
Ругается на этих строчках :
For i = 0 To UBound(a)
m = m + Format(a(i), "0.0") + Space(2)
В чем ошибка? Могут Быть еще ощибки.. . и думаю много.. .
Option Strict On
Option Explicit On
Imports System.Math
Public Class Form1
Dim x() As Single
Dim y() As Single
Dim P As Single
Sub vvodRnd(ByRef x() As Single)
Dim i As Integer
Randomize()
ReDim x(19)
For i = 0 To 19
x(i) = -3 + 12 * Rnd()
Next i
End Sub
Sub vivod(ByVal Z As Double, ByVal T As TextBox)
T.Text = Format(Z, "0.0")
End Sub
Sub vivodM(ByRef a() As Single, ByRef LB As ListBox)
Dim i As Integer
Dim m As String = ""
For i = 0 To UBound(a)
m = m + Format(a(i), "0.0") + Space(2)
Next i
If m = "" Then m = "массив пуст"
LB.Items.Add(m)
End Sub
Sub NewM(ByRef x() As Single, ByRef y() As Single, ByRef P As Single)
Dim b, tmp As Single
P = 1
b = 1
For i = 0 To 19
If (i Mod 2) = 0 Then
P = P * x(i)
Else
b = b * x(i)
End If
Next i
'::: Перестановки
For i = 1 To 19
For j = i + 1 To 19
If x(i) < 0 And x(j) > 0 Then
tmp = x(i)
x(i) = x(j)
x(j) = tmp
End If
Next j
Next i
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
ListBox2.Items.Clear()
vvodRnd(x)
NewM(x, y, P)
vivodM(x, ListBox1)
vivodM(y, ListBox2)
vivod(P, TextBox1)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
End Class
Другие языки программирования и технологии
Массивы. Ошибка в программе. Basic
Ммм.. . Как бы сказать, что бы не обидеть. .
В этом коде не синяк, это "ушиб всей бабушки"...
Понимаете, Александра Халтурина,
Вы пытаетесь писать программу в Visual Basic .NET, но используете
конструкции, присущие VB 6.0 или VBA. А это РАЗНЫЕ языки, хоть VB .NET немного и понимает устаревшие конструкции
прошлых своих диалектов. Но понимает не всегда правильно.
Например, данная строка в VB .NET пишется так:
Dim m As String = ""
For i As Integer = 0 To UBound(a) ' или a.Count - 1
m &= Format(a(i).ToString, "0.0") & Space(2)
Next i
А вместо вот этого нагромождения
Dim i As Integer
Randomize()
ReDim x(19)
For i = 0 To 19
x(i) = -3 + 12 * Rnd()
Next i
можно написать вот так:
ReDim x(19)
Dim RND As New Random
For i As Integer = 0 To 19
x(i) = RND.Next(-5, 6) ' диапазон (-5 - 0 - +5)
Next i
Хотя для чего здесь динамический массив, мне непонятно пока.. .
Да это нюансы, скажите Вы, но вот эти нюансы и мешают.. .
Где то у Вас неправильное преобразование типов.
Отключите проверку типов и обязательное декларирование и посмотрите как будет вести себя программа
Option Strict On --> Option Strict Off
Option Explicit On --> Option Explicit Off
Очень трудно разбираться в чужом коде, особенно если он большой и без подробных ремарок
В этом коде не синяк, это "ушиб всей бабушки"...
Понимаете, Александра Халтурина,
Вы пытаетесь писать программу в Visual Basic .NET, но используете
конструкции, присущие VB 6.0 или VBA. А это РАЗНЫЕ языки, хоть VB .NET немного и понимает устаревшие конструкции
прошлых своих диалектов. Но понимает не всегда правильно.
Например, данная строка в VB .NET пишется так:
Dim m As String = ""
For i As Integer = 0 To UBound(a) ' или a.Count - 1
m &= Format(a(i).ToString, "0.0") & Space(2)
Next i
А вместо вот этого нагромождения
Dim i As Integer
Randomize()
ReDim x(19)
For i = 0 To 19
x(i) = -3 + 12 * Rnd()
Next i
можно написать вот так:
ReDim x(19)
Dim RND As New Random
For i As Integer = 0 To 19
x(i) = RND.Next(-5, 6) ' диапазон (-5 - 0 - +5)
Next i
Хотя для чего здесь динамический массив, мне непонятно пока.. .
Да это нюансы, скажите Вы, но вот эти нюансы и мешают.. .
Где то у Вас неправильное преобразование типов.
Отключите проверку типов и обязательное декларирование и посмотрите как будет вести себя программа
Option Strict On --> Option Strict Off
Option Explicit On --> Option Explicit Off
Очень трудно разбираться в чужом коде, особенно если он большой и без подробных ремарок
аааа! Срежьте мне ногти! Я такое не осилила! очень многа букаф ((((
Во истину "Грамотно составленное тз - 3/4 успеха".
Ругается на UBound(a), потому что в процедуре
Sub NewM(ByRef x() As Single, ByRef y() As Single, ByRef P As Single)
массив y() не заполняется, только x() сортируется. Да и P передавать незачем, он задается в процедуре. b также вызывает недоумение - ЗАЧЕМ? !
Предлагаю вот такой вариант исправления:
b = x.GetUpperBound(0)
ReDim y(b)
For i = 0 To 19
y(i) = x(i)
If (i Mod 2) = 1 Then ' 0 mod 2 =0 если что
P = P * x(i)
End If
Next i
А далее отсортировать не x(), а y() и не представленным на осмеяние общественности способом, а классическим пузырьком
А вообще в VB.Net проще предусмотреть проверку на отсутствие повторяющихся значений при заполнении массива и отсортировать его штатными средствами
Все остальное, кроме сортировки, работает. Но я бы на месте преподавателя захотел бы узнать как считалось произведение
Успехов!
Ругается на UBound(a), потому что в процедуре
Sub NewM(ByRef x() As Single, ByRef y() As Single, ByRef P As Single)
массив y() не заполняется, только x() сортируется. Да и P передавать незачем, он задается в процедуре. b также вызывает недоумение - ЗАЧЕМ? !
Предлагаю вот такой вариант исправления:
b = x.GetUpperBound(0)
ReDim y(b)
For i = 0 To 19
y(i) = x(i)
If (i Mod 2) = 1 Then ' 0 mod 2 =0 если что
P = P * x(i)
End If
Next i
А далее отсортировать не x(), а y() и не представленным на осмеяние общественности способом, а классическим пузырьком
А вообще в VB.Net проще предусмотреть проверку на отсутствие повторяющихся значений при заполнении массива и отсортировать его штатными средствами
Все остальное, кроме сортировки, работает. Но я бы на месте преподавателя захотел бы узнать как считалось произведение
Успехов!
Похожие вопросы
- Помогите исправить ошибку в программе (c++).
- Дан двумерный динамический массив, надо составить программу, которая меняет местами две любые строки
- Пожалуйста, помогите исправить ошибки в программах на С++!
- Помогите исправить ошибку в программе на Си
- Подскажите пожалуйста, какая ошибка в программе на Pascal ABC.NET?
- где у меня ошибка в программе? ( Паскаль не изучала, писала интуитивно :D )
- где ошибка в программе turbo pascal (фото внутри)
- помогите исправить ошибку в программе в Pascal
- Где ошибка в программе PascalABC.net
- Вылазит ошибка в программе с++. Помогите пожалуйста