Важная информация
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: Сумма цифр числа

  1. #1  
    Новичок
    Регистрация
    24.12.2010
    Сообщений
    10
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    написал программку смысл её заключается в разбитии числа на отдельные числа которые суммируются и опять разбиваются и складываются до получения одного числа пример: число 9.12345 решение
    9+1+2+3+4+5=24=2+4=6

    сама программка
    Код qbasic:
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    [Ссылки могут видеть только зарегистрированные пользователи. ] a
     
    b = [Ссылки могут видеть только зарегистрированные пользователи. ](a)
    c = (a - b) * 10
    q = [Ссылки могут видеть только зарегистрированные пользователи. ](c)
    w = (c - q) * 10
    e = [Ссылки могут видеть только зарегистрированные пользователи. ](w)
    r = (w - e) * 10
    t = [Ссылки могут видеть только зарегистрированные пользователи. ](r)
    y = (r - t) * 10
    u = [Ссылки могут видеть только зарегистрированные пользователи. ](y)
    i = (y - u) * 10
    o = [Ссылки могут видеть только зарегистрированные пользователи. ](i)
    x = (b + q + e + t + u + o) / 10
    z = [Ссылки могут видеть только зарегистрированные пользователи. ](x)
    l = x - z
    k = [Ссылки могут видеть только зарегистрированные пользователи. ](i)
    g = z + k
     
    [Ссылки могут видеть только зарегистрированные пользователи. ] b
    [Ссылки могут видеть только зарегистрированные пользователи. ] q
    [Ссылки могут видеть только зарегистрированные пользователи. ] e
    [Ссылки могут видеть только зарегистрированные пользователи. ] t
    [Ссылки могут видеть только зарегистрированные пользователи. ] u
    [Ссылки могут видеть только зарегистрированные пользователи. ] o
    [Ссылки могут видеть только зарегистрированные пользователи. ] "rezultat"; g

    при использовании числа 9.12345 получается 7 вместо 6

    в чём беда ,вроде всё правильно сделал,сильно не судите 2й день тока изучаю qbasic
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Konstantin Shcherba
    Регистрация
    08.11.2010
    Сообщений
    1,336
    Сказал(а) спасибо
    26
    Поблагодарили 139 раз(а) в 107 сообщениях
    Записей в блоге
    1
    Если Вы действительно изучаете Qbasic 2-й день, то очень не плохо!

    Предлагаю использовать в программе циклы, так она получится более короткой и универсальной.

    Вот мой вариант:
    Код qbasic:
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    [Ссылки могут видеть только зарегистрированные пользователи. ] "Vvedite chislo:", A$
    Summa:
    Summa = 0
    FOR I = 1 TO [Ссылки могут видеть только зарегистрированные пользователи. ](A$)
      Cifra = [Ссылки могут видеть только зарегистрированные пользователи. ]([Ссылки могут видеть только зарегистрированные пользователи. ](A$, I, 1))
      Summa = Summa + Cifra
    NEXT I
    IF Summa > 10 THEN
      A$ = [Ссылки могут видеть только зарегистрированные пользователи. ](Summa)
      GOTO Summa
    [Ссылки могут видеть только зарегистрированные пользователи. ] IF
    [Ссылки могут видеть только зарегистрированные пользователи. ] "Summa", Summa

    Если что-то непонятно - спрашивайте.
    Ответить с цитированием  
     

  3. #3  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Я сам очень впечатлен - видно что человек думает головой - что очень я ценю, хотя сам ленюсь делать так.
    Для новичка данный пример может быть весьма сложен.
    Что касаемо твоей ошибки: У тебя ошибка вылетает скорее всего из за переполнений при округлении. Однажды там после округления добавляется единица, во второй половине программы. Я посчитал все на своем калькуляторе, как ни странно, он дал ответ 6.
    Код :
    dim a  [Объявлено]
    a=9.12345  [Присвоено A=9.12345]
    dim b,c,q,w,e,r,t,y,u,i,o,x,z,l,k,g  [Объявлено]
    b=int(a)  [Присвоено B=9]
    c=(a-b)*10  [Присвоено C=1.2345]
    q=fix(c)  [Неизвестный идентификатор]
    q=int(c)  [Присвоено Q=1]
    w=(c-q)*10  [Присвоено W=2.345]
    e=int(w)  [Присвоено E=2]
    r=(w-e)*10  [Присвоено R=3.45]
    t=int(r)  [Присвоено T=3]
    y=(r-t)*10  [Присвоено Y=4.5]
    u=int(y)  [Присвоено U=4]
    i=(y-u)*10  [Присвоено I=4.99999999999998]
    o=int(i)  [Присвоено O=4]
    x=(b+q+e+t+u+o)/10  [Присвоено X=2.3]
    z=int(x)  [Присвоено Z=2]
    l=x-z  [Присвоено L=0.3]
    k=int(i)  [Присвоено K=4]
    g=z+k  [Присвоено G=6]
    Просто твой алгоритм, несколько, эмм, ненадежен оказался. Другие числа он тоже многие считал неправильно... Во всяком случае на QB.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  4. #4  
    Новичок
    Регистрация
    24.12.2010
    Сообщений
    10
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    сложновато для меня (начинающего),без объяснения не понять принципа,очень интересно,хотелось бы хотяб в кратце
    Ответить с цитированием  
     

  5. #5  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Давай попробуем разобраться:
    Код qbasic:
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    [Ссылки могут видеть только зарегистрированные пользователи. ] "Vvedite chislo:", A$
    Summa:
    Summa = 0

    Сначала мы вводим в переменную A$ ТЕКСТОВУЮ строку, которая содержит число (знаком, надеюсь со строковыми переменными)
    Код qbasic:
    FOR I = 1 TO [Ссылки могут видеть только зарегистрированные пользователи. ](A$)
      Cifra = [Ссылки могут видеть только зарегистрированные пользователи. ]([Ссылки могут видеть только зарегистрированные пользователи. ](A$, I, 1))
      Summa = Summa + Cifra
    NEXT I
    Потом организуем цикл, в котором последовательно выделяем каждый символ строки (стало быть, по одному числу: например "9", "1", "2"...). и суммируем полученные числа в переменной Summa, предварительно сконвертировав их в тип integer функцией Val.
    Код qbasic:
    IF Summa > 10 THEN
      A$ = [Ссылки могут видеть только зарегистрированные пользователи. ](Summa)
      GOTO Summa
    [Ссылки могут видеть только зарегистрированные пользователи. ] IF
    Тут мы проверям, если сумма больше 10, значит в числе больше одного знака. Если этого так, то мы снова переходим в начало программы, и опять суммируем все числа, пока наконец не получиться число меньшее, чем 10.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  6. #6  
    Новичок
    Регистрация
    24.12.2010
    Сообщений
    10
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    а вот это что означает?
    Summa:
    Summa = 0
    Ответить с цитированием  
     

  7. #7  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    В первой строке объявляется метка с названием Summa. На эту метку происходит переход командой GOTO Summa. Стало быть, когда в программе встречается GoTo Summa, программа начинает выполнятсья с этой метки.
    Во второй строке переменной Summa присваивается 0. При первом выполнении это не имеет значение, а вот если впоследствии будут происходить переходы назад на метку GoTo, то сумму необходимо будет обнулить, ведь мы будем считать ее заново.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  8. #8  
    Новичок
    Регистрация
    24.12.2010
    Сообщений
    10
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Код qbasic:
    FOR I = 1 TO [Ссылки могут видеть только зарегистрированные пользователи. ](A$)
      Cifra = [Ссылки могут видеть только зарегистрированные пользователи. ]([Ссылки могут видеть только зарегистрированные пользователи. ](A$, I, 1))
      Summa = Summa + Cifra
    NEXT I
    вот здесь чото не дорходит до меня
    Ответить с цитированием  
     

  9. #9  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Строки и циклы знаешь? Если нет, будем объяснять - ибо это тот минимум, который необходимо знать.

    Что касается функций, то Val получает строку, и на выходе дает результат типа integer, в котором хранится числовое представление каждого отдельного символа строки
    Mid$(A$, I, 1) возвращает кусок строки A$ длиной в 1 символ, начиная с позиции I.
    Summa = Summa + Cifra (Добавляем к сумме новое число, котороые перед этим выделили из строки)
    Дружба-магия-радость!
    Ответить с цитированием  
     

  10. #10  
    Новичок
    Регистрация
    24.12.2010
    Сообщений
    10
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    какая разница между int и fix ?
    Ответить с цитированием  
     

Страница 1 из 3 123 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 06.10.2012, 19:21
  2. Ответов: 10
    Последнее сообщение: 02.12.2011, 19:05
  3. Ответов: 1
    Последнее сообщение: 03.06.2011, 04:15
  4. Ответов: 7
    Последнее сообщение: 28.04.2011, 00:14
  5. Ответов: 2
    Последнее сообщение: 09.12.2010, 17:24
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •