Форум программистов, компьютерный форум CyberForum.ru

String. Исправьте ошибку - Visual Basic

Восстановить пароль Регистрация
 
Sysn1k
0 / 0 / 0
Регистрация: 22.12.2016
Сообщений: 8
28.12.2016, 18:55     String. Исправьте ошибку #1
Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного (с дробной частью) — вывести 2; если строку нельзя преобразовать в число, то вывести 0. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.».

Вот так выглядит в Pascal

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var s:string;
     r:real;
     t,c:integer;
begin
write('s=');
readln(s);
val(s,t,c);
if c=0 then write('1')
else
 begin
  val(s,r,c);
  if c=0 then write('2') 
  else write('0');
 end;
readln
end.
Вот так пытался сделать в Basic

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub CommandButton1_Click() 
Dim s As String, i, err As Integer, r As Double 
s = Val(TextBox1.Text) 
For i = 1 To Len(s) 
err = Mid(s, i, 1) 
''val(s,i,err); 
If err = 0 Then 
TextBox2.Text = "1" 
Else 
err = Mid(s, r, 1) 
''val(s,r,err); 
If err = 0 Then 
TextBox2.Text = "2" 
Else 
TextBox2.Text = "0" 
End If 
End If 
Next i 
End Sub
Программа жалуется.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
morgann55
 Аватар для morgann55
1363 / 205 / 35
Регистрация: 09.02.2012
Сообщений: 738
31.12.2016, 05:50     String. Исправьте ошибку #2
Visual Basic
1
s = Val(TextBox1.Text) ' нельзя присваивать числовое значение переменной, которую объявил строкой!!!
вот вариант:

Visual Basic
1
2
3
4
5
If Val(s) Then ' если перевод в число истина
   TextBox2.Text = IIf(InStr(s, ".") = 0, "1", "2") ' выбор от наличия в строке точки "1" или "2"
Else
   TextBox2.Text = "0" ' иначе "0"
End If
Catstail
Модератор
 Аватар для Catstail
21657 / 10383 / 1687
Регистрация: 12.02.2012
Сообщений: 17,320
31.12.2016, 09:58     String. Исправьте ошибку #3
Visual Basic
1
2
3
4
5
6
7
8
9
       If isNumeric(S$) then
         If Instr(S$,".")=0 then
            debug.print 1
         else
            debug.print 2
         end if
       else
         debug.print 0
       end if
morgann55
 Аватар для morgann55
1363 / 205 / 35
Регистрация: 09.02.2012
Сообщений: 738
31.12.2016, 10:22     String. Исправьте ошибку #4
Catstail, привет! Что-то ты не так составил - пишет ноль на s = "1.2"

А вот то что isNumeric на целую строку можно применять, это я как-то не дотумкал) Спасибо за пример!
Catstail
Модератор
 Аватар для Catstail
21657 / 10383 / 1687
Регистрация: 12.02.2012
Сообщений: 17,320
31.12.2016, 10:30     String. Исправьте ошибку #5
morgann55, приветствую и Наступающим! Но проблема - в системном разделителе у Вас на ПК. Скорее всего, у Вас запятая. Чтобы код сработал, нужно:
Visual Basic
1
   If (Instr(S$,".")=0) And (Instr(S$,",")=0) then
morgann55
 Аватар для morgann55
1363 / 205 / 35
Регистрация: 09.02.2012
Сообщений: 738
31.12.2016, 15:25     String. Исправьте ошибку #6
Да, в старой конструкции s = "1,2" нормально отрабатывает, а при двойном условии при And, Or не работает( Только вот так:

Visual Basic
1
If (Instr(S$,".")=0) Xor (Instr(S$,",")=0) then
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2016, 17:44     String. Исправьте ошибку
Еще ссылки по теме:

Visual Basic Помогите с кодом cn.Open [connection string goes here], [username], [password]
Visual Basic Бесплатный string editor для VB
Объединение двух значений String Visual Basic
Массив ; String Visual Basic
Visual Basic Как перевести string в double?

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

Или воспользуйтесь поиском по форуму:
fever brain
Экстрасенс
 Аватар для fever brain
639 / 200 / 58
Регистрация: 05.01.2016
Сообщений: 590
Записей в блоге: 3
31.12.2016, 17:44     String. Исправьте ошибку #7
Условие можно организовать так:
Если не является числом то 0 проверяется сверху вниз, все остальное уже будет считаться числом
Если же фиксированная часть равна самому числу то 1 (целое число тоесть)
Все остальное это дробное число.

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub cb_Click()
    If Not IsNumeric(tx) Then
        Debug.Print 0
    ElseIf Fix(tx) = tx Then
        Debug.Print 1
    Else
        Debug.Print 2
    End If
End Sub
Ниже представлен код в котором точка заменяется запятой, и невозможность второй запятой
Целиком программа вместе с кнопками выглядит так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit
Dim WithEvents tx As TextBox, WithEvents cb As CommandButton
 
Private Sub tx_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
    Case 48 To 57, 8
    Case 44, 46, 225, 254
        If InStr(1, tx, ",") Then KeyAscii = 0 Else KeyAscii = 44
    Case Else: KeyAscii = 0
    End Select
End Sub
 
Private Sub cb_Click()
    Const rz = "Результат = "
    If Not IsNumeric(tx) Then
        Caption = rz & 0
    ElseIf Fix(tx) = tx Then Caption = rz & 1
    Else: Caption = rz & 2
    End If
End Sub
 
Private Sub Form_Load()
    Const r = 90
    Dim l&
    Set tx = Controls.Add("vb.TextBox", "tx"): With tx
        .Move r, r: l = .Left + .Width + r
        .Visible = 1
    End With
    Set cb = Controls.Add("vb.CommandButton", "cb"): With cb
        .Move l, r
        .Caption = "Вывести"
        .Visible = 1
    End With
End Sub
Yandex
Объявления
31.12.2016, 17:44     String. Исправьте ошибку
Ответ Создать тему
Опции темы

Текущее время: 14:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru