imho.ws |
![]() |
![]() |
![]() |
# 1 |
Not moD
грузчик кильки Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
У нас информатика с 10го класса. Программирования на турбопаскале
![]() ![]() И вот теперь в 11м снова та же самая фигня началась...причём, эта дура считает, что мы с прошлого года что-то запомнили, т.к. она нам "всё прекрасно объснила" (это её слова) и теперь мы пол года будем просто задачи решать....без какой либо теории... Я сюда буду подкидывать по 2-3 задачи раз в 3 недели примерно... Кому не лень - решите пожалуйста. Они поидее не такие уж и сложные... Понеслась.... ![]() Задача№ 1: Написать программу, которая генерирует три последовательности из десяти случайных чисел в диапазоне от 1 до 10, выводит каждую последовательность на экран и вычисляет среднее арифметическое каждой последовательности. Задача№ 2: Написать программу приближённого вычисления интеграла методом трапеций. После каждого цикла программа должна выводить вычисленное значение, количество и величину интервалов. (Самое "весёлое" здесь то, что тему Интегралы мы по математике ещё не проходили) Задача№ 3: Написать программу, которая вычисляет наибольший общий делитель двух целых чисел. Вот собссно и всё...Если дело сдвинется с мёртвой точки, то через 3 недели ещё задач подкину... |
![]() |
![]() |
# 2 |
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
ну это нескольно не веб программирование
![]() по первой задаче: Код:
var a: array [1..10] of real; i, j: integer; sum: real; begin for i:= i to 3 do begin sum:= 0; WriteLn('Последовательность №', i); for j:= 1 to 10 do begin a[j]:= Random; Write(a[j]:4:4, '':2); sum:= sum + a[j]; end; sum:= sum / 10 WriteLn(); WriteLn('Среднее арифмитическое:', sum:4:4); end; end; ![]() Вторую поищу, где-то была решенная на паскале ![]() вот алгоритм для НОДа (так называемый Бинарный Алгоритм Евклида): Код:
m:= a; n:=b; d:=1; {НОД(a,b) = d * НОД(m,n)} while not ((m=0) or (n=0)) do begin if (m mod 2 = 0) and (n mod 2 = 0) then begin d:= d*2; m:= m div 2; n:= n div 2; end else if (m mod 2 = 0) and (n mod 2 = 1) then begin m:= m div 2; end else if (m mod 2 = 1) and (n mod 2 = 0) then begin n:= n div 2; end else if (m mod 2=1) and (n mod 2=1) and (m>=n)then begin m:= m-n; end else if (m mod 2=1) and (n mod 2=1) and (m<=n)then begin n:= n-m; end; end; {m=0 => ответ=d*n; n=0 => ответ=d*m}
__________________
Nunc est bibendum Последний раз редактировалось is_absent; 20.02.2004 в 10:22. |
![]() |
![]() |
# 3 |
Advanced Member
Регистрация: 20.08.2003
Адрес: Москва
Пол: Male
Сообщения: 402
![]() ![]() ![]() ![]() ![]() ![]() |
Вторая задача (алгоритм был откуда-то спёрт
![]() Код:
function Func(const x: Real): Real; begin Func:=x+2; end; function Min(const v1, v2: Real): Real; begin if (v2>v1) then Min:=v1 else Min:=v2; end; function Integrate(const a, b, eps: Real): Real; var x1, x2, Result: Real; i, Count: Longint; begin Result:=0; Count:=Round(Abs(b-a)/eps); for i:=1 to Count do begin Result:=Result + (Abs(b-a) + Abs(Min(Func(a+Count*eps), Func(a+Count*eps+eps))))*eps; end; Integrate:=Result; end; var a, b, eps: Real; begin Write('Введите начальное значение x: '); Readln(a); Write('Введите конечное значение x: '); Readln(b); Write('Введите точность: '); Readln(eps); Writeln('Результат: ', Integrate(a, b, eps)); end. Последний раз редактировалось albo; 20.02.2004 в 11:19. |
![]() |
![]() |
# 4 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вообще говоря НОД вычисляется проще:
Код:
{ a, b - входные данные, целые положительные числа } { nod - результат } while a <> b do if a > b then a := a - b else b := b - a; nod := a; { или nod := b; } З.Ы. В первой программе не забудь в начале вставить вызов процедуры Randomize.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
![]() |
![]() |
# 6 | |
Not moD
грузчик кильки Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() Училка сказала, что в решении задачи должен обязательно использоваться цикл repeat У кого какие соображения на этот счёт? ![]() |
|
![]() |
![]() |
# 7 | |
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Цитата:
Код:
repeat ... until abs(b - a) < eps Код:
Count:=Round(Abs(b-a)/eps); for i:=1 to Count do begin Result:=Result + (Abs(b-a) + Abs(Min(Func(a+Count*eps), Func(a+Count*eps+eps))))*eps; end; ![]()
__________________
Nunc est bibendum Последний раз редактировалось is_absent; 04.03.2004 в 06:10. |
|
![]() |
![]() |
# 8 | |
Not moD
грузчик кильки Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() А то фиг её знает....может и не понять |
|
![]() |
![]() |
# 9 |
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Jeff
Прочитай внимательней :-) Result:=Result + (Abs(b-a) + Abs(Min(Func(a+Count*eps), Func(a+Count*eps+eps))))*eps; нужно вставить вместо многоточия в моем примере ![]() Код:
Count:=Round(Abs(b-a)/eps); repeat Result:=Result + (Abs(b-a) + Abs(Min(Func(a+Count*eps), Func(a+Count*eps+eps))))*eps; until i > Count ![]()
__________________
Nunc est bibendum Последний раз редактировалось is_absent; 04.03.2004 в 10:08. |
![]() |
![]() |
# 14 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
inc(i) нужно вставлять внутрь цикла repeat...until, а не после него.
Добавлено через 2 минуты: Непонятно еуда вставлен integrate := result; Вот, что надо было: Код:
uses crt; function Func (const x: real): real; begin func := x + 2; end; function min (const v1, v2: real): real; begin if (v2 > v1) then min := v1 else min := v2; end; function integrate (const a, b, eps: real): real; var x1, x2, result: real; i, count: longint; begin result := 0; i := 1; count := round (abs(b - a) / eps); repeat result := result + (abs(b - a) + abs(min(func(a + count * eps), func(a + count * eps + eps)))) * eps; inc (i); until i > Count; integrate := result; end; var a, b, eps: real; begin write('Vvedite nachalnoe znachenie x: '); readln(a); write('Vvedite konechnoe znachenie x: '); readln(b); write('Vvedite tochnost: '); readln(eps); writeln('Rezultat: ', integrate(a, b, eps)); end. Вот, что получилось у меня: Код:
uses crt; type integr_func = function (x: real): real; function f(x: real): real; far; begin f := x * x; end; procedure integrate (f: integr_func; a, b, e: real; var r: real); var s, s0, h: real; n, i: integer; begin n := 10; s := 0; repeat s0 := s; s := 0; h := (b - a) / n; for i := 0 to pred(n) do s := s + (f(a + h * i) + f(a + h * succ(i))) * h * 0.5; writeln (' n = ', n:6, ', result = ', s:10:6); n := n * 2; until abs(s - s0) <= e; r := s; end; var a, b, e, r: real; begin clrscr; write ('enter a: '); readln (a); write ('enter b: '); readln (b); write ('enter e: '); readln (e); writeln ('calculate...'); integrate (f, a, b, e, r); writeln ('result = ', r:10:6); readkey; end.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 09.03.2004 в 12:03. |
![]() |
![]() |
# 17 |
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Jeff
begin {формируем массив} sum:= 0; for i:= 1 to N do tr:=tr + a[i,i]; end; вроде так.. N - размерность матрицы, tr -- след матрицы (сумма диагональных элементов) a --матрица
__________________
Nunc est bibendum |
![]() |