Хобрук: Ваш путь к мастерству в программировании

попытка записи строки в подпрограмме вызывает ошибку

Из-за некоторых ограничений моего назначения используется F77. Я учусь использовать подпрограмму, но сталкиваюсь с ошибкой при попытке записать строку.

  PROGRAM test
  IMPLICIT NONE
  INTEGER a
  CHARACTER*20 STR,str1
  STR = 'Hello world'
  a = 1     
  WRITE (*,*) a  
  WRITE (*,10) STR    
  CALL TEST(str1)
  STOP
  END

  SUBROUTINE test(str2)
  CHARACTER*20 str2
  str2 = 'testing'
  WRITE (*,10) STR2
  RETURN
  END

При попытке скомпилировать этот код он возвращает «Ошибка: отсутствует оператор номер 10».

Кроме того, у меня есть еще несколько вопросов:

  1. Что означает *20 в CHARACTER*20 STR? Это размер строки?

  2. Как насчет 10 в WRITE (*,10) STR? Это длина строки, которую нужно записать?

  3. что означает (*,*) в WRITE (*,*) a

02.02.2019

  • Пожалуйста, используйте тег fortran для всех вопросов по Fortran. 02.02.2019
  • Ваши вопросы действительно касаются базового синтаксиса языка, и вы могли бы найти лучшие ответы в своей любимой книге или учебнике по Фортрану; таким образом, я считаю это не по теме здесь. Я дам вам несколько ссылок, чтобы вы могли читать и учиться: 1. синтаксис символов, 2. метка формата и оператор, 3. синтаксис записи 03.02.2019
  • Также в отзыве своему преподавателю, пожалуйста, скажите, что Fortran77 не должен был преподаваться в течение последних 20 лет и является неподходящим инструментом для студентов в этом возрасте, которым следует, по крайней мере, преподавать Fortran95, лучше Fortran2003. 03.02.2019

Ответы:


1

Как вы можете прочитать, например, здесь: https://www.oliquity.com/computer/fortran/io.html

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

Таким образом, если вы предоставляете данные напрямую, вы можете вместо этого использовать *. В противном случае ваша программа должна иметь метку 10 в какой-то строке с оператором форматирования.

И да, CHARACTER*20 STR означает, что переменная STR имеет длину 20, как вы можете прочитать, например, здесь: https://www.oliquity.com/computer/fortran/datatype.html

02.02.2019

2

*20 после CHARACTER указывает размер переменной CHARACTER (в данном случае 20 символов). FORTRAN не использует строки с завершающим нулем, как в других языках, вместо этого вы должны зарезервировать определенное количество символов. Ваша фактическая строка может быть короче переменной, но не длиннее.

Запятая ( , ) в операторе записи используется для разделения различных аргументов. Некоторые версии FORTRAN позволяют вам предоставлять «именованные» аргументы, но по умолчанию первым аргументом является код файла для записи (знак «*» подразумевает стандартный вывод). Вторым аргументом будет номер строки оператора FORMAT. Аргументов может быть больше, вам придется искать особенности оператора OPEN в вашей версии FORTRAN.

Некоторые из ваших операторов WRITE() указывают на использование оператора FORMAT, найденного в метке '10'. Но в вашем образце нет оператора FORMAT, так что это будет ошибкой.

Если вы не хотите иметь дело с оператором FORMAT, вы можете использовать звездочку ( * ) в качестве второго аргумента, и тогда FORTRAN будет использовать общий формат по умолчанию. Это то, что делает ваша первая команда WRITE(,). Он пишет в 'stdout', используя общий формат.

02.02.2019
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..