Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
4 / 3 / 1
Регистрация: 18.12.2008
Сообщений: 136
1

Дана строка, значение которой является число в экспоненциальной форме

21.06.2009, 21:50. Показов 1862. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана строка, значение которой является число в экспоненциальной форме представления (2,3Е+3). Необходимо получить строку, значением которой будет представлено в нормальной форме (2300). При решении не использовать преобразования строкового типа в числовой.
Помогите с задачей на одном форуме уже спросил, но так и не разобрался!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2009, 21:50
Ответы с готовыми решениями:

Дана символьная матрица, каждая строка которой является предложением. Для каждой строки определить количество слов.
Дана символьная матрица, каждая строка которой является предложением. Для каждой строки определить...

как записать число на C# в экспоненциальной форме?
не представляю как это сделать... раньше писала программы на паскале - там понимаю как написать, а...

Вывести число string не в экспоненциальной форме
Доброго дня. Подскажите пожалуйста, как вывести число string не в экспоненциальной форме?...

Представить длинное число в экспоненциальной форме
Доброго времени суток! Столкнулся с небольшой проблемой в курсовой работе: Написал программу,...

4
Посланник моего господина
111 / 106 / 52
Регистрация: 02.05.2009
Сообщений: 181
21.06.2009, 23:04 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
unit Rich{Convention};
 
interface
 
var CorrectFormat:boolean;
function ReadChar(v:char):byte;
function ReadNumber(v:string):longint;
function ReadFloatNumber(v:string):real;
function WriteInFormat(number:Real;format:string):string;
 
implementation
 
function ReadChar(v:char):byte;
begin
     if v in ['0'..'9']
        then ReadChar:=ord(v)-48
        else begin
             ReadChar:=0;
             CorrectFormat:=false
        end;
end;
 
function ReadNumber(v:string):longint;
var i:byte;
    r:longint;
begin
if v=''
   then begin CorrectFormat:=false; ReadNumber:=0; end
   else
       if v[1]='+'
          then begin
                    delete(v,1,1);
                    ReadNumber:=ReadNumber(v)
               end
          else
              if v[1]='-'
                 then begin
                           delete(v,1,1);
                           ReadNumber:=ReadNumber(v);
                      end
                 else begin
                           r:=0;
                           while v[1]=' ' do delete(v,1,1);
                           for i:=1 to length(v) do
                               r:=r*10+ReadChar(v[i]);
                           ReadNumber:=r;
                      end;
end;
 
function RFN_Standart(Mantica:Real;Grade:integer):Real;
var r:real;
    i:integer;
begin
     r:=1;
     if Grade>0
        then for i:=1 to abs(Grade) do r:=r*10
        else for i:=1 to abs(Grade) do r:=r/10;
     RFN_Standart:=Mantica*r;
end;
 
function RFN_Point(int_part:string; frac_part:string):Real;
var r:real;
    i:integer;
begin
     r:=1;
     for i:=1 to length(frac_part) do
         r:=r/10;
     r:=r*ReadNumber(frac_part);
     RFN_Point:=ReadNumber(int_part)+r;
end;
 
function ReadFloatNumber(v:string):Real;
var i:integer;
{   ss:string;  }
begin
     while (v<>'')and(v[length(v)]='.') do delete(v,length(v),1);
     for i:=1 to length(v) do if v[i]='E' then v[i]:='e';
     for i:=1 to length(v) do if v[i]=',' then v[i]:='.';
     if Pos('e',v)=0 then
        if Pos('.',v)=0
           then ReadFloatNumber:=ReadNumber(v)
           else begin
                i:=pos('.',v);
                ReadFloatNumber:=
                                 RFN_Point(
                                 Copy(v,1,i-1),
                                 Copy(v,i+1,length(v)-i)
                                 );
           end
        else begin
             i:=pos('e',v);
             {Mantica,Grade}
             ReadFloatNumber:=RFN_Standart(
                                           ReadFloatNumber(Copy(v,1,i-1)),
                                           ReadNumber(Copy(v,i+1,length(v)-i))
                                           );
        end;
end;
 
function WriteInFormat(number:Real;format:string):string;
const ee=1e-10;
var r,t:string;
var n:longint;
    function ch(x:byte):string;
             begin
                  ch:=chr(x+48);
             end;
 
begin
     if format='' then
        if abs(frac(number))<ee then
           begin
                t:='';
                n:=round(number);
                while abs(n)>0 do
                      begin
                            t:=Ch(n mod 10)+t;
                            n:=n div 10;
                      end;
                if (number<0.0)and(abs(number)>ee) then t:='-'+t;
                if t='' then r:='0' else r:=t;
           end
        else if (number<0.0)and(abs(number)>ee)
                then r:='-'+WriteInFormat(-number,'')
                else begin
                     n:=trunc(number);
                     t:=WriteInFormat(n,'');
                     t:=t+'.';
                     number:=number-n;
                     while abs(number)>ee do
                           begin
                                number:=number*10;
                                t:=t+Ch(trunc(number));
                                number:=frac(number);
                           end;
                end;
     WriteInFormat:=r;
end;
 
BEGIN
CorrectFormat:=true;
END.
Использование: пусть s — строка.
Pascal
1
s:=Writeinformat(ReadFloatNumber(s),'');
0
4 / 3 / 1
Регистрация: 18.12.2008
Сообщений: 136
24.06.2009, 19:26  [ТС] 3
Есть какие - нибудь другие варианты решения?
0
1 / 1 / 0
Регистрация: 30.06.2009
Сообщений: 3
30.06.2009, 20:42 4
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
program Project236;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
   var e,s:string;f,cm:byte;ex:char;
begin
 s:='2,3E+3';
 f:=1;while s[f]<>'E' do begin
  if s[f] in ['0'..'9'] then  e:=e+s[f];
  if s[f] in ['.'..','] then cm:=f;
  inc(f);
 end;
 ex:=s[length(s)];
 f:=length(e)-cm;
 while chr(f+ord('0'))<=ex do begin inc(f); e:=e+'0';end;
 write(e);
 readln;
end.
Такой вариант.
1
4 / 3 / 1
Регистрация: 18.12.2008
Сообщений: 136
06.08.2009, 14:36  [ТС] 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
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
program Project336;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
Var A, b, c: String; L, S, d: Integer;
begin
WriteLn('Vvedite Chislo');
ReadLn(A);
L:=Length(A);
S:=Pos('E+', A);
If S<>0 Then
      Begin
      b:=Copy(A, 1, S-1);
      c:=Copy(A, S+2, L-S);
      End;
// теперь в строке "b" часть строки "A" до "E+"
// а в строке "c" часть строки "A" после "E+"
If (Length(c)<>0) And (c[1]<>'0') Then // если после "E+" не пусто и не ноль
      Begin
      S:=Pos('.', b);
      L:=Length(b);
      If S=0 Then // если в строке "b" нет точки
            Begin
            d:=0;
            While c<>'' Do
                  Begin
                  Case c[1] Of
                        '0':
                              d:=d*10;
                        '1':
                              d:=d*10+1;
                        '2':
                              d:=d*10+2;
                        '3':
                              d:=d*10+3;
                        '4':
                              d:=d*10+4;
                        '5':
                              d:=d*10+5;
                        '6':
                              d:=d*10+6;
                        '7':
                              d:=d*10+7;
                        '8':
                              d:=d*10+8;
                        '9':
                              d:=d*10+9;
                        End;
                  c:=Copy(c, 2, Length(c)-1);
                  End;
            A:=b;
            While d<>0 Do
                  Begin
                  A:=A+'0';
                  d:=d-1;
                  End;
            End
      Else  // если в строке "b" есть точка
            Begin
            d:=0;
            While c<>'' Do
                  Begin
                  Case c[1] Of
                        '0':
                              d:=d*10;
                        '1':
                              d:=d*10+1;
                        '2':
                              d:=d*10+2;
                        '3':
                              d:=d*10+3;
                        '4':
                              d:=d*10+4;
                        '5':
                              d:=d*10+5;
                        '6':
                              d:=d*10+6;
                        '7':
                              d:=d*10+7;
                        '8':
                              d:=d*10+8;
                        '9':
                              d:=d*10+9;
                        End;
                  c:=Copy(c, 2, Length(c)-1);
                  End;
            d:=d-L+S;
            A:=Copy(b, 1, S-1)+Copy(b, S+1, L-S);
            While d<>0 Do
                  Begin
                  A:=A+'0';
                  d:=d-1;
                  End;
            End;
      WriteLn(A);
      End
Else
      WriteLn('Error');
readln;
end.
Сделал так, но превод сказал, что неверно. Почему не верно не помню.
Есть предложения?
0
06.08.2009, 14:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2009, 14:36
Помогаю со студенческими работами здесь

Дана строка из слов и пробелов, и дана вторая строка это число. нужно вставить это число после 4 слова
дана строка из слов и пробелов, и дана вторая строка это число. нужно вставить это число после 4...

Задать значение данных в экспоненциальной форме
Нужно решить задачу по физике, но вот столкнулся с проблемой степеней, как их задать не могу...

Ввести число в экспоненциальной форме, через edit
Как ввести число в экспоненциальной форме, через edit?

Как представить число в Java в экспоненциальной форме ?
Здравствуйте! У меня есть число BigDecimal. Например: BigDecimal num = new...

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

Функция, аргументом которой является целое число, проверяет является ли число степенью 4
Функция, аргументом которой является целое число, должна вернуть t, если число является степенью...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru