Консультация № 178630
25.05.2010, 22:16
0.00 руб.
0 3 1
Дан массив Удалить элемент массива, больший заданного числа. Если таких элементов нет, выдать сообщение: «Элементы для удаления не найдены». Если таких элементов несколько, то удалить последний из найденных. Размерность массива и заданное число вводите с помощью оператора InputBox. Значения элементов массива определить датчиком случайных чисел. Для вывода скалярных результатов вычислений используйте оператор вывода MsgBox. Вывод массива выполнить в файл.

1.В работе необходимо выполнить алгоритмические задачи с использованием базовых типов данных и основных операторов языка программирования VBA.
2. Задачи прислать в виде файлов Word либо Excel, с кодом программы, выполненном в среде VBA соответствующего компонента Office.
3. В программах обязательно наличие комментариев, поясняющих основные алгоритмические шаги.

Обсуждение

Неизвестный
25.05.2010, 22:39
общий
Ананьев Рудольф Олегович:
Здравствуйте Рудольф Олегович.
Вы не удосужились задать вопрос или обратиться с просьбой к участникам форума
просто переписали текст учебного задания и выложили его на всеобщее обозрение.
шансы получить помощь на форуме у авторов подобных посланий равны нулю.
Евгений.
Неизвестный
26.05.2010, 00:07
общий
меня просили выложить задачи, я торопился, что уж успел написать...... просим участников форума помочь решить
давно
Модератор
137394
1850
26.05.2010, 21:30
общий
это ответ
Здравствуйте, Ананьев Рудольф Олегович. Вот код макроса. В нём надо указать пути к файлам.630.xls (33.5 кб)
Код:
Sub Z178630()

Const Diapaz = 1000 ' Диапазон определения значений элементов массива от 0 до ...
Const FileIn = "D:\FileAll.txt" ' Файл с исходным сгенерированным массивом
Const FileOut = "D:\FileOut.txt" ' Файл с выходным массивом

Dim N As Long ' Число элементов массива
Dim EMax As Double ' Максимальеое значение элемента

DecD = Mid(CStr(5 / 3), 2, 1) ' Разделитель дробной части

N = CDbl(InputBox("Введите число элементов в массиве" + vbCrLf + "(целое, больше нуля)"))

ReDim Mass(N - 1) As Double

NFileIn = FreeFile ' Определяем ссылочный номер исходного сгенерированного файла
Open FileIn For Output As #NFileIn ' Открываем файл

CN = Len(CStr(N))
Zero = String(CN, "0") ' Строчка нулей для выравнивания номера элемента в файле

MinMass = Diapaz
MaxMass = 0

Randomize ' Initialize random-number generator.

For i = 0 To N - 1 ' Заполняем исходный массив случайными числами
Mass(i) = Diapaz * Rnd ' Generate random value between 0 and 1000.
If MinMass > Mass(i) Then MinMass = Mass(i) ' Минимум элем массива
If MaxMass < Mass(i) Then MaxMass = Mass(i) ' Максимум элем массива

Print #NFileIn, Right(Zero + CStr(i), CN) + " " + CStr(Mass(i)) ' Записываем номер элемента и его значение в файл
Next
Close #NFileIn


Mes = "Кол-во элементов в массиве= " + CStr(N) + vbCrLf
Mes = Mes + "Минимальный элемент= " + CStr(MinMass) + vbCrLf
Mes = Mes + "Максимальный элемент= " + CStr(MaxMass) + vbCrLf
Mes = Mes + "Введите число, больше которого будет удалён последний обнаруженный элемент "

ib = InputBox(Mes) ' ввод данного в символьном виде
ib = Replace(Replace(ib, ",", DecD), ".", DecD) ' приводим вводимое в строке число к правильному разделителю
EMax = CDbl(ib)

ii = N
For i = N - 1 To 0 Step -1 ' C конца массива ищем номер элемента значение которого более заданного числа
If Mass(i) > EMax Then
ii = i
Exit For
End If
Next

If ii = N Then
Mes = "Элемент > " + CStr(EMax) + " не найден" + vbCrLf
ReDim MassOut(N - 1) As Double
Else
Mes = "Номер последнего элемента > " + CStr(EMax) + " равен " + CStr(ii) + vbCrLf + vbCrLf
ReDim MassOut(N - 2) As Double
End If


NFileOut = FreeFile ' Определяем ссылочный номер файла
Open FileOut For Output As #NFileOut ' Открываем файл

For i = 0 To N - 1 ' Формируем выходной массив без удаляемого элемента (если элемент не существует, массивы совпадают)
If i <> ii Then
If i < ii Then k = i Else k = i - 1
MassOut(k) = Mass(i)
Print #NFileOut, Right(Zero + CStr(k), CN) + " " + CStr(MassOut(k)) ' Записываем номер элемента и его значение в файл
End If
Next

Close #NFileOut

MsgBox Mes + "массивы записаны в файлы" + vbCrLf + " сгенерированный " + FileIn + vbCrLf + " обработанный " + FileOut

End Sub
5
спасибо ) все работает
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа