Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 12

Как научить программу считывать экспоненциальную форму вещественного числа из строки?

19.12.2012, 00:11. Показов 3758. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как научить программу считывать экспоненциальную форму вещественного числа из строки?
задача:
Вводится строка чисел, разделенных одним пробелом или одной запятой.
Если строка введена верно, то вывести все числа.
Если строка введена неверно, то вывести сообщение об ошибке.

например: 3,5 7 3.05Е-02,7, 4
результат:
3
5
7
3.05Е-02
7
"ошибка"(т.к. между 7ой и 4ой запятая и пробел)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2012, 00:11
Ответы с готовыми решениями:

Перевод в экспоненциальную форму
На вход - десятичная дробь Требуется перевести ее в экспоненциальную форму записи Как это осуществить?

Как научную (экспоненциальную) запись числа перевести в обычную (десятичную)?
Вообщем Решил Попробовать Поизучать Cmath (Math.h) Сделал Вроде бы простую программу но если водить 4 значные число от ответ получаеться...

Считывать числа с одной строки
У меня есть 3 переменных типа int: a,b,c. Как считать их с одной строки через пробел(2 3 5), а не с абзаца 2 3 5 ?

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
19.12.2012, 04:18
Цитата Сообщение от ХОХ Посмотреть сообщение
считывать экспоненциальную форму вещественного числа из строки?
StrToFloat умеет это делать. Только следи за тем, чтобы E была латинской, а не русской:

Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
   s : string;
   Lst : TStringList;
   Foo : Double;
   i : Integer;
begin
   s := '3,5 7 3.05E-2,7, 4';
   Lst := TStringList.Create;
   try
      Lst.CommaText := StringReplace(s, ' ', ',', [rfReplaceAll]);
      for i := 0 to Lst.Count - 1 do
      begin
         if TryStrToFloat(StringReplace(Lst[i], '-', '+', [rfReplaceAll]), Foo) then
            Memo1.Lines.Add(Lst[i])
         else
         begin
            Memo1.Lines.Add('Ошибка');
            Break;
         end;
      end;
   finally
      FreeAndNil(Lst);
   end;
end;
1
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 12
19.12.2012, 23:16  [ТС]
Спасибо
А реально ли такое сделать без этой функции, имея в распоряжении только Copy, Length, Pos, Delete?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
20.12.2012, 00:37
Реально, но лениво. Я этого точно делать не буду
0
0 / 0 / 0
Регистрация: 18.12.2012
Сообщений: 12
20.12.2012, 00:46  [ТС]
Ну, раз реально, то уже есть повод не лениться
Буду пробовать (:
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
20.12.2012, 02:33
Еще такой вариант...
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream : TstringStream;
  Parser : TParser;
begin
  DecimalSeparator := '.';
  Stream           := TstringStream.Create('3,5 7 3.05E-02,7, 4');
  Parser           := TParser.Create(Stream);
  with Parser do
    try
      while Parser.Token <> toEof do
        begin
          case Token of
            toInteger : Memo1.Lines.Add(TokenString + '  - целое');
            toFloat   : Memo1.Lines.Add(TokenString + '  - вещественное');
            ','       : Memo1.Lines.Add(TokenString + '  - разделитель');
          else
            Memo1.Lines.Add(TokenString + '  - Ошибка');
          end;
          NextToken;
        end;
    finally
      Stream.Free;
      Parser.Free;
    end;
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2012, 02:33
Помогаю со студенческими работами здесь

Как научить программу различать '1' и '9' от '19'?
Помогите, в string записываются рандомно цифры от 1 до 999 по порядку (К примеру 134678; 3679; ) , в дальнейшем из этого массива будут...

Как научить программу что-то рисовать?
Здравствуйте! Есть ли книги или статьи по написания программы, которая &quot;смогла бы&quot; нарисовать какой-то образ, но не одинаковым...

Как научить программу спрашивать за базар?
Часик в радость, чифир в сладость, бродяги. Собственно, как вышел с зоны, решил шерстить всемирную сеть, наткнулся на такую штуку, как...

Как научить калькулятор считать числа с точностью 0.01?
Помогите пожалуйста научить калькулятор считать числа с точностью 0.01... unit Unit1; {$mode objfpc}{$H+} interface uses ...

Как научить программу отличать win1251 от ibm866?
как научить программу определять 1251 от 866 облазил кучу ресурсов, не нашел подходящего, все пишут что нужно заранее знать кодировку...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru