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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2009, 10:49   #1
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию QBasic. Массив

Опишите алгоритм подсчёта количества элементов, равных минимальному, в целочисленном массиве из 30 элемнтов.

Моё решение:

DIM A(30) AS INTEGER
DIM I, K,MINE AS INTEGER
RANDOMIZE TIMER
FOR I=1 TO 30
A(I)=INT(RND*100)
PRINT USING "###"; A(I);
NEXT I
FOR I=1 TO 30
IF A(I)<A(I+1) THEN MINE=A(I)
NEXT I
PRINT MINE
NEXT I=10 TO 30
IF I=MINE THEN K=K+1
NEXT I
PRINT K

Помогите, пожалуйста. Незнаю правильно, или нет.
andronova вне форума Ответить с цитированием
Старый 24.02.2009, 12:11   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Итак, ошибки:
Код:
A(I)=INT(RND*100)
Не ошибка, но лучше умножать на что-нибудь поменьше (например, на 20), иначе увидеть k>1 будет сложно.
Код:
IF A(I)<A(I+1) THEN MINE=A(I)
Сразу две ошибки:
Во-первых, нужно сравнивать с MINE:
Код:
 IF A(I) < MINE THEN
Во-вторых, все конструкции IF нужно закрывать: END IF
Код:
PRINT MINE
Перед этим хорошо бы добавить перенос строки, иначе выведет вперемешку с числами массива.
Код:
NEXT I=10 TO 30
IF I=MINE THEN K=K+1
NEXT I
Вообще нечто странное ) Хотя, возможно, вы просто опечатались.

И еще в конце программы принято ставить END (хоть и не обязательно).

Все исправил, массив вывожу в несколько строк (для лучшей читаемости).

Код:
DIM A(30) AS INTEGER
DIM I, K, MINE AS INTEGER
RANDOMIZE TIMER
CLS
FOR I = 1 TO 30
 A(I) = INT(RND * 20)
 PRINT USING "####"; A(I);
 IF I MOD 10 = 0 THEN
  PRINT
  END IF
NEXT I

MINE = A(1)
FOR I = 1 TO 30
 IF A(I) < MINE THEN
  MINE = A(I)
 END IF
NEXT I

PRINT
PRINT USING "MINE= ##"; MINE

K = 0
FOR I = 1 TO 30
 IF A(I) = MINE THEN
  K = K + 1
 END IF
NEXT I
PRINT USING "K=#"; K

END
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.02.2009, 13:06   #3
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию

Спасибо! Рада, что хоть что-то получается.
andronova вне форума Ответить с цитированием
Старый 24.02.2009, 17:13   #4
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию

Проверьте ещё, пожалуйста!

Дан целочисленный прямоугольный массив 6х10. Опишите алгоритм вычисления суммы минимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке такой элемент единственный.

DIM A(6,10) AS INTEGER
DIM I, J, MINI, S AS INTEGER
RANDOMIZE TIMER
CLS
FOR I=1 TO 6
FOR J=1 TO 10
A(I,J)=INT(RND*20)
PRINT USING "####"; A(I,J);
NEXT J
NEXT I
S=0
FOR I=1 TO 6
MINI=A(I,1)
FOR J=1 TO 10
IF MINI>A(I,J) THEN
MINI=A(I,J)
END IF
NEXT J
PRINT USING "MINI=#";MINI
S=S+MINI
NEXT I
PRINT USING "S=#";S
END
andronova вне форума Ответить с цитированием
Старый 24.02.2009, 17:21   #5
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию

И ещё одна.

В целочисленном массиве из 30 элементов найти среднее значение чётных чисел, проверяя, что есть хотя бы одно целое число.

DIM A(30) AS INTEGER
DIM I, S, K AS INTEGER
RANDOMIZE TIMER
CLS
FOR I=1 TO 30
A(I)=INT(RND*30)
NEXT I
S=0
K=0
FOR I=1 TO 30
IF A(I) MOD 2 = 0 THEN
S=S+A(I)
K=K+1
END IF
NEXT I
PRINT
PRINT USING "K=#";K
PRINT USING "S=#";S
SR=S/K
PRINT USING "SR=#";SR
END

Вроде получается, но среднее значение SR он выводит округлённым целым числом. Его как-то надо объявить, наверно. А я незнаю.
Потом ещё - а вдруг там не окажется ни одного чётного числа. Это же тоже как-то надо вывести. Тоже не пойму как.
Очень жду вашей помощи.
andronova вне форума Ответить с цитированием
Старый 24.02.2009, 17:37   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В первой все в порядке. Только добавьте при заполнении массива:
Код:
A(I,J)=INT(RND*20)
PRINT USING "####"; A(I,J);
NEXT J
PRINT
NEXT I
Иначе матрица выводится одной строкой.
=====================

Вторая:
Для среднего значения нужна переменная вещественного типа (DOUBLE или SINGLE).
Код:
DIM a(30) AS INTEGER
DIM i, S, k AS INTEGER
DIM sred AS DOUBLE
RANDOMIZE TIMER
CLS
FOR i = 1 TO 30
 a(i) = INT(RND * 10) + 1
 PRINT USING "####"; a(i);
 IF i MOD 10 = 0 THEN
 PRINT
 END IF
NEXT i
S = 0
k = 0
FOR i = 1 TO 30
 IF a(i) MOD 2 = 0 THEN
  S = S + a(i)
  k = k + 1
 END IF
NEXT i
PRINT
PRINT USING "K=##"; k
PRINT USING "S=##"; S
' А вот тут добавим проверку
IF k = 0 THEN
 PRINT "Net chetnyh chisel"
ELSE
sred = S / k
PRINT USING "Sred=##.###"; sred
END IF
END
Непонятна вот эта фраза в условии:
Цитата:
проверяя, что есть хотя бы одно целое число.
Ведь четность - характеристика целого числа.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.02.2009, 17:40   #7
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию

Ошиблась, конечно, чётное число!!!
andronova вне форума Ответить с цитированием
Старый 24.02.2009, 17:44   #8
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию

И ещё, не очень понимаю зачем это:

IF i MOD 10 = 0 THEN
PRINT
END IF
andronova вне форума Ответить с цитированием
Старый 24.02.2009, 17:46   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В таком случае, все в порядке.
Замечу еще, что переменная SR в вашем коде не была объявлена.

Цитата:
И ещё, не очень понимаю зачем это:
Т.к. массив длинный (30 чисел), хорошо бы его вывести в несколько строк.
Здесь после каждых 10 элементов переводится строка.
Это не обязательно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.02.2009, 17:48   #10
andronova
Пользователь
 
Аватар для andronova
 
Регистрация: 17.02.2009
Сообщений: 21
По умолчанию

Спасибо большое! К сожалению не могу оставить Вам отзыв. Ведь мне только Вы помогаете.
Ещё раз спасибо!
andronova вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одномерный массив в QBasic...HELP!!! kockroach Помощь студентам 10 05.05.2011 19:26
Массив в QBasic andronova Помощь студентам 5 18.02.2009 16:30
двумерный массив qbasic vinitar Помощь студентам 5 06.02.2009 15:51
QBasic Одномерный массив Алексей08- Помощь студентам 6 16.05.2008 03:05
Qbasic двумерный массив Raido Помощь студентам 8 02.02.2008 17:02