Автор Тема: Помогите решить задачку в VB на массивы  (Прочитано 3743 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SvetlanaG

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Переслать из массива А в массив В элементы, расположенные между максимальным и минимальным значениями элементов массива А. Не понимаю даже с чего начать, подскажите хотябы алгоритм решения этой задачи. В программировании я 0))), а в пятницу утром уже нужно решение!
« Последнее редактирование: 19 Мая 2012, 10:17:48 от Asix »

Оффлайн ki

  • Ветеран
  • *****
  • Сообщений: 668
    • Просмотр профиля
не знаю как на VB а на великом и могучем(русском  :)) это будет примерно так:
Изучайте сперва ветвления и цикл, например for, массивы(судя по всему одномерные)...
далее ищете номер наименьшего элемента и наибольшего..сравниваете их и присваиваете нужные элементы массива А массиву B.
на паскале примерно так:
min=A[0];max:=A[0];
for i:=1 to n-1 do
  begin
    if A<min then begin min:=A;minnum:=i;
    if A>max then begin max:=A;maxnum:=i;
  end;
j:=0;
If minnum<maxnum then
for i:=minnum to maxnum do begin B[j]:=A;j:=j+1; end
else
for i:=maxnum to minnum do begin B[j]:=A;j:=j+1; end;


Оффлайн SvetlanaG

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Спасибо большое!

Оффлайн wital1984

  • Постоялец
  • ***
  • Сообщений: 189
    • Просмотр профиля
не знаю как на VB а на великом и могучем(русском  :)) это будет примерно так:
Изучайте сперва ветвления и цикл, например for, массивы(судя по всему одномерные)...
далее ищете номер наименьшего элемента и наибольшего..сравниваете их и присваиваете нужные элементы массива А массиву B.
на паскале примерно так:
min=A[0];max:=A[0];
for i:=1 to n-1 do
  begin
    if A<min then begin min:=A;minnum:=i;
    if A>max then begin max:=A;maxnum:=i;
  end;
j:=0;
If minnum<maxnum then
for i:=minnum to maxnum do begin B[j]:=A;j:=j+1; end
else
for i:=maxnum to minnum do begin B[j]:=A;j:=j+1; end;
Правда в коде есть пару ошибок, например почему первый цикл до n-1 а не до n? Также не хватает 2-х end. И что делать в случае равенства всех элементов массива? по логике, в массив В ничего не должно передаваться, а в вашем коде это не так.

Оффлайн ki

  • Ветеран
  • *****
  • Сообщений: 668
    • Просмотр профиля
не до n, т.к. нумерация с 0, количество элементов n...
по поводу равенства всех элементов отдельная история, также как и с наличием нескольких максимальных и минимальных..можно вставить все эти проверки, но здесь, имхо, они ни к чему и только увеличат код...продукт-то не коммерческий)

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
На просто Бейсике 
INPUT N  ввод количества чисел
DIM A(N)  объявление массива
FOR I=1 TO N  цикл
READ A (N)  ввод чисел
NEXT I    конец цикла
RA=A(1): MA=1    для максимума
RI=A(1): MI=1   для минимума
FOR I=2 TO N  поиск макс и мин
IF A(I)>RA THEN GOSUB 100  выбран новый макс
IF A(I)<RI THEN GO TO 200   выбран новый мин
NEXT I   конец цикла
K=ABS(RA-RI)+1   количество чисел
L=RA   может это начало
IF RA>RI THEN L=RI   изменение начала
DIM B(K)  объявление массива
FOR J=L TO L+K-1    цикл
B(J-L+1)=A(J)   перекачка чисел
NEXT J  конец
END    конец прогр
100 RA=A(I): MA=I    новый макс и его номер
RETURN
200 RI=A(I): MI=I   новый мин и его номер
RETURN
DATA 4, 5, -4, ..., 34   данные
Ваша доработка:
Может сделать привязку к VB, числа генерировать датчиком.
В таком варианте ловит первый максимум и первый минимум.
Может захочется как-то иначе - переделайте.

Оффлайн SvetlanaG

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Огромное спасибо Selyd, буду сейчас разбираться, а то я последний раз сталкивалась с программированием лет 8 назад и то с паскалем)))!

Оффлайн SvetlanaG

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Я попробовала написать эту программку сама немного по другому, так как то что написал Selyd  у меня почему-то не работает, может я написала коряво, но у меня формирует массив и находит макс и мин значения, вот только перебросить элементы из А в В никак не могу!
CLS
INPUT "vvedite dlinny massiva"; k
PRINT "massiv A = ";
DIM A(k)
FOR T = 1 TO k
A(T) = INT(RND * 10)
PRINT A(T); " ";
NEXT T

RA = A(1)
FOR T = 2 TO k
IF RA < A(T) THEN RA = A(T)
NEXT T

PRINT
PRINT "maximum ="; RA

RI = A(1)
FOR T = 2 TO k
IF RI > A(T) THEN RI = A(T)
NEXT T

PRINT
PRINT "minimum="; RI

L = RA
IF RA > RI THEN L = RI
PRINT "massiv B=";
DIM B(M)
FOR J = L TO L + M - 1
B(J - L) = A(J)
PRINT B(J); " ";
NEXT J

END

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
RI и RA у Вас минимум и максимум, а нужны их номера.
Мой текст проверю и отвечу.

Моя ошибка
L=MA   может это начало
IF MA>MI THEN L=MI   изменение начала
« Последнее редактирование: 18 Мая 2012, 09:52:24 от Selyd »