Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50

Выход из положения.

01.09.2011, 14:58. Показов 957. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот программка:
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
Program Con;
 
Uses CRT;
 
Procedure Lolly;
          Begin
               ClrScr;
               Writeln('Мы во втором Гараже');
          end;
          
Procedure Lolly2;
          Begin
               ClrScr;
               Writeln('Тут стена красная');
          end;
Procedure Lolly3;
          Begin
               ClrScr;
               Writeln('Надо попотеть, чтобы выйти из Репита');
          end;
          
Procedure Lolly4;
          Begin
               ClrScr;
               Writeln('Вернулись в первый Гараж');
          end;
Procedure Lolly5;
          Begin
               ClrScr;
               Writeln('Нашли выход. Прогулка окончена');
          end;
          
Var a:string;
Begin
     Repeat
           Writeln('Вы в первом гараже');
           Readln(a);
           If a='Поехали' Then Lolly else
           If a='Цвет' Then Lolly2 else Lolly3;
     Until a='Поехали';
     
     Repeat
           Readln(a);
           If a='Вернулись' Then Lolly4 else
           If a='Выезжаем' Then Lolly5 else Lolly3;
     Until a='Выезжаем';
     
end.
Находясь в первом гараже я могу написать Цвет и узнать цвет стены, потом пишу поехали и попадаю во второй гараж.
Внимание вопрос: Добравшись до второго гаража, т. е. до второго репита в коде, я хочу вернуться в первый и написать слово Цвет, но не могу. Как мне это сделать? Подскажите операцию, которая вернёт в зону первого репита, только не GOTO, пожалуйста =)) Спасибо за внимание)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2011, 14:58
Ответы с готовыми решениями:

нужен выход из положения
Народ, мне нужна ваша помощь! У меня есть готовый код программы, но он у меня не работает... (полный отчет о запуске прилагается ниже) ...

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

Угадай, где выход! (Поиск листа бинарного дерева, содержащего выход из лабиринта)
Никогда раньше не решал задачи на деревья, но вот решил начать. Самая большая проблема в том, что я никак не могу понять примеры тестов...

17
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 15:42
Попробуй так, не очень понял суть.
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
Program Con;
Uses CRT;
var f:boolean;
Procedure Lolly;
          Begin
               ClrScr;
               Writeln('Мы во втором Гараже');
          end;
 
Procedure Lolly2;
          Begin
               ClrScr;
               Writeln('Тут стена красная');
          end;
Procedure Lolly3;
          Begin
               ClrScr;
               Writeln('Надо попотеть, чтобы выйти из Репита');
          end;
 
Procedure Lolly4;
          Begin
               ClrScr;
               Writeln('Вернулись в первый Гараж');
               Writeln;
          end;
Procedure Lolly5;
          Begin
               ClrScr;
               Writeln('Нашли выход. Прогулка окончена');
          end;
Procedure Start;
var a:char;
begin
 Repeat
  Writeln('Вы в первом гараже');
  Writeln('Выберите действие 1 - Поехали 2- Цвет');
  Read(a);
  If a='1' Then Lolly
  else If a='2' Then Lolly2
  else Lolly3;
 Until a='1';
end;
Procedure Finish(var a:char);
begin
 Repeat
  Writeln('Выберите действие 1 - Вернулись 2- Выезжаем');
  Read(a);
  If a='1' Then
   begin
    Lolly4;
    Start;
   end
  else  If a='2' Then Lolly5
  else Lolly3;
 Until a='2';
end;
var a:char;
Begin
 f:=false;
 Repeat
  Start;
  Finish(a);
 Until a='2';
end.
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 16:24  [ТС]
Да.. идея хорошая... засунуть Repeat в Procedure и давать ссылку друг на друга.. Спасибо.. Но ты я вижу с цифрами сделал.. а если с текстом? Мне нужно, чтобы бы команды давали не цифры 1, 2 и так далее, а Выезжаем, Вернулись и так далее...

Добавлено через 24 минуты
Можно то же самое, но со словами как я в начале дал?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 16:27
Цитата Сообщение от Allpowerful Посмотреть сообщение
Можно то же самое, но со словами
Да делай, какая разница слова или цифры, просто при вводе слов легко ошибку сделать.
Замени a:char;
на
a:string;
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 16:38  [ТС]
А если этих Repeat три или больше?... то есть гаражей... Тогда что делать?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 16:41
Да хоть 10, просто нужно четко прописать действия и условия выхода из циклов.

Добавлено через 1 минуту
Можно еще завести флаги, переменные типа boolean и в зависимости от их значений выбирать действие.
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 16:48  [ТС]
Флаги?.. А вот это я не знаю что это.. Объясните пожалуйста, дайте пример или дайте ссылку, где могу прочитать про это.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 17:01
Например определить простое число или нет
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var P,i:integer;
    f:boolean;
begin
clrscr;
repeat
write('Введите натуральное число P=');
readln(P);
until P>0;
if P=1 then f:=false  //1 не простое
else
 begin
  i:=2;//начнем делить на все по порядку, начиная с 2
  f:=true; //считаем что число простое
  while(i*i<=P)and f do //пока квадрат делителя не больше числа и флаг=true
  if P mod i=0 then f:=false //если делится, иеняем значение флага(не простое) и выходим из цикла
  else i:=i+1;//иначе идем дальше
 end;
if f then write('Это простое число') //если флаг не изменился
else write('Это не простое число');
readln
end.
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 17:15  [ТС]
Но тут у тебя определяет не простое или не простое, а чётное или не чётное... но с флагом я начал почти понимать.. из-за того, что здесь много операций, которыми я никогда не пользовался мне тяжело воспринимать.. надо практиковаться больше
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 17:17
Цитата Сообщение от Allpowerful Посмотреть сообщение
тут у тебя определяет не простое или не простое,
А ты хоть программу запусти и мели ерунды...

Добавлено через 1 минуту
Введи например 9 или 15 или 21...
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 17:18  [ТС]
Почему
Pascal
1
if f then write('Ýòî ïðîñòîå ÷èñëî')
А не
Pascal
1
if f=true then write('Ýòî ïðîñòîå ÷èñëî')
Или первичное значение всегда True и потому пишут просто f без этого, да?..
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 17:19
Да потому что это одно и тоже, как и
if not f и if f=false;
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 17:40  [ТС]
Аха... понял... теперь понял..

Добавлено через 19 минут
То есть если я правильно понял, то выражение
Pascal
1
2
3
4
5
Uses CRT;
var n,g:boolean;
begin
If n and g Then writeln('Ïîëó÷èëîñü');
end.
Должно вывести мне слово Получилось, так как n и g, как я понял автоматом считаются True, но не получается пока не сделаешь вот так
Pascal
1
2
3
4
5
6
7
Uses CRT;
var n,g:boolean;
begin
n:=True;
g:=True;
If n and g Then writeln('Ïîëó÷èëîñü');
end.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 17:46
Переменные нужно инициировать, т.е присваивать начальные значения, я же писал
Pascal
1
2
3
4
5
  i:=2;
  f:=true; //инициируем
  while(i*i<=P)and f do 
  if P mod i=0 then f:=false // иеняем значение 
  else i:=i+1;
Добавлено через 2 минуты
А если делать по умолчанию, то обычно(не всегда) начальное значение=0, для boolean=false
Вот пример.
Pascal
1
2
3
4
5
uses crt;
var f:boolean;
begin
write(f);
end.
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 17:47  [ТС]
Так я же спросил..
Цитата Сообщение от Allpowerful Посмотреть сообщение
Или первичное значение всегда True и потому пишут просто f
Цитата Сообщение от Puporev Посмотреть сообщение
Да потому что это одно и тоже
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 17:51
Так в моем примере f было сразу определено
f:=true;
и, если оно не меняло значение, то и осталось true

Добавлено через 1 минуту
А написал я о том, что запись
if f
и
if f=true
в данном случае одно и тоже.
0
2 / 2 / 0
Регистрация: 31.08.2011
Сообщений: 50
01.09.2011, 18:04  [ТС]
Понятно... А если в течение программы f меняет часто значение.. то if f значит Если " самое первоначальное значение" f? То есть я могу в начале программы сказать f:=False и как бы она не менялась, в конце if f будет означать если ложь, то.. и т.д. да?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.09.2011, 18:09
Pascal
1
2
if f  (=> f=true) then write(1)//если сейчас true
else write(2)//если нет
Это мы проверяем условие
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2011, 18:09
Помогаю со студенческими работами здесь

Текстовый редактор. Выход с сохранением. Выход без сохранения.
привет! помогите, плиз: Создайте простейший текстовый редактор, в котором при выходе содержимое объекта Memo будет сохраняться в файл...

События сессии пользователя (вход/выход/блокировка/разблокировка/сон/выход из сна/выключение/перезапуск)
Добрый день. Мне нужно слушать эти события (указаны в заголовке) в реальном времени для логирования. Можно слушать разные события разными...

Как сделать выход из приложения по кнопке выход
Привет! Имеется 3 активити. А1 - запускается при запуске приложения(анимация) А2 - меню ( с кнопкой выход) А3 - мейн...

Кнопка на 3 положения
Привет всем! Возникло желание сделать пульт для фотика, как бы ничего сложного в этом нет, если делать на нескольких кнопках. Вот только...

Детектор положения
Добрый день, уважаемые участники форума. Преамбула: у многих охотников есть собака aka такса, которая забегает в нору и зажимает дичь в...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru