Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 10:42   #1
kiska190593
Пользователь
 
Регистрация: 19.02.2013
Сообщений: 16
Печаль создать программу в excle 2007.

Прямоугольную матрицу A, состоящую из двух столбцов и N (вводится с клавиатуры) строк заполнить натуральными случайными двухзначными числами. Получить матрицу B, в первый столбец которой внести наибольшие общие делители соответствующих элементов матрицы A, во второй - наи-меньшие общие кратные тех же элементов. Провести тестирующий расчет для N=5.
должно быть как то так,но это не до конца!!!! До конца я не могу...Не доходит.....
Sub Двумерный_массив()
Sheets("Лист1").Select
Sheets("Лист1").Range("A1:X100").Cl ear

Dim a() As Byte, i As Byte, g As Byte, n As Byte
n = InputBox("Введите количество строк")
ReDim a(n, 2)


Randomize Timer
For i = 1 To n
For j = 1 To 2
a(i, j) = Rnd * 89 + 10
Next j
Next i

For i = 1 To n
For j = 1 To 2
Cells(i + 1, j + 1) = a(i, j)
d = a(i, 1): b = a(i, 2)
Cells(i + 1, 4) = d
Next j
Next i
End Sub

Function НОД(ByVal d As Long, ByVal b As Long) As Long
While d <> b
If d > b Then d = d - b Else b = b - d
Wend
НОД = d
End Function

Function НОК(ByVal d As Long, ByVal b As Long) As Long
Dim c As Long
If d > b Then c = d Else c = b
While (c Mod b) <> 0
c = c + d
Wend
НОК = c
End Function
kiska190593 вне форума Ответить с цитированием
Старый 11.03.2013, 11:41   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

А если немного схитрить? у вас же Excel в конце-концов

Код:
Sub Работа()
  Dim A(), B()
  
  N = InputBox("Введите количество строк:", "Ввод параметров", 5)
  Range("A1:B" & N).FormulaLocal = "=СЛУЧМЕЖДУ(0;99)"
  
  A = Range("A1:B" & N)
  Range("A1:B" & N) = A
  
  Range("D1").FormulaLocal = "=НОД(A1;B1)"
  Range("E1").FormulaLocal = "=НОК(A1;B1)"
  Range("D1:E1").AutoFill Range("D1:E" & N)
  
  B = Range("D1:E" & N)
End Sub
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 12:22   #3
kiska190593
Пользователь
 
Регистрация: 19.02.2013
Сообщений: 16
По умолчанию

Так то может и правильно,но у меня будут спрашивать продолжение того решения.....
kiska190593 вне форума Ответить с цитированием
Старый 11.03.2013, 12:35   #4
kiska190593
Пользователь
 
Регистрация: 19.02.2013
Сообщений: 16
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
А если немного схитрить? у вас же Excel в конце-концов

Код:
Sub Работа()
  Dim A(), B()
  
  N = InputBox("Введите количество строк:", "Ввод параметров", 5)
  Range("A1:B" & N).FormulaLocal = "=СЛУЧМЕЖДУ(0;99)"
  
  A = Range("A1:B" & N)
  Range("A1:B" & N) = A
  
  Range("D1").FormulaLocal = "=НОД(A1;B1)"
  Range("E1").FormulaLocal = "=НОК(A1;B1)"
  Range("D1:E1").AutoFill Range("D1:E" & N)
  
  B = Range("D1:E" & N)
End Sub
Вы не могли бы без наворотов,по простому как у меня доделать... Я вас очень прошу....
kiska190593 вне форума Ответить с цитированием
Старый 11.03.2013, 13:30   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Sub Работа()
  Dim A(), B()
  
  N = InputBox("Введите количество строк:", "Ввод параметров", 5)
  ReDim A(N, 2), B(N, 2)
  
  For I = 0 To 2 * N - 1: A(I \ 2, I Mod 2) = Int(Rnd * 89 + 10): Next
  
  For I = 0 To N - 1: B(I, 1) = НОД(A(I, 1), A(I, 2)): B(I, 2) = НОК(A(I, 1), A(I, 2)): Next
    
End Sub

Function НОД(A, B) As Integer
  Min = IIf(A < B, A, B): Max = IIf(A >= B, A, B)
  Res = 1
  If Max Mod Min > 0 Then
    Min = Min \ 2
    Do
      If Max Mod Min = 0 Then: Res = Min: Exit Do: End If
      Min = Min - 1
    Loop Until Min = 1
    НОД = Res
  Else
    НОД = Min
  End If
End Function

Function НОК(A, B) As Integer
  Min = IIf(A < B, A, B): Max = IIf(A >= B, A, B)
  I = 1
  If Max Mod Min = 0 Then
    Min = 1
  Else
    While I <= Min \ 2
      If Min Mod I = 0 And Max Mod I = 0 Then
        Min = Min \ I
        I = 2
      Else
        I = I + 1
      End If
    Wend
  End If
  НОК = Min * Max
End Function
я-то могу)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 13:39   #6
kiska190593
Пользователь
 
Регистрация: 19.02.2013
Сообщений: 16
По умолчанию

Спасибо большое!!!!
kiska190593 вне форума Ответить с цитированием
Старый 11.03.2013, 13:45   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Да особо не за что. Если бы я принимал такое решение, то была бы куча дополнительных вопросов) Но первый вариант намного лучше - там все просто и придраться можно только к методике решения. Да и работать будет быстрее.

upd. немного с индексами перемудрил)

Код:
Sub Работа()
  Dim A(), B()
  
  N = InputBox("Введите количество строк:", "Ввод параметров", 5)
  ReDim A(1 To N, 1 To 2), B(1 To N, 1 To 2)
  
  For I = 0 To 2 * N - 1: A(I \ 2 + 1, I Mod 2 + 1) = Int(Rnd * 89 + 10): Next
  
  For I = 1 To N: B(I, 1) = НОД(A(I, 1), A(I, 2)): B(I, 2) = НОК(A(I, 1), A(I, 2)): Next
    
End Sub
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 11.03.2013 в 13:56.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 14:12   #8
kiska190593
Пользователь
 
Регистрация: 19.02.2013
Сообщений: 16
По умолчанию

Программа почему то выдает ошибку,что-то видимо не так!!!!
kiska190593 вне форума Ответить с цитированием
Старый 11.03.2013, 14:25   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от kiska190593 Посмотреть сообщение
Программа почему то выдает ошибку,что-то видимо не так!!!!
Вставьте исправленный код - должно помочь. Или напишите что за ошибка и в какой строке возникает...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 14:53   #10
kiska190593
Пользователь
 
Регистрация: 19.02.2013
Сообщений: 16
По умолчанию

Function НОД(A, B) As Integer- вот эту строку выделяет желтым цветом.
И еще,вы не могли бы описать каждую строку,что там делается,а то я не понимаю,пыталась разобраться,ничего не вышло,видимо программирование это не мое,но преподаватели требуют,ничего не поделаешь.....
kiska190593 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать список значений в Excel 2007? Stem79 Microsoft Office Excel 8 29.01.2013 21:54
Составление цикла в VBA Excle thefair Microsoft Office Excel 10 16.05.2011 21:23
из Excle через Delphi в Mysql diman_never БД в Delphi 0 05.05.2011 09:50
Как создать элемент автотекста в редакторе Word 2007 Aelxbor777 Microsoft Office Word 4 26.12.2010 10:22
БД в ACCess!! Как создать БД в Акцессе 2007 форматом .mdb?? sting БД в Delphi 5 14.12.2008 19:36