int **Matrix = new int*[NX];
switch (var) {
case 1:
{
cout<< rus("Введите порядок:");
 cin>>NX; 
Тут у вас явно неправильно. Вы создаете матрицу порядка NX, а
затем только инициализируете переменную NX. Этот фрагмент
кода смысла явно не имеет. Дальше не смотрел...
Добавлено спустя 5 минут 32 секунды:А потом еще увеличиваете это значение, вот здесь:
NY=NX;
cout<<endl;
NY++;
NX++; 
После чего спокойно делаете вот так:
[quote="allsolovey в 
сообщении #185194"]        for( int z = 0; z<NX; z++ )
                Matrix[z] = new int[NY]; [/quote]
В общем как-то странно вы с массивами обращаетесь...
Добавлено спустя 14 минут 39 секунд:
В общем вы несколько раз используете один и тот же код, например,
когда создаете матрицу. Почему бы вам не создавать ее (причем резервируя
именно столько памяти сколько нужно) один раз до switch и потом заполнять внутри. 
Вообще в таком виде программа не читабельна. Напишите функции,
которые заполняют матрицу и вызывайте их... Кроме того вы нигде
не освобождаете память выделенную под матрицу - это плохо...