Другое > Hard'n'Soft
Вспоминаем Turbo Pascal и решаем задачи на нём
<< < (4/15) > >>
topos84:
gepar, да что там сложного-то? Вот разве что один тонкий момент:

--- Цитата ---for j:=1 to 4 do
    begin
      r:=m[j];
      m[j]:=m[11-j];
      m[11-j]:=r;
    end;
--- Конец цитаты ---
Ну так тут все понятно должно быть: r - вещественная переменная, которая используется в качестве "буфера обмена" значениями элементов массива m: m[j] m[11-j]: в переменную r заносится значение m[j] (для сохранности), затем присваиваем m[j]-ому m[11-j]-ое (перезаписываем m[j]), после чего присваиваем m[11-j]-ому элементу массива значение переменной r, в которой (как мы помним) сохранено изначальное значение m[j]-го (до перезаписи его значением m[11-j]-го). Таким образом значения m[j]-го и m[11-j]-го элементов массива поменялись местами (благодаря вспомогательной переменной r). ((Запомни этот прием, он тебе еще пригодится в будущем, когда будешь решать задачи по сортировке массивов.))

Ну, а почему тут 11 вместо 10, думаю, и сам легко догадаешься. Так что тут никакого тонкого момента мне не кажется.
gepar:
topos84, спасибо за то что расписал всё , сегодня уже что-то на сон клонит и не думается после всех решённых упражнений , завтра ещё разок пересмотрю твоё решение дабы дальше на таком не попадаться .
AnXIouS:

--- Цитата: topos84 ---gepar, да что там сложного-то? Вот разве что один тонкий момент:
--- Конец цитаты ---
Можно еще сложнее (вспомнился один жесткий препод):

--- Код: ---for j:=1 to 4 do
    begin
      m[j] := m[j] + m[11-j];
      m[11-j] :=m[j] - m[11-j];
      m[j] := m[j] - m[11-j];
    end;
--- Конец кода ---
topos84:

--- Цитата: AnXIouS ---for j:=1 to 4 do
    begin
      m[j] := m[j] + m[11-j];
      m[11-j] :=m[j] - m[11-j];
      m[j] := m[j] - m[11-j];
    end;
--- Конец цитаты ---
Прямо-таки упражнение для йогов, какое-то!  :lol:
HardWareMan:

--- Цитата: AnXIouS от 23 Ноябрь 2009, 00:29:27 ---Можно еще сложнее (вспомнился один жесткий препод):

--- Код: ---for j:=1 to 4 do
    begin
      m[j] := m[j] + m[11-j];
      m[11-j] :=m[j] - m[11-j];
      m[j] := m[j] - m[11-j];
    end;
--- Конец кода ---

--- Конец цитаты ---
Математическая олимпиада! Обменять значения двух переменных, не прибегая к третей. Помню, помню, школа, класс 8й кажется...
Aku:
gepar, откуда задачи берёшь? Поделись ссылочкой, хочу вернуть прежнюю форму (благо 4 пары НифигаНеДелайИграйВДоту в неделю (a.k.a. Информатика/Програмирование/Обїектно ориентированое и.т.д.) позволяют вполне )
gepar:
Все упражнения из учебника В.В Зеленского (веб версия в виде книги) , нужно залить ?
topos84:
gepar, еще задачки будут?
gepar:
topos84, понравилось ? :) Они то будут ,я же программированию на паскале ещё толком не научился, а вопросы то всегда при обучении возникают .Они просто перестали возникать потому что завтра у меня контрольная по высшей математике .
topos84:

--- Цитата: gepar ---topos84, понравилось ?
--- Конец цитаты ---
Ога. Давно не решал такие (лет восемь уже дедушку Паскаля Борландовича не мучал). Приятно было вспомнить. :)
gepar:
Вообщем возникла небольшая проблемка .
Задание : Есть квадратная матрица А порядка n, векторы х и у являются n элементами. Получить вектор А(х+у).
С подсказкой другана получилось вот такое решение :
uses crt;
const nmax=20;
var a:array[1..nmax,1..nmax] of integer;
    x,y,z:array[1..nmax] of integer;
    n,i,j,k:byte;
begin
clrscr;
repeat
write('Размеры матрицы и векторов от 1 до ',nmax,' n=');
readln(n);
until n in [1..20];
randomize;
writeln('Матрица А:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(9)+1;
    write(a[i,j]:3);
   end;
  writeln;
 end;
writeln;
writeln('Вектор X:');
for i:=1 to n do
 begin
  x:=random(9)+1;
  write(x,' ');
 end;
writeln;
writeln;
writeln('Вектор Y:');
for i:=1 to n do
 begin
  y:=random(9)+1;
  write(y,' ');
 end;
writeln;
writeln;
writeln('Сумма векторов X+Y');
for i:=1 to n do
 begin
  x:=x+y;
  write(x,' ');
 end;
end.
Теперь вопрос почему x и y нужно генерить рендомно да и правильное ли это решение ?
brill:
gepar, я конечно извиняюсь. Но для меня метки ассоциируются с плохо разведенной платой. Когда после разводки начинают лепить поверх провода :blush:
gepar:
brill,ты о чём ?Я же метки не использовал в программе  o_0
brill:
gepar, о твоем первом посту. Где ты хочешь научиться использовать метки :)
Ты не обращай внимания, я просто сказал какие у меня ассоциации с метками...
topos84:

--- Цитата: gepar ---Есть квадратная матрица А порядка n, векторы х и у являются n элементами. Получить вектор А(х+у).
--- Конец цитаты ---
А на русский язык это как можно перевести? Серьезно. x и y - векторы с n координатами (т.е. кортежи из n элементов) или, в матричной терминологии, вектор-столбцы или вектор-строки. Вопрос: какой смысл ты вкладываешь в обозначение A(x+y)? Если бы это была линейная алгебра, а не программирование, то выражение A(x+y) могло бы означать вектор, к которому применили линейный оператор с матрицей А. Я верно все понял? Матрица А - матрица линейного оператора?

Добавлено позже:
Короче не парься, А есть матрица линейного оператора, потому что больше ничем быть не может.
Значит так. Применение линейного оператора к вектору x с n координатами есть умножение квадратной матрицы этого линейного оператора А на вектор-столбец x справа (или же на вектор-строку x слева, что даст тот же результат - вектор А(x)). Так что тебе нужно написать прогу, которая будет умножать квадратную матрицу порядка n (т.е. матрицу nxn) справа на вектор-столбец (т.е. на матрицу nx1). Формулу умножения матриц знаешь?

Добавлено позже:

--- Цитата: gepar ---Теперь вопрос почему x и y нужно генерить рендомно да и правильное ли это решение ?
--- Конец цитаты ---
Потому что ему так захотелось (в условии задачи, как ты его написал, говорится "Есть квадратная матрица А порядка n", при этом не говорится, дана ли она нам (т.е. знаем ли мы ее элементы) или не дана; друган твой решил, что она не дана, поэтому он ее сгенерировал рендомный образом).
gepar:
brill, а , ты об этом, да я ещё после совета aUruM'а от них отказался   , ты просто резко вспомнил их :)
topos84, проблема в том что это всё условие , я тоже если честно , его мало понял  поэтому и спросил у другана а как дальше поступить после генерации матрицы ну и  в итоге имеем что имеем .
topos84:
gepar, короче вариант с генерацией матрицы малоправдоподобен. Скорее всего матрица А либо задана изначально, либо вводится с клавиатуры. Мне больше нравится второй вариант, т.к. и вектора x и y тоже в явном виде не даны, значит и их надо вводить с клавиатуры. Если так, то сначала пишешь процедуру ввода матрицы с клавиатуры, затем процедуру сложения векторов, затем процедуру умножения матрицы справа на вектор-столбец и, наконец, процедуру вывода ответа на экран (тут слово "процедура" не следует понимать буквально, т.е. если тебе не хочется отдельно писать процедуры/функции, то не пиши их, а сразу пиши все в теле программы, но так как процедуры и функции тебе все равно понадобятся для других задач, то лучше пиши сразу с ними, ничего трудного в них нет).

P.S. В аське никогда не бываешь?
gepar:
topos84, в аське я почти всегда онлайн , сегодня проблемы с провайдером были (первый раз увидел пинг 11 секунд , надо было заскриншотить и в тему юмор закинуть , ну да я сразу как-то об этом не подумал  :) )  .По поводу твоего варианта : после того как я пишу процедуру ввода матрици (у меня там рендом,  впринципе всё равно помоему , но могу и исправить) то дальше как мне писать процедуру сложения векторов , когда я незнаю какие сами вектора ? :(
gepar:
Наконецто было время подумать более детально над этим  :

--- Цитата: topos84 ---for j:=1 to 4 do
    begin
      r:=m[j];
      m[j]:=m[11-j];
      m[11-j]:=r;
    end;

--- Конец цитаты ---
И я всё же пришёл к выводу что там ведь всё же 5ка , а не 4ка так как 11 - 4 = 7 и в итоге 6ой и 5ый элементы не обмениваются значениями .
topos84:
gepar, ай, черт! Напутал! Конечно, 10 чисел - четное количество, поэтому неподвижного элемента не будет (я почему-то думал, что 5-ое останется на месте, потому что она есть середина, от которой и будет отражаться последовательность).

Тогда да, не до 4-х, а до 5 пробегает значение j.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии