Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 30.12.2018
Сообщений: 5
1

Проблема зацикливания и неправильной работы процедуры

30.12.2018, 15:53. Показов 646. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый день, всем пользователям. Недавно я начал делать простенькую текстового помощника, который является моим домашним заданием по программирования. Но я столкнулся с двумя проблемами. Первая, когда человек вводит в программу неизвестную команду, то помощник должен в свою очередь написать "неправильная команда" и на новой строке вывести окно для ввода, но происходит зацикление и программа бесконечное количество раз пишет "неправильная команда" и не выводит строку. Вторая, при использовании процедуры vivod (см. программу), которая должна выводит содержимое файлов, программа выдаёт ошибку System.ArgumentException: путь имеет недопустимую форму, хотя если вынести процедуру в отдельную программу всё работает.
Код:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
uses crt;
 
const
  l = 'Борис';
  p = 'Борис2000';
 
var
      s:string;
      f:text;
       d, n: integer;
       a, b,o: string;
       i: byte;
  
  procedure graphic ();
begin
  clrscr;
  GotoXY(34, 8);
  writeln('Вход в ОС');
  GotoXY(25, 9);
  writeln('____________________________');
  GotoXY(25, 10);
  writeln('│ Логин:                   │');
  GotoXY(25, 11);
  writeln('│ Пароль:                  │');
  GotoXY(25, 12);
  writeln('----------------------------');
end;
 
procedure Login(d,n :integer);
begin
  graphic;
  GotoXY(33, 10);
  readln(a);
  GotoXY(34, 11);
  i := 0;
  repeat
    if a = 'Борис' then 
    begin
      repeat
        readln(b);
        if b <> p then
        begin
          inc(i);
          delay(1000);
          clrscr;
          GotoXY(20, 12);
          writeln('Пароль неверный,повторите, у Вас осталось ', 3 - i, ' попытки');
          delay(1000);
          clrscr;
          graphic;
          GotoXY(33, 10);
          readln(a);
          GotoXY(34, 11);
        end;
      until (b = p) or (i > 2);
      if i > 2 then 
      begin
        writeln('Все попытки неудачны, доступ закрыт');
        readln;
        exit;
      end;
    end
    else 
    begin
      clrscr;
      delay(1000);
      GotoXY(30, 12);
      writeln('Несуществующий логин');
      delay(1000);
      clrscr;
      graphic;
      GotoXY(33, 10);
      readln(a);
      GotoXY(34, 11);
    end;
  until (a = l) and (b = p);
  n:= random (2,4);
    for d:= 1 to n do 
    begin
      clrscr;
          GotoXY(26, 9);
             writeln('Идет проверка данных.');
          delay (500);
        clrscr;
          GotoXY(26, 9);
             writeln('Идет проверка данных..');
          delay (500);
        clrscr;
          GotoXY(26, 9);
             writeln('Идет проверка данных...');
          delay (500);
    end;
        
  clrscr;
  GotoXY(26, 9);
  writeln('Добро пожаловать, ', a);
end;
 
procedure stroka ();
 begin
 clrscr;
 write ('<>:users:',a,':cmd:');
 end;
 
 procedure vivod  (f:text; s:string);
 begin
 clrscr;
 write('Введите имя файла');
readln(s);
if not fileexists(s) then 
 begin
  writeln('Файл не найден');
  stroka();
 end;
assign(f,s);
reset(f);
readln(f,s);
writeln(s);
close(f);         
 end;         
 
 begin
  Login(d,n);
 while o <> 'exit os' do
 begin
  stroka();
  read (o);
  if o = 'exit os' then exit;
  if o = '1'
    then vivod (f,s)
    else writeln ('недопустимая команда');
 end;
    
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.12.2018, 15:53
Ответы с готовыми решениями:

Проблема, связана с неправильной передачей параметров
Создал на Fortran dll по вычислению некоторой функции: SUBROUTINE ARRAYTEST(x,arr) ...

Драйвер для неправильной работы модема
Доброго времени суток! Может, не в тот форум попал. Надо сделать так, чтобы 2 модема общались...

Запуск процедуры выхода во время работы другой процедуры
как зделать процедуру которая будет запускаться так сказать вне очереди! ну или точнее суть...

Зацикливания в for
Приветствую, может ли мне кто-то обьяснить как тут может быть зацикливания при том что двумерный...

1
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
30.12.2018, 16:20 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//uses crt;
 
const
  l = 'Борис';
  p = 'Борис2000';
 
var
      s:string;
      f:text;
       d, n: integer;
       a, b,o: string;
       i: byte;
  
  procedure graphic ();
begin
//  clrscr;
//  GotoXY(34, 8);
  writeln('Вход в ОС');
//  GotoXY(25, 9);
  writeln('____________________________');
//  GotoXY(25, 10);
  writeln('в”‚ Логин:                   в”‚');
//  GotoXY(25, 11);
  writeln('в”‚ Пароль:                  в”‚');
//  GotoXY(25, 12);
  writeln('----------------------------');
end;
 
procedure Login(d,n :integer);
begin
  graphic;
//  GotoXY(33, 10);
  readln(a);
//  GotoXY(34, 11);
  i := 0;
  repeat
    if a = 'Борис' then 
    begin
      repeat
        readln(b);
        if b <> p then
        begin
          inc(i);
          //delay(1000);
          //clrscr;
          //GotoXY(20, 12);
          writeln('Пароль неверный,повторите, у Вас осталось ', 3 - i, ' попытки');
          //delay(1000);
          //clrscr;
          graphic;
          //GotoXY(33, 10);
          readln(a);
          //GotoXY(34, 11);
        end;
      until (b = p) or (i > 2);
      if i > 2 then 
      begin
        writeln('Все попытки неудачны, доступ закрыт');
        readln;
        exit;
      end;
    end
    else 
    begin
      //clrscr;
      //delay(1000);
      //GotoXY(30, 12);
      writeln('Несуществующий логин');
      //delay(1000);
      //clrscr;
      graphic;
      //GotoXY(33, 10);
      readln(a);
      //GotoXY(34, 11);
    end;
  until (a = l) and (b = p);
  n:= random (2,4);
    for d:= 1 to n do 
    begin
//      clrscr;
//          GotoXY(26, 9);
             writeln('Идет проверка данных.');
//          delay (500);
//        clrscr;
//          GotoXY(26, 9);
             writeln('Идет проверка данных..');
//          delay (500);
//        clrscr;
//          GotoXY(26, 9);
             writeln('Идет проверка данных...');
//          delay (500);
    end;
        
//  clrscr;
//  GotoXY(26, 9);
  writeln('Добро пожаловать, ', a);
end;
 
procedure stroka ();
 begin
// clrscr;
 write ('<>:users:',a,':cmd:');
 end;
 
 procedure vivod  (f:text; s:string);
 begin
// clrscr;
 write('Введите имя файла');
readln(s);
if not fileexists(s) then 
 begin
  writeln('Файл не найден');
  stroka();
 end;
assign(f,s);
reset(f);
readln(f,s);
writeln(s);
close(f);         
 end;         
 
 begin
   Login(d,n);
 while o <> 'exit os' do
 begin
  stroka();
  read (o);
  if o = 'exit os' then exit;
  if o = '1'
    then vivod (f,s)
    else writeln ('недопустимая команда');
 end;
    
end.
Вот теперь отлаживайте свою программу (f7 — f8).
Находите ошибки и расширяйте функционал.
А только после того, как программа начнёт работать как надо, раскомментируйте CRT и занимайтесь „украшателствами“!
0
30.12.2018, 16:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2018, 16:20
Помогаю со студенческими работами здесь

выйти из зацикливания
как выйти из зацикливания если уже прогу понесло какие клавиши давить ctrl+c не помогает

Избавиться от зацикливания
Здравствуйте, возникла проблемка с зацикливанием в программе при использовании while. Программа...

Проблема в составлении процедуры
Подскажите пожалуйста. Процедура принимает входной параметр iLimit , этот же параметр нужно указать...

Неудаёться избавиться от зацикливания
Немогу избавить программу от зацикливания! Помогите её за это отпинать! Что б она мне нервы не...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru