Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 17:32   #1
Alexandr_Snorlax
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 12
По умолчанию Матрица+консольное меню(С++)

Всем доброго времени суток.
Помогите пожалуйста с заданием:
Назовём допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана действительная квадратная матрица порядка 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. защиты от некорректного ввода здесь нет, пока не придумал как это организовать. Если не сложно намекните.
Alexandr_Snorlax вне форума Ответить с цитированием
Старый 23.12.2011, 17:34   #2
Alexandr_Snorlax
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 12
По умолчанию

Код и различные коментарии пришлось урезать, в одно сообщение не вошло
Alexandr_Snorlax вне форума Ответить с цитированием
Старый 24.12.2011, 21:05   #3
Alexandr_Snorlax
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 12
По умолчанию

Неужели никто не поможет?

Последний раз редактировалось Alexandr_Snorlax; 25.12.2011 в 12:50.
Alexandr_Snorlax вне форума Ответить с цитированием
Старый 25.12.2011, 17:21   #4
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Код:
case 1:

break;

case 2:

break;
Сломал глаза пока глядел на ваш код Используйте отступы.
dr.Chas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
консольное меню в pascal VaLenOK007 Помощь студентам 8 26.09.2011 20:08
Меню с Items в виде набора Bitmap (как меню редактирования в Word'е) chandrasecar Мультимедиа в Delphi 7 14.01.2009 09:20
Как создать консольное меню DIIT Общие вопросы C/C++ 5 05.12.2007 23:15
Как создать консольное меню на Си DIIT Помощь студентам 1 01.12.2007 05:30