Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Процедура

Автор: Alexandr 8.01.2006 20:55

Помогите пожалуйста написать программу по процедурам.Я уже заходил на FAQ файлы и в поиск
но такого не нашел.
1. Вычислить: 1. Даны три вещественных массива A(N), B(M), C(K). Определить, какие из них расположены в порядке возрастания.
и если можно подскажите что-нибудь про эту задачу если вам не трудно:
2. Привести дробь 1 + 1/2 + 1/3 + ... + 1/15 к несократимому виду c/d. ( процедура, приводящую дробь a/b к несократимому виду p/q.)

Автор: volvo 8.01.2006 21:10

Первая будет такой:

procedure IsAZ(var arr: array of real; const size: integer;
var Ok: boolean);
var i: integer;
begin

i := 1; Ok := true;
while (i < size) and Ok do
if arr[i - 1] >= arr[i] then Ok := false
else inc(i);

end;

Вызов:
Var
a: array[1 .. 10] of real;
Good: boolean;
...
IsAZ(a, 10, good); { В Good содержится результат проверки (true - возрастающий массив) }

Вторую задачу попробуй решить сам...

Автор: Shura 8.01.2006 21:13

По первой задаче.... Ну вчера же решение похожей выкладывал.. Только там со строками матрицы нужно сделать похожее. Ну а матрицу можно считать массивом массивов.
http://forum.pascal.net.ru/index.php?showtopic=8638&st=5#

Автор: volvo 8.01.2006 21:15

Shura, а ты что, работал там с процедурами? Я почему-то не заметил этого.

Автор: Shura 8.01.2006 21:26

Я не думаю что забить кусок кода из той программы в процедуру очень уж сложно... Alexandr сказал, что он искал, но ничего не нашел - я лишь указал на недавний пост.

Вот вторая задача. Так как пояснений, как именно нужно сокращать числитель и знаменатель (типа, куда минус девать если что, сокращать ли минусы, и прочее...) нету, то решение только для положительных А и B.

Код

Uses
Crt;

var
a,b,p,q: LongInt;

Procedure make(a,b: LongInt; var p,q: LongInt);
var
  c: LongInt;
begin
  if b = 0 then
    begin
     p:=a;
     q:=b
    end
  else
    if (a mod b) = 0 then
      begin
       p:=a div b;
       q:=1
      end
    else
      begin
       if a < b
       then c:=a
       else c:=b;
    while (c > 1)and(not((a mod c = 0)and(b mod c = 0)))
    do Dec(c);
       p:=a div c;
       q:=b div c
      end;
  Write(a, ' / ', b, ' = ');
  if q = 1
  then Write(p)
  else Write(p, ' / ', q)
end;

begin
ClrScr;
Write('Vvedite a,b: ');
ReadLn(a,b);
a:=abs(a);
b:=abs(b);
Make(a,b,p,q);
ReadLn
end.

Автор: Alexandr 8.01.2006 23:19

Спасибо за помощь volvo.Вот ничтяк, даже не ожидал что мне так поможет этот форум.
<...>
<БОЛЬШОЕ СПССИБО>