Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Задача на Pascal


Автор: Artem_ 9.11.2003, 17:38
Люди помогите. baaa.gif baaa.gif withstupid.gif withstupid.gif butbut.gif butbut.gif butbut.gif
Нужно мне прогу на Паскале и на Си, чтоб умела выполнять преобразования:

Длина задана в дюймах (1 дюйм = 2,54 см).
Перевести ее в метрическую систему, то есть выразить в метрах, сантиметрах и миллиметрах.

Так, например, 21 дюйм = 0 м 53 см 3,4 мм.

Автор: NiJazz 9.11.2003, 18:04
Artem_, нужно сколько-то дюймов в метры переделать что ли? В чём проблемаconfused.gif

Автор: Artem_ 9.11.2003, 18:11
Ну. Тока как составить формулу? И writeln(типа тут метры:...., тут сантиметры...., тут милиметры...);

Автор: <Spawn> 9.11.2003, 18:52
Незнаю есть ли этот модуль в паскале, но в Дельфе есть функция Convert. Например:

Код
uses  ... ConvUtils, StdConvs;

begin
 ShowMessage(FloatToStr(Convert(30, duMillimeters, duMeters)));
end;


В StdConvs определены нужные тебе константы для преобразования:

Код
duMeters, duMillimeters, duKilometers и т. д.



Автор: December 9.11.2003, 22:47
Artem_
Умножаешь дюймы на 2.54;
Число делишь на 100000 - получаешь километры (в целой части);
делишь на 100 - получаешь метры
и т.д.
комбинируя вычисление метров и вычитание из исходного числа, получаешь все интересующие тебя единицы.

Автор: dvs 9.11.2003, 23:37
А потом
Код

Writeln(km,' Километры', m, ' метры', cm, ' санитметры', mm, ' миллиметры');


где km, m, cm, mm - это переменные, вкоторые ты помешаешь результат, о котором сказал господин December.

Автор: NiJazz 10.11.2003, 00:01
Artem_, лови... Надеюсь, это то, что нужно...

Код


var inch: real;
   meter: real;
   santi: real;
   milli: real;

function InchToMeter(inch: real):real;
var InchInMeter: real;
   NeededValue: real;
begin
 InchInMeter:=0.5334/21;
 InchInMeter:=InchInMeter*inch;
 InchToMeter:=InchInMeter;
end;

BEGIN
 writeln('Введите чило дюймов: ');
 read(inch);
 meter:=InchToMeter(inch);
 santi:=meter/100;
 milli:=meter/1000;
 writeln('В метрах: ', meter:2:2);
 writeln('В сантиметрах: ', santi:2:6);
 writeln('В миллиметрах: ', milli:2:7);
 readln;
 readln;
END.



Удачи!

Автор: December 10.11.2003, 21:09
Не, NiJazz, товарисчу Artem_ нужно разбить некоторую длину x, выраженную в дюймах, на эквивалентную в формате n метров + m сантиметров + p миллиметров, причём m+n+p=x. Я так понял. smile.gif
Надо после вычисления количества метров вычитать из общей суммы эквивалентную длину. То же для сантиметров.

Автор: NiJazz 10.11.2003, 22:22
December, не, как-то они загнули тогда... smile.gif Я просто подумал, что навыков у него нет никаких, вот и кинул строки...

Автор: Artem_ 11.11.2003, 05:18
Вот, я тут сам написал, а она при 1000 глючит!?

var n,duim,x,y,z:real;
begin

write('n=');
readln(n);
duim:=2.54*n/100;
x:=trunc(duim);
y:=trunc((duim-x)*100);
z:=(duim-x-y/100)*1000;
write(x:2:0,' m ',y:2:0,' cm ',z:2:1,' mm');
readln;
end.

В чём я ошибся?

Автор: Pakshin A. S. 11.11.2003, 12:04
Проверь её в пошаговом режиме; посмотри на значения переменных: совпадают ли они с нужными.

Автор: <Spawn> 11.11.2003, 13:06
Artem_ Что то ты намудрил smile.gif Поэксперементируй с этим:

Код
const
 CV_BASE = 1;
 CV_MILLIMETER = CV_BASE;
 CV_SANTIMETER = CV_MILLIMETER * 10;
 CV_METER = CV_SANTIMETER * 100;
 CV_KILOMETER = CV_METER * 1000;
 CV_INCH = CV_SANTIMETER * 2.54;
...

function _convert(Value: Double; FromVal, ToVal:Double):Double;
begin
 _convert:= (Value * FromVal) / ToVal;
end;

//Так вызываешь
var
cResult:Double;
begin
 cResult:= _convert(21, CV_INCH, CV_METER);
 WriteLn(cResult);
end;

Автор: Paradox 11.11.2003, 14:29
Artem_ ПРИ 1000 чего ? я в твоей проге n задавал равным даже 1000000 все нормально...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)