Другие языки программирования и технологии

Олимпиадные задачи по BASIC 4.5 ПОМОГИТЕ !!!

Для числа подсчитываются сумма его цифр. Если результат превышает 9, то для результата снова подсчитывается сумма цифр и так далее, пока результат не станет меньше 10. Например, если исходное число 3247598, то результат 2. Мое решение СLS DEFLNG M-N,P,S INPUT "N=";N IF N>9.999999999999999D+48 THEN END M=N S=0 WHILE M<> 0 P=M MOD 10 S=S+P M=M\10 PRINT "S=";S; WEND PRINT"P="; "S=";S; PRINT ЗДЕСЬ ВСЕ ВЕРНО ! СУММА ПОДСЧИТЫВАЕТСЯ ПРАВИЛЬНО. Часть 2 ЭТОЙ ЗАДАЧИ WHILE S<>10 M=S: P=0 S1=0 WHILE M<>0 P=M MOD 10 S1=S1+P M=M\10 PRINT S1 PRINT S1 WEND PRINT"SUMMA=";S1 WEND END ВОТ ЗДЕСЬ ОШИБКА ОН ПЕРЕСКАКИВАЕТ ПОСЛЕДНЮЮ ЦИФРУ. У числа 3247598 результат 11 а не 2. каркас менять нельзя, надо только найти ошибку. (ОЧЕНЬ ВАЖНО РЕШИТЬ ЭТУ ЗАДАЧУ) ______________________________ Две другие задачи , Задача 2 В прямоугольной таблице в n строк и m столбцов (n и m не превосходят 10) подсчитать число возможных маршрутов перехода из левой верхний клетки в правую нижнюю, если разрешены перемещения вниз и вправо. Например, если n=3, m=4 , то число возможных маршрутов K=10. Задача 3 В массиве целых чисел(не более 100 элементов), не превосходящих по модулю 1000 и среди которых нет равных, найти порядковый номер третьего по величине числа. Например: Число чисел 10 1е число 1 2 число 6 3 число 7 4 число -51 5 число -10 6 число -16 7 число 71 8 число 53 9 число 11 10 число 13 ОТВЕТ третье по величине число имеет порядковый номер 9.
3-я задача (MS QBASIC 4.5):
CLS
CONST K = 100, P = 3
DIM M$(K), M(K)
metka1:
PRINT "Vvedite 4islo elementov N<="; K; ": ";
INPUT N
IF N > K OR N < 1 THEN GOTO metka1
FOR I = 0 TO N - 1
metka2:
PRINT "M["; I + 1; "] = ";
INPUT M(I)
M$(I) = STR$(M(I))
IF ABS(M(I)) > 1000 THEN GOTO metka2
NEXT I
metka3:
FOR I = 0 TO N - 1
MIN = M(I)
IF M$(I) <> "X" THEN GOTO metka4
NEXT I
metka4:
FOR I = 1 TO N - 1
IF M$(I) <> "X" THEN IF M(I) < MIN THEN MIN = M(I)
NEXT I
j = j + 1
IF j < P THEN
FOR I = 0 TO N - 1
IF M(I) = MIN THEN
M$(I) = "X"
END IF
NEXT I
GOTO metka3
END IF
PRINT
PRINT "Vvedennyi massiv:"
FOR I = 0 TO N - 1
PRINT M(I); " ";
NEXT I
PRINT
FOR I = 0 TO N - 1
IF M(I) = MIN THEN
PRINT "Poryadkovyi nomer "; P; "-go po veli4ine 4isla = "; I + 1
PRINT "Samo "; P; "-e po veli4ine 4islo ="; MIN
END
END IF
NEXT I
END
МС
Макс Суворов
31 781
Лучший ответ
Не ну нормально. Ты значит на олимпиаде например приз получишь а мы как лохи будем чё-то за бесплатно решать? Отлично придумано.
Не проверял, но в общем виде это будет примерно так:
СLS
DEFLNG a-z
INPUT "N="; n
n = ABS(n)
s = 0
WHILE n > 0
s = s + (n MOD 10)
n = n \ 10
IF s > 9 THEN s = s \ 10 + (s MOD 10)
WEND
PRINT s
>> У числа 3247598 результат 11 а не 2
ну так 11 - это 1+1 и ответ 2, или я чего-то не понял?
@kyll Junusaliev
@kyll Junusaliev
5 701
Если олимпиадные, тогда я бы преобразовал вводимое число в строку и разбирал бы её посимвольно:

СLS

ON ERROR GOTO Begin
Begin:
INPUT "N=";N&

Recursion:
Buffer$ = STR(N&)
N& = 0
FOR x% = 1 TO LEN(Buffer$)
N = N + VAL(MID$(Buffer$,x%, 1)
NEXT x%
IF N > 9 THEN GOTO Recursion
PRINT N

QB нет, проверить не могу, но на VB работает.

Про вторую задачу думать надо -- времени нет.

Третья - с заковыкой. Если в лоб, то надо сохранить индексы массива и его значения (т. е. сохранить порядковый номер числа и само число) , потом отсортировать получившийся массив по возрастанию (только не пузырьком -- ты ж на олимпиаде) , найти третий элемент и посмотреть его индекс. На современных языках решается в минуту, но в QB коллекций нет, придётся поизвращаться.
Сделай свой тип:
TYPE ArrayElement
Index%
Value%
End Type

Вроде бы QB это позволяет.
олимпиада для того, чтобы проверять свои знания, а не для того чтобы опережать всех)
Muhamedjan Algibaev
Muhamedjan Algibaev
971
помоему 2
>> У числа 3247598 результат 11 а не 2
ну так 11 - это 1+1 и ответ 2, или я чего-то не понял?