|
|
Модератор форума: No_MaTTeR, Dimitro, LightInDarkness |
Форум Полезное Флудилка programmersf?rum??u/showthread.php?t=?????? |
programmersf?rum??u/showthread.php?t=?????? |
Сообщение # 2 написано 23.12.2011 в 19:49
|
Всем доброго времени суток.
Помогите пожалуйста с заданием: Назовём допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана действительная квадратная матрица порядка n. С помощью допустимых преобразований добиться того, чтобы один из элементов матрицы, обладающий наименьшим значением, распологался в левом нижнем углу матрицы. Ввод, решение, вывод, help должны находиться в меню из 6 пунктов: 1) ввод размерности матрицы и значения элементов с клавиатуры 2) вывести промежуточное решение 3) вывести полученный ответ 4) информация 5) условие задачи 6) выход Также матрица должна быть задана двухмерным динамическим массивом и должна присутствовать защита от некорректного ввода(то есть размерность строго натуральное число, а элементы принимают действительные значения) Вот код: Code #define k 100 using namespace std; int menu(); int main() {setlocale(LC_ALL,"Russian"); int n; int a[k][k], i, j; int temp, min_i, min_j; int* b; int answer=menu(); switch (answer) { case 0: printf("Введите размеры матрицы n: "); scanf("%d", &n); b = (int *) malloc(n * n * sizeof(int)); printf ("\n Введите значения элементов" "массива:\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf ("a[%d][%d]=",i+1,j+1); scanf("%d",&a[i][j]); } } printf ("Нажмите любую клавишу для возвращения в меню..."); getch (); main(); case 1: printf("Исходная матрица:\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%5d", a[i][j]); } printf("\n"); } //минимальный элемент min_i = 0; min_j = 0; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (a[i][j] < a[min_i][min_j]) { min_i = i; min_j = j; }}} //замена колонн for (i = min_j; i; i--) { for (j = 0; j < n; j++) { temp = a[j][i]; a[j][i] = a[j][i - 1]; a[j][i - 1] = temp; } printf("местами столбцов %d и %d:\n", i, i + 1); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%5d", a[i][j]); }printf("\n");}} //замена строк for (i = min_i; i<(n-1); i++) { for (j = 0; j < n; j++) { temp = a[i][j]; a[i][j] = a[i + 1][j]; a[i + 1][j] = temp; } printf("замена строк %d и %d:\n", i+1, i + 2); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%5d", a[i][j]); }printf("\n");}} printf ("Нажмите любую клавишу для возвращения в меню..."); getch(); main(); case 2: for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%5d", a[i][j]); } printf("\n"); } printf ("Нажмите любую клавишу для возвращения в меню..."); getch(); main(); case 3: printf("Зачётная работа\n"); printf("Версия: 1.0\n"); printf("Дата: 22.12.11\n"); printf("Выполнил студент\n"); printf ("Нажмите любую клавишу для возвращения в меню..."); getch(); main(); case 4: printf("Условие задачи:\n"); printf("Назовём допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана действительная" "квадратная матрица порядка n. С помощью допустимых преобразований добиться того, чтобы один из элементов матрицы," "обладающий наименьшим значением, распологался в левом нижнем углу матрицы.\n"); printf ("Нажмите любую клавишу для возвращения в меню..."); getch(); main(); case 5: exit (0); }free(b); system("pause"); return 1; } int menu() { int key=0; int code; do { system("cls"); key=(key+6)%6; if (key==0) cout<<"-> Ввод"<<endl; else cout<<" Ввод"<<endl; if (key==1) cout<<"-> Решение"<<endl; else cout<<" Решение"<<endl; if (key==2) cout<<"-> Ответ"<<endl; else cout<<" Ответ"<<endl; if (key==3) cout<<"-> Help"<<endl; else cout<<" Help"<<endl; if (key==4) cout<<"-> Условие задачи"<<endl; else cout<<" Условие задачи"<<endl; if (key==5) cout<<"-> Выход"<<endl; else cout<<" Выход"<<endl; code=getch(); if (code==224) { code=getch(); if (code==80) key++; if (code==72) key--; } }while(code!=13); system("cls"); return key; } Так вот проблема заключаеться в том, что после ввода значений, перейдя к пункту меню №2 программа не берёт введенные значения. P.S. защиты от некорректного ввода здесь нет, пока не придумал как это организовать. Если не сложно намекните.
Сообщение # 5 написано 23.12.2011 в 20:02
|
| |||
| |||