Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/28: Рейтинг темы: голосов - 28, средняя оценка - 4.54
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
1

Защита от дурака

13.11.2009, 02:30. Просмотров 5244. Ответов 26
Метки нет (Все метки)

следующая проблема, если я ввожу символы любые, то как мне сделать чтобы программа выводила сообщение "введены не числовые коэффициенты"

Pascal
1
2
3
4
5
6
7
programm abc;
var
 a:real;
begin
 write('vvedite a');
 readln(a);
end.
Только нужно чтобы с readln было
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2009, 02:30
Ответы с готовыми решениями:

Защита от дурака
Форумчане обьясните как сделать защиту от дурака заключается она в том что при...

Защита от дурака
Следующая проблема, нужно что бы при вводе букв и символов, программа выдавала...

защита от дурака
Лазил по форуму, не могу найти подходящую защиту от ввода букв для интеграции....

Защита от дурака
Здравствуйте, участники форума! У меня проблема: написал курсовую работу по...

Защита от дурака в Паскале (от не того типа данных)
Конкретной задачи нет, интересует сугубо теория=) Предположим нам надо считать...

26
thedrill
1 / 1 / 1
Регистрация: 12.11.2009
Сообщений: 8
13.11.2009, 02:35 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
programm abc;
var
a:string;
i:integer;
ot:boolean;
begin
write('vvedite a');
readln(a);
ot:=true;
for i:=1 to Length(a) do
if not(a[i] in ['0'..'9']) ot:=false;
if (ot=false) write("введены не числовые коэффициенты");
end.
попробуй так
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 02:59  [ТС] 3
О работает спасибо! теперь надо мне её в основную внедрить!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
program kvur;
uses crt;
var
 a,b,c,d,x1,x2:real;
begin
 write('vvedite koef. a:');
 readln(a);
 write('vvedite koef. b:');
 readln(b);
 write('vvedite koef. c:');
 readln(c);
 begin
 if (a=0) and (b=0) or (a=0) and (c=0) or (b=0) and (c=0) then write('uravnenie reweni9 ne imeet');
 end;
  if a=0 then begin
   x1:=-c/b;
   writeln('x1= ',x1:2:2);
  end;
  if b=0 then begin
   x1:=c/a; x2:=-c/a;
   write('x1= ',x1:2:2,' x2= ',x2:2:2);
  end;
   begin
  d:=sqr(b)-4*a*c;
  if d>0 then   begin
   x1:=(-b-sqrt(d))/(2*a);
   x2:=(-b+sqrt(d))/(2*a);
   writeln('korni ur.:');
   writeln ('x1= ',x1:2:2,' x2= ',x2:2:2);
   if d<0 then write('kornei net! t.k. disrk otric. d= ',d:2:2);
   end;   end;
    readkey;
 end.
вот тут мне нехвататет чтобы выводилось сообщение при вводе символов - "введены не числовые коэфф." и чето
begin
if (a=0) and (b=0) or (a=0) and (c=0) or (b=0) and (c=0) then write('uravnenie reweni9 ne imeet');
end;
не так пашет,при вводе a=0 b=3 c=0 выводиться то сообщение выводиться но и корни выводяться равные 0 0 ,как бы убрать чтобы корни не выводились, аналогично и когда a=0 b=0 c=3
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:02 4
Fragman, thedrill, ребят, используйте тэги кода, очень неудобно читать, к тому же этим вы прибавляете работы для модераторов.
1
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:09  [ТС] 5
как я понял мне нужно будет переделать реал в стринг в отдельном блоке ??чтобы если коэффициенты числовые программа работала дальше, а если нет то уже переделывала реал в стринг и считала! только вот как непомню, давно в тп не кодил ((вообще давно не кодил
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:14 6
Fragman, чтобы проверить запись на корректность используйте оператор repeat ... until так будет и проще и короче...
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:17  [ТС] 7
Inadequate, ммм... это потом. Сейчас в другом дело, то что выше писал, ты случаем незнаешь ?)
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:22 8
Fragman, я наверное сильно устал, но я не понимаю в чем в другом, зачем вам вообще проверять что-то? если то что вам я вам предлагаю просто не допустит того чтобы у вас коэффициенты были не числовыми...

Добавлено через 1 минуту
я вот о чем говорил, при желании можно добавить и вещественные числа в список "разрешенных" чисел...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
uses
  crt;
var
  s:string;
{функция проверки на корректность записи}
function Pr(s:string):boolean;
const
  n=['0'..'9'];
var
  i:integer;
  fl:boolean;
begin
  fl:=true;
  for i:=1 to length(s) do
    if not(s[i] in n) then
    begin
      fl:=false;
      break
    end;
  Result:=fl
end;
{основная программа}
begin
  repeat
    readln(s);
    if not Pr(s) then
      writeln('Данная запись не является корректной записью числа!')
  until
    Pr(s);
end.
Добавлено через 57 секунд
тогда вам останется только посчитать ничего не проверяя... если что укажите пальцем на то что я не понял...
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:27 9
Fragman, вы глаза то откройте, я вам написал то о чем вы говорите, моя программа не вылетает если ввести некорректную запись, она извещает о том что запись некорректна, и возращает пользователя опять на ввод тойже переменной... а когда введенное число соответствует то моя программа просто завершается так там больше ничего не написанно...
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:28 10
процедура перевода числа в строку называется Str вот вам справка:
Str(x,s)
Str(x:n,s)
Str(x:n:m,s) процедура s - string, x - integer, real и n, m - integer преобразует x к строковому представлению (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m) и записывает результат в строку s
a перевод строки в число val
Val(s,v,code) процедура s - string, v - integer, real, и code - integer преобразует строку s к числовому представлению и записывает результат в переменную v. Если преобразование возможно, то в переменной code возвращается 0, если невозможно, то в code возвращается ненулевое значение
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:30  [ТС] 11
Цитата Сообщение от Inadequate Посмотреть сообщение
Fragman, вы глаза то откройте, я вам написал то о чем вы говорите, моя программа не вылетает если ввести некорректную запись, она извещает о том что запись некорректна, и возращает пользователя опять на ввод тойже переменной... а когда введенное число соответствует то моя программа просто завершается так там больше ничего не написанно...
а ну тогда больно длинная у тебя программа ))

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
programm abc;
var
a:string;
i:integer;
ot:boolean;
begin
write('vvedite a');
readln(a);
ot:=true;
for i:=1 to Length(a) do
if not(a[i] in ['0'..'9']) ot:=false;
if (ot=false) write("введены не числовые коэффициенты");
end.
эта короче
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:32 12
Fragman, при заданных условиях это наиболее оптимальный вариант, конечно можно было сделать функцию в функции, но если вы не знаете что такое Result:=fl то я думаю вам это не нужно...
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:33  [ТС] 13
Fragman, при заданных условиях это наиболее нормальный вариант, конечно можно было сделать функцию в функции, но если вы не знаете что такое Result:=fl то я думаю вам это не нужно...
это знаю, просто не запускалось
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:33 14
Цитата Сообщение от Fragman Посмотреть сообщение
так она не запускаеться )
если у вас tp7 тогда просто result поменять на имя функции т.е. на Pr
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:38  [ТС] 15
Цитата Сообщение от Inadequate Посмотреть сообщение
если у вас tp7 тогда просто result поменять на имя функции т.е. на Pr
всё работает спасибо! вот только теперь обьединить бы две программы!

Добавлено через 2 минуты
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
uses crt;
var
a,b,c,d,x1,x2:real;
begin
write('vvedite koef. a:');
readln(a);
write('vvedite koef. b:');
readln(b);
write('vvedite koef. c:');
readln(c);
begin
if (a=0) and (b=0) or (a=0) and (c=0) or (b=0) and (c=0) then write('uravnenie reweni9 ne imeet');
end;
if a=0 then begin
x1:=-c/b;
writeln('x1= ',x1:2:2);
end;
if b=0 then begin
x1:=c/a; x2:=-c/a;
write('x1= ',x1:2:2,' x2= ',x2:2:2);
end;
begin
d:=sqr(b)-4*a*c;
if d>0 then begin
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
writeln('korni ur.:');
writeln ('x1= ',x1:2:2,' x2= ',x2:2:2);
if d<0 then write('kornei net! t.k. disrk otric. d= ',d:2:2);
end; end;
readkey;
end.
вот тут мне нехвататет чтобы выводилось сообщение при вводе символов - "введены не числовые коэфф." и чето
begin
if (a=0) and (b=0) or (a=0) and (c=0) or (b=0) and (c=0) then write('uravnenie reweni9 ne imeet');
end;
не так пашет,при вводе a=0 b=3 c=0 выводиться то сообщение выводиться но и корни выводяться равные 0 0 ,как бы убрать чтобы корни не выводились, аналогично и когда a=0 b=0 c=3
и больше мне ничё ненадо только это
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:39 16
Цитата Сообщение от Fragman Посмотреть сообщение
эта короче
если вы не сообразили это только для 1 коэфф. а у вас их 3 так что умножайте на 3. тем более в той проге есть пропуски...
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:41  [ТС] 17
Цитата Сообщение от Inadequate Посмотреть сообщение
если вы не сообразили это только для 1 коэфф. а у вас их 3 так что умножайте на 3. тем более в той проге есть пропуски...
их уже нет я переделал, а толку не то мне нужно! мне нужно чтобы основная программа выдавала сообщение о том что введены символы а не числа и всё! больше ненужно ничего
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:50 18
Fragman, простите конечно я вас не понимаю... на такой мелочи я первый рвз туплю... вы как то непонятно излагаете... я не знаю в каком вы часовом поясе находитесь, но у меня сейчас пости 4 утра, а вы как то изъясняетесь из рук вон плохо...

Добавлено через 1 минуту
вы попросили объянить как вам ограничить ввод, я вам написал, вам что то не нравится, я не понимаю...

Добавлено через 48 секунд
в крайнем случае используйте пост #12
0
Fragman
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 12
13.11.2009, 03:52  [ТС] 19
Цитата Сообщение от Inadequate Посмотреть сообщение
Fragman, простите конечно я вас не понимаю... на такой мелочи я первый рвз туплю... вы как то непонятно излагаете... я не знаю в каком вы часовом поясе находитесь, но у меня сейчас пости 4 утра, а вы как то изъясняетесь из рук вон плохо...

Добавлено через 1 минуту
вы попросили объянить как вам ограничить ввод, я вам написал, вам что то не нравится, я не понимаю...
у меня тоже почти 4 часа сейчас я попытаюсь изложить свои мысли предельно понятно!

Добавлено через 1 минуту
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
program kvur;
uses crt;
var
a,b,c,d,x1,x2:real;
begin
write('vvedite koef. a:');
readln(a);
write('vvedite koef. b:');
readln(b);
write('vvedite koef. c:');
readln(c);
begin
if (a=0) and (b=0) or (a=0) and (c=0) or (b=0) and (c=0) then write('uravnenie reweni9 ne imeet');
end;
if a=0 then begin
x1:=-c/b;
writeln('x1= ',x1:2:2);
end;
if b=0 then begin
x1:=c/a; x2:=-c/a;
write('x1= ',x1:2:2,' x2= ',x2:2:2);
end;
begin
d:=sqr(b)-4*a*c;
if d>0 then begin
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
writeln('korni ur.:');
writeln ('x1= ',x1:2:2,' x2= ',x2:2:2);
if d<0 then write('kornei net! t.k. disrk otric. d= ',d:2:2);
end; end;
readkey;
end.
вот программа, работает всё, кроме - если ввести любой символ выкидывает из программы, а мне нужно чтобы при вводе символа выводилось сообщение - не коректно введены данные!
0
Inadequate
Retired
7710 / 2543 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
13.11.2009, 03:59 20
ну так а что вам мешает заменить это
var
a,b,c,d,x1,x2:real;
на это
Pascal
1
2
3
var
  a,b,c:string;
  d,x1,x2:real;
это
Цитата Сообщение от Fragman Посмотреть сообщение
write('vvedite koef. a:');
readln(a);
write('vvedite koef. b:');
readln(b);
write('vvedite koef. c:');
readln(c);
на это
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  repeat
    readln(a);
    if not Pr(a) then
      writeln('Г„Г*Г*Г*Г*Гї Г§Г*ГЇГЁГ±Гј Г*ГҐ ÿâëÿåòñÿ êîððåêòГ*îé Г§Г*ГЇГЁГ±ГјГѕ Г·ГЁГ±Г«Г*!')
  until
    Pr(a);
begin
  repeat
    readln(b);
    if not Pr(b) then
      writeln('Г„Г*Г*Г*Г*Гї Г§Г*ГЇГЁГ±Гј Г*ГҐ ÿâëÿåòñÿ êîððåêòГ*îé Г§Г*ГЇГЁГ±ГјГѕ Г·ГЁГ±Г«Г*!')
  until
    Pr(b);
begin
  repeat
    readln(c);
    if not Pr(c) then
      writeln('Г„Г*Г*Г*Г*Гї Г§Г*ГЇГЁГ±Гј Г*ГҐ ÿâëÿåòñÿ êîððåêòГ*îé Г§Г*ГЇГЁГ±ГјГѕ Г·ГЁГ±Г«Г*!')
  until
    Pr(c);
и потом a,b,c перевести из типа string в число с помощью процедур указанных в посте #12?
1
13.11.2009, 03:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2009, 03:59

Pascal!? Функция защиты от дурака???
Нужен пример функции как сделать защиту от неправильного ввода, напр. нужно...

Раздача карт при игре в дурака
Всем привет, помогите написать программу раздачи карт при игре в дурака...

Раздача карт при игре в дурака, количество игроков задается с клавиатуры
Здравствуйте помогите чайнику написать программу: раздачи карт при игре в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru