Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Flame44
3 / 0 / 1
Регистрация: 09.03.2015
Сообщений: 6
1

Сформировать двумерный массив по правилу

16.03.2015, 14:46. Просмотров 1226. Ответов 5
Метки нет (Все метки)

VS(Basic)
Сформируйте двумерный массив N(5,7) по правилу:
N i,j=|i+5j, если j<=3
|7i+2(j-1),если i>3
Вставьте после строки с заданным номером k (0<= k <=5) строку из нулей (значение k вводится с клавиатуры).
Помогите пожалуйста.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2015, 14:46
Ответы с готовыми решениями:

Сформировать двумерный массив по правилу
Сформируйте двумерный массив M(7,7) по правилу: M (i,j) = -5+10×r , где r – случайное число...

Сформировать двумерный массив по правилу
Сформировать двумерный массив X(4,4) по правилу: Xij = i/(i+j). Вставьте столбец из единиц перед...

Сформируйте двумерный массив по правилу
Сформируйте двумерный массив М(4,5) по правилу: Mi,j = -30 + 60*r, где r - случайное число из...

Сформировать двумерный массив
Сформируйте двумерный массив K(10,12) из случайных чисел, принадлежащих отрезку . Определите в...

Сформировать произвольно двумерный массив
Здравствуйте. Помогите пожалуйста с заданием: Сформировать произвольно двумерный массив L(9,9)....

5
Памирыч
Почетный модератор
21158 / 8887 / 1080
Регистрация: 11.04.2010
Сообщений: 11,012
16.03.2015, 19:18 2
На каком этапе застряли?
1
Flame44
3 / 0 / 1
Регистрация: 09.03.2015
Сообщений: 6
06.04.2015, 11:15  [ТС] 3
Не могу понять как вставить строку с заданным значением k.
0
Yury Komar
Модератор
Эксперт .NET
2958 / 2683 / 431
Регистрация: 27.01.2014
Сообщений: 4,952
06.04.2015, 15:23 4
Цитата Сообщение от Flame44 Посмотреть сообщение
k (0<= k <=5)
dim k as integer = inputbox("Введите значение k:")
if k >= 0 and k <=5 then msgbox "Выполнили условие 0<=k<=5" else msgbox "Условие 0<=k<=5 не выполнено"


а вот тут не понятно
Цитата Сообщение от Flame44 Посмотреть сообщение
строку из нулей
1
Flame44
3 / 0 / 1
Регистрация: 09.03.2015
Сообщений: 6
13.04.2015, 17:53  [ТС] 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Спасибо я уже написал программу.


vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Option Strict On
Option Explicit On
Imports System.Math
Public Class Form1
    Sub vvod(ByRef N(,) As Integer, ByVal m As Integer, ByVal l As Integer)
        Dim i, j As Integer
        For i = 0 To m
            For j = 0 To l
                If i <= 3 Then
                    N(i, j) = i + 5 * j
                Else
                    N(i, j) = 7 * i + 2 * (j - 1)
                End If
            Next
        Next
    End Sub
    Sub vivod(ByRef N(,) As Integer, ByRef LB As ListBox, ByVal m As Integer, ByVal l As Integer)
        Dim i, j As Integer
        Dim z As String
        For i = 0 To m
            z = " "
            For j = 0 To l
                z = z + Format(N(i, j), "0") + Space(4)
            Next j
            LB.Items.Add(z)
        Next i
    End Sub
    Sub obnul(ByRef N(,) As Integer, ByVal k As Integer, ByVal m As Integer, ByVal l As Integer)
        Dim j, g As Integer
        For j = 0 To l
            g = 0
            Do While g < (m - k - 1)
                N(m - g, j) = N(m - 1 - g, j)
                g = g + 1
            Loop
            N(k + 1, j) = 0
        Next
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim m, l As Integer
        m = CInt(TextBox2.Text) + 1
        l = CInt(TextBox3.Text)
        Dim N(m, l), k As Integer
        ListBox1.Items.Clear()
        ListBox2.Items.Clear()
        vvod(N, m, l)
        vivod(N, ListBox1, m - 1, l)
        k = CInt(TextBox1.Text)
        obnul(N, k, m, l)
        vivod(N, ListBox2, m, l)
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        End
    End Sub
End Class
0
Замабувараев
376 / 380 / 96
Регистрация: 18.12.2014
Сообщений: 768
Записей в блоге: 1
14.04.2015, 22:36 6
Flame44, в первую очередь нужно прекратить использовать эвфемизмы в виде транслитерации Vvod, Kolichestvo, Obnulenie, Massiv. Нужно сразу писать по‐русски Ввод, Количество, Обнуление, Массив или переводить на английский.
Переменные нужно объявлять в месте использования, тем более счётчики в циклах. Объявлять переменные одним блоком в начале функции — это антипаттерн.
Конструкцию Do While … Loop нужно по возможности заменять на Do … Loop While, то есть проверку условия ставить после слова Loop. Это позволяет избавиться от одного лишнего прыжка.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Sub Ввод(ByRef N(,) As Integer, ByVal m As Integer, ByVal l As Integer)
        For i As Integer = 0 To m
            For j As Integer = 0 To l
                If i <= 3 Then
                    N(i, j) = i + 5 * j
                Else
                    N(i, j) = 7 * i + 2 * (j - 1)
                End If
            Next
        Next
    End Sub
    Sub Обнуление(ByRef N(,) As Integer, ByVal k As Integer, ByVal m As Integer, ByVal l As Integer)
        For j As Integer = 0 To l
            Dim g As Integer
            Do
                N(m - g, j) = N(m - 1 - g, j)
                g += 1 
            Loop While g < (m - k - 1)
            N(k + 1, j) = 0
        Next
    End Sub
Здесь объявляется переменная g и затем сразу же обнуляется, это лишнее, так как в бейсике целочисленным значениям по умолчанию присваивается ноль.
Конструкция g += 1 короче, чем g = g + 1.
И вообще этот цикл Do Loop лучше заменить на For, так как выражение (m - k - 1) внутри функции не меняется.
vb.net
1
2
3
4
5
6
7
8
    Sub Обнуление(ByRef N(,) As Integer, ByVal k As Integer, ByVal m As Integer, ByVal l As Integer)
        For j As Integer = 0 To l
            For g As Integer = 0 To (m - k - 1) - 1
                N(m - g, j) = N(m - 1 - g, j)
            Next
            N(k + 1, j) = 0
        Next
    End Sub
Не нужно использовать объединение строк в цикле типа z = z + "что‐то", это удар по производительности. Для объединения строк в цикле замечательно подходит класс StringBuilder, доступный после импортирования System.Text.
vb.net
1
2
3
4
5
6
7
8
9
    Sub Вывод(ByRef N(,) As Integer, ByRef LB As ListBox, ByVal m As Integer, ByVal l As Integer)
        For i As Integer = 0 To m
            Dim z As New StringBuilder
            For j As Integer = 0 To l
                z.Append(Format(N(i, j), "0") & Space(4))
            Next j
            LB.Items.Add(z.ToString)
        Next i
    End Sub
2
14.04.2015, 22:36
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2015, 22:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сформировать матрицу по правилу
Как делать?

Сформировать двумерный массив по заданному правилу правилу
Добрый день, помогите пожалуйста. Дана целочисленная матрица n*m. Написать программу, формирующую...

Сформировать двумерный массив по правилу
Получить массив D( MxN), М&lt;=10, N&lt;=20 по формуле DI,J = max(AI,J, BI,J+CI,J). Вывести массив D на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.