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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача о рюкзаке.требуется проверить, можно ли заполнить рюкзак полностью.Не знаю в чём ошибка...( http://www.cyberforum.ru/cpp-beginners/thread416582.html
#include "stdafx.h" #include "conio.h" #include <iostream> using namespace std; int main(void) { int m, d; int sum, n, i, j, k, max, x; int go_back, good; printf ("Vvedite max massu: ");
C++ Одномерный массив Задание такое: В целочисленном массиве, сгенерированном случайным образом, найти количество пар соседних элементов, в которых предыдущий элемент кратен последующему. Сделал, вроде работает: #include <stdio.h> #include <conio.h> int main(void) { int i, n, n1, a, k=0; printf ("\n\n Vvedite chislo elementov v massive, ne bolshe 10 i ne menshe 2"); scanf ("%d", &n); if ((n>=2)&&(n<=10)) http://www.cyberforum.ru/cpp-beginners/thread416579.html
Найти целые числа F(k-1) и F(k+1)-предыдущее и последующее числа Фибоначчи C++
Дано целое число N (>1),являющееся числом Фибоначчи: N=Fk(катое).Найти целые числа F(k-1) и F(k+1)-предыдущее и последующее числа Фибоначчи
Составление программы вычисления суммы C++
Дано натуральное число N>0. Вычислить S=1*2+2*3*4+...+N*(N+1)*(N+2)...2N Тест: N=3, S=386. Если не ошибаюсь будет так
C++ программа с массивами http://www.cyberforum.ru/cpp-beginners/thread416544.html
Всем привет. Не получается скомпилировать прогу, выдаёт ошибку что то типа ошибка в переменной Программа с циклами.. Немного о программе!вывести на экран : a0-средн арифм a2 - тоже самое g3- среднее геометр max r0 - массив r6 - массив Помогите пож-та разобраться с ошибками..
C++ Builder Шифр - "Магический Квадрат" Всем привет! можете направить на работу?! нужно разработать программу шифратора с помощью магических квадратов. Перестановка «Магический квадрат» Магическими квадратами называются квадратные таблицы со вписанными в их клетки последовательными натуральными числами от 1, которые дают в сумме по каждому столбцу, каждой строке и каждой диагонали одно и то же число. Подобные квадраты широко... подробнее

Показать сообщение отдельно
snorlax
Сообщений: n/a
24.12.2011, 21:16     Матрица+консольное меню(С++)
Всем доброго времени суток.
Помогите пожалуйста с заданием:
Назовём допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана действительная квадратная матрица порядка 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. защиты от некорректного ввода здесь нет, пока не придумал как это организовать. Если не сложно намекните.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru