| Другое > 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. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |