Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2008, 20:59   #1
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию Помогите разобраться

Я когда ввожу следующий код:
Цитата:
Program i1;
Uses Crt;
Var
a,b:integer;
t:longint;
begin
a:=29
b:=35
t:=sqr(a)*sqr(b);
Writeln('t= ',t);
end.
Запускаю программу,
Программа выдает мне ответ:
t= -18351
а должно быть:
t:= 1030225. {29 в квадрате умножить на 35 в квадрате = 841*1225}
Следовательно, и в остальных случаях компилятор поступает примерно также, что я не могу чего либо написать.
Ужас, как я устал от тупизны...

Последний раз редактировалось rainbow; 06.09.2008 в 21:01.
rainbow вне форума Ответить с цитированием
Старый 06.09.2008, 21:09   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Сделай все три переменные Longint.
puporev вне форума Ответить с цитированием
Старый 07.09.2008, 00:54   #3
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Или a,b:word;
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 07.09.2008, 01:37   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Или только одну переменную -
либо a: word, b: integer
либо a: integer, b: word
Также любую из них можно объявить как longint и т.п. Можно комбинировать. )
eoln вне форума Ответить с цитированием
Старый 07.09.2008, 09:30   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

При отладке программы включайте {$Q+,R+}, чтобы не получать непредсказуемые результаты.
{$Q+} - проверка переполнения,
{$R+} - проверка границ диапазона.
Например:
Код:
{$Q-,R-}
var
  i: byte;
begin
  i:=255;
  i:=i+1;
  writeln(i);
end.
результат (255+1) будет ноль.
При {$Q+,R+} будет ошибка.

Эти же директивы компилятора можно изменить и через меню, смотрите HELP.
_Dmitry вне форума Ответить с цитированием
Старый 07.09.2008, 09:34   #6
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

Это хорошо, можно сделать с переменными, а как быть с константами?
Цитата:
Program i1;
Uses Crt;
Const
a=29;
b=35;
Var
t:longint;
begin
t:=sqr(a)*sqr(b);
Writeln('t= ',t);
end.
Ужас, как я устал от тупизны...
rainbow вне форума Ответить с цитированием
Старый 07.09.2008, 09:39   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Указывайте тип констант:
Код:
const
  a: longint = 29;
  b: longint = 35;
_Dmitry вне форума Ответить с цитированием
Старый 07.09.2008, 09:39   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Все тоже самое, например:
Const
a:word=29;
b:word=35;
puporev вне форума Ответить с цитированием
Старый 07.09.2008, 10:12   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

указание типа константы безусловно лучше, но можно и компилятор чуток поучить уму-разуму... ;-)
Код:
Program i1;
Uses Crt;
Const
  a=29;
  b=35;
Var
  t:longint;
begin
  t:= a;
  t:= sqr(t)*sqr(b);
  Writeln('t= ',t);
end.
так нормально работает ;-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.09.2008, 13:09   #10
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

Всё, спасибо, разобрался с константами, теперь написал программу с кучей условий, и не могу заставить её работать.

Цитата:
program iii5;
Uses Crt;
Const
R:longint=21;
a:longint=29;
b:longint=35;
Ge:longint=-35;
Go:longint=-34;
Me:longint=34;
Mo:longint=-11;
Var
X,Y,xe,xo,yo,xp,yp:real;

Function ProverkaA (X,Y,xe,xo,yo:real):boolean;
begin
if (Y>0) and (X>0) then
begin
if (Sqr(X-xe)/Sqr(a)+Sqr(Y)/Sqr(b)<=1) and (Sqr(X-xo)+Sqr(Y-yo)>=Sqr(R))
then ProverkaA:=true
else ProverkaA:=false;
end;
end;

Function ProverkaB (X,Y,xe,xo,yo,xp,yp:real):boolean;
begin
if (Y<0) and (X>0) then
begin
if (Sqr(X-xe)/Sqr(a)+Sqr(Y)/Sqr(b)<=1) and (Sqr(X-xo)+Sqr(Y-yo)>=Sqr(R)) and ((X-xp)/(-xp)>=Y/yp)
then ProverkaB:=true
else ProverkaB:=false;
end;
end;

begin
ClrScr;
Writeln('Введите координату X');
Readln(X);
Writeln('Введите координату Y');
Readln(Y);
xe:=(Sqrt(Sqr(a)*Sqr(b)-Sqr(Me)*Sqr(a))/b);
xo:=Go+R;
yo:=Mo+(Sqrt(Sqr(-2*Mo)-4*(Sqr(xo)+Sqr(Mo)-Sqr(R))))/2;
xp:=xe;
yp:=xp*sin(1)/Cos(1);

if (ProverkaA:=true) and (ProverkaB:=false) then
Writeln('Точка принадлежит области A');
if (ProverkaA:=false) and (ProverkaB:=true) then
Writeln('Точка принадлежит области B');
if (ProverkaA:=false) and (ProverkaB:=false) then
Writeln('Точка не принадлежит ни одной из областей');
Repeat Until KeyPressed
end.
У меня такое чувство, что я чего то с функциями намудрил, не знаю как исправить, и не знаю как сделать повтор на выполнение программы сначала при нажатии на любую клавишу.
Ужас, как я устал от тупизны...
rainbow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите разобраться Tanuska___:) БД в Delphi 1 04.09.2008 14:56
Помогите разобраться! Holodok Помощь студентам 12 02.05.2008 18:13
помогите разобраться!) Юliana Помощь студентам 1 30.01.2008 01:16
помогите разобраться с Rss Hallo HTML и CSS 0 24.11.2006 18:44