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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2011, 01:38   #1
SlowMotion
 
Регистрация: 14.06.2011
Сообщений: 3
Восклицание Задача по двумерным массивам (С++)

Ребят, подскажите пожалуйста, что я делаю не так? Набросал программу и у меня ошибка, я не могу понять в чём, пол массива заполняется нормально, а во второй половине, при заполнении массива в обратную сторону, возникает ошибка: при переходе на др строку индекс увеличивается на +2, а должен на +1.

Условие задачи(свой вариант я приложил в текстовом файле) :
Нужно заполнить двумерный массив змейкой вот так:
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
Вложения
Тип файла: txt LAB12.txt (1.1 Кб, 127 просмотров)
SlowMotion вне форума Ответить с цитированием
Старый 15.06.2011, 14:37   #2
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

Код:
#include <stdio.h> 
void main(){
 int  i = 1,Mas[10][10];
 int  x = 1; //(* С левого *)
 int  y = 1; //(* верхнего угла *)
 int  dir= -1;// (* Направление влево вниз *)
 int N,M,k;
 printf("Введите параметры (n*m): \t");
 scanf("%d%d",&N,&M); 
 k=N*M;
  for (i = 1;i<=k;i++){
   // (* Проверка, что не вылезли направо *)
    if (x > N)
    {
 
      dir = -dir; //(* изменяем направление *)
      y = y - 2 * dir;// (* корректируем *)
      x = x + dir ;   //  (* позицию *)
      }
   // (* Проверка, что не вылезли вниз *)
    else if( y > M)
    {
      dir = -dir;// (* изменяем направление *)
      y = y - dir;// (* корректируем *)
      x = x + 2 * dir;// (* позицию *)
   }
    //(* Проверка, что не вылезли налево *)
    else if (x < 1 )
    {
      dir = -dir; //(* изменяем направление *)
      x = x + dir;// (* корректируем позицию *) 
      }
   // (* Проверка, что не вылезли вверх *)
    else if (y < 1)
   {
      dir = -dir;// (* изменяем направление *)
      y = y - dir; //(* корректируем позицию *)
   }
    Mas[x][ y] = i; 
    x = x + dir;// (* Переходим к следующей ячейке *)
    y = y - dir; // (* в текущем направлении *)
  }
  for (y = 1;y<= M;y++)
  {
    for (x = 1 ; x<=N ;x++)
      printf("%d\t",Mas[x][y]);
      printf("\n");
   }
   }
вот змейка
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по двумерным массивам t0x Паскаль, Turbo Pascal, PascalABC.NET 3 14.03.2011 20:56
задача по двумерным массивам на C++ Phenom9650 Помощь студентам 2 14.12.2009 20:56
Задача по двумерным массивам(Паскаль) pupik100 Помощь студентам 19 26.10.2009 16:11