imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 19.02.2004, 20:24     # 1
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
Thumbs down Решите задачи на ТурбоПаскале (Save the Jeff)

У нас информатика с 10го класса. Программирования на турбопаскале Учитель впринципе никакой... Всё что мы проходили - это написать формулу вычисления площади/периметра треугольника и т.п. И ещё что-то эта дура толкала про массивы, но никто ничего не понял...

И вот теперь в 11м снова та же самая фигня началась...причём, эта дура считает, что мы с прошлого года что-то запомнили, т.к. она нам "всё прекрасно объснила" (это её слова) и теперь мы пол года будем просто задачи решать....без какой либо теории...

Я сюда буду подкидывать по 2-3 задачи раз в 3 недели примерно...
Кому не лень - решите пожалуйста. Они поидее не такие уж и сложные...

Понеслась....

Задача№ 1:
Написать программу, которая генерирует три последовательности из десяти случайных чисел в диапазоне от 1 до 10, выводит каждую последовательность на экран и вычисляет среднее арифметическое каждой последовательности.

Задача№ 2:
Написать программу приближённого вычисления интеграла методом трапеций. После каждого цикла программа должна выводить вычисленное значение, количество и величину интервалов. (Самое "весёлое" здесь то, что тему Интегралы мы по математике ещё не проходили)

Задача№ 3:
Написать программу, которая вычисляет наибольший общий делитель двух целых чисел.


Вот собссно и всё...Если дело сдвинется с мёртвой точки, то через 3 недели ещё задач подкину...
Jeff вне форума  
Старый 20.02.2004, 10:14     # 2
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
ну это нескольно не веб программирование
по первой задаче:
Код:
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}
взят с http://algolist.manual.ru/maths/teornum/nod.php
__________________
Nunc est bibendum

Последний раз редактировалось is_absent; 20.02.2004 в 10:22.
is_absent вне форума  
Старый 20.02.2004, 10:54     # 3
albo
Advanced Member
 
Аватар для albo
 
Регистрация: 20.08.2003
Адрес: Москва
Пол: Male
Сообщения: 402

albo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царстве
Вторая задача (алгоритм был откуда-то спёрт )
Код:
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.
albo вне форума  
Старый 24.02.2004, 11:30     # 4
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Вообще говоря НОД вычисляется проще:
Код:
{ a, b - входные данные, целые положительные числа }
{ nod - результат }
while a <> b do
  if a > b then a := a - b else b := b - a;
nod := a; { или nod := b; }
Добавлено через 2 минуты:
З.Ы. В первой программе не забудь в начале вставить вызов процедуры Randomize.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 24.02.2004, 13:36     # 5
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Ghost
Согласен. Алгоритм проще, но он сходится дольше.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 03.03.2004, 22:49     # 6
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
Цитата:
Jeff:
Задача№ 2:
Написать программу приближённого вычисления интеграла методом трапеций. После каждого цикла программа должна выводить вычисленное значение, количество и величину интервалов.

Училка сказала, что в решении задачи должен обязательно использоваться цикл repeat

У кого какие соображения на этот счёт?
Jeff вне форума  
Старый 04.03.2004, 05:45     # 7
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Цитата:
Училка сказала, что в решении задачи должен обязательно использоваться цикл repeat
Код:
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.
is_absent вне форума  
Старый 04.03.2004, 09:54     # 8
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
Цитата:
@_is_absent:
code: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;
А нельзя чтоб там слово "repeat" присутствовало?
А то фиг её знает....может и не понять
Jeff вне форума  
Старый 04.03.2004, 10:04     # 9
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
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.
is_absent вне форума  
Старый 04.03.2004, 10:08     # 10
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
@_is_absent
а...блин....тормоз
Jeff вне форума  
Старый 04.03.2004, 14:59     # 11
albo
Advanced Member
 
Аватар для albo
 
Регистрация: 20.08.2003
Адрес: Москва
Пол: Male
Сообщения: 402

albo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царствеalbo Луч света в тёмном царстве
Не забываем перед циклом сделать i:=1;
а в цикле Inc(i);
albo вне форума  
Старый 04.03.2004, 15:04     # 12
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
albo
точно. забыл. каюсь
__________________
Nunc est bibendum
is_absent вне форума  
Старый 09.03.2004, 11:16     # 13
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
Блин...кароч я окончательно запутался
я файл прицепил - гляньте пжалуста - чё у меня там не то
Вложения
Тип файла: rar integral.rar (409 байт, 6 просмотров - Кто скачивал? )
Jeff вне форума  
Старый 09.03.2004, 11:49     # 14
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
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.
Добавлено через 12 минут:
Вот, что получилось у меня:
Код:
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.
Ghost вне форума  
Старый 09.03.2004, 16:07     # 15
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Ghost
второй вариант, imho, правильнее... :-)
__________________
Nunc est bibendum
is_absent вне форума  
Старый 08.04.2004, 21:09     # 16
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
Вот вам ещё:

Написать программу, которая вычисляет сумму диагональных элементов квадратной матрицы.
использовать массивы


Jeff вне форума  
Старый 09.04.2004, 07:13     # 17
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Jeff
begin
{формируем массив}
sum:= 0;
for i:= 1 to N do
tr:=tr + a[i,i];
end;

вроде так.. N - размерность матрицы, tr -- след матрицы (сумма диагональных элементов) a --матрица
__________________
Nunc est bibendum
is_absent вне форума  
Старый 09.04.2004, 11:11     # 18
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
@_is_absent
пардон, за тупость, но можно немного поподробнее?....я только примерно представляю, что такое матрица
Jeff вне форума  
Старый 09.04.2004, 11:14     # 19
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Jeff
квадратная матрица это тоже самое, что и двумерный массив.
определяется он вроде вот так: var a: array [1..10] of array of [1..10] integer;
__________________
Nunc est bibendum
is_absent вне форума  
Старый 09.04.2004, 11:40     # 20
Jeff
Not moD
грузчик кильки
 
Аватар для Jeff
 
Регистрация: 21.07.2002
Адрес: Иссстоооония
Сообщения: 5 439

Jeff СуперБогJeff СуперБогJeff СуперБог
Jeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБогJeff СуперБог
@_is_absent
попробую понять
Jeff вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:45.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.