#1 26.09.07 21:41
Помогите с информатикой (описание работы программы)
ПОМОГИТЕ С ЗАЩИТОЙ ПЛИЗ
ГЛАВНОЕ ОПИСАТЬ ЧТО ДЕЛАЕТ ПРОГА
ОПИСАТЬ ПЕРЕМЕННЫЕ
И ОСНОВНЫЕ ПРИНЦИПЫ
1 Списки
struct list { int val; list *next,*pred; };
//------------------------------------------------------- 1
int F1(list *p)
{ int n;
for (n=0; p!=NULL; p=p->next, n++);
return n; }
//------------------------------------------------------- 2
list *F2(list *ph, int v)
{ list *q = new list;
q->val = v; q->next = ph; ph = q;
return ph; }
2 Рекурсия
long F1(int n)
{ if (n==1) return 1;
return (n * F1(n-1)); }
//------------------------------------------------------ 2
double F2(double *pk, double x, int n)
{
if (n==0) return(*pk);
return *pk + x *F2(pk+1,x,n-1);
}
void z3()
{ double B[] ={ 5.,0.7,4.,3. } ,X=3., Y;
Y = F2(B,X,4); }
3 Деревья
tree A1={"aaa",NULL,NULL,NULL,NULL};
tree A2={"bb",NULL,NULL,NULL,NULL};
tree A3={"cccc",&A1,&A2,NULL,NULL};
tree A4={"dd",NULL,NULL,NULL,NULL};
tree A5={"aaa",NULL,NULL,NULL,NULL};
tree A6={"fff",&A3,&A4,&A5,NULL};
void main()
{ printf("F=%d\n",F(&A6)); } // Вызов для статического дерева
//------------------------------------------------------37-16.cpp
//-------------------------------------------------------1
struct xxx { int v; xxx *p[4]; };
int F1(xxx *q)
{ int i,n,m;
if (q==NULL) return 0;
for (n=F1(q->p[0]),i=1; i< 4; i++)
if ((m=F1(q->p[i])) >n) n=m;
return n+1; }
//-------------------------------------------------------2
struct zzz { int v; zzz *l,*r; };
int F2(zzz *p) {
if (p==NULL) return(0);
return (1 + F2(p->r) + F2(p->l)); }
4 Динамическое связывание
double F1(double a, double b, double (*pf)(double))
{ double m;
if ((*pf)(a) * (*pf)(b) > 0 )return(a);
while ( b-a > 0.0001 ) {
m = (b + a)/2;
if ((*pf)(a) * (*pf)(m) < 0) b=m; else a=m;
}
return a ;}
//------------------------------------------------------- 2
double F2(double x, double s0, double (*pf)(double,int))
{ double s; int n;
for (n=1, s=0.0; fabs(s0) > 0.0001; n++)
{ s += s0; s0 = s0 * (pf)(x,n); }
return s; }
double ff(double x, int n) { return( x/n); }
void main1()
{ double x,y; y = F2(x,1,ff); }
5//------------------------------------------------------ 1
struct man {char name[20]; int dd,mm,yy; char *addr; };
char *F1(char *p, char *nm, char *ad)
{ man *q =(man*)p;
strcpy(q->name,nm);
strcpy((char*) (q+1 ),ad);
q->addr = (char*) (q+1 );
for (p=(char*) (q+1 ); *p!=0; p++);
p++; return p;}
//------------------------------------------------------ 2
struct man1 {char name[20]; int dd,mm,yy; char addr[]; };
char *F2(char *p, char *nm, char *ad)
{ man1 *q =(man1*)p;
strcpy(q->name,nm);
strcpy(q->addr,ad);
for (p=q->addr; *p!=0; p++);
p++; return p;}
ЗАРАНЕЕ СПАСИБО ТЕМ КТО ПОМОЖЕТ
Offline
#2 26.09.07 22:32
Re: Помогите с информатикой (описание работы программы)
struct list { int val; list *next,*pred; };
// *next указатель на следующйй элемент списка
// *pred указатель на предыдущий элемент списка
// val значение i-го элемента списка
//------------------------------------------------------- 1
// Подпрограмма считает количество элементов в списке
// входной параметр - сам список
int F1(list *p)
{ int n; // счётчик
for (n=0; p!=NULL; p=p->next, n++); // пока не конец списка
return n; // возвращает количество элементов в списке
}
//------------------------------------------------------- 2
// Подпрограмма добавляет в начало списка элемент
list *F2(list *ph, int v)
{ list *q = new list; // создание списка
q->val = v; // присвоение первому элементу списка значение переменной v
q->next = ph; // объединение двух списков: второй элемент списка q = первый элемент списка ph
ph = q; // теперь указатель ph указывает на первый элемент списка q
return ph; //
}
Offline
#3 26.09.07 23:03
Re: Помогите с информатикой (описание работы программы)
Рекурсия
long F1(int n)
возвращает факториал числа н
{ if (n==1) return 1;
return (n * F1(n-1)); }
//------------------------------------------------------ 2
double F2(double *pk, double x, int n)
по ходу возвращает число записанное в x-ой системе счисления, с n-ой размерностью.
pk - массив вещественных чисел -цифр, записанных наоборот, т. е. сначала младшие разряды
т.е. делает при pk={1,2,3,4,5}, n=4 и x=5
return 1 + 2*5^1 +3*5^2 + 4*5^3+ 5*5^4
{
if (n==0) return(*pk);
return *pk + x *F2(pk+1,x,n-1);
}
void z3()
{ double B[] ={ 5.,0.7,4.,3. } ,X=3., Y;
Y = F2(B,X,4); }
Y=думаю вернёт х№^ню, т.к. размер b =4)
4 Динамическое связывание
double F1(double a, double b, double (*pf)(double))
Скорее всего поиск корня
{ double m;
if ((*pf)(a) * (*pf)(b) > 0 )return(a); //если имеет одинаковые знакие на концах отрезка от а до б
while ( b-a > 0.0001 ) { // удовлетворяет ли точности?
m = (b + a)/2;
if ((*pf)(a) * (*pf)(m) < 0) b=m; else a=m;// выбор точки чтоб на концах были разные знаки
}
return a ;}// возвращает корень, функция pf должна иметь разные знаки на a и b чтоб корень был найден
//------------------------------------------------------- 2
double F2(double x, double s0, double (*pf)(double,int))
// разложение в ряд с общим членом вычисляемым по формуле a[n]=a[n-1]*(*pf)(x,n) до точности 0.0001
{ double s; int n;
for (n=1, s=0.0; fabs(s0) > 0.0001; n++)
{ s += s0; s0 = s0 * (pf)(x,n); }
return s; }
double ff(double x, int n) { return( x/n); }
void main1()
{ double x,y; y = F2(x,1,ff); }
Вроде так
Offline
#4 26.09.07 23:03
Re: Помогите с информатикой (описание работы программы)
// подпрограмма вычисляет факториал
long F1(int n)
{ if (n==1) return 1; // подпрограмма будет выполняться пока п не будет равен 1
return (n * F1(n-1)); }
//------------------------------------------------------ 2
// перемножает соответствующем образом элементы массива:
Y = 5. + 3.*(0.7 + 3.*( 4. + 3. * F2(3.,3.,0))) = 124.1 ,
где при выполнении F2(3.,3.,0) вернётся *pk=3.
double F2(double *pk, double x, int n)
{
if (n==0) return(*pk); // подпрограмма будет выполняться пока п не будет равно 0
return *pk + x *F2(pk+1,x,n-1);
}
void z3()
{ double B[] ={ 5.,0.7,4.,3. } ,X=3., Y;
Y = F2(B,X,4); }
Offline

