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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 20:05   #11
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Axrik Посмотреть сообщение
Эт лаба чтоль? =)
Откуда я знаю. Но не сам же он такую задачу придумал...
Vago вне форума Ответить с цитированием
Старый 28.02.2012, 01:04   #12
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Откуда я знаю. Но не сам же он такую задачу придумал...
ставлю на то что сам
Axrik вне форума Ответить с цитированием
Старый 28.02.2012, 11:51   #13
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Axrik Посмотреть сообщение
... против готу ничего не имею
[Почти] Ваша программа без goto
Код:
#include <windows.h>
#include <iostream.h>
#include <time.h>

#define I 5    // К-во строк в матрице
#define J 10   // К-во столбцов в матрице
#define EVENING_LENGTH  390  // Продолжительность "вечера" (периода зажигания света, мин.)
#define NIGHT_LENGTH    180  // Продолжительность "ночи" (периода гашения света, мин.)
#define EVENING_SUNS1     2  // Количество зажигаемых за раз лампочек
#define NIGHT_SUNS1       3  // Количество выключаемых за раз лампочек
#define DE_T             15  // Шаг моделирования по времени


/*
 * Собственно программа зажигания / гашения света в очередной момент времени.
 * Реализован примитивнейший алгоритм - зажечь / погасить в точности nSuns "лампочек".
 * Отличие от алгоритма, сделанного Axrik, в том, что она "зажигала" также и уже горящие
 * и гасила уже потухшие.
 */
void ChangeLights( char* a, char sun, int nSuns ) {

   int i, k ;
   
   for ( k = 0; k < nSuns; k++ ) {  // Нужно зажечь / погасить nSuns лампочек
      // Проверка на случай, когда хотим зажечь, но уже ВСЁ горит 
      // либо хотим погасить, но уже ВСЁ погашено.
      for ( i = 0; i < I*J; i++ )
         if ( *(a+i) != sun ) break ;
      if ( i == I*J )   // Почему закончили проверку? 
         return ;       // Перебрали всё и не нашли, что ещё можно зажечь / погасить?

      i = rand()%(I*J) ;
      while ( *(a+i) == sun ) 
         i = rand()%(I*J) ;
      *(a+i) = sun ;
   }

}   


void PrintLights( char* a ) {
   int i, j = 0;
   for( i=0; i<I*J; i++ ) {
      cout << ( *(a+i) ? '.' : ' ' ) ;
      if ( ++j == J ) {
         cout << '\n' ;
         j = 0 ;
      }
   }
}


void ZeroMatrix( char* a ) {
   int i ;
   for ( i = 0; i < I*J; i++ )
      *(a+i) = 0 ;
}


void PrintTime( char sun, int t ) {
   cout << ( sun ? "Evening... " : "Night... " ) ;
   cout << ( sun ? t : t-EVENING_LENGTH) << "min." << endl ;
}




int main() {

   int   deT = DE_T , 
         nSuns = EVENING_SUNS1 ,
         t = 0 ;
   char  ms[I][J] , 
         Sun = 1 ;

   srand((unsigned)time(NULL));
   ZeroMatrix( &ms[0][0] ) ;

   while ( t <= EVENING_LENGTH + NIGHT_LENGTH ) {
      system("cls") ;
      PrintLights( &ms[0][0] ) ;
      PrintTime( Sun, t ) ;
//1      getch() ;
      Sleep( 1000 ) ;   //2
      t += deT ;
      if ( Sun )
         if ( t > EVENING_LENGTH ) {  // "Вечер" закончился
            Sun = !Sun ;            // Теперь будем не зажигать а гасить
            nSuns = NIGHT_SUNS1 ;
         }
      ChangeLights( &ms[0][0], Sun, nSuns ) ;
   }

   // В конце "ночи" принудительно гасим ВСЁ
   ZeroMatrix( &ms[0][0] ) ;
   system("cls") ;
   PrintLights( &ms[0][0] ) ;
   PrintTime( Sun, EVENING_LENGTH + NIGHT_LENGTH ) ;
   
   return 0 ;

}
Vago вне форума Ответить с цитированием
Старый 28.02.2012, 17:54   #14
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Это лучше по-вашему?)
Axrik вне форума Ответить с цитированием
Старый 28.02.2012, 18:23   #15
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

А Вы спросите у ТС. Где основной цикл в main() (при полном отсутствии комментариев как у Вас, так и у меня) понятнее? Или замутите отдельную тему с голосовалкой Тернарные операторы и работа с двумерным массивом, как с одномерным, да - определённый выпендрёж. Если нужен уж абсолютно паскалевский стиль, ну, могу переписать
Vago вне форума Ответить с цитированием
Старый 28.02.2012, 22:19   #16
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Честно говоря писать для других не привыкла (если конечно вы намекаете что ваш код всё-таки понятнее)
Да и вообще автор темы помойму уже город заделал пока тут дискуссия.

Цитата:
Сообщение от Vago Посмотреть сообщение
Если нужен уж абсолютно паскалевский стиль, ну, могу переписать
Мой ответ - не нужно. А вообще на этот вопрос не мне отвечать =)

Последний раз редактировалось Axrik; 28.02.2012 в 22:26.
Axrik вне форума Ответить с цитированием
Старый 28.02.2012, 22:43   #17
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Axrik Посмотреть сообщение
Честно говоря писать для других не привыкла
Ну, значит, всё ещё впереди...

Цитата:
Сообщение от Axrik
Да и вообще автор темы помойму уже город заделал пока тут дискуссия.
Да, похоже. Значит, мимо счастья узнать от меня про логнормальное распределение, он проскочил...
Vago вне форума Ответить с цитированием
Старый 29.02.2012, 00:32   #18
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Да, похоже. Значит, мимо счастья узнать от меня про логнормальное распределение, он проскочил...
Да, фатальную ошибку совершил...
Axrik вне форума Ответить с цитированием
Старый 12.03.2012, 01:05   #19
Karp_13
Всё знать хотяка!
Пользователь
 
Аватар для Karp_13
 
Регистрация: 21.04.2009
Сообщений: 67
По умолчанию

Ого тут баталии. А я всё пропустил.
Отвечу ток на самые животрепещущие вопросы насчёт моей уникальной и прекрасной личности, ибо всёж на форуме этом я поселился:
Да я студент. Нет, не "программерского" факультета. Нет, делаю не лабу. Увы, теорию вероятности ненавижу/упустил... так что, наверн(точно не помню), впервые обращаюсь к помощи сети в вопросе создания какого либо алгоритма. Зачем мне этот алгоритм? Я занимаюсь микроконтроллерами, отсюда можно догадаться. Как я отношусь к goto? Я обожаю его и хочу от него детей, жаль редко удаётся им воспользоваться.
И наконец что касается города. Воспользовался пока что советом миркробита "if(rand()%100<a)...". В консоле всё работает вроде не плохо. Но пока не готова механика(домики и лампочки) и проект отложен на три недели. Как подойду к итоговым тестам, так может снова подводный камни вылезут. Но пока что всем спасибо за жаркое внимание и помощь.))) Я вас всех люблю! И ещё долго буду доставать.))
Я вредный и нервный, но бдобр.
Karp_13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напечатать текст, удалив из него все цифры и знаки "+" или "–". Язык С++. KaylasMKTY Помощь студентам 8 07.03.2010 21:35
MS Agent или помошник своими руками Mixasik Компоненты Delphi 2 24.07.2009 15:06
"Hide Folder" своими руками (Delphi) Air Помощь студентам 3 13.11.2008 03:38
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51