Помощь - Поиск - Пользователи - Календарь
Полная версия: массивы и подпрограммы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
drsmoll
Помогите плиз... Не могу по поиску найти
Заданы 2 вектора X=(X1,...,Xm) Y(Y1,...Yn). Сравнить их длины и напечатать большую из них. Длину вектора вычислять в подрпограмме.
Lapp
А у самого какие идеи? Сделал что-нить? начал?..
Покажи..
drsmoll
Цитата(Lapp @ 6.11.2007 14:19) *

А у самого какие идеи? Сделал что-нить? начал?..
Покажи..
идей масса, вот тока бред выходит...
program zad;
uses crt;
var
i:integer;
Lx,Ly,L,K:real;
const
x:array[1..10] of integer = (1,2,3,4,5,6,7,8,9,10);
y:array[1..10] of integer = (1,1,1,1,1,1,1,1,1,1);
procedure S(a:array of integer);
begin
for i:=1 to 9 do
begin
L:= Sqr(a[i])+Sqr(a[i+1]);
end;
K:= Sqrt(L);
end;
begin
S(x);
S(y);
if Lx > Ly then writeln ('Big X',Lx)
else writeln ('Big Y',Ly);
end.


М
Используй теги, пожалуйста (выделить текст, вырать нужный тип в меню CODE)
-- Лопарь

volvo
А теперь попробуй ответить на простой вопрос: чему равны длины векторов X и Y? Без программы, просто, одним числом... Что ты подразумеваешь под "длиной вектора"? Количество элементов массива? Оно у тебя жестко задано еще на этапе компиляции и равно 10, чего же считать?
drsmoll
Цитата(volvo @ 6.11.2007 16:24) *

А теперь попробуй ответить на простой вопрос: чему равны длины векторов X и Y? Без программы, просто, одним числом... Что ты подразумеваешь под "длиной вектора"? Количество элементов массива? Оно у тебя жестко задано еще на этапе компиляции и равно 10, чего же считать?
на сколько я помню, длина вектора равна Sqrt(Sqr(X1)+Sqr(X2)+...Sqr(Xn)), а количества элементов я взял чтобы увидеть, будет ли считать ваще....
Lapp
У тебя неверно считается сумма квадратов. Надо так:
    begin
L:=0;
for i:=1 to 10 do
begin
L:= L + Sqr(a[i]);
end;
K:= Sqrt(L);
end;

Кроме того - как ты выводишь результат из процедуры?
Хотя бы так сделай:
S(x);
Lx := K;
S(y);
Ly := K;

- хотя я бы сделал функцию вместо процедуры.
volvo
Цитата(Lapp)
У тебя неверно считается сумма квадратов
У тебя тоже... Open Arrays всегда индексируются с 0...
Lapp
Цитата(volvo @ 7.11.2007 1:41) *

У тебя тоже... Open Arrays всегда индексируются с 0...

Верно, недогляд. Спасибо, volvo.

drsmoll, сделай тип для вектора. Вот так:
type
tVector = array[1..10] of integer;
const
x: tVector = (1,2,3,4,5,6,7,8,9,10);
y: tVector = (1,1,1,1,1,1,1,1,1,1);

procedure S(a:tVector);


volvo
А вот это напрасно... Судя по первому посту, автор хочет передавать в процедуру массивы разного размера. При жестко заданном типе это становится проблематичным... Гораздо лучше передавать массив (как открытый) и его размер:

procedure S(const a: array of integer; const Len: integer);
var
i: integer; { <-- Нельзя использовать глобальные переменные в качестве счетчика циклов }

begin
L:=0;
for i:=0 to pred(Len) do begin
L := L + Sqr(a[i]);
end;
K:= Sqrt(L);
end;

Lapp
Цитата(volvo @ 7.11.2007 9:11) *

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

Упс, эту возможность я действительно упустил.. Видимо, судил по чему-то другому smile.gif. Sorry, виноват.

drsmoll, ты действительно это подразумевал?
drsmoll
Цитата(Lapp @ 8.11.2007 4:46) *

Упс, эту возможность я действительно упустил.. Видимо, судил по чему-то другому smile.gif. Sorry, виноват.

drsmoll, ты действительно это подразумевал?

исходя из условия, вероятнее всего необходимо ввести X1,X2,...Xm, замем Y1,Y2,...Yn с клавиатуры, в результате получить "Большая длина - Х=...."
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.