Форум программистов, компьютерный форум CyberForum.ru

Матрица+консольное меню(С++) - C++

Восстановить пароль Регистрация
 
snorlax
Сообщений: n/a
24.12.2011, 21:16     Матрица+консольное меню(С++) #1
Всем доброго времени суток.
Помогите пожалуйста с заданием:
Назовём допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана действительная квадратная матрица порядка n. С помощью допустимых преобразований добиться того, чтобы один из элементов матрицы, обладающий наименьшим значением, распологался в левом нижнем углу матрицы.
Ввод, решение, вывод, help должны находиться в меню из 6 пунктов:
1) ввод размерности матрицы и значения элементов с клавиатуры
2) вывести промежуточное решение
3) вывести полученный ответ
4) информация
5) условие задачи
6) выход
Также матрица должна быть задана двухмерным динамическим массивом и должна присутствовать защита от некорректного ввода(то есть размерность строго натуральное число, а элементы принимают действительные значения)
Вот код:
Код
#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. защиты от некорректного ввода здесь нет, пока не придумал как это организовать. Если не сложно намекните.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 21:16     Матрица+консольное меню(С++)
Посмотрите здесь:

C++ консольное окно
C++ Консольное меню
Консольное окно C++
матрица с меню C++
C++ подскажите - консольное меню не реагирует на нажатие клавиш (case)
C++ Консольное меню MVC
C++ TextUserInterface меню(Консольное приложение)
Матрица: ввод, вывод, выполнение задания. Оформление с функциями и меню C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru