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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2011, 17:45   #1
Azzzza
 
Регистрация: 26.04.2011
Сообщений: 9
По умолчанию Задача с матрицей с++. Не могу найти причину неправильной работы программы.

Матрицу М(m, n) заполнить натуральными числами от 1 до m*n по спирали, начинающейся в левом верхнем углу и закрученной почасовой стрелке
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Вот моя программа, но она не работает, как надо, не могу исправить

#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
main()
{
int n,m;
int i,imax,imin,j,jmax,jmin,k;
cin>> m;
cin >> n;
int**a;
a=new int*[m];
for(i=0; i<m; i++)
a[i]=new int[n];
jmin=1;
jmax=n;
imin=2;
imax=m;
k=0;
for(j=jmin; j<jmax; j++)
{
k++;
a[imin-1][j]=k;
}
for(i=imin; i<imax; i++)
{
k++;
a[i][jmax]=k;
}
imax--;
for(i=imax; i>imin; i--)
{
k++;
a[i][jmin]=k;
}
imin++;
jmin++;
while(k>=m*n)
for(i=1; i<m; i++)
{
cout<<endl;
for(j=1; j<n; j++)
cout<<a[i][j]<<"";
}
getch();
}

Последний раз редактировалось Azzzza; 26.04.2011 в 17:52.
Azzzza вне форума Ответить с цитированием
Старый 26.04.2011, 17:55   #2
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

шапка странная какая то. Попробуйте вот так

#include<iostream>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
using namespace std;
void main()
{
Alt_Shift вне форума Ответить с цитированием
Старый 26.04.2011, 18:03   #3
Azzzza
 
Регистрация: 26.04.2011
Сообщений: 9
По умолчанию

Изменила, программа вобще не запускается, выдает ошибку: Namespace name expected
Azzzza вне форума Ответить с цитированием
Старый 26.04.2011, 18:15   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Какой компилятор? В VS 2010 запускается после добавления using namespace std;
Но результат не выводится, где-то тут ошибка вероятно
Код:
while(k>=m*n)
		for(i=1; i<m; i++)
		{
			cout<<endl;
			for(j=1; j<n; j++)
				cout<<a[i][j]<<"";
                }
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.04.2011, 18:22   #5
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Какой компилятор? В VS 2010 запускается после добавления using namespace std;
Но результат не выводится, где-то тут ошибка вероятно
Код:
while(k>=m*n)
		for(i=1; i<m; i++)
		{
			cout<<endl;
			for(j=1; j<n; j++)
				cout<<a[i][j]<<"";
                }
Ошибка в том, что while -- это вторая часть блока do -- while, вот только do в коде нету -)
Кроме этого, сам алгоритм немного неверный...
Сейчас гляну внимательнее.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 26.04.2011, 20:38   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Ну, вот как-то так...
Код:
#include<iostream>
#include<cstdlib>

using namespace std;

int main()
{
    int columns, rows;
    int rs, re, cs, ce, k;
    
    cout << "Введите количество строк: ";
    cin >> rows;
    cout << endl;
    cout << "Введите количество столбцов: ";
    cin >> columns;
    
    int dimension = rows * columns;
    
    int **Array = new int *[rows];
    for(int i = 0; i < rows; i++)
         Array[i] = new int[columns];
    
    rs = 0;                            
    re = rows-1;
    cs = 0;
    ce = columns-1;
    k = 1;
    
    do 
    {
        // слева направо по столбцам
        if (k > dimension) break;
        for(int ci = cs; ci <= ce; ci++)
            Array[rs][ci] = k++;
        rs++;
        
        
        // сверху вниз по строчкам
        if (k > dimension) break;
        for(int ri = rs; ri <= re; ri++)
            Array[ri][ce] = k++;
        ce--;
        
        // справо налево по столбцам
        if (k > dimension) break;
        for(int ci = ce; ci >= cs; ci--)
            Array[re][ci] = k++;
        re--;
        
        // снизу вверх по строчкам
        if (k > dimension) break;
        for(int ri = re; ri >= rs; ri--)
            Array[ri][cs] = k++;
        cs++;
        
    } while (k < dimension);
    
    // вывод массива
    for(int ri = 0; ri < rows; ri++)
    {
        for(int ci = 0; ci < columns; ci++)
            cout << Array[ri][ci] << "\t";
        cout << endl;
    }
}

Оптимизировать бы его еще -)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 27.04.2011, 00:42   #7
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

А, да!
По-хорошему, еще надо бы и память освободить. После вывода массива:
Код:
    for (int i = 0; i < rows; i++) delete[]columns[i];
    delete[]rows;
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 27.04.2011, 02:44   #8
Azzzza
 
Регистрация: 26.04.2011
Сообщений: 9
По умолчанию

Опять та же ошибка: Namespace name expected, удаляю строку"using namespace std", программа запускается, ввожу кол-во строк, столбцов, нажимаю Enter, консольное окно закрывается...
Azzzza вне форума Ответить с цитированием
Старый 27.04.2011, 12:05   #9
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Попробуй везде перед cout и cin поставить std::
А вообще, это странно, конечно же...
Повторю вопрос коллеги -- какой компилятор?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 27.04.2011, 12:31   #10
Azzzza
 
Регистрация: 26.04.2011
Сообщений: 9
По умолчанию

Очень старый, видимо...
Borland C++ 5.02
Azzzza вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с матрицей. Не могу найти причину неправильной работы программы. Azzzza Общие вопросы C/C++ 1 28.04.2011 21:03
Найдите причину не работоспособности программы Drago56 Общие вопросы C/C++ 14 17.12.2010 15:01
Найдите причину не работоспособнности программы Drago56 Общие вопросы C/C++ 1 16.12.2010 15:44
не могу найти обьяснение в строчке программы vb Юлия-студентка Помощь студентам 7 25.06.2010 11:02
помогите найти причину ошибки! НиКС БД в Delphi 3 10.05.2007 15:55