Чет я туплю, и дорешать немогу. Задача же вроде легкая. По TPascal 7.0

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Safren
Сообщения: 8
Зарегистрирован: 09 май 2007, 09:19

Вот задача.
"Напишите программу, которая по паролю будет определять степень доступности сотрудника к секретной информации в базе данных. Доступ к базе имеет только человек, входящий в одну из 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.
Извини за длинну кода, не было времени получше подумать -);
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Safren
Сообщения: 8
Зарегистрирован: 09 май 2007, 09:19

уоу, огромное спасибо! и за опреативность, конечно же тоже =) . буду разбирать, как и что =). так бы я наверно сделал, но вот почти весь курс в больнице пролежал =(

еще раз огромное спасибо.
Safren
Сообщения: 8
Зарегистрирован: 09 май 2007, 09:19

Не посчитайте за наглость, но немогли бы вы вкратце написать, что делает команда succes сдесь. Ну во всех, так сказать, вариациях. Не врублюсь никак.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Var Success: boolean; - переменная, которая принимает на себя значения true, если пароль введён успешно, и false если нет.

Код: Выделить всё

...
until (n=3) or (succes);
...
Выход из цикла производится когда истрачены все попытки или когда пароль введён верно (succes).

Код: Выделить всё

...
if not succes then begin
...
- говоря по-русски, этот код означает:

Код: Выделить всё

...
если не пароль_введён_правильно тогда начать
...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Safren
Сообщения: 8
Зарегистрирован: 09 май 2007, 09:19

ааа,в от теперь все понятно. респект вам!
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

так, если пароли вводятся как констаты, то почему бы не сделать выборку Case Of?

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>
Safren
Сообщения: 8
Зарегистрирован: 09 май 2007, 09:19

да лана, уж. уже сдал =) . теперь, гад, просит меня из этого сделать модуль. я хз как это. на лекциях этих меня не было. поможете?
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну, примерно так:
unit myparol;
uses crt;
interface
procedure parol;
implementation
procedure parol;
begin
{Тут вся твоя программа, за исключением program parol в начале и end в конце}
end;

end.

После этого компилируешь файл - получаешь модуль myparol.tpu
Чтобы использовать лежащую в нем процедуру parol в другой программе, пишешь в начале этой другой программы uses myparol;
Теперь в другой программе доступна процедура parol из модуля
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Safren
Сообщения: 8
Зарегистрирован: 09 май 2007, 09:19

Извините, что так долго не отвечал (проц сдох, а деньги на покупку только что появились), вот я сделал, как написал Хыиуду:

Код: Выделить всё

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.
Но перед uses MyParol пишется ошибка 113 Error in Startment. Непойму как делать прогу :\
Ответить