Помощь - Поиск - Пользователи - Календарь
Полная версия: литеры...я не проходил...а вы?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Archie
integer, real, boolean, литеры.
Литеры в операторах ветвления, цикла. Ввод/вывод литерных дан-
ных.Ребят...помогите плиз - я эти литеры не проходил и не знаю даж что это...
Используя только литерный ввод, ввести задан-
ное вещественное число (за ним - пробел), записанное по
правилам языка Паскаль, и присвоить его вещественной
переменной X.
volvo
Цитата
я эти литеры не проходил и не знаю даж что это
Символы это... Char-ы, в смысле...

"используя только литерный ввод" - имеется в виду, что тебе нельзя пользоваться оператором Read/Readln читающим Real, можно читать только по одному символу с консоли...
Archie
ну а кто нить может решитЬ?
volvo
Может... А ты можешь сам хотя бы начать? Если за тебя все решить, тебе что, это как-то поможет?
Archie
я просто даже не представляю...мы такое не делали...лекция по этой теме будет в понедельник а сдать нужно в субботу...йа чо т даж логически не могу додуматься как это сделать
Ozzя
В цикле пока не пробел
читать символ (readkey)
если символ цифра (in '0'..'9') или точка или 'E' или '+' или '-' то
добавить символ в строку
конец цикла
перевести строку в число (val)
У val есть возможность отследить ошибку. (есть примечание от Volvo по поводу глюков/фичей val'а, но я его подзабцл)

Такая задача уже решалась. Ищите.
Archie
Ребят, нужно решить задачу только с использованием того что перечислено. без строк.я не знаю как вообще это решить - завтра сдавать...напишите плис прогу эту...
Айра
Можно приблизительно так:
var ch: char;
x,d: real;
f: boolean;
begin
x:=0;
f:=false;
d:=0.1;
while ch<>' ' do
begin
readln(ch);
if ch='-' then d:=d*(-1);
case ch of
'0': x:=x*10+0;
'1': x:=x*10+1;
'2': x:=x*10+2;
'3': x:=x*10+3;
'4': x:=x*10+4;
'5': x:=x*10+5;
'6': x:=x*10+6;
'7': x:=x*10+7;
'8': x:=x*10+8;
'9': x:=x*10+9;
end;
if f then d:=d*10;
if (ch='.') or (ch=',') then f:=true;
end;
if f then x:=x/d; //исправлено
writeln(x:6:4);
end.
Lapp
Цитата(Айра @ 19.10.2007 20:24) *

Можно приблизительно так:

Вот результат работы твоей программы:
Код
Running "h:\home\ak\_pas\h\h048\h048.exe "
1
2
3

1230.0000

Что-то не так.. sad.gif

А что, ReadKey тоже нельзя использовать? blink.gif Некрасиво выходит... sad.gif
Айра
Цитата
Что-то не так..

Я даже знаю что wink.gif
x:=x/d;

надо заменить на
if f then  x:=x/d;

Исправила))

Цитата
А что, ReadKey тоже нельзя использовать? Некрасиво выходит...

Если б я знала, что это и с чем его едят unsure.gif не проходили мы ето еще, у нас символов вообще еще нет))
Archie
спс.выручили)
Lapp
Цитата(Айра @ 20.10.2007 17:52) *

Если б я знала, что это и с чем его едят

Это совсем нетрудно. Посмотри, я немного модифицировал твою программку.. До кучи, ввел простенькую диагностику ошибок.
Обрати внимание на использование CRT
uses
CRT;

var
ch: char;
x,d: real;
e,f,g: boolean;

begin
x:=0;
e:=false;
f:=false;
g:=false;
d:=10;
repeat
ch:=ReadKey;
Write(ch);
case ch of
'0'..'9': x:=x*10+Ord(ch)-48;
'.': if f then e:=true else f:=true;
'-': if g then e:=true else d:=-d;
' ': break;
else e:=true
end;
if f then d:=d*0.1;
g:=true;
until false;
if f then x:=x*d;
if e then WriteLn('Error') else WriteLn(x:6:4);
ReadLn
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.