![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Liba |
![]()
Сообщение
#1
|
Гость ![]() |
Надо поставить огрничения на ответ....т.е. например при сложение a=100 в=30
а максимум может быть 100.......Это как пример так я знаю что есть максимально число это 32600 с чем то и -32600 с чем-то(я точно не знаю)так вот надо для всех операций сделать огарничение....не понимаю как...... Код program Project4; {$APPTYPE CONSOLE} uses SysUtils; var a,b,c :Real; //Операнды operator :Char; //Оператор prodolgit :Char; //Флаг,показывающий запускать калькулятор или нет Err :Boolean; //Флаг,показывающий ошибку ввода оператора i :Integer; //Переменная цикла begin prodolgit:='y'; While prodolgit='y' do begin{of while} Err:=false; Write('Vvedite a: '); Readln(a); Write('Vvedite operator: '); Readln(operator); Write('Vvedite b: '); Readln(b); case operator of '+': c:=a+b; '-': c:=a-b; '*': c:=a*b; '/': begin{of '/'} If b=0 then begin{of if } Writeln('Delit na nol nelzya!!!!'); Err:=true; end {of if} else C:=a/b; end{of '/'}; '^': begin{of ^} If b=0 then c:=1 else If b>1 then begin c:=1; For i:=1 to round(b) do Begin{of for} c:=c*a; end{of for}; end else If b<1 then begin b:=b*(-1); c:=1; For i:=1 to round(b) do Begin{of for} c:=c*a; end{of for}; c:=1/c; end; end{of ^} else begin{of else} Writeln('Ohibka!!!!!'); Err:=true; end;{of else} end;{of case} If Err=false then Writeln('Otvet: ', c:5:2); Writeln; Write('Hotite eche vospolzovatsya calcylyatorom?(y/n) '); Readln(prodolgit); Writeln; end;{of while} end. Спасибо!!!! |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Liba
Уточните, пожалуйста, что должно произойти в случае выхода результата за заданные рамки... P.S. Возможно имеется в виду, как избежать переполнения? Обычно для того, чтобы избежать ошибок переполнения, тип результата достаточно сделать более емким, чем тип операндов: Код Var a, b: Double; c: Extended; { теперь переполнения произойти не должно } Сообщение отредактировано: volvo - 30.10.2004 14:56 |
Liba |
![]()
Сообщение
#3
|
Гость ![]() |
например так....
Код '+': begin Repeat If abs(a)>32768 then b begin writeln('Chislo a previsaet dopustimoe znachenie. Vvedite dr. chislo'); Readln(a); z:=1; end {if} else z:=0; If abs((a/2)+(b/2))>32768/2 then begin Writeln('Chislo b previsaet dopustimoe znachenie. Vvedite dr. chislo'); Readln(b); z:=1; end {if} else z:=0; until z=0; Writeln('a+b=',a+b); end; а вот как все это в мою программу вставить,.... |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Но зачем это нужно? Каков смысл ограничения? Если в вышеприведенный код ввести a = 32760 и b = 100, будет выдано сообщение о превышении числом b допустимого значения
![]() Сообщение отредактировано: volvo - 30.10.2004 22:27 |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Может имелось ввиду ограничение такое, что бы не возникала ошибка переполнения ? То есть при вводу в INTEGER числа 650000, программа не вылетала по RUN-TIME-ERROR, а цивилизованно сообщала об ошибке ?
![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Oleg_Z
Она не пользуется целочисленными типами... |
Altair |
![]()
Сообщение
#7
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Да, только посмотрел код ....
тогда я тоже не понимаю, зачем ограничение.... ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Liba |
![]()
Сообщение
#8
|
Гость ![]() |
нам так сказал препод..........
Цитата Oleg_Z Да,точно на переполнение.... |
Liba |
![]()
Сообщение
#9
|
Гость ![]() |
Ну так как это вставить????в мою программку???
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Ну так как это вставить Ну может нам объяснят смысл этой "вставки"? Дело в том, что переполнения в приведенной программе произойти просто не может, так как не используются целочисленные типы ... А чтобы переполнить Real нужно очень постараться... |
Liba |
![]()
Сообщение
#11
|
Гость ![]() |
Тгогда я не правильно написала программу и нгадо поменять Real на Integer,а как вставить эту часть программы в мою?
|
Altair |
![]()
Сообщение
#12
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Тгогда я не правильно написала программу и нгадо поменять Real на Integer ![]() ![]() Это назывется - если нет проблемм, я их себе сделаю :D ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
![]()
Сообщение
#13
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Тогда просто директива кажется есть для отключения проверки на переполнение.. забыл какая.. никогда этим не пользуюсь
![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Liba |
![]()
Сообщение
#14
|
Гость ![]() |
А что мне делать тогда...........он сказал с этим написать..............(((
|
Altair |
![]()
Сообщение
#15
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Скажи ему то, что мы тут сказали!
можешь прямо отпечатать, я за свои слова отвечаю... ![]() и покажи ему это! :P :yes: -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Liba
Если уж очень хочется поработать с типом Integer - приведу возможный алгоритм проверки на переполнение... Ваш код:
не имеет смысла, по очень простой причине: посмотрите туда, где я поставил знаки вопроса. А что будет, если пользователь введет туда число, скажем, 40000? Оно запишется с ошибкой, и "а" будет равно (-25536). Так что этот способ смысла не имеет... Я бы сделал ввод чисел в строку, а потом из строки вытаскивал число, проверяя его на переполнение. Но зачем это нужно, если программа и так работает? (Кстати, если поменять Real на Integer, программа начнет вылетать при вводе значений с плавающей точкой) В общем, не заморачивайтесь с этим, оставьте все как есть :yes: Oleg_Z :p9: |
Guest |
![]()
Сообщение
#17
|
Гость ![]() |
спасибочки)))))
ростается все это воспроизвести преподу)))) |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:10 |