IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Перечислимые типы, Перевод переменной х, означающее длину в единицах р, заменить на велич
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Условие задачи:
type единица=(дец,км,м,мм,см);
длина=real;
var х:длина; р:единица;
Значение переменной х, означающее длину в единицах р, заменить на величину в метрах.

-----------------------------------------------------------------------------------
Проблема в том, что нельзя применять процедуры read(p)/write(p)
Но нужно ухитриться написать программу так, чтобы можно выбирать любую из перечислинных единиц и после переводить в метры (не через простое присвоение, например, p:=dec; !!! )

У меня пока вот что получилось:

program numtypes;
uses crt;
const name='A:\numtypes.out';
type yedinitsa=(dec,km,m,mm,sm);
dlina=real;
var x:dlina;
p:yedinitsa;
ch:char;
i:integer;
f:text;
begin
assign(f,name);
rewrite(f);
writeln(f,'Laboratornaya rabota 8. Perechislimiye tipi');
writeln(f,'Zadaniye: znacheniye x, oznachayuscheye dlinu v yedinitsaj p,');
writeln(f,'zamienit na vielichinu v mietraj');
repeat;
clrscr;
writeln('Vvieditie dlinu x v yedinitsaj p');
read(x); write(' m^'); readln(i);
if x>=0 then
begin
writeln(f,'Rezultat');
case i of
-1:writeln(f,0.1*x:7:5,' metrov ');
3:writeln(f,1000*x:7:5,' metrov');
1:writeln(f,x:7:5,' metrov');
-3:writeln(f,0.001*x:7:5,' metrov');
-2:writeln(f,0.01*x:7:5,' metrov');
end;
end
else writeln('Error !');
readln;
writeln;
write('Again - Y, else exit ');
read(ch);
until upcase (ch) <> 'Y';
close(f);
readln;
end.


Возможно надо как-то связать i и p... blink.gif




--------------------
Каждое начало имеет свой конец
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Смотри, что можно сделать:
uses crt;
type
yedinitsa=(dec,km,m,mm,sm);
dlina=real;
const
title: array[yedinitsa] of string = (
'dec','km','m','mm','sm'
);
mult: array[yedinitsa] of real = (
0.1, 1000, 1, 0.001, 0.01
);

var
x:dlina;
p:yedinitsa;

ch:char;
i:integer;
ix: yedinitsa;
begin
repeat;
clrscr;
writeln('Vvieditie dlinu x v yedinitsaj p');
write('X = '); readln(x);

write('P [ ');
for ix := low(yedinitsa) to high(yedinitsa) do
write(succ(ord(ix)), ')' + title[ix] + ' ');
write('] = ');

repeat
readln(i);
until (i - 1) in [ord(low(yedinitsa)) .. ord(high(yedinitsa))];

writeln('result = ', x*mult[yedinitsa(i - 1)]:7:5, ' m.');

writeln;
write('Again - Y, else exit ');
read(ch);
until upcase (ch) <> 'Y';
readln;
end.

(вводишь длину, и НОМЕР единицы измерения, который показывается в списке)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Спасибо за помощь
thx smile.gif




Добавлено через 13 мин.
Есть вопрос: а зачем в строке
write(succ(ord(ix)), ')' + title[ix] + ' ');
плюсы, вместо запятых? они на что-нибудь влияют?

Сообщение отредактировано: Mr. Anderson -


--------------------
Каждое начало имеет свой конец
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.09.2020 12:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name