2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Набор выражений в Maple
Сообщение29.12.2010, 00:38 


19/05/10
17
Львов
Доброе время суток. У меня задание: Создать процедуру что генерирует последовательность из 10 случайных примеров на сложение десятичных дробей.
У меня не получаеться даже вывести выражение типу 0.5+1.2 вместо этого выводит 1.7....Можете что-то помоч???

 Профиль  
                  
 
 Re: Набор выражений в Maple
Сообщение30.12.2010, 01:14 


19/05/10

3940
Россия
расскажу про свой дилетантский подход)
либо надо работать со строками (тип string)
либо форматный вывод типа

a:=0.5: b:=1.2: printf("%a%a %A %a", 0,a,`+`,b);

с нулем еще беда, не хочет его maple печатать)
Как это делать правильно не знаю

 Профиль  
                  
 
 Re: Набор выражений в Maple
Сообщение30.12.2010, 18:53 
Аватара пользователя


05/11/09
90
Я подобные вещи обычно делаю со строками. Код писать не буду, потому что задание, но расскажу свой подход.

Строки заключаются в двойные кавычки. Вывод строки s я обычно делаю с помощью writeline(default, s). Соединение строк a, b, …, z: cat(a, b, …, z).

В принципе, разные типы данных можно преобразовывать в строки с помощью функции convert(qqq, string), но результат не всегда тот, который хочется. Например, вещественные числа норовят представиться в экспоненциальном виде. Поэтому я бы предложил этой опцией не пользоваться, а самому написать процедуры, которая вещественное число превращает в строку. По логике их должно быть две: одна записывает число точно, другая — с заданным числом десятичных знаков (при необходимости округляя или добавляя нули в конце).

Первая процедура совсем простая. В качестве «заготовки» преобразуем в строку целое число floor(abs(a)) — это то, что стоит до запятой (без знака); floor — целая часть. Если дробная часть abs(a) ненулевая, то добавляем запятую и далее по одному — десятичные знаки, пока число не кончится. (Наверно, имеет смысл поставить ограничение на максимально допустимую длину). После этого ставим перед дробью „-‟, если число отрицательное.

Для задаваемого числа десятичных знаков я тоже сначала выделял целую часть модуля, затем дробную часть умножал на 10 в нужной степени и округлял. Дальше — дело техники.

Имея эти процедуры, ваше задание выполнить легко: надо в цикле записать что-то вроде
writeline(default, cat(str(a, 1), " + ", str(b, 1), " = ", str(a + b, 1)):
(Вывод блокируется, потому что writeline выдаст длину получившейся строки. Конечно, ничто не мешает написать процедурку для вывода, в конце которой поставить NULL.)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group