C/C++

A

apidrone

Гостин


--- надополнето ---

ПОМОШ
Ве молам решение за задачава во c++ т.е. код итно ми треба
file:///C:/Documents%20and%20Settings/kate/Desktop/zadaca.bmp

Благодарам однапред

--- надополнето ---

http://img823.imageshack.us/i/zadaca.png/
Ти треба математичка или програмерска помош, т.е. алгоритам или готов код?
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.160
Поени од реакции
5.938
Ми треба голема помош. Ќе може ли некој да ја открие и корегира грешката во задачава?


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

#define MAX_ELEMENTI 100
#define NEW(t) (t *)malloc(sizeof(t))

typedef struct element2 { 
	int info;
	struct element2 *left, *right;
	char rtag, ltag;
} nanizano;

int main()
{
	nanizano *v, *kreirajNizanoLeksi(int[], int);
	int i = 0, n, niza[MAX_ELEMENTI], scanOK;
	void inorderNanizano (nanizano *);
	while((i<MAX_ELEMENTI)&&((scanOK=(scanf("%d",&n)))||1)&&(getchar()!='`'))
	if(scanOK) niza[i++]=n;
	v = kreirajNizanoLeksi(niza, i);
	printf("\nInorder nanizano:\n");
	inorderNanizano(v);
	system("pause");
	return 0;
}

nanizano *sledbenik (nanizano *t)
{
	if(t->rtag=='+')
	{
		t=t->right;
		while(t->ltag=='+')
			t=t->left;
		return t;
	}
	else return t->right;
}

void inorderNanizano (nanizano *v)
{
	nanizano *temp=v->right;
	while(temp->ltag=='+')
		temp=temp->left;
	while(temp!=v)
	{
		printf("%d ", temp->info);
		temp=sledbenik(temp);
	}
}

void insert (nanizano **n, int x)
{
	nanizano *p=NEW(nanizano);
	nanizano *temp=(*n)->right;
	for(;;)
	{
		if(temp==NULL)
		{
			p->info=x;
			p->right=*n;
			p->rtag='-';
			p->left=*n;
			p->ltag='-';
			break;
		}
		else if(x<temp->info)
		{
			if(temp->ltag!='-')
				temp=temp->left;
			else
			{
				p->info=x;
				p->right=temp;
				p->rtag='-';
				p->left=temp->left;
				p->ltag=temp->ltag;
				temp->left=p;
				temp->ltag='+';
				break;
			}
		}
		else if(x>temp->info)
		{
			if(temp->rtag!='-')
				temp=temp->right;
			else
			{
				p->info=x;
				p->right=temp->right;
				p->rtag=temp->rtag;
				p->left=temp;
				p->ltag='-';
				temp->right=p;
				temp->rtag='+';
				break;
			}
		}
		else break;
	}
}

nanizano *kreirajNizanoLeksi (int a[], int n)
{
	nanizano *v=NEW(nanizano);
	v->right=NULL;
	v->rtag='+';
	v->left=v;
	v->ltag='-';
	for(int i=0; i<n; i++)
		insert(&v, a[i]);
	return v;
}
Еве и paste2.org код.
Anyone?
 

Mind In Motion

Smirking Revenge
Член од
29 мај 2007
Мислења
816
Поени од реакции
46

Spaski

Vita - Amore - Riso
Член од
31 јануари 2009
Мислења
263
Поени од реакции
11
Код:
int nzd(int a, int b) 
{  
   return (b!=0 ? nzd(b, a%b) : a);  
}  
  
int nzs(int a, int b) 
{  
   return (a*b)/nzd(a,b);  
}
Зошто е така, не е битно :)
Тоа нзд-то ако не го разбираш, еве малку појасен код:
Код:
int nzd(int a, int b) 
{
    if(b==0) 
        return a;
    else 
        return nzd(b, a%b);
}
....

Инаку нзс функцијава не е рекурзија.
Само нзд ти е рекурзија што си ја напишал.
Ја најдов како може со рекурзија да се направи нзс функција

Код:
int nzs(int x, int y)
{
    int i=2;
    if(x==1)
        return y;
    if(y==1)
        return x;
    while(x%i && y%i)
        i++;
    if(x%i)
        x/=i;
    if(y%i)
        y/=i;
return i*nzs(x,y);
}
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.160
Поени од реакции
5.938
Инаку нзс функцијава не е рекурзија.
Само нзд ти е рекурзија што си ја напишал.
Ја најдов како може со рекурзија да се направи нзс функција

Код:
int nzs(int x, int y)
{
    [B]int i=2;[/B]  // при рекурзија не се користат бројачи
    if(x==1)
        return y;
    if(y==1)
        return x;
    [B]while(x%i && y%i) // ова НЕ!
        i++;[/B]
    if(x%i)
        x/=i;
    if(y%i)
        y/=i;
return i*nzs(x,y);
}
Баш напротив, ова твоето не е рекурзија. Т.е. Е (вака на прв поглед), ама и НЕ Е. Ова твоето е присилна рекурзија. Значи ти овдека имаш бројач, кој што проверува за секој број посебно се додека не се исполни некој услов (while циклусот). Во рекурзија ова не се прави. Мојот код е составен од 2 функции, од кои едната е СИГУРНО рекурзија (НЗД кодот), а другата само ја повикува првата. Баш прашај асистент/професор ко ќе имаш вежби за мојот и твојот код, и види што ќе ти кажат :).
 

Spaski

Vita - Amore - Riso
Член од
31 јануари 2009
Мислења
263
Поени од реакции
11
Баш напротив, ова твоето не е рекурзија. Т.е. Е (вака на прв поглед), ама и НЕ Е. Ова твоето е присилна рекурзија. Значи ти овдека имаш бројач, кој што проверува за секој број посебно се додека не се исполни некој услов (while циклусот). Во рекурзија ова не се прави. Мојот код е составен од 2 функции, од кои едната е СИГУРНО рекурзија (НЗД кодот), а другата само ја повикува првата. Баш прашај асистент/професор ко ќе имаш вежби за мојот и твојот код, и види што ќе ти кажат :).
Баш прашав и тоа твоето не е рекурзија на функцијата нзс, само на нзд.
Моето е затоа што по дефиниција рекурзивна функција треба самата да се повикува себеси и треба да има услов за прекин тоа ако х==1 и y==1.
А тоа што брои циклусот само проверува кој броеви се делители на x и y нели. Инаку како би нашол кои се делители на x и y?
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.160
Поени од реакции
5.938
Баш прашав и тоа твоето не е рекурзија на функцијата нзс, само на нзд.
Моето е затоа што по дефиниција рекурзивна функција треба самата да се повикува себеси и треба да има услов за прекин тоа ако х==1 и y==1.
А тоа што брои циклусот само проверува кој броеви се делители на x и y нели. Инаку како би нашол кои се делители на x и y?
Аххх... добро, нека биде така.
 
Член од
14 јануари 2008
Мислења
1.341
Поени од реакции
162
Баш напротив, ова твоето не е рекурзија. Т.е. Е (вака на прв поглед), ама и НЕ Е. Ова твоето е присилна рекурзија. Значи ти овдека имаш бројач, кој што проверува за секој број посебно се додека не се исполни некој услов (while циклусот). Во рекурзија ова не се прави. Мојот код е составен од 2 функции, од кои едната е СИГУРНО рекурзија (НЗД кодот), а другата само ја повикува првата. Баш прашај асистент/професор ко ќе имаш вежби за мојот и твојот код, и види што ќе ти кажат :).
Како бе така. Секоја функција која се повикува самата себе е рекурзивна. Па ти ако сакаш и 10 циклуси стави внатре.
 
A

apidrone

Гостин
Баш прашав и тоа твоето не е рекурзија на функцијата нзс, само на нзд.
Моето е затоа што по дефиниција рекурзивна функција треба самата да се повикува себеси и треба да има услов за прекин тоа ако х==1 и y==1.
А тоа што брои циклусот само проверува кој броеви се делители на x и y нели. Инаку како би нашол кои се делители на x и y?
Проверувате ли вие дали работи програмата, или само си внесувате кодови?

--- надополнето ---

Тоа што сака Олд Скул со кодот може да се напише и вака (со една функција), и е оправдано:
Код:
#include <stdio.h>
#include <stdlib.h>

int spaski(int x, int y)
{
    if(y==0) return x;
    return spaski(y,x%y);
}

int main()
{
    int x,y;
    printf("Vnesi 2 broja: ");
    scanf("%d%d", &x,&y);
    printf("NZS (%d,%d) = %d\n", x,y,(x*y)/spaski(x,y));
    system("pause");
    return 0;
}
А таа функцијата на Spaski, всушност не е рекурзија, туку итерација. Во што е разликата?
Прекин на повторувањето:
Итерација: условот за повторување повеќе не важи
Рекурзија: се препознава основниот случај
Значи кај рекурзијата нема бројачи и циклуси, или го исполнува условот, или не.
Се надевам бев појасен.
 

Spaski

Vita - Amore - Riso
Член од
31 јануари 2009
Мислења
263
Поени од реакции
11
Проверувате ли вие дали работи програмата, или само си внесувате кодови?

--- надополнето ---

Тоа што сака Олд Скул со кодот може да се напише и вака (со една функција), и е оправдано:
Код:
#include <stdio.h>
#include <stdlib.h>

int spaski(int x, int y)
{
    if(y==0) return x;
    return spaski(y,x%y);
}

int main()
{
    int x,y;
    printf("Vnesi 2 broja: ");
    scanf("%d%d", &x,&y);
    printf("NZS (%d,%d) = %d\n", x,y,(x*y)/spaski(x,y));
    system("pause");
    return 0;
}
А таа функцијата на Spaski, всушност не е рекурзија, туку итерација. Во што е разликата?
Прекин на повторувањето:
Итерација: условот за повторување повеќе не важи
Рекурзија: се препознава основниот случај
Значи кај рекурзијата нема бројачи и циклуси, или го исполнува условот, или не.
Се надевам бев појасен.
Инаку да проверена е програмата и работи супер.
А за тоа дека мојата функција е итерација, да можеби е.
На крај поентата беше функцијата да се реши со рекурзија или, штом ти така викаш, со итерација.
 
A

apidrone

Гостин
Инаку да проверена е програмата и работи супер.
А за тоа дека мојата функција е итерација, да можеби е.
На крај поентата беше функцијата да се реши со рекурзија или, штом ти така викаш, со итерација.
А може еве да објасниш како работи таа твоја функција? Не ми е јасна. Btw кај мене не ги дава очекуваните резултати.
 

Kajgana Shop

На врв Bottom