Цель работы - написать небольшую программку матричного исчисления
matprog. Дальше опишу её функции.
При запуске она должна показывать меню со следующими опциями.
Код:
$ matprog
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
>
Изначально никакая матрица не определена. Опция 4 меню позволяет определять новые матрицы, заполненные произвольными числами между 0 и 1. Программа должна запрашивать "размерности" матрицы и имя соответствующей переменной:
Код:
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 4
What are the dimensions of the matrix?
(number of lines and columns separated by a space)
> 3 4
indicate the name of variable:
> A
Программа должна содержать т.о. созданные матрицы в списке. Опция 1 показывает имена созданных переменных и соответствующие размерности:
Код:
> 1
A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
>
Опция 2 показывает элементы матрицы:
Код:
> 2
indicate the name of variable:
> A
A:
3 x 4
0.0000 0.0010 0.0416 0.1766
0.3646 0.0913 0.0923 0.4872
0.5268 0.4544 0.2332 0.8313
Когда программа завершается, переменные автоматически сохраняются в файле
matrizes.dat (
желательно именно так и обозвать). Когда программа запускается в следующий раз, переменные файла автоматически располагаются в списке переменных и выдаются имена на экране:
Код:
$ matprog
A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
Опция 5 вычисляет транспонированную матрицу и располагает результат в новую переменную. Программа должна запрашивать имя матрицы, которую необходимо транспонировать и имя матрицы, в которую располагать результат:
Код:
> 5
indicate the name of variable:
> A
indicate the name of variable for the result:
> At
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 2
indicate the name of variable:
> At
At:
4 x 3
0.0000 0.3646 0.5268
0.0010 0.0913 0.4544
0.0416 0.0923 0.2332
0.1766 0.4872 0.8313
Cоздание новой произвольной матрицы:
Код:
> 4
What are the dimensions of the matrix?
(number of lines and columns separated by a space)
> 3 4
indicate the name of variable:
> B
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3) B(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 2
indicate the name of variable:
> B
B:
3 x 4
0.0000 0.0010 0.0416 0.1766
0.3646 0.0913 0.0923 0.4872
0.5268 0.4544 0.2332 0.8313
Mатрица В равна матрице А, потому что генератор произвольных чисел не был инициализован.
Опция 6 считает сумму двух матриц. Программа запрашивает у пользователя имена двух матриц и имя для результирующей матрицы:
Код:
> 6
indicate the name of variable: (1st operated):
> A
indicate the name of variable: (2nd operated):
> B
indicate the name of variable for the result:
> A+B
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3) B(3x4) A+B(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 2
indicate the name of variable:
> A+B
A+B:
3 x 4
0.0000 0.0020 0.0833 0.3533
0.7292 0.1827 0.1846 0.9744
1.0535 0.9089 0.4664 1.6626
Программа позволяет использовать результаты предыдущих вычислений для новых вычислений:
Код:
$ matprog
A(3x4) At(4x3) B(3x4) A+B(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 6
indicate the name of variable: (1st operated):
> A+B
indicate the name of variable: (2nd operated):
> A
indicate the name of variable for the result:
> A+B+A
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3) B(3x4) A+B(3x4) A+B+A(3x4)
Ecть опция - убрать переменную из списка. Программа должна освобождать всю память, ассоциированную с переменной и соответствующей матрицей.
Код:
$ matprog
A(3x4) At(4x3) B(3x4) A+B(3x4) A+B+A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 3
indicate the name of variable:
> At
remove var: At(4x3)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) B(3x4) A+B(3x4) A+B+A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 3
indicate the name of variable:
> A+B+A
remove var: A+B+A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) B(3x4) A+B(3x4)
Еще посоветовали использовать короткие функции (вмещается на экране от начала и до конца, т.е. не должна превышать порядка 20 строк без учета комментариев), потому что они удобочитаемы, а кто-то это будет еще и читать...
Поделить функции надвое: 1. Функции, которые функционируют верно. Для этого необходимо написать главную функцию, которая проверяет, что все в порядке. 2. Функции еще не протестированные. Эта подгруппа не может содержать более двух функций (!). Это требование
абсолютно...
Понимаю, можно сделать и по-человечески, но эти требования, сказали, для обучения...(Позже можно будет привести в божеский вид.)
Надо еще как меня тут учили защитить программу, то бишь рассмотреть случаи ввода имен переменных, которые не существуют, создания переменной с именем, которое уже есть в списке, случай вычисления суммы двух матриц с разными размерностями, и т.п. (Это было скорее всего для меня замечание =)))
Важность и здоровье этой программы в том, что ее функции должны исполняться верно. В каком-то сильно мутном случае можно забыть о том, что будет выполнять программа в случае ошибки со стороны пользователя. Единственное законное требование - программа не должна останавливаться. Но я бы хотела, чтобы все было идеально гладко =).
На первый взгляд попроще прежней. Мне, конечно, важно, что я сама сделаю и что мне ткнут пальцем и скажут, что и где не так. (Я в любом случае буду что-то стряпать. Неделька где-то времени.) Но если Вы знаете как, то милости прошу - выкладывайте свой код. Очень хочу научиться разбираться в чужих каракулях. Еще жду ц. у. (ценных указаний).