|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Помогите решить задачи по фортрану |
|
Разное - Помогите решить задачи по фортрану
|
Новый участник Сообщения: 6 |
Доброго времени суток. Не могли бы вы мне помочь решить две задачи. Вот условия:
1) даны натуральное число n, символы s[1],...,s[n]. исключить из последовательности s[1],...,s[n] группы символов, расположенные между скобками (,). сами скобки тоже должны быть исключены. предполагается что внутри каждой пары скобок нет других скобок. (нужно сделать на fortran). 2) в данной действительной квадратной матрице порядка n найти сумму элементов строки, в которой расположен элемент с наименьшим значением (минимальный элемент). предполагается, что такой элемент единственный. (нужно сделать на fortran). Желательно алгоритм решения должен быть максимально прост. Очень надеюсь на вашу помощь и буду премного благодарен. |
|
Отправлено: 20:36, 05-08-2009 |
Ветеран Сообщения: 6211
|
Профиль | Отправить PM | Цитировать IkinG
![]() Как старый фортранщик, мог бы и помочь, но смущают этические проблемы: --- Вам это для отписки (лениво самому разбираться), а зачёт нужен --- одно дело. Думаю, что не стоит поощрять халявщиков… --- Хвосты поджали (припёрло и некогда), другое дело --- без вопросов сделаю. Сами задачи выеденного яйца не стоят, но поставлены из рук вон плохо. Толи Вы такой молодец, толи те, кто Вас научить собрался ещё большие умники. Фортран, для меня святое, хотя не для обучения не предназначен… Ну да ладно, итак??? 1. ANSI.стандарт ФОРТРАНа? Языку более 50 лет!!! На чем реализовывать. В задаче 1 символьные (строковые), данные. В изначальном Базовом Фортране (до 77-го) таких данных нет, но выкрутится можно -- есть код Холлерита. Кодировка символов??? 2. Задача 2. Тип данных: целые, плавающая точка? Да и точность не помешает. Как я понимаю, нужно написать подпрограммы. Хотя для задачи 2 это может быть и функция. 3. Среда. Думаю, что FORTRAN 77 в MS DOS Вам хватит. Но кто знает. |
Отправлено: 21:05, 21-08-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Доброго времени суток. Да, помощь мне действительно необходима. Но задачу с матрицами я уже сделал, а вот задача со строками не получается. Ума не приложу как сделать. Я думаю что лучше воспользоваться встроенными функциями обработки текстовых элементов. Но в данном случае придется ограничить длину строки определённым числом, так как константа n не поддерживается при использовании функций. Я пробовал циклично выводить подстроку, но так получается коряво. При решении я пользуюсь книгой Бартеньева. Все задачи решаю на Фортран 90. Буду премного благодарен за помощь. С уважением IkinG
|
Отправлено: 00:14, 22-08-2009 | #3 |
Ветеран Сообщения: 6211
|
Профиль | Отправить PM | Цитировать IkinG
![]() Задержка на N… месяцев по вредным обстоятельствам --- не было Инета… Решение ниже ///////////////////////////////////////////////////////////// PROGRAM Cutting PARAMETER Bunny ='PROGRAM Cutting (((()))))----()((())())(**** +++(123),+++ & (12) +++(123)////(1234),,,,,(12345) 12345 -- Compaq Visual & Fortran Version 6.1 Home Page !!!(Debugging+++Fortran+++Programs)!!!' CHARACTER ( Len = 200 ) InString ! !------------------------------------------------------------------------------ ! InString = Bunny WRITE (*, *) InString CALL COMPRESS (InString) WRITE (*, *) InString END PROGRAM Cutting ! ============================================================================= ! ! ! COMPRESS.F90 Подпрограмма COMPRESS ! Верезает печатные символы между сбалансированными скобками и сжимает строку... ! Освободившийся хвост строки зачищается пробелами ! ! Аргумент (Фиктивный параметр) ! ---------------------------------------------------------------------------- ! Str --- Строка символов- ! ВНИМАНИЕ ПОДПРОГРАММА "КАЛЕЧИТ ПАРАМЕТР" !!! *** *** *** +++ +++ --- ! !----------------------------------------------------------------------------- ! SUBROUTINE COMPRESS (Str) CHARACTER Str * (*) CHARACTER Char ! Промежуточная Рабочая переменная для хранения символа PARAMETER Left = '(', Rigth = ')', Blank = ' '! Обозвали так скобки и пробел для удобства ! и прозрачности текста программы ! Символ пробела (Нужен для зачистки) ! Blank) = '\0'C Если нужна C - совместимость --- ESC нулями ! (Символические имена лучше литералов...) INTEGER Head, Tail ! Индексы-Указатели на символ в строке... ! Одиночный Символ интерпретируется как подстрока в строке ! P.S. При выходе из подпрограммы длина сжатой подстроки Head - 1 INTEGER LenStr ! Полная длина строки символов INTEGER IBlank ! Индексирует "вычищаемые" символы хвоста (после сжатия0 LOGICAL Closed ! Флаг/Переключатель ---.TRUE. --- В Текущем состоянии Скобки закрыты ! ---.FALSE.. --- В Текущем состоянии Левая скобка открыта ! ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! ! ! ====================>>> Движение по строке слева направо ==========================>>> ! Обрабатываем строку посимвольно в DO-цикле от 1 до LEN(Str) ! ! Смысл Всего ЭТОГО в некотором Текущем состоянии ! ----------------------------------------------- ! ! ! Head --- Текущий указатель на Голову ! ------------------------------------ ! | ! | Tail --- Текущий указатель на Хвост ! | ----------------------------------- ! | | ! | | ! ----------------------------------------- Строка символов ! | с1 | с2 | с3 | .. | .. | .. | .. | N | <=============== ! ----------------------------------------- ! 1 2 3 ... ... ... ... | Указатель на Последний символ строки N == LEN(Str) ! ------------------------------------------------------ ! N == LenStr ! !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! Head = 1 Closed =.TRUE. LenStr = LEN(Str) DO Tail = 1, LenStr !------------------------------------------------------- !Основной программный цикл по массиву одиночных символов !передвигаемся слева направо. ! Нужные символы перебрасываются и хвоста в гллву... ! ! В некотором смысле Хвост из Головы растёт ! --- вначале совпадает с Головой, f затем ! (за счёт"рыхлости"строки символов) иуходит дальше... !------------------------------------------------------- ! Char = Str(Tail : Tail) IF ( Char == Left ) THEN Closed = .FALSE. ELSEIF ( Char == Rigth ) THEN Closed = .TRUE. END IF IF ( Closed .AND. (Char /= Rigth) ) THEN ! --------------------------------------------------------------- ! Если прапвая скобка закрыта и символ не правая скобка ! Только в этом случае сохраняем текущий символ --- ! ! Перебрасываем его из хвоста в голову и сдвигаем голову "вправо" ! --------------------------------------------------------------- Str(Head : Head) = Char Head = Head + 1 END IF END DO DO IBlank = Head, LenStr ! ------------------------------------------------- ! Чистим хвост пробелами..---. ! ! Затираем мусор сразу за головой и до конца строки... !(В Общем случае должен остаться "дубликат") ! перекидываемых символов ! ! Если не было лакун (Скобок), ! то Head > LenStr (Head == LenStr,+ 1) ! и данныый DO - цикл пропускается ! ------------------------------------------------- ! Str(IBlank : IBlank) = Blank ! Стандарт FORTRAN --- забиваем ненужный мусор пробелами END DO END SUBROUTINE COMPRESS |
Отправлено: 16:01, 28-05-2010 | #4 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать прошу помочь. Сложение двух матриц МхN, FORTRAN 77
PROGRAM PR CCCC SLOZHENIE DVUH MATRIC RAZMERA MxN DIMENSION A(100,100),B(100,100),C(100,100) INTEGER A,B,C READ*,M,N DO 1 I=1,M DO 2 J=1,N READ*,A(I,J),B(I,J) 2 CONTINUE 1 CONTINUE PRINT*,'A(M,N)=',((A(I,J),I=1,M),J=1,N) PRINT*,'B(M,N)=',((B(I,J),I=1,M),J=1,N) CALL MATADD(A,B,C,M,N,4) PRINT*,'C=',((C(I,J),I=1,M),J=1,N) END SUBROUTINE MATADD(A,B,C,M,N,LU) DIMENSION A(LU,*),B(LU,*),C(LU,*) INTEGER A,B,C DO 5 I=1,M DO 6 J=1,N C(I,J)=A(I,J)+B(I,J) 6 CONTINUE 5 CONTINUE RETURN END ВВОД ДАННЫХ, ВЫВОД ДАННЫХ/ОТВЕТ ЗАДАЧИ СКОПИРОВАНО ИЗ BUSH: 2 2 1 2 3 4 5 6 7 8 A(M,N)= 1 5 3 7 B(M,N)= 2 6 4 8 C= 3 11 0 0 ОБРАЗЦЫ ВВОДИМЫХ МАТРИЦ A B 1 5 2 6 3 7 4 8 ДОЛЖНО ПОЛУЧИТьСЯ C 3 11 7 15 ПОЛУЧИЛОСь C 3 11 0 0 БОЛЬШОЕ СПАСИБО ЗА ПОМОЩЬ |
|
Отправлено: 02:05, 31-05-2010 | #5 |
Ветеран Сообщения: 6211
|
Профиль | Отправить PM | Цитировать wolf000
![]() Угу, на то он и Баш… Там ВСЕГДА мозгов не хватает, чтобы что-нибудь поумнее придумать… Замените утверждение CALL MATADD(A,B,C,M,N,4) <==== CALL MATADD(A,B,C,M,N,100) И будет Вам шасце… |
Отправлено: 14:24, 31-05-2010 | #6 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Спасибо Tau 0, а ларчик просто открывался.
|
Отправлено: 21:49, 31-05-2010 | #7 |
Новый участник Сообщения: 1
|
Профиль | Сайт | Отправить PM | Цитировать тут есть кто нибудь? ._.
|
Отправлено: 19:47, 28-11-2012 | #8 |
Ветеран Сообщения: 1849
|
Профиль | Отправить PM | Цитировать Иногда есть. А в чем проблемы?
|
Отправлено: 20:10, 28-11-2012 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Помогите решить задачу | zdughi | Программирование и базы данных | 1 | 01-05-2009 06:03 | |
помогите с алгоритмом решения задачи | bool | Хочу все знать | 2 | 14-06-2008 18:43 | |
Разное - помогите решить задачи на QBasic | rockman90 | Программирование и базы данных | 1 | 28-12-2007 18:34 | |
C/C++ - Помогите решить | elektra192 | Программирование и базы данных | 14 | 19-12-2007 18:00 | |
Помогите решить задачи | Anton_pmg | Программирование и базы данных | 3 | 13-03-2006 09:16 |
|