Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
58 / 39 / 23
Регистрация: 09.02.2020
Сообщений: 189
1

действительное число в нормализованной форме

16.11.2020, 22:07. Просмотров 912. Ответов 1
Метки нет (Все метки)


Здравствуйте! Оцените код, подправьте если где-то "плохо" написал.
Задание. представить число в нормализованной форме.

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
var a: string;
 
procedure NZ(var a: string);
var k: byte := 0;
begin
  for var i:=1 to length(a) do begin
    if (a[i] = '.') then break;
    inc(k); end;
  delete(a,k+1,1);
  if (a[1] = '-') then begin
    insert('0.',a,2);
    dec(k); end
  else 
    insert('0.',a,1);
    
  writeln('Нормализованная форма действительного числа');
  writeln(a,' * (10 ^ ',k,');');
end;
 
begin
  write('Введите десятичную дробь (через точку):');
  readln(a);
  NZ(a);
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2020, 22:07
Ответы с готовыми решениями:

Составьте программу для представления введенного отличного от нуля действительного числа в нормализованной форме
помогите пожалуйста написать код на паскале: составьте программу для представления введенного...

Представить действительное число в нормализованной форме
Здравствуйте, нужна помощь в решении задачи(по возможности код должен быть не очень сложный). Сама...

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

Представление числа в нормализованной форме
Представить вещественное число в нормализованной форме. Число идет как строка. |Знак m|P...

1
1524 / 863 / 368
Регистрация: 07.04.2017
Сообщений: 3,475
16.11.2020, 23:09 2
Лучший ответ Сообщение было отмечено Andrew_97 как решение

Решение

0. Используйте Ctrl+пробел. Больно смотреть на сломанный регистр всех функций.

1. Зачем вы объявляете k как byte? Вы ничего этим не экономите.

Память под эту переменную выделяется на стеке. А память стека невозможно израсходовать, не используя излишнюю рекурсию (и в этом случае экономия 3 байт не поможет.
Кроме того, локальные переменные часто выравниваются по битности системы (чтоб их было удобнее читать процессору), поэтому ваша k: byte вполне может занимать 8 байт на 64-битной системе.

И процессорной мощности для работы с byte надо больше чем с integer и int64, потому что современные процессоры не умеют работать с числами из меньше чем 32 бит. Операции вроде k := k+1; заменяются на k := byte( integer(k) + 1 ), то есть кучу лишних действий.

2. Секция var до begin это прошлый век. Переменная должна объявлятся на строчке со своим первым использованием (или как можно ближе к нему).
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
procedure NZ(var a: string);
begin
  
  // k не получится объявить внутри цикла, потому что тогда к нему не будет доступа вне цикла
  // Поэтому ближайшее место к первому использованию - это прямо перед циклом
  // И тип вообще не надо указывать, компилятор сам разберётся какой тип лучше подходит
  var k := 0;
  for var i := 1 to a.Length do
  begin
    if a[i] = '.' then break;
    k += 1; // inc(k) это старый синтаксис, для += не нужны скобки, поэтому его легче читать когда привыкните
  end;
  
  Delete(a, k + 1, 1);
  if a[1] = '-' then
  begin
    Insert('0.', a, 2);
    k -= 1;
  end else
    Insert('0.', a, 1);
  
  Writeln('Нормализованная форма действительного числа');
  // Чтоб не сувать кучу запятых и апострофов - лучше использовать $''
  // Так строка вывода выглядит значительно проще
  Writeln($'{a} * (10 ^ {k})');
end;
 
begin
  Write('Введите десятичную дробь (через точку): ');
  // Чтоб не разделять строчку объявления и инициализации переменной
  // есть специальные Read, которые работают как процедуры а не функции
  var a := ReadString;
  NZ(a);
end.
А ещё лучше так:
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
// Не к чему экономить символы программы,
// лучше сделать название длиннее, но понятнее
// А ещё лучше добавить описание, вот так:
 
/// Принимает десятичную дробь и меняет её формат на:
/// 0. * (10 ^ n)
function Normalize(number: string): string;
begin
  var negative := number.StartsWith('-');
  if negative then
    number := number.TrimStart('-');
  
  var dot_index := number.IndexOf('.');
  if dot_index = -1 then
    dot_index := number.Length else
    number := number.Remove(dot_index,1);
  
  Result := $'0.{number} * (10 ^ {dot_index})';
end;
 
begin
  var num := ReadString('Введите десятичную дробь (через точку): ');
  $'Нормализованная форма действительного числа: {Normalize(num)}'.Println;
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2020, 23:09

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

Запишите числа в форме с плавающей запятой и нормализованной мантиссой
1)Запишите следующие числа в форме с плавающей запятой и нормализованной мантиссой: а)...

Как представить заданные числа с плавающей запятой в нормализованной форме одинарной точности?
у меня даны два числа X=65 и Y=63 в десятичной системе счисления. Я не понимаю как мантиссу...

Представить число 0,625 в формате с разрядной сеткой с плавающей запятой, при нормализованной мантиссе
Задание: Представить число 0,625 в формате с разрядной сеткой с плавающей запятой, при...

Дано действитёльное число х. Получить целую часть *) числа х; затем — число х, округленное до ближайшего целого; затем — число х без дробных цифр.
Здравствуйте помогите написать программу. Дано действитёльное число х. Получить целую часть *)...

Даны: натуральное число n, действительное число x. Вычислить: (функцию Power не использовать)
Даны: натуральное число n, действительное число x. Вычислить: (функцию Power не использовать) ...

Дано действительное число а, и натуральное число n. Найти частичную сумму ряда
1/a + 1/a^2 + 1/a^4 +... 1/(a^(2)^n)


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

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

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