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