Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2009, 21:19   #1
Anna5
 
Регистрация: 30.06.2009
Сообщений: 5
По умолчанию Нужно решить 2 задачи на Фортране ,никак не сдам курсовую

1)Пусть дан массив а(1),...,а(n).Требуется переставить а(1),...,а(n)так,чтобы сначала в массиве шла группа элементов,больших того элемента,который в исходном массиве располагался на первом месте,затем-сам этот элемент потом-группа элементов,меньших или равных ему.Число сравнений и перемещений,каждое по отдельности,не должно превышать n-1.

2)Найти с точностью 0.0001 все корни уравнения 1/х=sin(x),принадлежа-
щего отрезку[-pi,pi]
Anna5 вне форума Ответить с цитированием
Старый 01.07.2009, 10:47   #2
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

2.
Код:
	PROGRAM KOREN
	DATA PI/3.141528/,EPSILON/0.0001/
	X=-PI
	YP=1/X-SIN(X)
1	IF(X.GT.PI) GOTO 7
	X=X+EPSILON
	IX(X.EQ.0) GOTO 1
	YN=1/X-SIN(X)
	IF(YP*YN.LE.0) WRITE(5,10) X
	YP=YN
	GOTO 1
7	CONTINUE
10	FORMAT('  X=',G10.4)
	END
Заранее извиняюсь за ошибки в синтаксисе. Лет 20 не пользовался этим языком. Это, сейчас не тестировал, но идея такова. По первой задаче дайте свои наработки

1.
Код:
	SUBROUTINE REBUILD(A(N),N)
	K=N
	J=2
	FOR I=2,N,1
	TEMP=A(J)
	IF (A(J)-A(J-1)) 112,113,113
112	A(J)=A(J-1)
	A(J-1)=TEMP
	J=J+1
	GOTO 111
113	A(J)=A(K)
	A(K)=TEMP
	K=K-1	
111	CONTINUE
	END
Не ручаюсь за точный синтаксис оператора цикла, а так должно работать. Это Fortran IV
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Stilet; 08.07.2009 в 09:55.
Anatole вне форума Ответить с цитированием
Старый 01.07.2009, 23:17   #3
Anna5
 
Регистрация: 30.06.2009
Сообщений: 5
По умолчанию

БОльшое спасибо)программы работают но непонятны.ВЫ бы не могли написать ход решения?

Последний раз редактировалось Anna5; 02.07.2009 в 18:45.
Anna5 вне форума Ответить с цитированием
Старый 03.07.2009, 11:29   #4
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Просмотрел синтаксис операторов. комментарии буду давать с учётом необходимых правок.
Код:
SUBROUTINE REBUILD(A(N),N)
С один из индексов устанавливаем на конец массива, сюда будем записывать элементы меньшие и равные первому
	K=N
С второй индекс устанавливаем на второй элемент, сюда будем переставлять первый элемент, если он меньше, чем следующий
	J=2
С начинаем цикл просмотра элементов, заканчивающмйся оператором с меткой 111
	DO 111 I=2,N,1
C Присваиваем буферной переменной значение очередного просматриваемого элемента
	TEMP=A(J)
С Сравниваем значение очередного элемента с предыдущим элементом
	IF (A(J)-A(J-1)) 112,113,113
С  записываем значение первого элемента на место следующего
112	A(J)=A(J-1)
С Записываем сохранённое значение следуещего элемента на место первого
	A(J-1)=TEMP
C переходим к рассмотрению следующего элемента
	J=J+1
С Переход на конец цикла
	GOTO 111
С Записываем в позицию текущего элемента один из элементов из конца массива 
113	A(J)=A(K)
С Записываем сохранённое значение в один из элементов в конце 
	A(K)=TEMP
С Сдвигаем позицию для хранения элементов меньших за первый к началу массива 
	K=K-1	
С это метеа для конца цикла
111	CONTINUE
	END
и вторая задача: алгоритм работает простым перебором всех значений функции на всём заданом промежутке с шагом, равным необходимой точности. Для выделения корней используется то свойство, что при пересечении оси абсцис значения функции меняют свой знак. А следовательно произведение текущего значения функции и предыдущего будет отрицательным.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 03.07.2009, 21:22   #5
Anna5
 
Регистрация: 30.06.2009
Сообщений: 5
По умолчанию

Спасибо),первая прорамма понятна полностью ,во второрой непонятна строка
Код:
if(x.eq.0)goto 1
и нужна ли она ,без неё программа также работает.
И строка
Код:
yp=yn
Anna5 вне форума Ответить с цитированием
Старый 05.07.2009, 00:56   #6
Anna5
 
Регистрация: 30.06.2009
Сообщений: 5
По умолчанию

Во второй программе строка
Код:
if(x.eq.0)goto 1
как я поняла ,должна исключать корень х=0,но она не работает
Строка
Код:
yp=yn
несовсем понятна

Последний раз редактировалось Anna5; 05.07.2009 в 00:59.
Anna5 вне форума Ответить с цитированием
Старый 06.07.2009, 13:58   #7
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Код:
if(x.eq.0)goto 1
Во первых х=0 не является корнем уравнения, a точкой разрыва первого рода, и во вторых если не сделать такую проверку, то при x=0 ваша программа может вылететь по делению на 0.
Код:
yp=yn
в программе хранятся два значения функции: в текущей точке и в предыдущей. При переходе к новой точке сохраням значение функции в теущей точке как в предыдущей. Это основная идея алгоритма.
Подумайте как отличить точку разрыва первого рода от корня уравнения. Это необходимо учесть в программе.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 06.07.2009 в 15:53.
Anatole вне форума Ответить с цитированием
Старый 07.07.2009, 17:54   #8
Anna5
 
Регистрация: 30.06.2009
Сообщений: 5
По умолчанию

Большое спасибо
Anna5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пишу курсовую нужно решить задачу для примера на геометрическую прогрессию (Pascal) =|винтик|= Помощь студентам 4 25.05.2009 16:38
Нужно срочно решить 3 задачи.....помогите плиз gector Помощь студентам 3 31.01.2009 09:59
Никак не могу решить две математические задачи на Паскале skl1f Помощь студентам 4 30.11.2008 22:23
Нужно СРОЧНО решить нетрудные задачи по QBasic Final Фриланс 2 20.06.2007 22:29