Форум «Всё о Паскале» _ Задачи _ массивы и подпрограммы
Автор: drsmoll 6.11.2007 16:12
Помогите плиз... Не могу по поиску найти Заданы 2 вектора X=(X1,...,Xm) Y(Y1,...Yn). Сравнить их длины и напечатать большую из них. Длину вектора вычислять в подрпограмме.
Автор: Lapp 6.11.2007 17:19
А у самого какие идеи? Сделал что-нить? начал?.. Покажи..
Автор: drsmoll 6.11.2007 19:06
Цитата(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 6.11.2007 19:24
А теперь попробуй ответить на простой вопрос: чему равны длины векторов X и Y? Без программы, просто, одним числом... Что ты подразумеваешь под "длиной вектора"? Количество элементов массива? Оно у тебя жестко задано еще на этапе компиляции и равно 10, чего же считать?
Автор: drsmoll 6.11.2007 19:45
Цитата(volvo @ 6.11.2007 16:24)
А теперь попробуй ответить на простой вопрос: чему равны длины векторов X и Y? Без программы, просто, одним числом... Что ты подразумеваешь под "длиной вектора"? Количество элементов массива? Оно у тебя жестко задано еще на этапе компиляции и равно 10, чего же считать?
на сколько я помню, длина вектора равна Sqrt(Sqr(X1)+Sqr(X2)+...Sqr(Xn)), а количества элементов я взял чтобы увидеть, будет ли считать ваще....
Автор: Lapp 7.11.2007 5:22
У тебя неверно считается сумма квадратов. Надо так:
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 7.11.2007 5:41
Цитата(Lapp)
У тебя неверно считается сумма квадратов
У тебя тоже... Open Arrays всегда индексируются с 0...
Автор: Lapp 7.11.2007 5:50
Цитата(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 7.11.2007 13:11
А вот это напрасно... Судя по первому посту, автор хочет передавать в процедуру массивы разного размера. При жестко заданном типе это становится проблематичным... Гораздо лучше передавать массив (как открытый) и его размер:
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 8.11.2007 7:46
Цитата(volvo @ 7.11.2007 9:11)
А вот это напрасно... Судя по первому посту, автор хочет передавать в процедуру массивы разного размера.
Упс, эту возможность я действительно упустил.. Видимо, судил по чему-то другому . Sorry, виноват.
drsmoll, ты действительно это подразумевал?
Автор: drsmoll 8.11.2007 17:13
Цитата(Lapp @ 8.11.2007 4:46)
Упс, эту возможность я действительно упустил.. Видимо, судил по чему-то другому . Sorry, виноват.
drsmoll, ты действительно это подразумевал?
исходя из условия, вероятнее всего необходимо ввести X1,X2,...Xm, замем Y1,Y2,...Yn с клавиатуры, в результате получить "Большая длина - Х=...."