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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2009, 19:26   #11
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Извините за наглость,а со второй никто не поможет?
Ну лично я с деревьями еще не работал и их не изучал.
Вопрос в тему: а вы сами-то что-нибудь делать будете?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 19:32   #12
patriarch
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 62
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Ну лично я с деревьями еще не работал и их не изучал.
Вопрос в тему: а вы сами-то что-нибудь делать будете?
да буду,нам задали 5 лаб.3 я вроде написал...сейчас пытаюсь разобраться с вашим кодом на 1 задачу(если не очень сложно то можно какие-нибудь комментарии к коду или алгоритм расписать?).Насчет деревьев мы их сами ещё не прошли,преподователь сказал что будут недели через 2.
patriarch вне форума Ответить с цитированием
Старый 28.03.2009, 19:40   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

// функция проверяет, не встречается ли число (аргумент value)
// ранее в своей строке или столбце
// если нет, возвращает 1, иначе - 0
int check(int *M, int n, int numi, int numj, int value)
{
int i;
for(i=numi-1;i>=0;i--)  // идем по строке
 if(M[i*n + numj]==value)
  return 0;
for(i=numj-1;i>=0;i--)  // идем по столбцу
 if(M[numi*n + i]==value)
  return 0;
return 1;
}
//------------


int main()
{
const int N = 5;  // размерность матрицы
int i,j,k,l,matr[N][N],mas[N],nm=0;
int b=0,cnt=0;
srand(time(NULL));

//=========================
for(i=0;i<N;i++)   // идем по строкам
 {
  nm = 0;  
  cnt = 0;   // этот счетчик нужен для защиты от зависания
  for(j=0;j<N;j++)    // идем по столбцу
   {
    b=0;    // считаем, что число не подходит
    while(b==0)  // пока не нашли подходящее число
     {
      k = rand()%N+1;  // генерируем число
      b = 1;            // считаем, что оно нам подходит
      for(l=0;l<nm;l++)  // проходим по массиву чисел, которые уже проверили
       if(k==mas[l])   // если текущее число там есть
        b = 0;   // значит оно нам не подходит

     } // while
   
    if(check(&matr[0][0],N,i,j,k)==1)  // проверяем, подходит ли число
     {
      matr[i][j] = k;   // если да, то пишем его в матрицу
      mas[nm++] = k;   // и заносим в массив просмотренных чисел
     }
    else j--;    // иначе ищем число заново для данной ячейки
    cnt++;    
    if(cnt>=100)  // если зависли...
     {
      i--;   // то переделаем предыдущую строку
      break;
     }
   } // for j


 } //for i
//---------------------------

for(i=0;i<N;i++)
 {
  for(j=0;j<N;j++)
    printf("%4d",matr[i][j]);
  printf("\n");
 }

getch();
return 0;
}
Цитата:
Насчет деревьев мы их сами ещё не прошли,преподователь сказал что будут недели через 2.
Так а зачем тогда задачу выкладывать, если вы их еще даже не проходили?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 19:55   #14
patriarch
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 62
По умолчанию

а что за защита от зависаний?? и зачем переменные nm и mas[N]?
Задачу дал чтобы вдруг если бы не понял то обьяснили бы...просто надо 5 лаб сдать на зачет.
patriarch вне форума Ответить с цитированием
Старый 28.03.2009, 20:01   #15
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а что за защита от зависаний??
Ну я несколько раз позапускал, и там изредка программа вешалась. Это происходило из-за того, что она попадала в тупик и не могла найти подходящей комбинации чисел для строки.
Вот и добавил защиту - если программа виснет, то переделываем предыдущую строку.

Цитата:
и зачем переменные nm и mas[N]?
У нас берутся числа от 1 до 5. К примеру, для какой-то ячейки мы сгенерировали число. Но оно не подошло (не прошло check). Тогда нужно брать другое число. Но числа у нас берутся не по порядку, поэтому нужно держать массив чисел, которые не прошли проверку.
Вот mas и есть этот массив. А nm - его размер.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 20:07   #16
patriarch
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 62
По умолчанию

а почему от 1 до 5? насколько я знаю цифры это от нуля до 9.
а программа зависает когда cnt принимает очень большие значения(больше или равные 100)?
patriarch вне форума Ответить с цитированием
Старый 28.03.2009, 20:16   #17
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а почему от 1 до 5? насколько я знаю цифры это от нуля до 9.
от 1 до 5 потому что размер матрицы - 5.
Если сделать размер 6, то будут от 1 до 6.
В условии же сказано, чтобы суммы по столбцам и строкам были одинаковы. А самый удобный способ это реализовать - использовать один набор чисел для каждой строки и столбца.

Цитата:
а программа зависает когда cnt принимает очень большие значения(больше или равные 100)?
Изначально cnt вообще не было. Почему зависала я объяснил в предыдущем посте.
Ввел cnt. После каждого заполнения (скажем, попытки заполнения) конкретной строки, он увеличивается. Если он дошел до 100, то можно с уверенностью сказать, что программа висит, т.е. не может подобрать нужную комбинацию.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 20:17   #18
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Извините, если не в тему, но «работа с деревьями» — это тот же самый перебор координат (его узлов).

Поэтому задача 2 сводится к ПОДСЧЁТУ сумм расстояний (по теореме Пифагора), а не к рисованию ломаных линий и «кустов».

Последний раз редактировалось Sasha_Smirnov; 28.03.2009 в 20:21.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 28.03.2009, 20:22   #19
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Sasha_Smirnov, ну да. Собственно, как вы и говорили раньше, это больше напоминает граф. Только вот с графами я тоже пока не очень лажу )
Если бы тут точки могли бы соединяться только последовательно, то было бы легче.. Но из одной точки ведь может быть проведено несколько линий..
Вроде, есть какие-то стандартные алгоритмы для подобных задач.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 20:24   #20
patriarch
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 62
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
от 1 до 5 потому что размер матрицы - 5.
Если сделать размер 6, то будут от 1 до 6.
В условии же сказано, чтобы суммы по столбцам и строкам были одинаковы. А самый удобный способ это реализовать - использовать один набор чисел для каждой строки и столбца.
То есть я правильно понимаю что для каждой строки и столбца используеться набор от 1 до 5?Просто сколько не запускал программу не видел в ней цифр больше 5.А разве с 6,7,8,9 подобную матрицу построить нельзя?
patriarch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение матрицы методом союзной матрицы dofmat Помощь студентам 6 03.10.2011 15:01
Чистый бинарный код НикСерг Общие вопросы C/C++ 16 09.11.2009 15:06
деревья ShenDy Общие вопросы C/C++ 0 13.03.2009 19:18
Деревья Mitron Общие вопросы Delphi 5 01.02.2008 10:09
Деревья Зёка_студент Помощь студентам 1 26.12.2007 21:47