Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Не целые не равны
Начать новую тему   Ответить на тему   вывод темы на печать

Не целые не равны

Автор
Сообщение
VM
ghost


Пол: Пол:Муж.
Зарегистрирован: 13.10.2006
Сообщения: 1368
Откуда: а вот

Статус: Offline
СообщениеДобавлено: 2007.11.20 16:01.19
Ответить с цитатой
паскаль лажа, вот отрывок кода:

readln(k);
t:=0;
a:=10;
repeat
s:=k/a;
a:=a*10;
t:=s-int(s);
until (0<=t) and (t<1);

нужно вычислить последнюю цифру во введенном числе k, для этого придется только домножить на выходе из цикла t на 10,
НО:

если k>1000 (примерно)

то получаются следуюшие вычисления:
k=5683
s=568.3
t=0.299999999999954

это чоже, у нас теперь 568.3-568=0.299999999999954 Shocked Razz Confused Surprised

ясно, что можно бы и округлить, но почему так???????
_________________
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых тебя не устраивает...
Я вернулся =)
Посмотреть профиль Отправить личное сообщение ICQ Number
moishe
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1668


Статус: Offline
СообщениеДобавлено: 2007.11.20 16:52.57
Ответить с цитатой
VM писал(а):
это чоже, у нас теперь 568.3-568=0.299999999999954
Да. Пользуйтесь типом integer, во избежание.

А вообще, если не секрет, в чем смысл сего гениального цикла? (Неужели лишь в том, чтобы найти остаток от деления на 10?)

Добавлено спустя 3 минуты:

VM писал(а):
почему так???????
Потому что в компьютере числовые данные - двоичные. 0.3 невозможно точно представить двоичной дробью (то есть такой, у которой знаменатель - степень двойки).

Добавлено спустя 4 минуты 52 секунды:

В паскале я полный нуль, но неужели там нет славного оператора %, или какого-нибудь его аналога?
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
vanish
Заслуженный писатель



Зарегистрирован: 23.05.2007
Сообщения: 849


Статус: Offline
СообщениеДобавлено: 2007.11.20 17:53.51
Ответить с цитатой
тебе только разработкой алгоритмов и заниматься я смотрю.. ппц полный
_________________
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2007.11.20 17:56.59
Ответить с цитатой
VM писал(а):
но почему так???????
на первых уроках/парах это объясняют.
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Ken't
вуглускр


Пол: Пол:Муж.
Зарегистрирован: 03.12.2004
Сообщения: 23569
Откуда: Алушта, ЮБК

Статус: Offline
СообщениеДобавлено: 2007.11.20 18:28.14
Ответить с цитатой
andy ice писал(а):
на первых уроках/парах это объясняют.

на них ходить же нужно. а это не для реальных пацанофф Ржу
_________________
Запчасти для иномарок. Новые, контрактные ДВС, КПП, кузовщина.
+7 912 52 9-OO-39
9-OO-39
www.avtotron45.ru
Посмотреть профиль Отправить личное сообщение ICQ Number
VM
ghost


Пол: Пол:Муж.
Зарегистрирован: 13.10.2006
Сообщения: 1368
Откуда: а вот

Статус: Offline
СообщениеДобавлено: 2007.11.20 21:51.34
Ответить с цитатой
moishe писал(а):
integer

проблема в том, что он отказывается с ним работать.. а точнее с переменными s и t...

а целью было -
VM писал(а):
вычислить последнюю цифру во введенном числе k


andy ice писал(а):
на первых уроках/парах это объясняют.

да чтото не торопятся.... наших там пока учат мышкой двигать Razz (ну утрировал немного)...

moishe писал(а):
но неужели там нет славного оператора %

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

Добавлено спустя 6 минут 42 секунды:

вот полный код такой учебной програмки (ну немного не корректный, но зато работает пока без перебоев):

program n14;
uses crt;
var k,a,r:integer;
s,t:real;
begin
readln(k);
t:=0;
a:=10;
repeat
s:=k/a;
a:=a*10;
t:=s-int(s);
until (0<=t) and (t<1);
r:=round(t*10);
case r of
1: write(k,' гриб');
2..4: write(k,' гриба');
else write(k,' грибов');
end;
end.

а основная цель - заставить его писать относительно грамотно..
_________________
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых тебя не устраивает...
Я вернулся =)
Посмотреть профиль Отправить личное сообщение ICQ Number
Pavel
Писатель


Пол: Пол:Муж.
Зарегистрирован: 29.11.2004
Сообщения: 312


Статус: Offline
СообщениеДобавлено: 2007.11.20 22:53.34
Ответить с цитатой
uses crt;
var p,pervoe,poslednee,s:longint;
n:integer;
begin
ReadLn(s);
p:=1;
while s>0 do
begin
n:=n+1;
if n=1 then pervoe:=s mod 10;
poslednee:=s mod 10;
s:=s div 10;
end;
writeln('Первая цифра:',poslednee);
Writeln('Последняя цифра:',pervoe);
readkey;
end.
Посмотреть профиль Отправить личное сообщение
vanish
Заслуженный писатель



Зарегистрирован: 23.05.2007
Сообщения: 849


Статус: Offline
СообщениеДобавлено: 2007.11.20 23:23.34
Ответить с цитатой
readln(s);
write(s[length(s)]);
а так сойдет?
_________________
Посмотреть профиль Отправить личное сообщение
VM
ghost


Пол: Пол:Муж.
Зарегистрирован: 13.10.2006
Сообщения: 1368
Откуда: а вот

Статус: Offline
СообщениеДобавлено: 2007.11.20 23:33.29
Ответить с цитатой
бл* я дебил Razz намудрил опять.... а надо то было всегото:

r:=k mod 10;

вместо:

t:=0;
a:=10;
repeat
s:=k/a;
a:=a*10;
t:=s-int(s);
until (0<=t) and (t<1);
r:=round(t*10); Neutral

Добавлено спустя 1 минуту 53 секунды:

ладно, с опытом придет...

Добавлено спустя 6 минут 9 секунд:

vanish
не, не катит, это тип string, а мне надо числовой.
_________________
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых тебя не устраивает...
Я вернулся =)
Посмотреть профиль Отправить личное сообщение ICQ Number
moishe
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1668


Статус: Offline
СообщениеДобавлено: 2007.11.20 23:38.24
Ответить с цитатой
VM писал(а):
r:=k mod 10;
Ну слава богу, таки есть в паскале аналог оператора %, а то я уж начал подозревать недоброе.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
vanish
Заслуженный писатель



Зарегистрирован: 23.05.2007
Сообщения: 849


Статус: Offline
СообщениеДобавлено: 2007.11.20 23:47.38
Ответить с цитатой
VM писал(а):
это тип string, а мне надо числовой.

в условие об этом где?
числовой это по вашим примерам целочисленый*.. тогда делам так:
readln(k);
str(k,s);
write(s[length(s)]);
* на действительных код не робитSmile
_________________
Посмотреть профиль Отправить личное сообщение
ArtFul
почти бухалтер


Пол: Пол:Муж.
Зарегистрирован: 14.04.2005
Сообщения: 5665


Статус: Offline
СообщениеДобавлено: 2007.11.21 08:24.31
Ответить с цитатой
VM
просто вы делаете деление, а с типом integer нужно использовать целочисленное деление
Посмотреть профиль Отправить личное сообщение ICQ Number
VM
ghost


Пол: Пол:Муж.
Зарегистрирован: 13.10.2006
Сообщения: 1368
Откуда: а вот

Статус: Offline
СообщениеДобавлено: 2007.11.21 08:31.26
Ответить с цитатой
vanish писал(а):
числовой это по вашим примерам целочисленый*..

можно и вешественный использовать........
vanish писал(а):
в условие об этом где?

ну впринципе то можно то и строковый, но тогда вместо "case" придется поставить 2 "if"-а.. (и то я это не проверял) а я уже както наделался из них длиннющих цепочек.... такчто больше не хочу....

на счет того, что ты написал: забыл, что такое str(k,s)? Embarassed

P.S. просто не люблю строковым типом пользоваться..

Добавлено спустя 2 минуты 8 секунд:

ArtFul
ну вот потому то у меня и был тот длинющий код.
_________________
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых тебя не устраивает...
Я вернулся =)
Посмотреть профиль Отправить личное сообщение ICQ Number
vanish
Заслуженный писатель



Зарегистрирован: 23.05.2007
Сообщения: 849


Статус: Offline
СообщениеДобавлено: 2007.11.21 10:11.57
Ответить с цитатой
VM писал(а):
можно и вешественный использовать........

не в моем алгоритме
VM писал(а):
впринципе то можно то и строковый

хм.. зачем придумывать себе ограничения типов?
str это кароче из числа в строку
_________________
Посмотреть профиль Отправить личное сообщение
VM
ghost


Пол: Пол:Муж.
Зарегистрирован: 13.10.2006
Сообщения: 1368
Откуда: а вот

Статус: Offline
СообщениеДобавлено: 2007.11.21 10:37.36
Ответить с цитатой
да не себе, некоторые команды не со всеми типами переменных работают.. во избежание ошибок так сказать
_________________
Не бывает безвыходных ситуаций. Есть только ситуации, выход из которых тебя не устраивает...
Я вернулся =)
Посмотреть профиль Отправить личное сообщение ICQ Number
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Не целые не равны

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы