Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод матрицы в файл  (Прочитано 8174 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Wastyp
Новенький

ua
Offline Offline

« : 09-10-2010 06:17 » new

  У меня проблема. Не получается вывести вторую матрицу в файл, которая получилась после того, как поменялись по условию столбцы матрицы. Выводит матрицу, похожую на транспонированную,т.е.столбцы становятся строками. Подскажите, как мне решить эту проблему.

Задание программы:

В выбранной матрице столбец, содержащий максимальный элемент матрицы, поменять местами со столбцом, содержащим число, наиболее близкое к среднему значению элементов матрицы.
Вывести исходную и полученную матрицу в файл с помощью Print или Write.

Код программы:

Код:
Private Sub lab2()
Dim MAX, Cmax
Dim NB, Cnb
Dim MIN
Open "D:\TESTFILE.TXT" For Output As #1
Print #1, "Матрица"
MsgBox "Здравствуйте! Давайте начнем!", vbCritical, "Приветствие"

Cells.ClearContents
S = 0

metka:

n = InputBox("Введите количество столбцов и строк матрицы", "Ввод", 10)

If n > 10 Then
    MsgBox "Количество столбцов более 10 не обрабатываю!", 48, "Ошибка!"
    GoTo metka
End If

ReDim matr(1 To n, 1 To n)
 Randomize
 
For i = 1 To n
     For j = 1 To n
          matr(i, j) = Int(100 * Rnd + 10)
               
               Лист1.Cells(i + 1, j).Value = matr(i, j)
               Print #1, Tab, matr(i, j);
                  S = S + matr(i, j)
    Next j
    Print #1,
Next i

SA = S / n / n
MsgBox SA, 64, "Среднее арифметическое"

MAX = matr(1, 1)
Cmax = 1
NB = matr(1, 1)
Cnb = 1
MIN = Abs(matr(1, 1) - SA)

For i = 1 To n
     For j = 1 To n
     
     
     If MAX < matr(i, j) Then MAX = matr(i, j): Cmax = j
     
     If MIN > Abs(matr(i, j) - SA) Then NB = matr(i, j): Cnb = j: MIN = Abs(matr(i, j) - SA)
     
     Next j
Next i
Print #1, "Новая матрица"
For j = 1 To n


      For i = 1 To n
     
      Select Case j
     
      Case Cmax
      Лист1.Cells(i + n + 2, Cnb).Value = matr(i, j)
   
     
      Case Cnb
      Лист1.Cells(i + n + 2, Cmax).Value = matr(i, j)
     
      Case Else
      Лист1.Cells(i + n + 2, j).Value = matr(i, j)
      End Select
      Print #1, Tab, matr(i, j);
      Next i
      Print #1,
Next j
SA = "Максимальный элемент матрицы  " & MAX & vbCrLf _
& "находился в столбце № " & Cmax & vbCrLf _
& "Среднее арифметическое матрицы " & SA & vbCrLf _
& "Наиболее приближённый к среднему элемент  " & NB & vbCrLf _
& "находился в столбце № " & Cnb
 
MsgBox SA, 64, "Полученные результаты"
MsgBox "До свидания!", vbCritical, "Прощание"
Close #1
End Sub
« Последнее редактирование: 11-10-2010 04:38 от Алексей1153++ » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 11-10-2010 04:33 » 

ну если матрица выводится транспортированной, то просто поменяйте местами i и j в куске вывода

Код:
For i = 1 To n


      For j = 1 To n
     
      Select Case j
     
      Case Cmax
      Лист1.Cells(i + n + 2, Cnb).Value = matr(i, j)
   
     
      Case Cnb
      Лист1.Cells(i + n + 2, Cmax).Value = matr(i, j)
     
      Case Else
      Лист1.Cells(i + n + 2, j).Value = matr(i, j)
      End Select
      Print #1, Tab, matr(i, j);
      Next j
      Print #1,
Next i
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines