Продолжим совершенствование нашей программы. Пусть после того, как на экран выдан результат, программа не завершает свою работу, а спрашивает пользователя, не желает ли он продолжить складывать (вычитать, делить, умножать) числа. И пусть при получении утвердительного ответа работа программы продолжается - снова запрашиваются значения двух чисел и знак арифметической операции, вычисляется результат и так далее, до тех пор, пока пользователь не откажется от дальнейшей работы с программой, введя отрицательный ответ.
Заметим, что программу, выполняющую указанные действия, можно написать по-разному. Ниже приведен один из многих возможных вариантов:

       character s,a            ! определяем переменные s и а типа "character" т.е."символьные"
33   write(*,*)" x="        ! эта строка, в которой выводится " x= ", помечена меткой 33
       read(*,*) x                ! считывается с экрана вводимое пользователем значение x
       write(*,*)" znak="   ! выводится на экран подсказка " Znak= "
       read(*,'(a)') s            ! считывается вводимое пользователем значение s (знак)
       write(*,*)" y="         ! выводится " у= "
       read(*,*) y                ! считывается с экрана вводимое пользователем значение у
       if(s.eq."+") z=x+y    ! если s='+' то z присваивается X+Y
       if(s.eq."-") z=x-y      ! если s='-' то z присваивается X-Y
       if(s.eq."*") z=x*y     ! если s='*' то z присваивается X*Y
       if(s.eq."/") z=x/y       ! если s='/' то z присваивается X/Y
       write(*,*)x,s,y,"=",z ! пишем на экран ответ
       write(*,*)" Continue (y/n)?"         ! вопрос пользователю: продолжить?(y/n), т.е. (да/нет)
       read(*,'(a)') a            ! переменной "a" присваиваем первый символ ответа пользователя
       if((a.eq.'y').or.(a.eq.'Y')) goto 33   ! ..и если это "y" или "Y", переходим на метку 33
       end

Обратите внимание на строку read(*,'(a)') s, в которой считывается вводимое пользователем значение s (знака). Параметр, определяющий, как трактовать вводимые данные здесь равен '(a)'. Это означает, что ожидаемые вводимые данные - символ. Можно было бы написать и read(*,*) s, но тогда при вводе знака арифметического действия его необходимо брать в апострофы.
Вообще, этот вариант программы продемонстрирован, в основном, для иллюстрации оператора
goto <метка>,
передающего управление на строку программы, помеченной меткой.
В нашем случае <метка> определена как "33" , и если на вопрос программы "Continue(yes/no)?';" (т.е. "продолжить(да/нет)?") пользователь ответит "y" (или "Y" или "yes" или "YES"), то управление будет передано на строку, помеченную меткой "33" (т.е. на строку write(*,*)" x=").
Отметим, что отношение многих программистов к оператору goto весьма отрицательно: доходит до того, что использование goto считается дурным тоном среди профессионалов и запрещается преподавателями к применению при написании программ студентами. И среди основных доводов против называют:
1) При частом использовании операторов goto и многочисленных меток в программе в них легко можно запутаться.
2) В современных языках программирования (в т. ч. в Фортране) достаточно средств организации переходов без применения goto.
Однако мы не будем столь категоричны.

                    <<ранее             к оглавлению        далее>>

                      то же на С                        то же на Basic                 то же на Pascal

Используются технологии uCoz