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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2009, 01:59   #111
patriarch
Пользователь
 
Регистрация: 24.03.2009
Сообщений: 62
По умолчанию

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

небольшой отход от темы...так я построю дерево бинарное с десятью вершинами слева и справа?
Код:
Struct S{
int Versh;
strcuct s*left;
strcuct s*right;
}
int main(){
int l, r; 
struct s*a=null;
struct s*y=null;

a=malloc(sizeof(strcut S));
a->versh=0;


for(i=0;i<10;i++)
{
y->left=malloc(sizeof(struct s)); 
(y->left)->versh=i;
y=y->left;
}

for(j=0;j<10;j++)
{
y->right=malloc(sizeof(struct s)); 
(y->right)->versh=i;
y=y->right;
}
}

Последний раз редактировалось patriarch; 17.06.2009 в 02:01.
patriarch вне форума Ответить с цитированием
Старый 17.06.2009, 02:54   #112
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от patriarch
Как проверяеться уровень?
Посылайте в функцию обхода текущую глубину и сравнивайте с нужной.
Я сейчас говорю о рекурсии. И при вызове самой себя (для перехода к ветке текущей ветки) нужно посылать (текущую глубину + 1).
Собственно, и при заполнении лучше (имхо) пользоваться рекурсивной функцией.
Цитата:
Сообщение от patriarch
так я построю дерево бинарное с десятью вершинами слева и справа?
Нет. Это получится не дерево, а пара сухих веток по бокам.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Цитата:
Сообщение от Sazary Посмотреть сообщение
Посылайте в функцию обхода текущую глубину и сравнивайте с нужной.
Я сейчас говорю о рекурсии. И при вызове самой себя (для перехода к ветке текущей ветки) нужно посылать (текущую глубину + 1).
Собственно, и при заполнении лучше (имхо) пользоваться рекурсивной функцией.
так?
Код:
int schet(struct S *a, int glub, int tek)
 {
  int res;
  if(tek==glub) return 0;
  if(a->val%2==0) res = 1;
  res += schet(a->left, glub, tek-1);
  res += schet(a->right, glub, tek-1);
  return (res);
 }
Цитата:
Нет. Это получится не дерево, а пара сухих веток по бокам.
А что для дерева нужно?

Последний раз редактировалось patriarch; 17.06.2009 в 20:01.
patriarch вне форума Ответить с цитированием
Старый 17.06.2009, 17:43   #114
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
так?
Ну как-то так. Только в случае нечетности функция может возвратить мусор, т.к. rez будет непроинициализировано.
Код:
 int res=0;
Цитата:
Сообщение от patriarch
А что для дерева нужно?
Обход каждой ветки.

Небольшой пример
Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct S st;

struct S
{
 int value;
 st *left;
 st *right;
};

//-----------------
void print(st *p)  // печать
{
 if(!p) return;
 printf("%d\n",p->value);
 print(p->left);
 print(p->right);
}
//------
void del(st *p)  // удаление дерева
{
 if(!p) return;
 del(p->left);
 del(p->right);
 delete p;
}
//--------

void create(st *&p, int tek, const int& glub)  // создание
{
 if(tek == glub)
  {
   p = NULL;
   return;
  }
 p = (st*)malloc(sizeof(st));
 p->value = tek;
 create(p->left, tek+1, glub);
 create(p->right, tek+1, glub);

}

int main()
{
st *a,*p;

a = (st*)malloc(sizeof(st));
a->value = 0;
a->left = NULL;
a->right = NULL;

p = a;
create(p->left,1,3);
create(p->right,1,3);

p = a;
print(p);
p = a;
del(a);


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

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

а разве в той задаче не нужно условие на то чтобы оно было выше заданной глубины может вот так?

Код:
int schet(struct S *a, int glub, int tek)
{
int res=0;
if(tek==glub) return 0;
if((a->val%2==0)&&(tek>glub)) res = 1; 
res += schet(a->left, glub, tek-1);
res += schet(a->right, glub, tek-1);
return (res);
}
patriarch вне форума Ответить с цитированием
Старый 17.06.2009, 22:00   #116
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а разве в той задаче не нужно условие на то чтобы оно было выше заданной глубины может вот так?
Вы проверяете глубину раньше, вот здесь:
Код:
int res=0;
if(tek==glub) return 0;
Кстати, стоит заметить, что вы уменьшаете значение tek
Код:
res += schet(a->left, glub, tek-1);
поэтому при первом вызове tek должно быть равно нужной глубине, а glub - нулю. Да и вообще тогда можно glub убрать и сразу с нулем сравнивать.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Цитата:
Сообщение от Sazary Посмотреть сообщение
Кстати, стоит заметить, что вы уменьшаете значение tek
А его в данном случае надо уменьшать или увеличивать?я запутался...
и в этой строчке
Код:
a->val%2
что такое val?ее же не обьявляли нигде.

Последний раз редактировалось patriarch; 18.06.2009 в 07:22.
patriarch вне форума Ответить с цитированием
Старый 18.06.2009, 14:52   #118
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от patriarch
что такое val?ее же не обьявляли нигде.
Как это не объявляли? Это, вообще-то, под ваш кусок кода пример:
http://programmersforum.ru/showpost....0&postcount=80

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

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

Цитата:
Сообщение от Sazary Посмотреть сообщение
И так и так можно. Как хотите.
Но ведь насколько я понял tek-1 поднимает нас выше текущей глубины,а tek+1 опускает ниже ее.
То есть это от задачи зависит выше/ниже заданного уровня?
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