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

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

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

> Перечислимые типы, Перевод переменной х, означающее длину в единицах р, заменить на велич
Mr. Anderson
сообщение 15.03.2007 16:53
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 15.03.2007 17:13
Сообщение #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.

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

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 18:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"