Страница 1 из 2

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

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

Поможете?

Ах да, мне надо доделать задачу до завтра. Заранее благодарю.

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

Добавлено: 09 май 2007, 12:24
Колядин Максим
[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.
Извини за длинну кода, не было времени получше подумать -);

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

Добавлено: 09 май 2007, 12:29
Safren
уоу, огромное спасибо! и за опреативность, конечно же тоже =) . буду разбирать, как и что =). так бы я наверно сделал, но вот почти весь курс в больнице пролежал =(

еще раз огромное спасибо.

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

Добавлено: 09 май 2007, 20:02
Safren
Не посчитайте за наглость, но немогли бы вы вкратце написать, что делает команда succes сдесь. Ну во всех, так сказать, вариациях. Не врублюсь никак.

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

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

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

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

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

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

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

...
если не пароль_введён_правильно тогда начать
...

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

Добавлено: 09 май 2007, 21:21
Safren
ааа,в от теперь все понятно. респект вам!

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

Добавлено: 15 май 2007, 09:34
Oleg_Rus
так, если пароли вводятся как констаты, то почему бы не сделать выборку Case Of?

case p of
'9538' .. '1747' : writeln('dostupen k modulu a, b, c');
...
...
end;

или по условию не канает?

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

Добавлено: 15 май 2007, 10:16
Safren
да лана, уж. уже сдал =) . теперь, гад, просит меня из этого сделать модуль. я хз как это. на лекциях этих меня не было. поможете?

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

Добавлено: 15 май 2007, 10:43
Хыиуду
Ну, примерно так:
unit myparol;
uses crt;
interface
procedure parol;
implementation
procedure parol;
begin
{Тут вся твоя программа, за исключением program parol в начале и end в конце}
end;

end.

После этого компилируешь файл - получаешь модуль myparol.tpu
Чтобы использовать лежащую в нем процедуру parol в другой программе, пишешь в начале этой другой программы uses myparol;
Теперь в другой программе доступна процедура parol из модуля

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

Добавлено: 29 июн 2007, 07:51
Safren
Извините, что так долго не отвечал (проц сдох, а деньги на покупку только что появились), вот я сделал, как написал Хыиуду:

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

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. Непойму как делать прогу :\