﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / Visual Basic  / решила интересную задачку, но её надо немного подредактировать / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Wed, 03 Dec 2008 23:04:28 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: решила интересную задачку, но её надо немного подредактировать</title><link>http://relib.com/forums/Topic912127-1-1.aspx</link><description>lapulechka, большая просьба, в будущем указывать тему сообщения, а не оставлять ее пустой.</description><pubDate>Mon, 02 Apr 2007 12:35:17 GMT</pubDate><dc:creator>bazile</dc:creator></item><item><title>решила интересную задачку, но её надо немного подредактировать</title><link>http://relib.com/forums/Topic912127-1-1.aspx</link><description>Задачка была такая:&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 30pt"&gt;&lt;FONT face="Times New Roman" color=#000000 size=3&gt;Найти наименьшее общее кратное 3 заданных натуральных чисел.&lt;/FONT&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 30pt"&gt;&lt;FONT face="Times New Roman" color=#000000 size=3&gt;Надо переделать без массивов и чтобы эти 3 числа можно было вводить в Text Box. &lt;/FONT&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 30pt"&gt;&lt;FONT face="Times New Roman" color=#000000 size=3&gt;А я решила вот так:&lt;/FONT&gt;&lt;/P&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: Verdana"&gt;Option Base 1 &lt;BR&gt;Option Explicit &lt;BR&gt;'определение трёх глобальных динамических массивов, в которых будут храниться множители &lt;BR&gt;Dim tA() As Integer, tB() As Integer, tC() As Integer &lt;BR&gt; &lt;BR&gt;Private Sub Form_Load() &lt;BR&gt;    'Найти наименьшее общее кратное 3 заданных натуральных чисел. &lt;BR&gt;    'Integer -- -32,768 .. 32,767 &lt;BR&gt;    'Currency (scaled integer) -- -922,337,203,685,477.5808 .. 922,337,203,685,477.5807 &lt;BR&gt;    Dim a As Integer, b As Integer, c As Integer, i As Integer, s As Currency &lt;BR&gt;     &lt;BR&gt;    'инициализация переменных... Задаём 3 натуральных числа &lt;BR&gt;    a = 7 &lt;BR&gt;    b = 17 &lt;BR&gt;    c = 34 &lt;BR&gt;     &lt;BR&gt;    'начинается поиск множителей НОК трёх чисел &lt;BR&gt;    Call srcNOK(a, b, c) &lt;BR&gt;     &lt;BR&gt;    'перемножение найденных множителей &lt;BR&gt;    s = 1 &lt;BR&gt;     &lt;BR&gt;    For i = 1 To UBound(tA) &lt;BR&gt;     &lt;BR&gt;        s = s * tA(i) &lt;BR&gt;     &lt;BR&gt;    Next i &lt;BR&gt;     &lt;BR&gt;    'Form1.Hide &lt;BR&gt;     &lt;BR&gt;    'результат перемножения выводится на экран &lt;BR&gt;    MsgBox s, vbOKOnly + vbInformation, "Результат" &lt;BR&gt;     &lt;BR&gt;    'выход из программы &lt;BR&gt;    End &lt;BR&gt; &lt;BR&gt;End Sub &lt;BR&gt; &lt;BR&gt;Sub srcNOK(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer) &lt;BR&gt; &lt;BR&gt;    'проверка исходных данных &lt;BR&gt;    'если числа не натуральные, выдаётся сообщение об ошибке и производится выход из программы &lt;BR&gt;    If (a &amp;lt; 1) Or (b &amp;lt; 1) Or (c &amp;lt; 1) Then MsgBox "Wrong values": Exit Sub &lt;BR&gt;     &lt;BR&gt;    'инициализация массивов &lt;BR&gt;    ReDim tA(1): tA(1) = 1 &lt;BR&gt;    ReDim tB(1): tB(1) = 1 &lt;BR&gt;    ReDim tC(1): tC(1) = 1 &lt;BR&gt;     &lt;BR&gt;    'заполнение массивов множителями соответствующих чисел &lt;BR&gt;    Call fillArray(a, tA) &lt;BR&gt;    Call fillArray(b, tB) &lt;BR&gt;    Call fillArray(c, tC) &lt;BR&gt;     &lt;BR&gt;    'сравнение множителей чисел a и b &lt;BR&gt;    'результат -- множители НОК -- будет сохранён в массиве tA &lt;BR&gt;    Call cmpArr(tA, tB) &lt;BR&gt;    'сортировка массива tA &lt;BR&gt;    Call sortArr(tA) &lt;BR&gt;    'сравнение промежуточного результата (массив tA) с массивом множителей числа c &lt;BR&gt;    Call cmpArr(tA, tC) &lt;BR&gt; &lt;BR&gt;End Sub &lt;BR&gt; &lt;BR&gt;'ищутся множители числа &lt;BR&gt;Sub fillArray(ByVal n As Integer, ByRef tN() As Integer) &lt;BR&gt;    Dim i As Integer, k As Integer &lt;BR&gt;     &lt;BR&gt;    i = 2 &lt;BR&gt;    k = 2 &lt;BR&gt;     &lt;BR&gt;    Do While (n &amp;gt; 1) And (i &amp;lt;= n) &lt;BR&gt;     &lt;BR&gt;        If (n Mod i) = 0 Then &lt;BR&gt;         &lt;BR&gt;            'если число без остатка делится на текущее значение &lt;BR&gt;            'целочисленной переменной i, &lt;BR&gt;            'значит i -- один из множителей числа &lt;BR&gt;            ReDim Preserve tN(k) &lt;BR&gt;            tN(k) = i &lt;BR&gt;            k = k + 1 &lt;BR&gt;             &lt;BR&gt;            'далее проверяется результат деления числа на множитель &lt;BR&gt;            n = n / i &lt;BR&gt;             &lt;BR&gt;            'целочисленная переменная i инициализируется заново &lt;BR&gt;            i = 2 &lt;BR&gt;             &lt;BR&gt;        Else &lt;BR&gt;         &lt;BR&gt;            'если число не делится на i, переходим к следующему i &lt;BR&gt;            i = i + 1 &lt;BR&gt;         &lt;BR&gt;        End If &lt;BR&gt;     &lt;BR&gt;    Loop &lt;BR&gt; &lt;BR&gt;End Sub &lt;BR&gt; &lt;BR&gt;'сравнение массивов &lt;BR&gt;Sub cmpArr(ByRef tN1() As Integer, ByRef tN2() As Integer) &lt;BR&gt;    Dim i1 As Integer, i2 As Integer, k As Integer, j As Integer &lt;BR&gt;     &lt;BR&gt;    'инициализация индексов массивов &lt;BR&gt;    i1 = 1 &lt;BR&gt;    i2 = 1 &lt;BR&gt;     &lt;BR&gt;    Do While (i1 &amp;lt;= UBound(tN1)) And (i2 &amp;lt;= UBound(tN2)) &lt;BR&gt;     &lt;BR&gt;        'если элементы массивов (множители) одинаковы, &lt;BR&gt;        'элемент второго массива зануляется, &lt;BR&gt;        'производится переход к следующим элементам обоих массивов &lt;BR&gt;        If tN1(i1) = tN2(i2) Then &lt;BR&gt;         &lt;BR&gt;            i1 = i1 + 1 &lt;BR&gt;            tN2(i2) = 0 &lt;BR&gt;            i2 = i2 + 1 &lt;BR&gt;         &lt;BR&gt;        'если текущий элемент первого массива больше текущего элемента &lt;BR&gt;        'второго массива, то производится переход к следующему элементу &lt;BR&gt;        'второго массива &lt;BR&gt;        ElseIf tN1(i1) &amp;gt; tN2(i2) Then &lt;BR&gt;         &lt;BR&gt;            i2 = i2 + 1 &lt;BR&gt;         &lt;BR&gt;        'если текущий элемент второго массива больше текущего элемента &lt;BR&gt;        'первого массива, то производится переход к следующему элементу &lt;BR&gt;        'первого массива &lt;BR&gt;        Else &lt;BR&gt;         &lt;BR&gt;            i1 = i1 + 1 &lt;BR&gt;         &lt;BR&gt;        End If &lt;BR&gt;     &lt;BR&gt;    Loop &lt;BR&gt;     &lt;BR&gt;    i1 = UBound(tN1) &lt;BR&gt;    k = 0 &lt;BR&gt;     &lt;BR&gt;    'проверяется число ненулевых элементов второго массива &lt;BR&gt;    For i2 = 1 To UBound(tN2) &lt;BR&gt;     &lt;BR&gt;        If tN2(i2) &amp;gt; 0 Then k = k + 1 &lt;BR&gt;     &lt;BR&gt;    Next i2 &lt;BR&gt;     &lt;BR&gt;    'если во втором массиве есть ненулевые элементы, то &lt;BR&gt;    'переопределяется размер первого массива (увеличивается -- &lt;BR&gt;    'ровно на количество ненулевых элементов второго массива) &lt;BR&gt;    'и ненулевые элементы второго массива добавляются в конец первого массива &lt;BR&gt;    '(во втором массиве занулены элементы/множители, которые уже были в первом массиве) &lt;BR&gt;    If k &amp;gt; 0 Then &lt;BR&gt;         &lt;BR&gt;        ReDim Preserve tN1(i1 + k) &lt;BR&gt;         &lt;BR&gt;        j = 1 &lt;BR&gt;        i2 = 1 &lt;BR&gt;         &lt;BR&gt;        For i2 = 1 To UBound(tN2) &lt;BR&gt;         &lt;BR&gt;            If tN2(i2) &amp;gt; 0 Then &lt;BR&gt;             &lt;BR&gt;                tN1(i1 + j) = tN2(i2) &lt;BR&gt;                j = j + 1 &lt;BR&gt;             &lt;BR&gt;            End If &lt;BR&gt;         &lt;BR&gt;        Next i2 &lt;BR&gt;         &lt;BR&gt;    End If &lt;BR&gt; &lt;BR&gt;End Sub &lt;BR&gt; &lt;BR&gt;'сортировка массивов &lt;BR&gt;Sub sortArr(ByRef tN() As Integer) &lt;BR&gt;    Dim i As Integer, j As Integer, k As Integer &lt;BR&gt;     &lt;BR&gt;    'если в массиве всего один элемент -- сортировка не производится &lt;BR&gt;    '(выход из процедуры сортировки) &lt;BR&gt;    If UBound(tN) = 1 Then Exit Sub &lt;BR&gt;     &lt;BR&gt;    For i = 2 To UBound(tN) &lt;BR&gt;     &lt;BR&gt;        For j = 1 To i - 1 &lt;BR&gt;         &lt;BR&gt;            If tN(j) &amp;gt; tN(i) Then &lt;BR&gt;                 &lt;BR&gt;                k = tN(i) &lt;BR&gt;                tN(i) = tN(j) &lt;BR&gt;                tN(j) = k &lt;BR&gt;                 &lt;BR&gt;            End If &lt;BR&gt;         &lt;BR&gt;        Next j &lt;BR&gt;     &lt;BR&gt;    Next i &lt;BR&gt; &lt;BR&gt;End Sub&lt;/SPAN&gt;</description><pubDate>Mon, 02 Apr 2007 10:46:51 GMT</pubDate><dc:creator>lapulechka</dc:creator></item></channel></rss>