Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
25 / 0 / 0
Регистрация: 29.11.2011
Сообщений: 8
1

Нарушение арифметики в программе

29.11.2011, 11:42. Показов 4827. Ответов 11
Метки нет (Все метки)

Ввести с клавиатуры N чисел. Найти сумму тех из них, которые принадлежат интервалу (2;9).

Вроде простая программа а чего то не хватает считает только предпоследнее с последним даже если это число не принадлежит интервалу

Visual Basic
1
2
3
4
5
6
7
8
9
 Private Sub z()
 Dim  a, s As Integer
 a = InputBox("Введите число")
 While a>2 and a<9
 a = InputBox("Введите число")
 s = s + a
 Wend
 MsgBox s
 End Sub
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2011, 11:42
Ответы с готовыми решениями:

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

Реализация длинной арифметики
Здравствуйте, форумчане. Готовлюсь к предстоящим олимпиадам решая задачи. Возникла проблема: решая...

Реализация арифметики на ассемблере
Есть пример, который нужно решить на ассемблере : (a+b)/(a-b). Подскажите, как его решить? Была...

Свойство модульной арифметики
Всем привет, помогите разобраться где правильно. Преподаватель решал так: -113 mod 91; a =...

11
Заблокирован
29.11.2011, 11:50 2
Так будет правильнее
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub z()
 Dim a%,n%, s As Integer
 n = InputBox("Введите N")
 for n=1 to n
  a = InputBox("Введите число")
  if a>=2 and a<=9 then s = s + a
 next n
 MsgBox s
End Sub
1
19 / 18 / 1
Регистрация: 15.11.2011
Сообщений: 54
29.11.2011, 11:54 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim i as integer
Dim a as Double
Dim s as Double
dim n as integer
n=inputbox("Введите кол-во чисел N")
for i=1 to n 
   a = inputbox("Введите " & i & " число из "& N) 
  if (a>2) and (a<9) then
    s = s + a
  end if
next i
msgbox s
Круглые скобки обозначают не вхождение в интервал.

Добавлено через 1 минуту
Цитата Сообщение от Апострофф Посмотреть сообщение
for n=1 to n
странная конструкция
1
25 / 0 / 0
Регистрация: 29.11.2011
Сообщений: 8
29.11.2011, 12:05  [ТС] 4
Парни спасибо помогли а через while эту задачу решить можно?
0
19 / 18 / 1
Регистрация: 15.11.2011
Сообщений: 54
29.11.2011, 12:10 5
да
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim i as integer
Dim a as Double
Dim s as Double
dim n as integer
n = inputbox("Введите кол-во чисел N")
i =1
do while i <= n 
   a = inputbox("Введите " & i & " число из "& N) 
  if (a>2) and (a<9) then
    s = s + a
  end if
   i = i + 1
loop
msgbox s
0
Заблокирован
29.11.2011, 12:20 6
Цитата Сообщение от intacto Посмотреть сообщение
for n=1 to n
странная конструкция
? Возможно, но докажи, что она неверна!
0
25 / 0 / 0
Регистрация: 29.11.2011
Сообщений: 8
29.11.2011, 12:20  [ТС] 7
Хех я имел ввиду так чтобы пользователь мог любое кол-во вводить какое захочет а не вначале введенное N
0
19 / 18 / 1
Регистрация: 15.11.2011
Сообщений: 54
29.11.2011, 12:35 8
Цитата Сообщение от Апострофф Посмотреть сообщение
? Возможно, но докажи, что она неверна!
проверил в vb, работает О_о
в Паскале и C/AL такие выкрутасы не прокатят
0
11245 / 3611 / 642
Регистрация: 13.02.2009
Сообщений: 10,776
29.11.2011, 13:06 9
а через while эту задачу решить можно
Например можно применить в качестве условия выхода из цикла
Заодно и обработать "Отмена". В вышеприведённом примере "Отмена" вызовет ошибку
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
Private Sub Комманда1_Click()
Dim i As Integer
Dim a As Double
Dim s As Double
Dim n As Integer
Dim R As String
Dim REZ As String
Dim US As String
Randomize
i = 1
R = InputBox("Введите " & i & " число ", "", Int(11 * Rnd))
Do While R <> ""
US = IIf(US = "", R, US & "," & R)
a = CDbl(R)
  If (a > 2) And (a < 9) Then s = s + a: n = n + 1: REZ = IIf(REZ = "", R, REZ & "," & R)
   i = i + 1
   R = InputBox("Введите " & i & " число ", "", Int(11 * Rnd))
Loop
MsgBox " Из " & i - 1 & " введённых чисел" & vbCrLf & US & vbCrLf _
& "условию удовлетворяет " & n & vbCrLf & REZ & vbCrLf & " их сумма составляет: " & s, 64, "Результат"
End Sub
Добавлено через 4 минуты
Чисто на While: заменить только операторы
Visual Basic
1
2
3
While R <> ""
''''''''''''''''''''
Wend
1
15037 / 6364 / 1726
Регистрация: 24.09.2011
Сообщений: 9,976
29.11.2011, 13:13 10
Цитата Сообщение от YourDream Посмотреть сообщение
я имел ввиду так чтобы пользователь мог любое кол-во вводить какое захочет а не вначале введенное N
Выход по "отмене" или нечисловому значению
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub z()
Dim a, s As Double, b As Boolean
b = True
While b
    a = InputBox("Введите число")
    b = IsNumeric(a)
    If b Then If a > 2 And a < 9 Then s = s + a
Wend
MsgBox s
End Sub
1
25 / 0 / 0
Регистрация: 29.11.2011
Сообщений: 8
29.11.2011, 13:55  [ТС] 11
Огромное спасибо! Помог) Такого ответа я и ждал)) Браво))

Добавлено через 19 минут
Alex я в шоке из такой задачки сделать просто сногшибательную вещь)
0
5557 / 1363 / 150
Регистрация: 08.02.2009
Сообщений: 4,105
Записей в блоге: 30
29.11.2011, 16:24 12
Цитата Сообщение от YourDream Посмотреть сообщение
Нарушение арифметики в программе
Еще полтора часа «опытов на себе», и вот что выяснилось.

Там у вас не арифметика и была: вводимому a тип задан не был — и складывалась строка.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub я() ' я Макрос
'
Dim a, s        'в Integer нет смысла (кроме экспериментирования)
Dim i, поток$   'для наблюдения за вводом
    
    поток = "Введено: "
    i = 1
    a = InputBox(поток, "1-й ввод. Выход: кнопка Cancel.")
    
 While a > ""
    If a > 2 And a < 9 Then s = s + CDec(a) 'прибавили к сумме число (а не строку)
    поток = поток & vbCr & a & IIf(a > 2 And a < 9, " +", "") 'отметили нужное
    i = i + 1
    a = InputBox(поток, i & "-й ввод. Сумма помеченных: Cancel", a)
 Wend
 
    a = InputBox(поток, "Ввод завершён.", s)
End Sub
1
Миниатюры
Нарушение арифметики в программе  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2011, 16:24

PHP основы арифметики
К примеру есть такое выражение: &lt;? $sol = 3; $del = 20; $otvet = $sol/$del; // получается...

Класс длинной арифметики
Дайте класс длинной арифметики - хотелось бы разобраться в этой штуке, а то какие исходники не...

Проверка знаний арифметики
Помогите пожалуйста найти ошибку в программе: var a,b,c,q,e:integer; s:string; begin...

Реализация длинной целочисленной арифметики
Добрый день! Возникла такая проблема: была поставлена задача реализовать детерминированный тест...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.