| 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 в 11: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 в 12: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 в 07: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 в 11: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 в 13: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 |
|
|