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

Передвижение обьекта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ std::allocator http://www.cyberforum.ru/cpp-beginners/thread2805.html
я не смог найти хорошего описания роботы с аллокатором, так что спрашиваю у тех, кто с ним работал std::allocator::allocate (size_type size, void* hint); по идее hint должен задавать начальную позицию с которой будет выделяться память, но на практике это не выполняется и потом даже если я захочу выделить память там где я хочу - она может быть занята, так как же тогда, например, в векторе так...
C++ Время с cout Пожалуйста,помогите.Нужно сделать консольную программу,которая выводит сообщение через заданное время. Пример: Сначала выводит "Ты" Через 3 секунды выводит "сделал" Потом через 5 секунд выводит "это!" http://www.cyberforum.ru/cpp-beginners/thread2792.html
C++ не использовать do/while ? бред !
меня возмутила статья http://www.cyberguru.ru/programming/cpp/cpp-programming-rules-page67.html в которой автор рекомендует вместо do {} while (); использовать while () {}; давайте же разберёмся что происходит на самом деле do { действия } while ( условие ); если это разложить по косточкам выходит следующее метка: действия if (!условие) goto метка
C++ В матрице удалить строки с элементами на главной диагонали, превышающими заданную величину
В матрице удалить строки с элементами на главной диагонали, превышающими заданную величину, а затем в качестве первой вставить строку из максимальных элементов соответствующих столбцов.(Для размещения массивов следует использовать динамическую память).
C++ Поиск строк http://www.cyberforum.ru/cpp-beginners/thread2768.html
Здраствуйте, подскажите какие есть реализации или как это сделать примерно. Задача в поиске строк в файле, можно воспользоватся регулярными выражениями или алгоритмами типа бойра-Мура, но файл нельзя считать полностью, как првило, поэтому нужна адаптированная реализация которая может получать строку для поиска по частям. Вот что с сделал с БМ, недостаток в том, что если искомая строка входит в...
C++ Не могу сделать exe При компиляций моего пректа exe не создаётся.Выдаёт ошибки,которые я не знаю как исправить...http://dump.ru/files/g/g2067785368/ Программа должна выполнять функцию Надо ввести значение переменной pr с помощью клавиатуры.А другая переменная f определяется случайным значением В конце программы выдает текст типа "Переменная pr равна(значение,заданное вами) и f равна(случайное значение).Помогите... подробнее

Показать сообщение отдельно
bor.is
0 / 0 / 1
Регистрация: 29.08.2007
Сообщений: 9
30.08.2007, 14:07     Передвижение обьекта
ну во-первых если ты создаёшь массив l[5] то у него будут элементы с индексами { 0, 1, 2, 3, 4 } - элементов 5, но индексы с нуля, а не { 1, 2, 3, 4, 5 }
во вторых зачем так мучатся с одномерными массивами - создай двумерный и вообще лучше сделать чтобы карта читалась с файла - удобнее намного

потом интересная строка
Код
l[1]='i'=l[e];
она будет выполняться так
Код
l[1]=('i'=l[e]);
тоесть сначала литере 'i' будет попытка присвоить то что по индексу e в массиве l - думаю здесь определённо будет будет какая-то ошибка при компиляции
я вообще по этой строке не представляю что автор хотел сделать )

ещё одно замечание в блоке switch после каждого case нужно делать break;
вот попробуй
Код
#include <cstdio>

int main () {
   int i = 2; // 0..5
   switch (i) {
      case 0 : { 
         printf ("catch case 0, i equal %d\n", i);
      };
      case 1 : {
         printf ("catch case 1, i equal %d\n", i);
      };
      case 2 : {
         printf ("catch case 2, i equal %d\n", i);
      };
      case 3 : {
         printf ("catch case 3, i equal %d\n", i);
      };
      case 4 : {
         printf ("catch case 4, i equal %d\n", i);
      };
   };
   return 0;
};
выполняй с разными i и погляди на результат, чтобы избежать этого в конце каждого case нужно ставить break;
Код
#include <cstdio>

int main () {
   int i = 2; // 0..5
   switch (i) {
      case 0 : { 
         printf ("catch case 0, i equal %d\n", i);
         break;
      };
      case 1 : {
         printf ("catch case 1, i equal %d\n", i);
         break;
      };
      case 2 : {
         printf ("catch case 2, i equal %d\n", i);
         break;
      };
      case 3 : {
         printf ("catch case 3, i equal %d\n", i);
         break;
      };
      case 4 : {
         printf ("catch case 4, i equal %d\n", i);
         break;
      };
   };
   return 0;
};
вот теперь всё в порядке

с кода в case я вообще прозревал, вообщем вот как я это себе представляю
Код
#include <cstdio>

const int maxy = 10, maxx = 10;

char a[maxx][maxy]; // field
int x, y; // field limits

int Ix, Iy; // coordinats of I

void makei (const int x, const int y) {
   Ix = x;
   Iy = y;
   a[x][y] = 'I';
};

void print () {
   int ix, iy; // help variables;
   iy = 0;
   do {
      ix = 0;
      do {
         putchar (a[ix][iy]);
      } while (++ix != x);
      putchar ('\n');
   } while (++iy != y);
};

void reading () {
   FILE *in = fopen ("sol.in", "r"); // change "sol.in" to your file name
   fscanf (in, "%d%d\n", &x, &y);
   int ix, iy = 0; // help variables;   
   iy = 0;
   do {
      ix = 0;
      do {
         a[ix][iy] = fgetc(in);
      } while (++ix != x);
      fgetc (in); // drop end of line
   } while (++iy != y);
};

void move () {
   char ch;
   /*
    * e - exit
    * w - up
    * s - down
    * a - left
    * d - right
    */
   printf ("e-exit, w-up, s-down, a-left, d-right; command: ");
   while (ch = getchar(), ch != 'e') {
      getchar();
      switch (ch) {
         case 'w' : {
            if ( (Iy != 0) && (a[Ix][Iy - 1] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[Ix][--Iy] = 'I';
            };
            break;
         };
         case 's' : {
            if ( (Iy != (y - 1)) && (a[Ix][Iy + 1] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[Ix][++Iy] = 'I';
            };
            break;       
         };
         case 'a' : {
            if ( (x != 0) && (a[Ix - 1][Iy] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[--Ix][Iy] = 'I';
            };
            break;
         };
         case 'd' : {
            if ( (x != (x - 1)) && (a[Ix + 1][Iy] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[++Ix][Iy] = 'I';
            };
            break;
         };
      };
      print ();
      printf ("e-exit, w-up, s-down, a-left, d-right; command: ");
   };
};

int main () {
   reading ();
   makei (1, 1);
   move ();
   return 0;
};
с помощью makei устанавливай точку I там, где тебе необходимо (помни про индексы с нуля)
создай файл формата: x, y, поле
замени "sol.in" на первой строке в reading () на свой файл, я использовал такой
Код
5 7
XXXXX
XOOOX
XOOOX
XOOOX
XOOOX
XOOOX
XXXXX
выполни в консоли и нажимай e для выхода, w для передвижения вверх, s вниз, a влево, d вправо, после каждой команды жми enter
 
Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru