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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 12:55   #1
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию Нелинейный алгоритм (Pascal)

Добрый день. Помогите с решением пожалуйста, не пойму, в чем ошибка.
Даны а, b. Если оба отрицательны, то кажде значение заменить на его модуль, если отрицательно только одно из них - то оба значения увеличить на 0,5, если оба положительны, оба значения увеличить в 10 раз. Вот мой код:
Код:
program vetv3;
var
   a,b: integer;
   done,done1,done3: boolean;
   a1,b1: real;
begin
     write('Vvod a ');
     readln(a);
     write('Vvod b ');
     readln(b);
done:=((a<0) and (b<0));
if done=true then
begin
   a:=abs(a);
   b:=abs(b);
end;
else
done1:=((a<0) and (b>0)) or ((a>0) and b<0));
if done1:=true then
begin
     a1:=a+0.5;
     b1:=b+0.5;
end;
else
done2:=((a>0) and (b>0));
if done3=true then
begin
     a:=a*10;
     b:=b*10;
end;
writeln(a,',',b,',',a1,',',b1,);
end.
Проблема в том, что обрабатывается только первый if, если я ввожу положительные числа или положительное и отрицательное - оператор writeln не выполняется. Где я ошибся?
DsDevis вне форума Ответить с цитированием
Старый 22.03.2009, 13:20   #2
Аццкий прогер
Пользователь
 
Аватар для Аццкий прогер
 
Регистрация: 26.02.2009
Сообщений: 24
По умолчанию

Код:
Var 
     a, b: real;

Begin
     write('Vvod a ');
     readln(a);
     write('Vvod b ');
     readln(b);

If (a<0) and (b<0) then
 Begin
  a:=abs(a);
  b:=abs(b);
 end;

If (a>0) and (b>0) then
 Begin
  a:=a*10;
  b:=b*10;
 end;

If ((a<0) and (b>0)) or ((a>0) and (b<0)) then
 Begin
  a:=a+0.5;
  b:=b+0.5;
 end;

Write(a:3:1, b:3:1);
end.
Вот вроде правильный код.
Может быть когда-нибудь я кому-нибудь в чём-нибудь и помогу...
Аццкий прогер вне форума Ответить с цитированием
Старый 22.03.2009, 13:37   #3
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию

Спасибо, уже получше. Сейчас write работает при любых значениях a и b,
проблема в том, что если оба отрицательны, они не только приравниваются к своим модулям, они еще и на 10 умножаются 0_о, и еще хотел бы узнать у понимающих людей, что неверного в моем варианте решения?
P.S. удалил все else в своем коде, все заработало, но проблема с лишним умножением на 10 осталась.

Последний раз редактировалось DsDevis; 22.03.2009 в 13:43.
DsDevis вне форума Ответить с цитированием
Старый 22.03.2009, 14:06   #4
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Цитата:
Сообщение от Аццкий прогер Посмотреть сообщение
Код:
Var 
     a, b: real;

Begin
     write('Vvod a ');
     readln(a);
     write('Vvod b ');
     readln(b);

If (a<0) and (b<0) then
 Begin
  a:=abs(a);
  b:=abs(b);
 end
  else
   If (a>0) and (b>0) then
   Begin
    a:=a*10;
    b:=b*10;
  end
   else
     If ((a<0) and (b>0)) or ((a>0) and (b<0)) then
     Begin
       a:=a+0.5;
       b:=b+0.5;
     end;

Write(a:3:1, b:3:1);
end.
Вот так должно работать!
Levsha100 вне форума Ответить с цитированием
Старый 22.03.2009, 15:04   #5
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию

Все равно, при двух отрицательных значениях кроме приравнения к модулям происходит умножение на 10.
P.S.
Levsha100
Дико извиняюсь, в вашей программе умножения на 10 нету, на выполнение отправлялась программа Аццкого Прогера. Ваша же не компилируется - выдается ошибка 113, Ошибка в инструкции, и указывается первая else. В моем варианте практически тоже самое, но такой ошибки не возникает 0_о.

Последний раз редактировалось DsDevis; 22.03.2009 в 15:21.
DsDevis вне форума Ответить с цитированием
Старый 22.03.2009, 19:53   #6
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от DsDevis Посмотреть сообщение
Ваша же не компилируется - выдается ошибка 113, Ошибка в инструкции, и указывается первая else.
Это бывает, если поставить ';' перед else.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 22.03.2009, 20:17   #7
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Код:
Var 
     a, b: real;

Begin
     write('Vvod a ');
     readln(a);
     write('Vvod b ');
     readln(b);

If (a<0) and (b<0) then
 Begin
  a:=abs(a)*10;
  b:=abs(b)*10;
 end;

If (a>0) and (b>0) then
 Begin
  a:=a*10;
  b:=b*10;
 end;

If ((a<0) and (b>0)) or ((a>0) and (b<0)) then
 Begin
  a:=a+0.5;
  b:=b+0.5;
 end;

Write(a:3:1, b:3:1);
end.
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 23.03.2009, 11:48   #8
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию

Всем спасибо за помощь.
DsDevis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] подскажите алгоритм Рамик Помощь студентам 6 03.03.2009 17:11
Нужна помощь в Pascal (Алгоритм сортировки) keanemusic Помощь студентам 9 08.02.2009 17:37
Помогите пожалуйста в Pascal (Алгоритм сортировки) JayDe Помощь студентам 3 29.01.2009 19:13
Помогите решить уравнение. pascal си неважно или просто алгоритм Mixasik Помощь студентам 5 10.11.2008 18:52
Алгоритм для Pascal Trojan-PSW.Win32 Помощь студентам 6 29.01.2008 10:17