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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2009, 01:11   #1
energywav
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию Бинарное дерево??

Вот код, скажите мне что это такое и с чем его едят? Мне конкретно нужно знать, бинарное дерево это или нет)))
energywav вне форума Ответить с цитированием
Старый 18.12.2009, 01:13   #2
energywav
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию

#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
///////////////////
struct chel{
int num;
char name[21];
char tel[13];
struct chel* next;
};
char* cmd={"adddelfndshwhlpedtdla"};
char alf[]={"0123456789abcdefghijklmnopqrstuv wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "};
///////////////////
void output(char *buf);
void dialog();
int input(int num,char* str,int lim);
int ch_find(char c,char *buf,int n);
int cmd_scan(char *str);
void output_int(int x);
int input_int();
void tk_add(chel* beg);
void tk_del(chel* beg);
void tk_fnd(chel* beg);
void tk_shw(chel* beg);
void tk_edt(chel* beg);
void tk_dla(chel* beg);
chel* aloc_mem();
chel* last_fnd(chel* beg);
chel* num_fnd(chel* beg,int n);
///////////////////
int _tmain(int argc, _TCHAR* argv[])
{
dialog();
return 0;
}
///////////////////
void dialog()
{
chel *beg;
beg=aloc_mem();
beg->num=0;
int i,command;
char str[4];
output("/n!!!Telephone book!!!/n----------------------------------------------------------------/n");
output("/nCommands:/n'add' - add friend/n'del' - remove friend/n'fnd' - find friend/n'shw' - show all friends/n'hlp' - get help/n'edt' - edit friend/n'dla' - delete all/n<ECS> - quit/n");
output("/n----------------------------------------------------------------/n");
do{
if(input(4,str,62)==-1)break;
switch(command=cmd_scan(str)){
case 0:
tk_add(beg);
break;
case 3:
tk_del(beg);
break;
case 6:
tk_fnd(beg);
break;
case 9:
tk_shw(beg);
break;
case 12:
output("/nCommands:/n'add' - add friend/n'del' - remove friend/n'fnd' - find friend/n'shw' - show all friends/n'hlp' - get help/n<ECS> - quit/n");
break;
case 15:
tk_edt(beg);
break;
case 18:
tk_dla(beg);
break;
case 21:
output("...No command!");
break;
}
output("/n----------------------------------------------------------------/n");
}while(1);
}
///////////////////
void output(char *buf)
{
if((*buf)=='/' && (*(buf+1))=='n'){
putch(char(13));
putch(char(10));
buf=buf+2;}
if((*buf)==0)return;
putch(*buf);
output(buf+1);
}
///////////////////
int cmd_scan(char *str)
{
int i,j;
for(j=0;j<21;j+=3){
for(i=0;i<3;i++){if(*(str+i)!=cmd[i+j])break;}
if(i==3)break;
}
return j;
}
///////////////////
int input(int num,char* str,int lim)
{
int i;
char c;
for(i=0;i<num-1;i++){
c=getch();
if(c==char(13))break;
if(c==char(27))return -1;
if(ch_find(c,alf,lim)==-1){
i--;
continue;}
putch(c);
(*(str+i))=c;}
(*(str+i))=0;
return i;
}
///////////////////
int ch_find(char c,char *buf,int n)
{
int i;
for(i=0;i<n;i++)if(c==buf[i])return i;
return -1;
}
//////////////////
void output_int(int x)
{
int i,y[16],a,j;
i=-1;
do{i++;}while((x=(x-(y[i]=x%10))/10)!=0);
for(j=i;j>=0;j--)putch(char(y[j])+'0');
}
///////////////////
void tk_add(chel* beg)
{
chel* cur;
chel* last;
last=last_fnd(beg);
last->next=(cur=aloc_mem());
if(cur==NULL){
output("/n|ERROR: NOT ENOUGH MEMORY|/n");
return;}
output("/n|ADD FRIEND|/n(push <ECS> to cancel)/n /nEnter name:");
if(input(21,cur->name,63)==-1){
output("/n|ADDING HAS BEEN CANCELED|/n");
return;}
output("/nEnter telephone number:");
if(input(13,cur->tel,10)==-1){
output("/n|ADDING HAS BEEN CANCELED|/n");
return;}
output("/n|FRIEND HAS BEEN ADDED SUCCESFUL|/n");
cur->num=last->num+1;
}
///////////////////
energywav вне форума Ответить с цитированием
Старый 18.12.2009, 01:13   #3
energywav
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию

void tk_del(chel* beg)
{
int n;
chel *cur,*prev;
tk_shw(beg);
output("/n|DELETE FRIEND|/n(push <ECS> to cancel)/n /nEnter number:");
if((n=input_int())==-1){
output("/n|DELETING HAS BEEN CANCELED|/n");
return;}
if(n<1 || n>last_fnd(beg)->num){
output("/n|ERROR: WRONG NUMBER|/n");
return;}
cur=num_fnd(beg,n);
prev=num_fnd(beg,n-1);
prev->next=cur->next;
while((prev=prev->next)!=NULL)prev->num--;
free((void*)cur);
output("/n|FRIEND HAS BEEN DELETED SUCCESFUL|/n");
}
///////////////////
void tk_fnd(chel* beg)
{
char str[21];
chel *tmp;
int i,j,n;
output("/n|FIND FRIEND|/n(push <ECS> to cancel)/n /nEnter name:");
if((n=input(21,str,63))==-1){
output("/n|FINDING HAS BEEN CANCELED|/n");
return;}
output("/n|LIST OF FRIENDS|/n /n");
for(i=1;i<=last_fnd(beg)->num;i++){
for(j=0;j<n;j++){if(str[j]!=(tmp=num_fnd(beg,i))->name[j])break;}
if(j==n){
output(" ");
output_int(tmp->num);
output(" ");
output(tmp->name);
output(" ");
output(tmp->tel);
output("/n");}
}
output("/n|END OF LIST|/n");
}
///////////////////
void tk_shw(chel* beg)
{
beg=beg->next;
output("/n|LIST OF FRIENDS|/n /n");
while(beg!=NULL){
output(" ");
output_int(beg->num);
output(" ");
output(beg->name);
output(" ");
output(beg->tel);
output("/n");
beg=beg->next;
}
output("/n|END OF LIST|/n");
}
////////////////////
void tk_edt(chel* beg)
{
int n;
chel* tmp;
tk_shw(beg);
output("/n|EDIT FRIEND|/n(push <ECS> to cancel)/n /nEnter number:");
if((n=input_int())==-1){
output("/n|EDIT HAS BEEN CANCELED|/n");
return;}
if(n<1 || n>last_fnd(beg)->num){
output("/n|ERROR: WRONG NUMBER|/n");
return;}
tmp=num_fnd(beg,n);
output("/n /nEnter name:");
if(input(21,tmp->name,63)==-1){
output("/n|EDIT HAS BEEN CANCELED|/n");
return;}
output("/nEnter telephone number:");
if(input(13,tmp->tel,10)==-1){
output("/n|EDIT HAS BEEN CANCELED|/n");
return;}
output("/n|FRIEND HAS BEEN EDITED SUCCESFUL|/n");
}
////////////////////
void tk_dla(chel* beg)
{
int i;
char x;
output("/n|DELETE ALL FRIEND|/npush <ECS> to cancel and <ENTER> to delete:");
if((i=input(2,&x,0))==-1){
output("/n|DELETE HAS BEEN CANCELED|/n");
return;}
for(i=last_fnd(beg)->num;i>0;i--)free(num_fnd(beg,i));
beg->next=NULL;
output("/n|DELETE SUCCESFUL|/n");
}
////////////////////
int input_int()
{
int rez,a[10],j,k,y,i;
char c;
i=0;
rez=0;
y=1;
do{ c=getch();
if(c==char(27))return -1;
if(ch_find(c,alf,10)!=-1){
putch(c);
a[i]=(int)(c-'0');
i++;}}while(c!=13 && i<10);
putch(c);
for(j=0;j<i;j++){
for(k=0;k<j;k++)y*=10;
rez+=a[i-1-j]*y;
y=1;}
return rez;
}
////////////////////
chel* aloc_mem()
{
chel* cur;
if((cur=(chel*)malloc(sizeof(chel)) )==NULL)return NULL;
cur->next=NULL;
return cur;
}
////////////////////
chel* last_fnd(chel* beg)
{
while(beg->next!=NULL)beg=beg->next;
return beg;
}
////////////////////
chel* num_fnd(chel* beg,int n)
{
int i;
for(i=0;i<n;i++)if((beg=beg->next)==NULL)return NULL;
return beg;
}
energywav вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево С++ Olya90 Помощь студентам 1 20.10.2009 21:45
Бинарное дерево Lazio Общие вопросы C/C++ 2 10.09.2009 20:31
Бинарное дерево lubafffka Общие вопросы C/C++ 0 29.04.2009 12:28
Бинарное дерево g0liath Помощь студентам 2 16.02.2008 23:54