Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
IsoPanzer
2 / 2 / 4
Регистрация: 10.11.2013
Сообщений: 140
1

Прочесть символ за символом, как это сделать

04.12.2014, 16:03. Просмотров 955. Ответов 3
Метки нет (Все метки)

Добрый вечер, помогите решить задачу, заранее благодарен, мой код не правльно работает, выдает ошибку...

Пусть десятичная запись числа подается на вход программы
символ за символом. Мы хотим "прочесть" это число (поместить в
переменную типа real его значение). Кроме того, надо сообщить об
ошибке, если число записано неверно.

Pascal
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Begin
state:= Initial; val:= 0;
 
while (state <> Accept) or (state <> Error) do begin
 
if state = Initial then begin
 
if Next = ' ' then begin
 
state := Initial; Move;
 
end else if Digit(Next) then begin
 
state := IntPart; {ïîñëå íà÷àëà öåëîé ÷àñòè}
 
val := DigitValue (Next);
 
Move;
 
end else begin
 
state := Error;
 
end;
 
end else if state = IntPart then begin
 
if Digit (Next) then begin
 
state := IntPart; val := 10*val + DigitVal(Next);
 
Move;
 
end else if Next = '.' then begin
 
state := DecPoint; {ïîñëå äåñÿòè÷íîé òî÷êè}
 
step := 0.1;
 
Move;
 
end else begin
 
state := Accept;
 
end;
 
end else if state = DecPoint then begin
 
if Digit (Next) then begin
 
state := FracPart;
 
val := val + DigitVal(Next)*step; step := step/10;
 
Move;
 
end else begin
state := Error; { äîëæíà áûòü õîòü îäíà öèôðà }
 
end;
 
end else if state = FracPart then begin
 
if Digit (Next) then begin
 
state := FracPart;
 
val := val + DigitVal(Next)*step; step := step/10;
 
Move;
 
end else begin
state := Accept;
 
end ;
 
end else if
 
{òàêîãî áûòü íå ìîæåò}
 
end;
 
end;
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2014, 16:03
Ответы с готовыми решениями:

Как прочесть BOM-символ из файла?
Столкнулся с проблемой определения кодировки файла, конкретно моя прога не может отличить ANSI от...

Объясните как прочесть это? operator>>
Я только-только начинаю осваивать язык C++, все время возникают вопросы, ответы на которых я...

Дан символ. Вывести символ, который в кодовой таблице следует за этим символом
Дан символ. Вывести символ, который в кодовой таблице следует за этим символом.

Дан символ; вывести символ, который в кодовой таблице следует за этим символом
Задание 1) Дан символ. Вывести символ, который в кодовой таблице следует за этим символом

3
APALoff
1641 / 1070 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
05.12.2014, 16:07 2
Pascal
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Uses Crt;
 
 
 
Function GetReal : Real;
 
 
Var
 
 
  Ch   : Char;
 
 
  r,r0 : Real;
 
 
  Flag : Boolean;
 
 
Begin
 
 
  r:=0;
 
  r0:=0;
 
 
  Flag:=True;
 
 
  Repeat
 
 
    Ch:=ReadKey;
 
 
    If Ch=#0 then Ch:=ReadKey;
 
 
    If Ch in ['.',','] then
 
 
    Begin
 
 
      If Flag then
 
 
      Begin
 
 
        Flag:=False;
 
 
        Write('.');
 
 
      end;
 
 
    end
 
 
    else
 
 
      If Ch in ['0'..'9'] then
 
 
      Begin
 
 
        Write(Ch);
 
 
        If Flag then r:=r*10+Ord(Ch)-Ord('0')
 
 
          else r0:=r0*10+Ord(Ch)-Ord('0');
 
 
      end;
 
 
  Until Ch=#13;
 
 
  While r0>=1 do r0:=r0/10;
 
 
  GetReal:=r+r0;
 
 
  Writeln;
 
 
end;
 
 
 
Begin
 
 
  Writeln;
 
 
  Writeln(GetReal);
 
 
  Writeln;
 
 
end.
1
IsoPanzer
2 / 2 / 4
Регистрация: 10.11.2013
Сообщений: 140
05.12.2014, 22:18  [ТС] 3
программа неверно работает...
0
APALoff
1641 / 1070 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
08.12.2014, 10:36 4
Лучший ответ Сообщение было отмечено IsoPanzer как решение

Решение

Цитата Сообщение от IsoPanzer Посмотреть сообщение
программа неверно работает...
Аргументируйте!

Добавлено через 1 минуту
Хотя я уже догадываюсь о чем это Вы... 0.001 принимает как 0.1

Добавлено через 5 минут
Исправил, проверяйте:
Pascal
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Uses Crt;
 
Function GetReal : Real;
Var
  Ch   : Char;
  r,r0 : Real;
  Flag : Boolean;
  t    : Byte;
 
Begin
  r:=0; t:=0;
  r0:=0;
  Flag:=True;
  Repeat
    Ch:=ReadKey;
    If Ch=#0 then Ch:=ReadKey;
    If Ch in ['.',','] then
    Begin
      If Flag then
      Begin
        Flag:=False;
        Write('.');
      end;
    end
    else
      If Ch in ['0'..'9'] then
      Begin
        Write(Ch);
        If Flag then r:=r*10+Ord(Ch)-Ord('0')
          else
          Begin
            r0:=r0*10+Ord(Ch)-Ord('0');
            Inc(t);
          end;
      end;
  Until Ch=#13;
  While t>0 do
  Begin
    r0:=r0/10;
    Dec(t);
  end;
  GetReal:=r+r0;
  Writeln;
end;
 
Begin 
  Writeln;
  Writeln(GetReal);
  Writeln;
end.
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2014, 10:36

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

Каждый символ ? удвоить. Каждый символ, стоящий перед !, заменить символом, введенным с клавиатуры.
Работа с символьными данными. 15. Каждый символ ? удвоить. Каждый символ, стоящий перед !,...

Каждый символ ? удвоить. Каждый символ, стоящий перед !, заменить символом, введенным с клавиатуры
Каждый символ ? удвоить. Каждый символ, стоящий перед !, заменить символом, введенным с...

Как это назвать или где почитать как это сделать?
Вот как выглядит моя цель - http://cs623921.vk.me/v623921477/38005/2W46UJsY3nM.jpg При нажатии на...

Как это сделать , если это возможно, сам не уверен
Помогите, как это сделать Пример В таблице Excel я ввожу какую нибудь формулу (Sin(x), a не...


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

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

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