Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите решить задачу 
V
    Опции темы
Slay1
Дата 17.5.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Помогите пожалуйста решить задачу, не могу найти в чем проблема. 

Цитата

 Ввести прямоугольную матрицу целых чисел. Выполнить циклический сдвиг ее строк
на K позиций вниз. Значение K ввести из клавиатуры. При циклическом сдвиге
вниз элементы последней строки матрицы заносятся на соответствующие места
сдвинутых вниз элементов первой строки.


Код

 #include <stdio.h>
#include <conio.h>
#define n 2
#define m 4
#define k 1
 
void main()
 {
  int i,j,q,t,temp[n],a[n][m];
  clrscr();
  for (j=0; j<m; j++)
  for (i=0; i<n; i++)
    {
     printf("a[%d][%d]=",j+1,i+1);
     scanf("%d",&a[j][i]);
    }
  printf("\nmatrix:\n");
  for (j=0; j<m; j++)
  for (i=0; i<n; i++)
    {
     printf("%d  ",a[j][i]);
     if (i==n-1) printf("\n");
    }
  for (t=0; t<k; t++)
    {
     for (q=0; q<n; q++)
       temp[q]=a[m-1][q];
     for (j=m-1; j>0; j--)
     for (q=0; q<n; q++)
       a[j][q]=a[j-1][q];
     for (q=0; q<n; q++)
       a[0][q]=temp[q];
    }
  printf("\nTransformed matrix:\n");
  for (j=0; j<m; j++)
  for (i=0; i<n; i++)
    {
     printf("%d  ",a[j][i]);
     if (i==n-1) printf("\n");
    }
  getch();
 } 


 Сначала пробовал без масивов, просто цьіклически переставлять числа, все работало.  
Кажется ошьібка где-то тут:
     for (q=0; q<n; q++)
       temp[q]=a[m-1][q];
     for (j=m-1; j>0; j--)
     for (q=0; q<n; q++)
       a[j][q]=a[j-1][q];
Помогите пожалуйста!
 
PM MAIL   Вверх
AlanG
Дата 18.5.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.5.2006
Где: РашЫн ФидирейшЫн

Репутация: нет
Всего: нет



По логике, как сам задумал менять значения?
Объясни на словах, чтобы быстрее понять логику кода.
Какими значениями забиваешь матрицу? 

Это сообщение отредактировал(а) AlanG - 18.5.2006, 08:12
PM MAIL   Вверх
Slay1
Дата 18.5.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Делаю так: переменной temp присваиваю значение последней строки, потом вме остальние строки сдвигаю на одну вниз, то есть
строке j присваиваю значение строки j-1, потом первой строке присваеваю елементьі последней, то есть переменную temp.   

Это сообщение отредактировал(а) Slay1 - 18.5.2006, 08:43
PM MAIL   Вверх
likehood
Дата 18.5.2006, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(Slay1 @  18.5.2006,  00:03 Найти цитируемый пост)
  int i,j,q,t,temp[n],a[n][m];    
  clrscr();    
  for (j=0; j<m; j++)    
  for (i=0; i<n; i++)    
    {    
     printf("a[%d][%d]=",j+1,i+1);    
     scanf("%d",&a[j][i]);    
    }


здесь у тебя ошибка: матрица а у тебя содержит n строк и m столбцов, а в цикле наоборот - j проходит по m строкам, i по n столбцам. Достаточно поменять местами n и m в объявлении массивов а и temp:
Код

int temp[m], a[m][n];


И еще одно замечание: по поводу #define. Если и используешь #define для объявления костант, давай им имена подлинее и желательно в верхнем регистре. Но лучше объявить их так:
Код

const int n=2, m=4, k=1;
 
PM MAIL   Вверх
AlanG
Дата 18.5.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.5.2006
Где: РашЫн ФидирейшЫн

Репутация: нет
Всего: нет



"Пробегая" строку ты должен перемещатся по столбцам smile ., т.е. строка на самом деле строится из столбцов.  В твоем примере ты используешь переменную n в качестве значения строки, в матрице a[n][m];

Код

 for (q=0; q<n; q++)
       temp[q]=a[m-1][q];

И переменная q cдесь зависит от значения - кол-во строк, а ты присваиваешь tempу значение: строка - m-1 и столбец - q. Т.е. перемещаешся по столбцам, но при этом используешь значение строки.

Или это задача такая запутанная, и что-то я недогоняю smile ?  

Это сообщение отредактировал(а) AlanG - 18.5.2006, 09:34
PM MAIL   Вверх
likehood
Дата 18.5.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Если бы в С++ проверялся выход за границы массива (двумерного) ошибку было бы найти намного легче. Не зря же говорят, что на С++ нужно писать очень аккуратно. 
PM MAIL   Вверх
Slay1
Дата 18.5.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Всем спасибо, особенно baronp 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.