Программа не прерывается после выполнения оператора If

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Программа не прерывается после выполнения оператора If

Сообщение fs444 » 02.10.2008 22:35:46

Есть код, который определяет, есть пользователю 16 лет или еще нету.
Код: Выделить всё
Program n17_izvestna_tekushaja_data;
Var year,month,day,user_year_birthday,user_month_birthday,user_day_birthday:Integer;
Begin
  year:=2008;
  month:=10;
  day:=2;
  Writeln('Введите год своего рождения');
  Readln(user_year_birthday);
  If (year-user_year_birthday<16)
  Then Writeln('Вам меньше 16 лет')
   Else If (year-user_year_birthday>16) Then Writeln('Вам больше 16 лет')
    Else If (year-user_year_birthday=16) Then
    Writeln('Введите цифру месяца своего рождения (январь - 1)');
    Readln(user_month_birthday);
    If (month<user_month_birthday) Then Writeln('Вам меньше 16 лет')
     Else If (month>user_month_birthday) Then Writeln('Вам больше 16 лет')
      Else If (month=user_month_birthday) Then
      Writeln('Введите число дня своего рождения');
      Readln(user_day_birthday);
       If (day<user_day_birthday) Then Writeln('Вам меньше 16 лет')
        Else If (day>=user_day_birthday) Then Writeln('Вам больше 16 лет');
  Readln;
End.

В коде программы задается текущий год, номер месяца и число. Пользователь вводит год, номер месяца и число своего рождения с клавиатуры.

Мне не нравится, что программа запрашивает год рождения до тех пор, пока не закончится переменная year. Я хочу чтобы она один раз проверила, действительно ли year-user_year_birthday=16, year-user_year_birthday<16 или year-user_year_birthday>16, и после этого закончила свою работу, то есть вышла из черного экрана, и снова был показан код программы, или пошла дальше выполнять оператор If.

Можно было бы поставить после Writeln('Вам больше 16 лет') оператор Readln, но тогда надо ставить две точки с запятой, что оператор If сделать не позволяет. Как быть?
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа не прерывается после выполнения оператор

Сообщение Brainenjii » 03.10.2008 01:04:18

0.o Не осилил, но на секунду показалось, что тут попахивает незнанием begin end'ов ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Программа не прерывается после выполнения оператор

Сообщение Logo » 03.10.2008 02:35:41

Код: Выделить всё
Program n17_izvestna_tekushaja_data;
Var year,month,day,user_year_birthday,user_month_birthday,user_day_birthday:Integer;
Begin
  year := 2008;
  month := 10;
  day := 2;
  Writeln('Введите год своего рождения');
  Readln(user_year_birthday);
  If (year - user_year_birthday < 16) Then Writeln('Вам меньше 16 лет')
   Else If (year - user_year_birthday > 16) Then Writeln('Вам больше 16 лет')
    Else If (year - user_year_birthday = 16) Then
      BEGIN
        Writeln('Введите цифру месяца своего рождения (январь - 1)');
        Readln(user_month_birthday);
        If (month < user_month_birthday) Then Writeln('Вам меньше 16 лет')
         Else If (month > user_month_birthday) Then Writeln('Вам больше 16 лет')
          Else If (month = user_month_birthday) Then
        BEGIN
          Writeln('Введите число дня своего рождения');
          Readln(user_day_birthday);
           If (day < user_day_birthday) Then Writeln('Вам меньше 16 лет')
            Else If (day >= user_day_birthday) Then Writeln('Вам больше 16 лет');
        END;
      END;
  Readln;
End.   
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Программа не прерывается после выполнения оператор

Сообщение SII » 03.10.2008 13:37:17

fs444 писал(а):Есть код, который определяет, есть пользователю 16 лет или еще нету


Интересно, а программисту, написавшему код, есть 16 лет или ещё нет? :)
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Re: Программа не прерывается после выполнения оператор

Сообщение fs444 » 03.10.2008 20:38:55

Я даже не знал, что в операторе if можно использовать begin/end. Я еще удивился, что в других языках, например, в php, границы кода для then и else (хотя then там нету, это я уж так :)) обозначаются фигурными скобочками, а в паскале никак не обозначаются. Я по книжке паскаль учу, там написано, что оператор if имеет форму
Код: Выделить всё
If <оператор 1> Then <оператор 2>

или
Код: Выделить всё
If <оператор 1> Then <оператор 2> Else <оператор 3>

Поэтому и не знал, что тут можно еще и begin/else ставить.

SII
Да, мне 20 ))
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа не прерывается после выполнения оператор

Сообщение Padre_Mortius » 03.10.2008 21:13:54

Стоит внимательно прочитать про операторы. Они бывают простые и составные.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Программа не прерывается после выполнения оператор

Сообщение SII » 03.10.2008 21:25:02

fs444 писал(а):Я по книжке паскаль учу, там написано, что оператор if имеет форму


begin операторы end -- это составной оператор. Компилятор рассматривает его как единое целое. Поэтому-то в if, while и других указывается оператор, а не операторы.
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Re: Программа не прерывается после выполнения оператор

Сообщение fs444 » 03.10.2008 23:56:06

Понятно :)
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru