Чет я туплю, и дорешать немогу. Задача же вроде легкая. По TPascal 7.0
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
Вот задача.
"Напишите программу, которая по паролю будет определять степень доступности сотрудника к секретной информации в базе данных. Доступ к базе имеет только человек, входящий в одну из 3 групп по степени доступа. Они имеют следующие пароли:
9583, 1747 - доступны модули базы данных А, В, С
3331, 7922 - доступны модули базы данных В, С
9455, 8997 - доступны модули базы данных С
Пароль можно вводить только 3 раза. Если пароль трижды введен неверно, то коментарий <<В доступе отказано>>"
Вобщем, я почти все сделал, но вот незадача - на втором и последуещих циклах, даже если вводиш правильный пароль, то прога продолжает выполнять цикл. Вот, что я намутил:
program parol;
uses crt;
const
a=9583; b=1747;
c=3331; d=7922;
e=9455; g=8997;
var p,n:integer;
begin
clrscr;
writeln ('Vvedite parol');
readln(p);
begin
if (p=a) or (p=b) then
writeln ('dostupen k modulu a,b,c')
else
if (p=c) or (p=d) then
writeln ('dostupen k modulu b,c')
else
if (p=e) or (a=g) then
writeln ('dostupen k modulu c')
else
repeat
n:=n+1;
writeln ('nevernii parol. Ostalos popbItok: ', 3-n);
if n=3 then
writeln ('v dostupe otkazano');
readln;
until n=3;
readln;
end;
end.
Поможете?
Ах да, мне надо доделать задачу до завтра. Заранее благодарю.
"Напишите программу, которая по паролю будет определять степень доступности сотрудника к секретной информации в базе данных. Доступ к базе имеет только человек, входящий в одну из 3 групп по степени доступа. Они имеют следующие пароли:
9583, 1747 - доступны модули базы данных А, В, С
3331, 7922 - доступны модули базы данных В, С
9455, 8997 - доступны модули базы данных С
Пароль можно вводить только 3 раза. Если пароль трижды введен неверно, то коментарий <<В доступе отказано>>"
Вобщем, я почти все сделал, но вот незадача - на втором и последуещих циклах, даже если вводиш правильный пароль, то прога продолжает выполнять цикл. Вот, что я намутил:
program parol;
uses crt;
const
a=9583; b=1747;
c=3331; d=7922;
e=9455; g=8997;
var p,n:integer;
begin
clrscr;
writeln ('Vvedite parol');
readln(p);
begin
if (p=a) or (p=b) then
writeln ('dostupen k modulu a,b,c')
else
if (p=c) or (p=d) then
writeln ('dostupen k modulu b,c')
else
if (p=e) or (a=g) then
writeln ('dostupen k modulu c')
else
repeat
n:=n+1;
writeln ('nevernii parol. Ostalos popbItok: ', 3-n);
if n=3 then
writeln ('v dostupe otkazano');
readln;
until n=3;
readln;
end;
end.
Поможете?
Ах да, мне надо доделать задачу до завтра. Заранее благодарю.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
[quote="Safren"]
Извини за длинну кода, не было времени получше подумать -);
Код: Выделить всё
repeat
n:=n+1][/quote]
Да, у тебя здесь есть ошибочка. В общем, программа у тебя будет выполнять [B]n+1[/B] пока [b]n<>3[/b]. А пароля ты там в readln не вводишь. (так как там просто readln ;) .
Вот рабочий код:
[code]
const
a=9583; b=1747;
c=3331; d=7922;
e=9455; g=8997;
var p,n:integer;
succes: boolean;
procedure enter_password;
begin
succes:=false;
readln(p);
if (p=a) or (p=b) then begin
writeln ('dostupen k modulu a,b,c');
succes:=true;
end else if (p=c) or (p=d) then begin
writeln ('dostupen k modulu b,c');
succes:=true;
end else if (p=e) or (p=g) then begin
writeln ('dostupen k modulu c');
succes:=true;
end;
end;
begin
writeln ('Vvedite parol: ');
repeat
enter_password;
if not succes then begin
n:=n+1;
writeln ('Nevernii parol. Ostalos popbItok: ', 3-n);
if n=3 then
writeln ('v dostupe otkazano');
end;
until (n=3) or (succes);
readln;
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
уоу, огромное спасибо! и за опреативность, конечно же тоже =) . буду разбирать, как и что =). так бы я наверно сделал, но вот почти весь курс в больнице пролежал =(
еще раз огромное спасибо.
еще раз огромное спасибо.
Не посчитайте за наглость, но немогли бы вы вкратце написать, что делает команда succes сдесь. Ну во всех, так сказать, вариациях. Не врублюсь никак.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Var Success: boolean; - переменная, которая принимает на себя значения true, если пароль введён успешно, и false если нет.
Выход из цикла производится когда истрачены все попытки или когда пароль введён верно (succes).
- говоря по-русски, этот код означает:
Код: Выделить всё
...
until (n=3) or (succes);
...
Код: Выделить всё
...
if not succes then begin
...
Код: Выделить всё
...
если не пароль_введён_правильно тогда начать
...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
ааа,в от теперь все понятно. респект вам!
- Oleg_Rus
- Сообщения: 335
- Зарегистрирован: 16 окт 2006, 09:56
- Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
- Контактная информация:
так, если пароли вводятся как констаты, то почему бы не сделать выборку Case Of?
case p of
'9538' .. '1747' : writeln('dostupen k modulu a, b, c');
...
...
end;
или по условию не канает?
case p of
'9538' .. '1747' : writeln('dostupen k modulu a, b, c');
...
...
end;
или по условию не канает?
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
да лана, уж. уже сдал =) . теперь, гад, просит меня из этого сделать модуль. я хз как это. на лекциях этих меня не было. поможете?
Ну, примерно так:
unit myparol;
uses crt;
interface
procedure parol;
implementation
procedure parol;
begin
{Тут вся твоя программа, за исключением program parol в начале и end в конце}
end;
end.
После этого компилируешь файл - получаешь модуль myparol.tpu
Чтобы использовать лежащую в нем процедуру parol в другой программе, пишешь в начале этой другой программы uses myparol;
Теперь в другой программе доступна процедура parol из модуля
unit myparol;
uses crt;
interface
procedure parol;
implementation
procedure parol;
begin
{Тут вся твоя программа, за исключением program parol в начале и end в конце}
end;
end.
После этого компилируешь файл - получаешь модуль myparol.tpu
Чтобы использовать лежащую в нем процедуру parol в другой программе, пишешь в начале этой другой программы uses myparol;
Теперь в другой программе доступна процедура parol из модуля
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Извините, что так долго не отвечал (проц сдох, а деньги на покупку только что появились), вот я сделал, как написал Хыиуду:
Но перед uses MyParol пишется ошибка 113 Error in Startment. Непойму как делать прогу :\
Код: Выделить всё
unit myparol;
uses crt;
interface
procedure parol;
implementation
procedure parol;
begin
uses myparol;
const
a=9583; b=1747;
c=3331; d=7922;
e=9455; g=8997;
var p,n:integer;
begin
clrscr;
writeln ('Vvedite parol');
readln(p);
begin
if (p=a) or (p=b) then
writeln ('dostupen k modulu a,b,c')
else
if (p=c) or (p=d) then
writeln ('dostupen k modulu b,c')
else
if (p=e) or (a=g) then
writeln ('dostupen k modulu c')
else
repeat
n:=n+1;
writeln ('nevernii parol. Ostalos popbItok: ', 3-n);
if n=3 then
writeln ('v dostupe otkazano');
readln;
until n=3;
readln;
end;
end;
end.